255 lines
7.9 KiB
YAML
255 lines
7.9 KiB
YAML
name: Linting and 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:
|
|
|
|
env:
|
|
DJANGO_SETTINGS_MODULE: settings.ci_test
|
|
DATABASE_HOST: localhost
|
|
RABBITMQ_URI: amqp://rabbitmq:rabbitmq@localhost:5672
|
|
SLACK_CLIENT_OAUTH_ID: 1
|
|
|
|
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:
|
|
- name: Checkout project
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
with:
|
|
install-dependencies: "false"
|
|
- name: Install frontend dependencies
|
|
uses: ./.github/actions/install-frontend-dependencies
|
|
- uses: pre-commit/action@v3.0.0
|
|
|
|
lint-test-and-build-frontend:
|
|
name: "Lint, test, and build frontend"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout project
|
|
uses: actions/checkout@v3
|
|
- name: Install frontend dependencies
|
|
uses: ./.github/actions/install-frontend-dependencies
|
|
- name: Build, lint and test frontend
|
|
working-directory: grafana-plugin
|
|
run: yarn lint && yarn test && 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
|
|
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:
|
|
- name: Checkout project
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
- 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: |
|
|
python manage.py makemigrations --check
|
|
python manage.py lintmigrations
|
|
|
|
unit-test-helm-chart:
|
|
name: "Helm Chart Unit Tests"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout project
|
|
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:
|
|
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:
|
|
- name: Checkout project
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
- name: Unit Test Backend
|
|
working-directory: engine
|
|
run: |
|
|
apt-get update && apt-get install -y netcat-traditional
|
|
./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
|
|
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:
|
|
- name: Checkout project
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
- name: Unit Test Backend
|
|
working-directory: engine
|
|
run: 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
|
|
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:
|
|
- name: Checkout project
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
- name: Unit Test Backend
|
|
working-directory: engine
|
|
run: |
|
|
apt-get update && apt-get install -y netcat-traditional
|
|
pytest -x
|
|
|
|
unit-test-migrators:
|
|
name: "Unit tests - Migrators"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout project
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
with:
|
|
python-requirements-paths: tools/migrators/requirements.txt
|
|
- name: Unit Test Migrators
|
|
working-directory: tools/migrators
|
|
run: pytest -x
|
|
|
|
mypy:
|
|
name: "mypy"
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout project
|
|
uses: actions/checkout@v3
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
- name: mypy Static Type Checking
|
|
working-directory: engine
|
|
run: mypy .
|
|
|
|
end-to-end-tests:
|
|
name: Standard e2e 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_version: 10.1.7
|
|
# grafana_version: 10.3.3
|
|
run-expensive-tests: false
|
|
browsers: "chromium"
|