123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- # 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: '.'
- snuba:
- description: 'Is snuba required?'
- required: false
- default: 'false'
- clickhouse:
- description: 'Is clickhouse required?'
- required: false
- default: 'false'
- kafka:
- description: 'Is kafka required?'
- required: false
- default: 'false'
- chartcuterie:
- description: 'Is chartcuterie required?'
- required: false
- default: 'false'
- cache-files-hash:
- description: 'A single hash for a set of files. Used for caching.'
- required: false
- default: ${{ hashFiles('requirements-*.txt', '!requirements-pre-commit.txt') }}
- python-version:
- description: 'python version to install'
- required: false
- pip-cache-version:
- description: 'pip cache version in order to bust cache'
- required: false
- default: '1630355466247'
- outputs:
- yarn-cache-dir:
- description: 'Path to yarn cache'
- value: ${{ steps.config.outputs.yarn-cache-dir }}
- pip-cache-dir:
- description: 'Path to pip cache'
- value: ${{ steps.setup-python.outputs.pip-cache-dir }}
- pip-version:
- description: 'pip version'
- value: ${{ steps.setup-python.outputs.pip-version }}
- python-version:
- description: 'python version'
- value: ${{ steps.setup-python.outputs.python-version }}
- acceptance-dir:
- description: 'Path to acceptance visual snapshot artifacts'
- value: ${{ steps.config.outputs.acceptance-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
- shell: bash
- env:
- NEED_KAFKA: ${{ inputs.kafka }}
- 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: |
- # Only set `MIGRATIONS_TEST_MIGRATE` if it is not already set (or if it's an empty string)
- if [ -z $MIGRATIONS_TEST_MIGRATE ]; then
- echo "MIGRATIONS_TEST_MIGRATE=0" >> $GITHUB_ENV
- fi
- echo "PIP_DISABLE_PIP_VERSION_CHECK=on" >> $GITHUB_ENV
- echo "SENTRY_LIGHT_BUILD=1" >> $GITHUB_ENV
- echo "SENTRY_SKIP_BACKEND_VALIDATION=1" >> $GITHUB_ENV
- ### node configuration ###
- echo "NODE_ENV=development" >> $GITHUB_ENV
- echo "NODE_OPTIONS=--max-old-space-size=4096" >> $GITHUB_ENV
- ### pytest-sentry configuration ###
- echo "PYTEST_SENTRY_DSN=https://6fd5cfea2d4d46b182ad214ac7810508@sentry.io/2423079" >> $GITHUB_ENV
- echo "PYTEST_ADDOPTS=--reruns 5" >> $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
- # 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
- [ "$GITHUB_REF" = "refs/heads/master" ] && echo "PYTEST_SENTRY_ALWAYS_REPORT=1" >> $GITHUB_ENV || true
- ### services configuration ###
- echo "BIGTABLE_EMULATOR_HOST=localhost:8086" >> $GITHUB_ENV
- # Note: some backend tests (e.g. tests/sentry/eventstream/kafka/test_consumer.py) will behave
- # differently if these are set.
- if [ "$NEED_KAFKA" = "true" ]; then
- echo "SENTRY_KAFKA_HOSTS=127.0.0.1:9092" >> $GITHUB_ENV
- echo "SENTRY_ZOOKEEPER_HOSTS=127.0.0.1:2181" >> $GITHUB_ENV
- fi
- - name: Setup python
- id: setup-python
- uses: ./.github/actions/setup-python
- with:
- python-version: ${{ inputs.python-version }}
- cache-files-hash: ${{ inputs.cache-files-hash }}
- pip-cache-version: ${{ inputs.pip-cache-version }}
- workdir: ${{ inputs.workdir }}
- - name: Install system dependencies
- shell: bash
- run: |
- sudo apt-get update
- sudo apt-get install -y --no-install-recommends \
- libxmlsec1-dev \
- libmaxminddb-dev
- - name: Set up outputs
- id: config
- env:
- MATRIX_INSTANCE: ${{ matrix.instance }}
- shell: bash
- run: |
- echo "::set-output name=yarn-cache-dir::$(yarn cache dir)"
- echo "::set-output name=matrix-instance-number::$(($MATRIX_INSTANCE+1))"
- echo "::set-output name=matrix-instance-total::$(($MATRIX_INSTANCE_TOTAL))"
- echo "::set-output name=acceptance-dir::.artifacts/visual-snapshots/acceptance"
- - name: Install python dependencies
- shell: bash
- 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"
- python setup.py install_egg_info
- pip install wheel # GitHub Actions does not have `wheel` installed by default
- pip install -U -e ".[dev]"
- cd -
- - name: Start devservices
- shell: bash
- env:
- NEED_KAFKA: ${{ inputs.kafka }}
- NEED_SNUBA: ${{ inputs.snuba }}
- NEED_CLICKHOUSE: ${{ inputs.clickhouse }}
- NEED_CHARTCUTERIE: ${{ inputs.chartcuterie }}
- WORKDIR: ${{ inputs.workdir }}
- run: |
- sentry init
- # redis, postgres are needed for almost every code path.
- sentry devservices up redis postgres
- if [ "$BIGTABLE_EMULATOR_HOST" ]; then
- sentry devservices up --skip-only-if bigtable
- fi
- # TODO: Use devservices kafka. See https://github.com/getsentry/sentry/pull/20986#issuecomment-704510570
- if [ "$NEED_KAFKA" = "true" ]; then
- # This is *not* the production version. Unclear reason as to why this was chosen
- # https://github.com/getsentry/ops/blob/c823e62f930ecc6c97bb08898c71e49edc7232f6/cookbooks/getsentry/attributes/default.rb#L631
- docker run \
- --name sentry_zookeeper \
- -d --network host \
- -e ZOOKEEPER_CLIENT_PORT=2181 \
- confluentinc/cp-zookeeper:4.1.0
- # This is the production version; do not change w/o changing it there as well
- # https://github.com/getsentry/ops/blob/c823e62f930ecc6c97bb08898c71e49edc7232f6/cookbooks/getsentry/attributes/default.rb#L643
- docker run \
- --name sentry_kafka \
- -d --network host \
- -e KAFKA_ZOOKEEPER_CONNECT=127.0.0.1:2181 \
- -e KAFKA_LISTENERS=INTERNAL://0.0.0.0:9093,EXTERNAL://0.0.0.0:9092 \
- -e KAFKA_ADVERTISED_LISTENERS=INTERNAL://127.0.0.1:9093,EXTERNAL://127.0.0.1:9092 \
- -e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT \
- -e KAFKA_INTER_BROKER_LISTENER_NAME=INTERNAL \
- -e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
- confluentinc/cp-kafka:5.1.2
- fi
- if [ "$NEED_SNUBA" = "true" ]; then
- sentry devservices up clickhouse snuba
- fi
- if [ "$NEED_CLICKHOUSE" = "true" ]; then
- sentry devservices up clickhouse
- fi
- if [ "$NEED_CHARTCUTERIE" = "true" ]; then
- sentry devservices up --skip-only-if chartcuterie
- fi
- docker ps -a
- ./$WORKDIR/scripts/devservices-healthcheck.sh
|