123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- dist: xenial
- language: python
- python: 2.7
- branches:
- only:
- - master
- cache:
- yarn: true
- directories:
- - "${HOME}/virtualenv/python$(python -c 'import platform; print(platform.python_version())')"
- - '$VOLTA_HOME'
- - node_modules
- - '${HOME}/google-cloud-sdk'
- addons:
- apt:
- update: true
- packages:
- - libxmlsec1-dev
- - libmaxminddb-dev
- chrome: stable
- env:
- global:
- - NODE_ENV=development
- - PIP_DISABLE_PIP_VERSION_CHECK=on
- - PIP_QUIET=1
- - SENTRY_LIGHT_BUILD=1
- - SENTRY_SKIP_BACKEND_VALIDATION=1
- - MIGRATIONS_TEST_MIGRATE=0
- - VOLTA_VERSION=0.8.1
- - VOLTA_HOME="${HOME}/.volta"
- - PATH="${HOME}/.volta/bin:${PATH}"
- - NODE_OPTIONS=--max-old-space-size=4096
- - PYTEST_SENTRY_DSN=https://6fd5cfea2d4d46b182ad214ac7810508@sentry.io/2423079
- - SENTRY_KAFKA_HOSTS=localhost:9092
- - SENTRY_ZOOKEEPER_HOSTS=localhost:2181
- - PYTEST_ADDOPTS="--reruns 5"
- base_install: &base_install |-
- pip install --no-cache-dir "pip>=20.0.2"
- docker run \
- --name sentry_zookeeper \
- -d --network host \
- -e ZOOKEEPER_CLIENT_PORT=2181 \
- confluentinc/cp-zookeeper:4.1.0
- 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
- [ "$TRAVIS_PULL_REQUEST" != "false" ] || export PYTEST_SENTRY_ALWAYS_REPORT=1
- install_volta: &install_volta |-
- command -v volta && return 0
- wget --quiet "https://github.com/volta-cli/volta/releases/download/v$VOLTA_VERSION/volta-$VOLTA_VERSION-linux-openssl-1.0.tar.gz"
- tar -xzf "volta-$VOLTA_VERSION-linux-openssl-1.0.tar.gz" -C "${HOME}/bin"
- # Running `volta -v` triggers setting up the shims in VOLTA_HOME (otherwise node won't work)
- volta -v
- install_node_dependencies: &install_node_dependencies |-
- # Running `node -v` and `yarn -v` triggers Volta to install the versions set in the project.
- # There might be a more readable `volta install` in the future that would replace this magic.
- # Tracking: https://github.com/volta-cli/volta/issues/653#issuecomment-628909923
- node -v
- yarn -v
- yarn install --frozen-lockfile
- start_snuba: &start_snuba |-
- docker run \
- --name sentry_clickhouse \
- -d --network host \
- --ulimit nofile=262144:262144 \
- yandex/clickhouse-server:20.3.9.70 \
- docker run \
- --name sentry_snuba \
- -d --network host \
- -e SNUBA_SETTINGS=test \
- -e CLICKHOUSE_HOST=127.0.0.1 \
- -e CLICKHOUSE_PORT=9000 \
- getsentry/snuba
- docker exec sentry_snuba snuba migrations migrate --force
- script:
- - make travis-test-$TEST_SUITE
- after_failure:
- - dmesg | tail -n 100
- after_script:
- - |
- coverage_files=$(ls .artifacts/*coverage.xml || true)
- if [[ -n "$coverage_files" || -f .artifacts/coverage/cobertura-coverage.xml ]]; then
- pip install -U codecov
- codecov -e TEST_SUITE
- fi
- - *install_volta
- - volta install @zeus-ci/cli
- - zeus upload -t "text/xml+xunit" .artifacts/*junit.xml
- - zeus upload -t "text/xml+coverage" .artifacts/*coverage.xml
- - zeus upload -t "text/xml+coverage" .artifacts/coverage/cobertura-coverage.xml
- - zeus upload -t "text/html+pytest" .artifacts/*pytest.html
- - zeus upload -t "text/plain+pycodestyle" .artifacts/*pycodestyle.log
- - zeus upload -t "text/xml+checkstyle" .artifacts/*checkstyle.xml
- - zeus upload -t "application/webpack-stats+json" .artifacts/*webpack-stats.json
- base_postgres: &postgres_default
- python: 2.7
- services:
- - memcached
- - redis-server
- - postgresql
- before_install:
- - *base_install
- - *start_snuba
- - docker ps -a
- install:
- - python setup.py install_egg_info
- - pip install -U -e ".[dev]"
- - sentry init
- before_script:
- - psql -c 'create database sentry;' -U postgres
- base_acceptance: &acceptance_default
- python: 2.7
- services:
- - docker
- - memcached
- - redis-server
- - postgresql
- before_install:
- - *base_install
- - *install_volta
- - *start_snuba
- - docker ps -a
- install:
- - *install_node_dependencies
- - python setup.py install_egg_info
- - pip install -U -e ".[dev]"
- - sentry init
- - |
- CHROME_MAJOR_VERSION="$(dpkg -s google-chrome-stable | sed -nr 's/Version: ([0-9]+).*/\1/p')"
- wget -N "https://chromedriver.storage.googleapis.com/$(curl https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_MAJOR_VERSION})/chromedriver_linux64.zip" -P ~/
- - unzip ~/chromedriver_linux64.zip -d ~/
- - rm ~/chromedriver_linux64.zip
- - install -m755 ~/chromedriver -C "${HOME}/bin"
- before_script:
- - psql -c 'create database sentry;' -U postgres
- # each job in the matrix inherits `env/global` and uses everything above,
- # but custom `services`, `before_install`, `install`, and `before_script` directives
- # may be defined to define and setup individual job environments with more precision.
- matrix:
- fast_finish: true
- include:
- - language: generic
- name: 'Linter (Javascript)'
- env: TEST_SUITE=lint-js
- before_install:
- # Under a "generic" language environment, this will make travis pyenv error because there
- # is no pyenv python installed.
- - rm .python-version
- - *install_volta
- install:
- - *install_node_dependencies
- - python: 3.7
- name: 'pre-commit hooks (includes python linting + format check)'
- install:
- - SENTRY_NO_VIRTUALENV_CREATION=1 make setup-git
- script:
- # Run pre-commit to lint and format check files that were changed (but not deleted) compared to master.
- # XXX: there is a very small chance that it'll expand to exceed Linux's limits
- # `getconf ARG_MAX` - max # bytes of args + environ for exec()
- - pre-commit run --files $(git diff --diff-filter=d --name-only master)
- - <<: *postgres_default
- name: 'Backend with migrations [Postgres] (1/2)'
- env: TEST_SUITE=postgres DB=postgres TOTAL_TEST_GROUPS=2 TEST_GROUP=0 MIGRATIONS_TEST_MIGRATE=1
- - <<: *postgres_default
- name: 'Backend with migrations [Postgres] (2/2)'
- env: TEST_SUITE=postgres DB=postgres TOTAL_TEST_GROUPS=2 TEST_GROUP=1 MIGRATIONS_TEST_MIGRATE=1
- - <<: *acceptance_default
- name: 'Acceptance (1/3)'
- env: TEST_SUITE=acceptance USE_SNUBA=1 TOTAL_TEST_GROUPS=3 TEST_GROUP=0
- - <<: *acceptance_default
- name: 'Acceptance (2/3)'
- env: TEST_SUITE=acceptance USE_SNUBA=1 TOTAL_TEST_GROUPS=3 TEST_GROUP=1
- - <<: *acceptance_default
- name: 'Acceptance (3/3)'
- env: TEST_SUITE=acceptance USE_SNUBA=1 TOTAL_TEST_GROUPS=3 TEST_GROUP=2
- - <<: *acceptance_default
- name: 'Plugins'
- env: TEST_SUITE=plugins DB=postgres
- - python: 2.7
- name: 'Frontend [test]'
- env: TEST_SUITE=js
- before_install:
- - *install_volta
- install:
- - *install_node_dependencies
- - python: 2.7
- name: 'Frontend [build]'
- env: TEST_SUITE=js-build
- before_install:
- - *install_volta
- install:
- - *install_node_dependencies
- - python: 2.7
- name: 'Command Line'
- env: TEST_SUITE=cli
- services:
- - postgresql
- - redis-server
- install:
- - python setup.py install_egg_info
- - pip install -U -e ".[dev]"
- - sentry init
- before_script:
- - psql -c 'create database sentry;' -U postgres
- - <<: *postgres_default
- name: 'Symbolicator Integration'
- env: TEST_SUITE=symbolicator
- before_install:
- - *base_install
- - *start_snuba
- - docker run -d -v $PWD/config/symbolicator/:/etc/symbolicator --network host --name symbolicator us.gcr.io/sentryio/symbolicator:latest run -c /etc/symbolicator/config.yml
- - docker ps -a
- - <<: *postgres_default
- name: 'Sentry-Relay integration tests'
- env: TEST_SUITE=relay-integration DB=postgres
- services:
- - docker
- - memcached
- - redis-server
- - postgresql
- before_install:
- - *base_install
- - *start_snuba
- - docker pull us.gcr.io/sentryio/relay:latest # pull relay we'll run and kill it for each test
- - docker ps -a
- - python: 2.7
- name: 'Snuba Integration with migrations'
- env: TEST_SUITE=snuba USE_SNUBA=1 MIGRATIONS_TEST_MIGRATE=1
- services:
- - docker
- - memcached
- - redis-server
- - postgresql
- before_install:
- - *base_install
- - *start_snuba
- - docker ps -a
- install:
- - python setup.py install_egg_info
- - pip install -U -e ".[dev]"
- - sentry init
- before_script:
- - psql -c 'create database sentry;' -U postgres
- # Deploy 'storybook' (component & style guide)
- - name: 'Storybook Deploy'
- language: generic
- env: STORYBOOK_BUILD=1
- before_install:
- # travis pyenv will attempt to use .python-version, but the appropriate python version won't be installed.
- # since we don't need python here, we have to remove this.
- - rm .python-version
- - *install_volta
- install:
- - *install_node_dependencies
- script: yarn run storybook-build
- after_success: .travis/deploy-storybook.sh
- after_failure: skip
- notifications:
- webhooks:
- urls:
- - https://zeus.ci/hooks/fa079cf6-8e6b-11e7-9155-0a580a28081c/public/provider/travis/webhook
- # This is to capture travis metrics
- # Repo for this webhook is https://github.com/getsentry/sentry-development-metrics
- # Hosted on GCP
- - https://product-eng-webhooks-vmrqv3f7nq-uw.a.run.app/metrics/travis/webhook
- on_success: always
- on_failure: always
- on_start: always
- on_cancel: always
- on_error: always
|