name: ci on: push: branches: - main - dev pull_request: # You can use the merge_group event to trigger your GitHub Actions workflow when # a pull request is added to a merge queue # https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-a-merge-queue#triggering-merge-group-checks-with-github-actions merge_group: jobs: lint: runs-on: ubuntu-latest container: python:3.9 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: 14.17.0 - name: Build run: | pip install $(grep "pre-commit" engine/requirements.txt) npm install -g yarn cd grafana-plugin/ yarn --network-timeout 500000 yarn build # pre-commit uses git, which is not working in the action without this workaround # see https://github.com/actions/runner-images/issues/6775 - run: git config --global --add safe.directory "$GITHUB_WORKSPACE" - name: Lint All run: | pre-commit run --all-files test-frontend: runs-on: ubuntu-latest container: python:3.9 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: 14.17.0 - name: Unit Testing Frontend run: | pip install $(grep "pre-commit" engine/requirements.txt) npm install -g yarn cd grafana-plugin/ yarn --network-timeout 500000 yarn test test-technical-documentation: runs-on: ubuntu-latest steps: - name: "Check out code" uses: "actions/checkout@v3" - name: "Build website" # -e HUGO_REFLINKSERRORLEVEL=ERROR prevents merging broken refs with the downside # that no refs to external content can be used as these refs will not resolve in the # docs-base image. run: | docker run -v ${PWD}/docs/sources:/hugo/content/docs/oncall/latest -e HUGO_REFLINKSERRORLEVEL=ERROR --rm grafana/docs-base:latest /bin/bash -c 'make hugo' lint-migrations-backend-mysql-rabbitmq: name: "Lint migrations" runs-on: ubuntu-latest container: python:3.9 env: DJANGO_SETTINGS_MODULE: settings.ci-test SLACK_CLIENT_OAUTH_ID: 1 services: rabbit_test: image: rabbitmq:3.7.19 env: RABBITMQ_DEFAULT_USER: rabbitmq RABBITMQ_DEFAULT_PASS: rabbitmq mysql_test: image: mysql:5.7.25 env: MYSQL_DATABASE: oncall_local_dev MYSQL_ROOT_PASSWORD: local_dev_pwd steps: - uses: actions/checkout@v3 - name: Lint migrations run: | cd engine/ pip install -r requirements.txt python manage.py lintmigrations unit-test-backend-mysql-rabbitmq: name: "Backend Tests: MySQL + RabbitMQ (RBAC enabled: ${{ matrix.rbac_enabled }})" runs-on: ubuntu-latest container: python:3.9 strategy: matrix: rbac_enabled: ["True", "False"] env: DJANGO_SETTINGS_MODULE: settings.ci-test SLACK_CLIENT_OAUTH_ID: 1 services: rabbit_test: image: rabbitmq:3.7.19 env: RABBITMQ_DEFAULT_USER: rabbitmq RABBITMQ_DEFAULT_PASS: rabbitmq mysql_test: image: mysql:5.7.25 env: MYSQL_DATABASE: oncall_local_dev MYSQL_ROOT_PASSWORD: local_dev_pwd steps: - uses: actions/checkout@v2 - name: Unit Test Backend run: | apt-get update && apt-get install -y netcat cd engine/ pip install -r requirements.txt ./wait_for_test_mysql_start.sh && ONCALL_TESTING_RBAC_ENABLED=${{ matrix.rbac_enabled }} pytest -x unit-test-backend-postgresql-rabbitmq: name: "Backend Tests: PostgreSQL + RabbitMQ (RBAC enabled: ${{ matrix.rbac_enabled }})" runs-on: ubuntu-latest container: python:3.9 strategy: matrix: rbac_enabled: ["True", "False"] env: DATABASE_TYPE: postgresql DJANGO_SETTINGS_MODULE: settings.ci-test SLACK_CLIENT_OAUTH_ID: 1 services: rabbit_test: image: rabbitmq:3.7.19 env: RABBITMQ_DEFAULT_USER: rabbitmq RABBITMQ_DEFAULT_PASS: rabbitmq postgresql_test: image: postgres:14.4 env: POSTGRES_DB: oncall_local_dev POSTGRES_PASSWORD: local_dev_pwd # Set health checks to wait until postgres has started options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v2 - name: Unit Test Backend run: | cd engine/ pip install -r requirements.txt ONCALL_TESTING_RBAC_ENABLED=${{ matrix.rbac_enabled }} pytest -x unit-test-backend-sqlite-redis: name: "Backend Tests: SQLite + Redis (RBAC enabled: ${{ matrix.rbac_enabled }})" runs-on: ubuntu-latest container: python:3.9 strategy: matrix: rbac_enabled: ["True", "False"] env: DATABASE_TYPE: sqlite3 BROKER_TYPE: redis REDIS_URI: redis://redis_test:6379 DJANGO_SETTINGS_MODULE: settings.ci-test SLACK_CLIENT_OAUTH_ID: 1 services: redis_test: image: redis:7.0.5 options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v2 - name: Unit Test Backend run: | apt-get update && apt-get install -y netcat cd engine/ pip install -r requirements.txt ONCALL_TESTING_RBAC_ENABLED=${{ matrix.rbac_enabled }} pytest -x unit-test-pd-migrator: runs-on: ubuntu-latest container: python:3.9 steps: - uses: actions/checkout@v2 - name: Unit Test PD Migrator run: | cd tools/pagerduty-migrator pip install -r requirements.txt pytest -x docker-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Test docker build (no push) id: docker_build uses: docker/build-push-action@v2 with: context: ./engine file: ./engine/Dockerfile push: false target: prod - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }}