Skip to content

Commit

Permalink
Merge branch 'master' into abdk/explore-table-styles
Browse files Browse the repository at this point in the history
  • Loading branch information
Abdkhan14 authored Oct 8, 2024
2 parents f446570 + 347732a commit 4227c92
Show file tree
Hide file tree
Showing 255 changed files with 5,967 additions and 3,089 deletions.
119 changes: 119 additions & 0 deletions .github/actions/test-setup-sentry-devservices/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# NOTE: Do not rely on `make` commands here as this action is used across different repos
# where the Makefile will not be available
name: 'Sentry Setup'
description: 'Sets up a Sentry test environment'
inputs:
workdir:
description: 'Directory where the sentry source is located'
required: false
default: '.'

outputs:
yarn-cache-dir:
description: 'Path to yarn cache'
value: ${{ steps.config.outputs.yarn-cache-dir }}
matrix-instance-number:
description: 'The matrix instance number (starting at 1)'
value: ${{ steps.config.outputs.matrix-instance-number }}
matrix-instance-total:
description: 'Reexport of MATRIX_INSTANCE_TOTAL.'
value: ${{ steps.config.outputs.matrix-instance-total }}

runs:
using: 'composite'
steps:
- name: Setup default environment variables
# the default for "bash" is:
# bash --noprofile --norc -eo pipefail {0}
shell: bash --noprofile --norc -eo pipefail -ux {0}
env:
MATRIX_INSTANCE: ${{ matrix.instance }}
# XXX: We should be using something like len(strategy.matrix.instance) (not possible atm)
# If you have other things like python-version: [foo, bar, baz] then the sharding logic
# isn't right because job-total will be 3x larger and you'd never run 2/3 of the tests.
# MATRIX_INSTANCE_TOTAL: ${{ strategy.job-total }}
run: |
echo "PIP_DISABLE_PIP_VERSION_CHECK=on" >> $GITHUB_ENV
echo "PIP_INDEX_URL=https://pypi.devinfra.sentry.io/simple" >> $GITHUB_ENV
echo "SENTRY_SKIP_BACKEND_VALIDATION=1" >> $GITHUB_ENV
### node configuration ###
echo "NODE_ENV=development" >> $GITHUB_ENV
### pytest configuration ###
echo "PY_COLORS=1" >> "$GITHUB_ENV"
echo "PYTEST_ADDOPTS=--reruns=5 --durations=10 --fail-slow=60s" >> $GITHUB_ENV
echo "COVERAGE_CORE=sysmon" >> "$GITHUB_ENV"
### pytest-sentry configuration ###
if [ "$GITHUB_REPOSITORY" = "getsentry/sentry" ]; then
echo "PYTEST_SENTRY_DSN=https://6fd5cfea2d4d46b182ad214ac7810508@sentry.io/2423079" >> $GITHUB_ENV
echo "PYTEST_SENTRY_TRACES_SAMPLE_RATE=0" >> $GITHUB_ENV
# This records failures on master to sentry in order to detect flakey tests, as it's
# expected that people have failing tests on their PRs
if [ "$GITHUB_REF" = "refs/heads/master" ]; then
echo "PYTEST_SENTRY_ALWAYS_REPORT=1" >> $GITHUB_ENV
fi
fi
# Configure a different release version, otherwise it defaults to the
# commit sha which will conflict with our actual prod releases. This is a
# confusing experience because it looks like these are "empty" releases
# because no commits are attached and associates the release with our
# javascript + sentry projects.
echo "SENTRY_RELEASE=ci@$GITHUB_SHA" >> $GITHUB_ENV
# this handles pytest test sharding
if [ "$MATRIX_INSTANCE" ]; then
if ! [ "${MATRIX_INSTANCE_TOTAL:-}" ]; then
echo "MATRIX_INSTANCE_TOTAL is required."
exit 1
fi
echo "TEST_GROUP=$MATRIX_INSTANCE" >> $GITHUB_ENV
echo "TOTAL_TEST_GROUPS=$MATRIX_INSTANCE_TOTAL" >> $GITHUB_ENV
fi
- uses: getsentry/action-setup-venv@a133e6fd5fa6abd3f590a1c106abda344f5df69f # v2.1.0
with:
python-version: ${{ inputs.python-version }}
cache-dependency-path: ${{ inputs.workdir }}/requirements-dev-frozen.txt
install-cmd: cd ${{ inputs.workdir }} && python3 -m tools.hack_pip && pip install -r requirements-dev-frozen.txt

