# What this PR does - fixes our e2e tests to work on all tested versions - updates Grafana versions that we run the daily e2e tests against (bump `10.0.2` to `10.0.11` + add `10.1.7` tags) - updates the Slack status message format + change channel from #irm-amixr-flux to #gops-oncall-dev <img width="1479" alt="Screenshot 2024-02-24 at 08 30 06" src="https://github.com/grafana/oncall/assets/9406895/f5cb91f8-12ce-4978-9c37-c72ee8a01e4b"> ## NOTE It looks like we have some e2e tests that fail under the following circumstances: - on Firefox or WebKit - on Grafana 10.2 and 10.3 (once we fix these, we should [update our e2e tests that run on all PR builds](https://github.com/grafana/oncall/blob/dev/.github/workflows/linting-and-tests.yml#L325) to run against `10.3.3` which is the current latest major version available) ## Checklist - [x] Unit, integration, and e2e (if applicable) tests updated - [x] Documentation added (or `pr:no public docs` PR label added if not required) - [x] `CHANGELOG.md` updated (or `pr:no changelog` PR label added if not required)
327 lines
11 KiB
YAML
327 lines
11 KiB
YAML
name: Linting and Unit/e2e Tests
|
|
|
|
"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:
|
|
|
|
concurrency:
|
|
# Cancel any running workflow for the same branch when new commits are pushed.
|
|
# We group both by ref_name (available when CI is triggered by a push to a branch/tag)
|
|
# and head_ref (available when CI is triggered by a PR).
|
|
group: "${{ github.ref_name }}-${{ github.head_ref }}"
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
lint-entire-project:
|
|
name: "Lint entire project"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11.4"
|
|
cache: "pip"
|
|
cache-dependency-path: |
|
|
engine/requirements.txt
|
|
engine/requirements-dev.txt
|
|
# following 2 steps - need to install the frontend dependencies for the eslint/prettier/stylelint steps
|
|
- uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18.16.0
|
|
cache: "yarn"
|
|
cache-dependency-path: grafana-plugin/yarn.lock
|
|
- name: Use cached frontend dependencies
|
|
id: cache-frontend-dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: grafana-plugin/node_modules
|
|
key: ${{ runner.os }}-frontend-node-modules-${{ hashFiles('grafana-plugin/yarn.lock') }}
|
|
- name: Install frontend dependencies
|
|
if: steps.cache-frontend-dependencies.outputs.cache-hit != 'true'
|
|
working-directory: grafana-plugin
|
|
run: yarn install --frozen-lockfile --prefer-offline --network-timeout 500000
|
|
- uses: pre-commit/action@v3.0.0
|
|
|
|
lint-test-and-build-frontend:
|
|
name: "Lint, test, and build frontend"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-node@v3
|
|
with:
|
|
node-version: 18.16.0
|
|
cache: "yarn"
|
|
cache-dependency-path: grafana-plugin/yarn.lock
|
|
- name: Use cached frontend dependencies
|
|
id: cache-frontend-dependencies
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: grafana-plugin/node_modules
|
|
key: ${{ runner.os }}-frontend-node-modules-${{ hashFiles('grafana-plugin/yarn.lock') }}
|
|
- name: Install frontend dependencies
|
|
if: steps.cache-frontend-dependencies.outputs.cache-hit != 'true'
|
|
working-directory: grafana-plugin
|
|
run: yarn install --frozen-lockfile --prefer-offline --network-timeout 500000
|
|
- name: Build frontend (will run linter and tests)
|
|
working-directory: grafana-plugin
|
|
run: yarn build
|
|
|
|
test-technical-documentation:
|
|
name: "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 'echo -e "---\\nredirectURL: /hugo/content/docs/oncall/latest/\\ntype: redirect\\nversioned: true\\n---\\n"
|
|
> /hugo/content/docs/oncall/_index.md; make hugo'
|
|
|
|
lint-migrations-backend-mysql-rabbitmq:
|
|
name: "Lint database migrations"
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
DATABASE_HOST: localhost
|
|
RABBITMQ_URI: amqp://rabbitmq:rabbitmq@localhost:5672
|
|
DJANGO_SETTINGS_MODULE: settings.ci-test
|
|
SLACK_CLIENT_OAUTH_ID: 1
|
|
services:
|
|
rabbit_test:
|
|
image: rabbitmq:3.12.0
|
|
env:
|
|
RABBITMQ_DEFAULT_USER: rabbitmq
|
|
RABBITMQ_DEFAULT_PASS: rabbitmq
|
|
ports:
|
|
- 5672:5672
|
|
mysql_test:
|
|
image: mysql:8.0.32
|
|
env:
|
|
MYSQL_DATABASE: oncall_local_dev
|
|
MYSQL_ROOT_PASSWORD: local_dev_pwd
|
|
ports:
|
|
- 3306:3306
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11.4"
|
|
cache: "pip"
|
|
cache-dependency-path: |
|
|
engine/requirements.txt
|
|
engine/requirements-dev.txt
|
|
- name: Lint migrations
|
|
working-directory: engine
|
|
# makemigrations --check = Exit with a non-zero status if model changes are missing migrations
|
|
# and don't actually write them.
|
|
run: |
|
|
pip install pip-tools
|
|
pip-sync requirements.txt requirements-dev.txt
|
|
python manage.py makemigrations --check
|
|
python manage.py lintmigrations
|
|
|
|
unit-test-helm-chart:
|
|
name: "Helm Chart Unit Tests"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: azure/setup-helm@v3
|
|
with:
|
|
version: v3.8.0
|
|
- name: Install helm unittest plugin
|
|
run: helm plugin install https://github.com/helm-unittest/helm-unittest.git --version=v0.3.3
|
|
- name: Run tests
|
|
run: helm unittest ./helm/oncall
|
|
|
|
unit-test-backend-mysql-rabbitmq:
|
|
name: "Backend Tests: MySQL + RabbitMQ (RBAC enabled: ${{ matrix.rbac_enabled }})"
|
|
runs-on: ubuntu-latest-8-cores
|
|
strategy:
|
|
matrix:
|
|
rbac_enabled: ["True", "False"]
|
|
env:
|
|
DJANGO_SETTINGS_MODULE: settings.ci-test
|
|
DATABASE_HOST: localhost
|
|
RABBITMQ_URI: amqp://rabbitmq:rabbitmq@localhost:5672
|
|
SLACK_CLIENT_OAUTH_ID: 1
|
|
ONCALL_TESTING_RBAC_ENABLED: ${{ matrix.rbac_enabled }}
|
|
services:
|
|
rabbit_test:
|
|
image: rabbitmq:3.12.0
|
|
env:
|
|
RABBITMQ_DEFAULT_USER: rabbitmq
|
|
RABBITMQ_DEFAULT_PASS: rabbitmq
|
|
ports:
|
|
- 5672:5672
|
|
mysql_test:
|
|
image: mysql:8.0.32
|
|
env:
|
|
MYSQL_DATABASE: oncall_local_dev
|
|
MYSQL_ROOT_PASSWORD: local_dev_pwd
|
|
ports:
|
|
- 3306:3306
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11.4"
|
|
cache: "pip"
|
|
cache-dependency-path: |
|
|
engine/requirements.txt
|
|
engine/requirements-dev.txt
|
|
- name: Unit Test Backend
|
|
working-directory: engine
|
|
run: |
|
|
apt-get update && apt-get install -y netcat-traditional
|
|
pip install pip-tools
|
|
pip-sync requirements.txt requirements-dev.txt
|
|
./wait_for_test_mysql_start.sh && pytest -x
|
|
|
|
unit-test-backend-postgresql-rabbitmq:
|
|
name: "Backend Tests: PostgreSQL + RabbitMQ (RBAC enabled: ${{ matrix.rbac_enabled }})"
|
|
runs-on: ubuntu-latest-8-cores
|
|
strategy:
|
|
matrix:
|
|
rbac_enabled: ["True", "False"]
|
|
env:
|
|
DATABASE_TYPE: postgresql
|
|
DATABASE_HOST: localhost
|
|
RABBITMQ_URI: amqp://rabbitmq:rabbitmq@localhost:5672
|
|
DJANGO_SETTINGS_MODULE: settings.ci-test
|
|
SLACK_CLIENT_OAUTH_ID: 1
|
|
ONCALL_TESTING_RBAC_ENABLED: ${{ matrix.rbac_enabled }}
|
|
services:
|
|
rabbit_test:
|
|
image: rabbitmq:3.12.0
|
|
env:
|
|
RABBITMQ_DEFAULT_USER: rabbitmq
|
|
RABBITMQ_DEFAULT_PASS: rabbitmq
|
|
ports:
|
|
- 5672:5672
|
|
postgresql_test:
|
|
image: postgres:14.4
|
|
env:
|
|
POSTGRES_DB: oncall_local_dev
|
|
POSTGRES_PASSWORD: local_dev_pwd
|
|
ports:
|
|
- 5432:5432
|
|
# 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@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11.4"
|
|
cache: "pip"
|
|
cache-dependency-path: |
|
|
engine/requirements.txt
|
|
engine/requirements-dev.txt
|
|
- name: Unit Test Backend
|
|
working-directory: engine
|
|
run: |
|
|
pip install pip-tools
|
|
pip-sync requirements.txt requirements-dev.txt
|
|
pytest -x
|
|
|
|
unit-test-backend-sqlite-redis:
|
|
name: "Backend Tests: SQLite + Redis (RBAC enabled: ${{ matrix.rbac_enabled }})"
|
|
runs-on: ubuntu-latest-8-cores
|
|
strategy:
|
|
matrix:
|
|
rbac_enabled: ["True", "False"]
|
|
env:
|
|
DATABASE_TYPE: sqlite3
|
|
BROKER_TYPE: redis
|
|
REDIS_URI: redis://localhost:6379
|
|
DJANGO_SETTINGS_MODULE: settings.ci-test
|
|
SLACK_CLIENT_OAUTH_ID: 1
|
|
ONCALL_TESTING_RBAC_ENABLED: ${{ matrix.rbac_enabled }}
|
|
services:
|
|
redis_test:
|
|
image: redis:7.0.5
|
|
ports:
|
|
- 6379:6379
|
|
options: >-
|
|
--health-cmd "redis-cli ping"
|
|
--health-interval 10s
|
|
--health-timeout 5s
|
|
--health-retries 5
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11.4"
|
|
cache: "pip"
|
|
cache-dependency-path: |
|
|
engine/requirements.txt
|
|
engine/requirements-dev.txt
|
|
- name: Unit Test Backend
|
|
working-directory: engine
|
|
run: |
|
|
apt-get update && apt-get install -y netcat-traditional
|
|
pip install pip-tools
|
|
pip-sync requirements.txt requirements-dev.txt
|
|
pytest -x
|
|
|
|
unit-test-pd-migrator:
|
|
name: "Unit tests - PagerDuty Migrator"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11.4"
|
|
cache: "pip"
|
|
cache-dependency-path: tools/pagerduty-migrator/requirements.txt
|
|
- name: Unit Test PD Migrator
|
|
working-directory: tools/pagerduty-migrator
|
|
run: |
|
|
pip install pip-tools
|
|
pip-sync requirements.txt
|
|
pytest -x
|
|
|
|
mypy:
|
|
name: "mypy"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "3.11.4"
|
|
cache: "pip"
|
|
cache-dependency-path: |
|
|
engine/requirements.txt
|
|
engine/requirements-dev.txt
|
|
- name: mypy Static Type Checking
|
|
working-directory: engine
|
|
run: |
|
|
pip install pip-tools
|
|
pip-sync requirements.txt requirements-dev.txt
|
|
mypy .
|
|
|
|
end-to-end-tests:
|
|
name: End to end tests
|
|
uses: ./.github/workflows/e2e-tests.yml
|
|
with:
|
|
# TODO: fix issues with running e2e tests against Grafana v10.2.x and v10.3.x
|
|
grafana-image-tag: 10.1.7
|
|
# grafana-image-tag: 10.3.3
|
|
run-expensive-tests: false
|
|
browsers: "chromium"
|
|
secrets: inherit
|