2021-04-09 05:54:30 -04:00
|
|
|
name: Tests
|
|
|
|
|
|
|
|
on:
|
|
|
|
push:
|
|
|
|
branches: ["develop", "release-*"]
|
|
|
|
pull_request:
|
|
|
|
|
2021-07-22 06:35:06 -04:00
|
|
|
concurrency:
|
|
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
|
|
cancel-in-progress: true
|
2021-08-05 06:22:27 -04:00
|
|
|
|
2021-04-09 05:54:30 -04:00
|
|
|
jobs:
|
2022-03-01 14:47:02 -05:00
|
|
|
check-sampleconfig:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions/setup-python@v2
|
2022-04-20 12:33:20 -04:00
|
|
|
- run: pip install .
|
2022-03-02 13:00:26 -05:00
|
|
|
- run: scripts-dev/generate_sample_config.sh --check
|
2022-03-04 07:01:51 -05:00
|
|
|
- run: scripts-dev/config-lint.sh
|
2022-03-01 14:47:02 -05:00
|
|
|
|
2022-06-15 11:27:18 -04:00
|
|
|
check-schema-delta:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions/setup-python@v2
|
|
|
|
- run: "pip install 'click==8.1.1' 'GitPython>=3.1.20'"
|
|
|
|
- run: scripts-dev/check_schema_delta.py --force-colors
|
|
|
|
|
2021-04-09 05:54:30 -04:00
|
|
|
lint:
|
2022-04-12 12:35:48 -04:00
|
|
|
uses: "matrix-org/backend-meta/.github/workflows/python-poetry-ci.yml@v1"
|
2022-04-27 09:03:44 -04:00
|
|
|
with:
|
|
|
|
typechecking-extras: "all"
|
2021-04-09 05:54:30 -04:00
|
|
|
|
|
|
|
lint-crlf:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Check line endings
|
|
|
|
run: scripts-dev/check_line_terminators.sh
|
|
|
|
|
|
|
|
lint-newsfile:
|
|
|
|
if: ${{ github.base_ref == 'develop' || contains(github.base_ref, 'release-') }}
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
2021-05-26 09:14:43 -04:00
|
|
|
with:
|
|
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
fetch-depth: 0
|
2021-04-09 05:54:30 -04:00
|
|
|
- uses: actions/setup-python@v2
|
2022-03-01 14:47:02 -05:00
|
|
|
- run: "pip install 'towncrier>=18.6.0rc1'"
|
2022-03-02 13:00:26 -05:00
|
|
|
- run: scripts-dev/check-newsfragment.sh
|
2021-08-10 07:15:10 -04:00
|
|
|
env:
|
|
|
|
PULL_REQUEST_NUMBER: ${{ github.event.number }}
|
2021-04-09 05:54:30 -04:00
|
|
|
|
2022-08-17 06:17:04 -04:00
|
|
|
lint-pydantic:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
with:
|
|
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
|
|
fetch-depth: 0
|
|
|
|
- uses: matrix-org/setup-python-poetry@v1
|
|
|
|
with:
|
|
|
|
extras: "all"
|
|
|
|
- run: poetry run scripts-dev/check_pydantic_models.py
|
|
|
|
|
2021-04-09 05:54:30 -04:00
|
|
|
# Dummy step to gate other tests on without repeating the whole list
|
|
|
|
linting-done:
|
2021-07-14 09:41:23 -04:00
|
|
|
if: ${{ !cancelled() }} # Run this even if prior jobs were skipped
|
2022-08-17 06:17:04 -04:00
|
|
|
needs: [lint, lint-crlf, lint-newsfile, lint-pydantic, check-sampleconfig, check-schema-delta]
|
2021-04-09 05:54:30 -04:00
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- run: "true"
|
|
|
|
|
2022-09-05 08:31:42 -04:00
|
|
|
calculate-test-jobs:
|
2021-07-14 09:41:23 -04:00
|
|
|
if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
|
2021-04-09 05:54:30 -04:00
|
|
|
needs: linting-done
|
|
|
|
runs-on: ubuntu-latest
|
2022-09-05 08:31:42 -04:00
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- uses: actions/setup-python@v2
|
|
|
|
- id: get-matrix
|
|
|
|
run: .ci/scripts/calculate_jobs.py
|
|
|
|
outputs:
|
|
|
|
trial_test_matrix: ${{ steps.get-matrix.outputs.trial_test_matrix }}
|
|
|
|
sytest_test_matrix: ${{ steps.get-matrix.outputs.sytest_test_matrix }}
|
|
|
|
|
|
|
|
trial:
|
|
|
|
if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
|
|
|
|
needs: calculate-test-jobs
|
|
|
|
runs-on: ubuntu-latest
|
2021-04-09 05:54:30 -04:00
|
|
|
strategy:
|
|
|
|
matrix:
|
2022-09-05 08:31:42 -04:00
|
|
|
job: ${{ fromJson(needs.calculate-test-jobs.outputs.trial_test_matrix) }}
|
2021-04-09 05:54:30 -04:00
|
|
|
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- run: sudo apt-get -qq install xmlsec1
|
2022-09-05 08:31:42 -04:00
|
|
|
- name: Set up PostgreSQL ${{ matrix.job.postgres-version }}
|
|
|
|
if: ${{ matrix.job.postgres-version }}
|
2021-04-09 05:54:30 -04:00
|
|
|
run: |
|
|
|
|
docker run -d -p 5432:5432 \
|
|
|
|
-e POSTGRES_PASSWORD=postgres \
|
|
|
|
-e POSTGRES_INITDB_ARGS="--lc-collate C --lc-ctype C --encoding UTF8" \
|
2022-09-05 08:31:42 -04:00
|
|
|
postgres:${{ matrix.job.postgres-version }}
|
2022-04-12 12:41:21 -04:00
|
|
|
- uses: matrix-org/setup-python-poetry@v1
|
2021-04-09 05:54:30 -04:00
|
|
|
with:
|
2022-09-05 08:31:42 -04:00
|
|
|
python-version: ${{ matrix.job.python-version }}
|
|
|
|
extras: ${{ matrix.job.extras }}
|
2021-04-09 05:54:30 -04:00
|
|
|
- name: Await PostgreSQL
|
2022-09-05 08:31:42 -04:00
|
|
|
if: ${{ matrix.job.postgres-version }}
|
2021-04-09 05:54:30 -04:00
|
|
|
timeout-minutes: 2
|
|
|
|
run: until pg_isready -h localhost; do sleep 1; done
|
2022-04-12 12:41:21 -04:00
|
|
|
- run: poetry run trial --jobs=2 tests
|
2021-04-09 05:54:30 -04:00
|
|
|
env:
|
2022-09-05 08:31:42 -04:00
|
|
|
SYNAPSE_POSTGRES: ${{ matrix.job.database == 'postgres' || '' }}
|
2021-04-09 05:54:30 -04:00
|
|
|
SYNAPSE_POSTGRES_HOST: localhost
|
|
|
|
SYNAPSE_POSTGRES_USER: postgres
|
|
|
|
SYNAPSE_POSTGRES_PASSWORD: postgres
|
|
|
|
- name: Dump logs
|
2021-10-12 16:09:49 -04:00
|
|
|
# Logs are most useful when the command fails, always include them.
|
|
|
|
if: ${{ always() }}
|
2021-04-09 05:54:30 -04:00
|
|
|
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
|
|
|
# This keeps logs colocated with failing jobs
|
|
|
|
# It also ignores find's exit code; this is a best effort affair
|
|
|
|
run: >-
|
|
|
|
find _trial_temp -name '*.log'
|
|
|
|
-exec echo "::group::{}" \;
|
|
|
|
-exec cat {} \;
|
|
|
|
-exec echo "::endgroup::" \;
|
|
|
|
|| true
|
|
|
|
|
|
|
|
trial-olddeps:
|
2022-04-12 06:50:11 -04:00
|
|
|
# Note: sqlite only; no postgres
|
2021-07-14 09:41:23 -04:00
|
|
|
if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
|
2021-04-09 05:54:30 -04:00
|
|
|
needs: linting-done
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Test with old deps
|
2022-01-21 17:23:26 -05:00
|
|
|
uses: docker://ubuntu:focal # For old python and sqlite
|
2022-04-12 06:50:11 -04:00
|
|
|
# Note: focal seems to be using 3.8, but the oldest is 3.7?
|
|
|
|
# See https://github.com/matrix-org/synapse/issues/12343
|
2021-04-09 05:54:30 -04:00
|
|
|
with:
|
|
|
|
workdir: /github/workspace
|
2021-08-11 14:59:57 -04:00
|
|
|
entrypoint: .ci/scripts/test_old_deps.sh
|
2021-04-09 05:54:30 -04:00
|
|
|
- name: Dump logs
|
2021-10-12 16:09:49 -04:00
|
|
|
# Logs are most useful when the command fails, always include them.
|
|
|
|
if: ${{ always() }}
|
2021-04-09 05:54:30 -04:00
|
|
|
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
|
|
|
# This keeps logs colocated with failing jobs
|
|
|
|
# It also ignores find's exit code; this is a best effort affair
|
|
|
|
run: >-
|
|
|
|
find _trial_temp -name '*.log'
|
|
|
|
-exec echo "::group::{}" \;
|
|
|
|
-exec cat {} \;
|
|
|
|
-exec echo "::endgroup::" \;
|
|
|
|
|| true
|
|
|
|
|
|
|
|
trial-pypy:
|
|
|
|
# Very slow; only run if the branch name includes 'pypy'
|
2022-04-12 12:41:21 -04:00
|
|
|
# Note: sqlite only; no postgres. Completely untested since poetry move.
|
2021-07-14 09:41:23 -04:00
|
|
|
if: ${{ contains(github.ref, 'pypy') && !failure() && !cancelled() }}
|
2021-04-09 05:54:30 -04:00
|
|
|
needs: linting-done
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
|
|
matrix:
|
2021-12-21 14:37:04 -05:00
|
|
|
python-version: ["pypy-3.7"]
|
2022-04-12 12:41:21 -04:00
|
|
|
extras: ["all"]
|
2021-04-09 05:54:30 -04:00
|
|
|
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
2022-04-12 12:41:21 -04:00
|
|
|
# Install libs necessary for PyPy to build binary wheels for dependencies
|
2021-04-09 05:54:30 -04:00
|
|
|
- run: sudo apt-get -qq install xmlsec1 libxml2-dev libxslt-dev
|
2022-04-12 12:41:21 -04:00
|
|
|
- uses: matrix-org/setup-python-poetry@v1
|
2021-04-09 05:54:30 -04:00
|
|
|
with:
|
|
|
|
python-version: ${{ matrix.python-version }}
|
2022-04-12 12:41:21 -04:00
|
|
|
extras: ${{ matrix.extras }}
|
|
|
|
- run: poetry run trial --jobs=2 tests
|
2021-04-09 05:54:30 -04:00
|
|
|
- name: Dump logs
|
2021-10-12 16:09:49 -04:00
|
|
|
# Logs are most useful when the command fails, always include them.
|
|
|
|
if: ${{ always() }}
|
2021-04-09 05:54:30 -04:00
|
|
|
# Note: Dumps to workflow logs instead of using actions/upload-artifact
|
|
|
|
# This keeps logs colocated with failing jobs
|
|
|
|
# It also ignores find's exit code; this is a best effort affair
|
|
|
|
run: >-
|
|
|
|
find _trial_temp -name '*.log'
|
|
|
|
-exec echo "::group::{}" \;
|
|
|
|
-exec cat {} \;
|
|
|
|
-exec echo "::endgroup::" \;
|
|
|
|
|| true
|
|
|
|
|
|
|
|
sytest:
|
2021-07-14 09:41:23 -04:00
|
|
|
if: ${{ !failure() && !cancelled() }}
|
2022-09-05 08:31:42 -04:00
|
|
|
needs: calculate-test-jobs
|
2021-04-09 05:54:30 -04:00
|
|
|
runs-on: ubuntu-latest
|
|
|
|
container:
|
2022-09-05 08:31:42 -04:00
|
|
|
image: matrixdotorg/sytest-synapse:${{ matrix.job.sytest-tag }}
|
2021-04-09 05:54:30 -04:00
|
|
|
volumes:
|
|
|
|
- ${{ github.workspace }}:/src
|
|
|
|
env:
|
2021-09-20 12:35:16 -04:00
|
|
|
SYTEST_BRANCH: ${{ github.head_ref }}
|
2022-09-05 08:31:42 -04:00
|
|
|
POSTGRES: ${{ matrix.job.postgres && 1}}
|
|
|
|
MULTI_POSTGRES: ${{ (matrix.job.postgres == 'multi-postgres') && 1}}
|
|
|
|
WORKERS: ${{ matrix.job.workers && 1 }}
|
|
|
|
BLACKLIST: ${{ matrix.job.workers && 'synapse-blacklist-with-workers' }}
|
2021-08-11 15:08:48 -04:00
|
|
|
TOP: ${{ github.workspace }}
|
2021-04-09 05:54:30 -04:00
|
|
|
|
|
|
|
strategy:
|
|
|
|
fail-fast: false
|
|
|
|
matrix:
|
2022-09-05 08:31:42 -04:00
|
|
|
job: ${{ fromJson(needs.calculate-test-jobs.outputs.sytest_test_matrix) }}
|
2021-04-09 05:54:30 -04:00
|
|
|
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- name: Prepare test blacklist
|
2021-08-11 14:59:57 -04:00
|
|
|
run: cat sytest-blacklist .ci/worker-blacklist > synapse-blacklist-with-workers
|
2021-04-09 05:54:30 -04:00
|
|
|
- name: Run SyTest
|
|
|
|
run: /bootstrap.sh synapse
|
|
|
|
working-directory: /src
|
2021-06-02 12:10:37 -04:00
|
|
|
- name: Summarise results.tap
|
2021-04-09 05:54:30 -04:00
|
|
|
if: ${{ always() }}
|
2021-06-02 12:10:37 -04:00
|
|
|
run: /sytest/scripts/tap_to_gha.pl /logs/results.tap
|
2021-04-09 05:54:30 -04:00
|
|
|
- name: Upload SyTest logs
|
|
|
|
uses: actions/upload-artifact@v2
|
|
|
|
if: ${{ always() }}
|
|
|
|
with:
|
2022-09-05 08:31:42 -04:00
|
|
|
name: Sytest Logs - ${{ job.status }} - (${{ join(matrix.job.*, ', ') }})
|
2021-04-09 05:54:30 -04:00
|
|
|
path: |
|
|
|
|
/logs/results.tap
|
|
|
|
/logs/**/*.log*
|
|
|
|
|
2021-10-18 11:14:12 -04:00
|
|
|
export-data:
|
|
|
|
if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
|
|
|
|
needs: [linting-done, portdb]
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
env:
|
|
|
|
TOP: ${{ github.workspace }}
|
|
|
|
|
|
|
|
services:
|
|
|
|
postgres:
|
|
|
|
image: postgres
|
|
|
|
ports:
|
|
|
|
- 5432:5432
|
|
|
|
env:
|
|
|
|
POSTGRES_PASSWORD: "postgres"
|
|
|
|
POSTGRES_INITDB_ARGS: "--lc-collate C --lc-ctype C --encoding UTF8"
|
|
|
|
options: >-
|
|
|
|
--health-cmd pg_isready
|
|
|
|
--health-interval 10s
|
|
|
|
--health-timeout 5s
|
|
|
|
--health-retries 5
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- run: sudo apt-get -qq install xmlsec1
|
2022-04-08 15:18:54 -04:00
|
|
|
- uses: matrix-org/setup-python-poetry@v1
|
2021-10-18 11:14:12 -04:00
|
|
|
with:
|
2022-04-08 15:18:54 -04:00
|
|
|
extras: "postgres"
|
2021-10-18 11:14:12 -04:00
|
|
|
- run: .ci/scripts/test_export_data_command.sh
|
|
|
|
|
2021-04-09 05:54:30 -04:00
|
|
|
portdb:
|
2021-07-14 09:41:23 -04:00
|
|
|
if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
|
2021-04-09 05:54:30 -04:00
|
|
|
needs: linting-done
|
|
|
|
runs-on: ubuntu-latest
|
2021-08-12 05:41:01 -04:00
|
|
|
env:
|
|
|
|
TOP: ${{ github.workspace }}
|
2021-04-09 05:54:30 -04:00
|
|
|
strategy:
|
|
|
|
matrix:
|
|
|
|
include:
|
2021-12-21 14:37:04 -05:00
|
|
|
- python-version: "3.7"
|
|
|
|
postgres-version: "10"
|
2021-04-09 05:54:30 -04:00
|
|
|
|
2021-10-05 07:43:04 -04:00
|
|
|
- python-version: "3.10"
|
|
|
|
postgres-version: "14"
|
2021-04-09 05:54:30 -04:00
|
|
|
|
|
|
|
services:
|
|
|
|
postgres:
|
|
|
|
image: postgres:${{ matrix.postgres-version }}
|
|
|
|
ports:
|
|
|
|
- 5432:5432
|
|
|
|
env:
|
|
|
|
POSTGRES_PASSWORD: "postgres"
|
|
|
|
POSTGRES_INITDB_ARGS: "--lc-collate C --lc-ctype C --encoding UTF8"
|
|
|
|
options: >-
|
|
|
|
--health-cmd pg_isready
|
|
|
|
--health-interval 10s
|
|
|
|
--health-timeout 5s
|
|
|
|
--health-retries 5
|
|
|
|
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
- run: sudo apt-get -qq install xmlsec1
|
2022-04-08 07:00:05 -04:00
|
|
|
- uses: matrix-org/setup-python-poetry@v1
|
2021-04-09 05:54:30 -04:00
|
|
|
with:
|
|
|
|
python-version: ${{ matrix.python-version }}
|
2022-04-08 07:00:05 -04:00
|
|
|
extras: "postgres"
|
2021-08-11 14:59:57 -04:00
|
|
|
- run: .ci/scripts/test_synapse_port_db.sh
|
2021-04-09 05:54:30 -04:00
|
|
|
|
|
|
|
complement:
|
2022-05-31 09:02:00 -04:00
|
|
|
if: "${{ !failure() && !cancelled() }}"
|
2021-04-09 05:54:30 -04:00
|
|
|
needs: linting-done
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
|
2022-06-09 09:16:34 -04:00
|
|
|
strategy:
|
|
|
|
fail-fast: false
|
|
|
|
matrix:
|
|
|
|
include:
|
|
|
|
- arrangement: monolith
|
|
|
|
database: SQLite
|
|
|
|
|
|
|
|
- arrangement: monolith
|
|
|
|
database: Postgres
|
|
|
|
|
2022-08-01 06:51:44 -04:00
|
|
|
- arrangement: workers
|
|
|
|
database: Postgres
|
2022-07-13 08:30:42 -04:00
|
|
|
|
|
|
|
steps:
|
|
|
|
- name: Run actions/checkout@v2 for synapse
|
|
|
|
uses: actions/checkout@v2
|
|
|
|
with:
|
|
|
|
path: synapse
|
|
|
|
|
|
|
|
- name: Prepare Complement's Prerequisites
|
|
|
|
run: synapse/.ci/scripts/setup_complement_prerequisites.sh
|
|
|
|
|
|
|
|
- run: |
|
|
|
|
set -o pipefail
|
2022-08-28 16:05:30 -04:00
|
|
|
POSTGRES=${{ (matrix.database == 'Postgres') && 1 || '' }} WORKERS=${{ (matrix.arrangement == 'workers') && 1 || '' }} COMPLEMENT_DIR=`pwd`/complement synapse/scripts-dev/complement.sh -json 2>&1 | synapse/.ci/scripts/gotestfmt
|
2022-07-13 08:30:42 -04:00
|
|
|
shell: bash
|
|
|
|
name: Run Complement Tests
|
|
|
|
|
2021-07-20 06:41:19 -04:00
|
|
|
# a job which marks all the other jobs as complete, thus allowing PRs to be merged.
|
|
|
|
tests-done:
|
2021-07-22 06:10:30 -04:00
|
|
|
if: ${{ always() }}
|
2021-07-20 06:41:19 -04:00
|
|
|
needs:
|
2022-03-07 07:24:06 -05:00
|
|
|
- check-sampleconfig
|
2021-07-22 06:10:30 -04:00
|
|
|
- lint
|
|
|
|
- lint-crlf
|
|
|
|
- lint-newsfile
|
2021-07-20 06:41:19 -04:00
|
|
|
- trial
|
|
|
|
- trial-olddeps
|
|
|
|
- sytest
|
2022-03-07 07:24:06 -05:00
|
|
|
- export-data
|
2021-07-20 06:41:19 -04:00
|
|
|
- portdb
|
|
|
|
- complement
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
2022-03-07 07:24:06 -05:00
|
|
|
- uses: matrix-org/done-action@v2
|
|
|
|
with:
|
|
|
|
needs: ${{ toJSON(needs) }}
|
|
|
|
|
|
|
|
# The newsfile lint may be skipped on non PR builds
|
|
|
|
skippable:
|
|
|
|
lint-newsfile
|