- name: Set up outputs
id: config
env:
MATRIX_INSTANCE: ${{ matrix.instance }}
shell: bash --noprofile --norc -eo pipefail -ux {0}
run: |
echo "yarn-cache-dir=$(yarn cache dir)" >> "$GITHUB_OUTPUT"
echo "matrix-instance-number=$(($MATRIX_INSTANCE+1))" >> "$GITHUB_OUTPUT"
echo "matrix-instance-total=$((${MATRIX_INSTANCE_TOTAL:-}))" >> "$GITHUB_OUTPUT"
- name: Install python dependencies
shell: bash --noprofile --norc -eo pipefail -ux {0}
env:
# This is necessary when other repositories (e.g. relay) want to take advantage of this workflow
# without needing to fork it. The path needed is the one where setup.py is located
WORKDIR: ${{ inputs.workdir }}
run: |
cd "$WORKDIR"
# We need to install editable otherwise things like check migration will fail.
python3 -m tools.fast_editable --path .
- name: Start devservices
shell: bash --noprofile --norc -eo pipefail -ux {0}
env:
WORKDIR: ${{ inputs.workdir }}
ENABLE_AUTORUN_MIGRATION_SEARCH_ISSUES: '1'
run: |
sentry init
# have tests listen on the docker gateway ip so loopback can occur
echo "DJANGO_LIVE_TEST_SERVER_ADDRESS=$(docker network inspect bridge --format='{{(index .IPAM.Config 0).Gateway}}')" >> "$GITHUB_ENV"
docker ps -a
# This is necessary when other repositories (e.g. relay) want to take advantage of this workflow
# without needing to fork it. The path needed is the one where tools are located
cd "$WORKDIR"
138 changes: 138 additions & 0 deletions .github/workflows/test_docker_compose_acceptance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# Also note that this name *MUST* match the filename because GHA
# only provides the workflow name (https://docs.github.com/en/free-pro-team@latest/actions/reference/environment-variables#default-environment-variables)
# and GH APIs only support querying by workflow *FILENAME* (https://developer.github.com/v3/actions/workflows/#get-a-workflow)
name: docker-compose-acceptance
on:
schedule:
- cron: '30,0 * * * *'

# Cancel in progress workflows on pull_requests.
# https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

# hack for https://github.com/actions/cache/issues/810#issuecomment-1222550359
env:
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 3
NODE_OPTIONS: '--max-old-space-size=4096'

jobs:
docker-compose-acceptance:
name: docker-compose-acceptance
runs-on: ubuntu-22.04
timeout-minutes: 30
permissions:
contents: read
id-token: write
strategy:
# This helps not having to run multiple jobs because one fails, thus, reducing resource usage
# and reducing the risk that one of many runs would turn red again (read: intermittent tests)
fail-fast: false
matrix:
# XXX: When updating this, make sure you also update MATRIX_INSTANCE_TOTAL.
instance: [0, 1, 2, 3, 4]
pg-version: ['14']
env:
# XXX: MATRIX_INSTANCE_TOTAL must be hardcoded to the length of strategy.matrix.instance.
MATRIX_INSTANCE_TOTAL: 5
TEST_GROUP_STRATEGY: roundrobin

steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
name: Checkout sentry

- uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4
id: setup-node
with:
node-version-file: '.volta.json'

- name: Step configurations
id: config
run: |
echo "webpack-path=.webpack_cache" >> "$GITHUB_OUTPUT"
echo "WEBPACK_CACHE_PATH=.webpack_cache" >> "$GITHUB_ENV"
- name: webpack cache
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
with:
path: ${{ steps.config.outputs.webpack-path }}
key: ${{ runner.os }}-v2-webpack-cache-${{ hashFiles('webpack.config.ts') }}

- name: node_modules cache
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
id: nodemodulescache
with:
path: node_modules
key: ${{ runner.os }}-node-modules-${{ hashFiles('yarn.lock', 'api-docs/yarn.lock', '.volta.json') }}

- name: Install Javascript Dependencies
if: steps.nodemodulescache.outputs.cache-hit != 'true'
run: yarn install --frozen-lockfile

- name: webpack
env:
# this is fine to not have for forks, it shouldn't fail
SENTRY_WEBPACK_WEBHOOK_SECRET: ${{ secrets.SENTRY_WEBPACK_WEBHOOK_SECRET }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
# should set value either as `true` or `false`
CODECOV_ENABLE_BA: true
GH_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
run: |
yarn build-acceptance
- name: Build chartcuterie configuration module
run: |
make build-chartcuterie-config
- name: Setup sentry env
uses: ./.github/actions/test-setup-sentry-devservices
id: setup

- name: copy chartcuterie config to devservices chartcuterie directory
run: |
ls config/chartcuterie
cp -r config/chartcuterie devservices
- name: Bring up devservices
run: |
docker network create sentry
docker compose -f devservices/docker-compose-testing.yml up -d redis postgres snuba clickhouse chartcuterie
- name: Run acceptance tests (#${{ steps.setup.outputs.matrix-instance-number }} of ${{ steps.setup.outputs.matrix-instance-total }})
run: make run-acceptance

- name: Collect test data
uses: ./.github/actions/collect-test-data
if: ${{ !cancelled() }}
with:
artifact_path: .artifacts/pytest.acceptance.json
gcs_bucket: ${{ secrets.COLLECT_TEST_DATA_GCS_BUCKET }}
gcp_project_id: ${{ secrets.COLLECT_TEST_DATA_GCP_PROJECT_ID }}
workload_identity_provider: ${{ secrets.SENTRY_GCP_DEV_WORKLOAD_IDENTITY_POOL }}
service_account_email: ${{ secrets.COLLECT_TEST_DATA_SERVICE_ACCOUNT_EMAIL }}
matrix_instance_number: ${{ steps.setup.outputs.matrix-instance-number }}

# This job runs when FE or BE changes happen, however, we only upload coverage data for
# BE changes since it conflicts with codecov's carry forward functionality
# Upload coverage data even if running the tests step fails since
# it reduces large coverage fluctuations
- name: Handle artifacts
uses: ./.github/actions/artifacts
if: ${{ always() }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
commit_sha: ${{ github.event.pull_request.head.sha }}

docker-compose-acceptance-required-checks:
# this is a required check so we need this job to always run and report a status.
if: always()
name: Acceptance
needs: [docker-compose-acceptance]
runs-on: ubuntu-22.04
timeout-minutes: 3
steps:
- name: Check for failures
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: |
echo "One of the dependent jobs have failed. You may need to re-run it." && exit 1
Loading

0 comments on commit 4227c92

Please sign in to comment.