-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into jodi/similarity-tab-remove-message
- Loading branch information
Showing
2,147 changed files
with
68,654 additions
and
38,968 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Validating CODEOWNERS rules …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
119 changes: 119 additions & 0 deletions
119
.github/actions/test-setup-sentry-devservices/action.yml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
# 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: test-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 }} | ||
|
||
- name: Inspect failure | ||
if: failure() | ||
run: | | ||
docker compose -f devservices/docker-compose-testing.yml ps | ||
docker compose -f devservices/docker-compose-testing.yml logs --tail 1000 | ||
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: Docker Compose 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 |
Oops, something went wrong.