mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-26 11:36:03 +03:00
07e0992a76
A few things here: * Build the debs for single distro for each PR, so that we can see if it breaks. Do the same for develop. Building all the debs ties up the GHA workers for ages. * Stop building the debs for release branches. Again, it takes ages, and I don't think anyone is actually going to stop and look at them. We'll know they are working when we make an RC. * Change the configs so that if we manually cancel a workflow, it actually does something.
346 lines
11 KiB
YAML
346 lines
11 KiB
YAML
name: Tests
|
|
|
|
on:
|
|
push:
|
|
branches: ["develop", "release-*"]
|
|
pull_request:
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
toxenv:
|
|
- "check-sampleconfig"
|
|
- "check_codestyle"
|
|
- "check_isort"
|
|
- "mypy"
|
|
- "packaging"
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-python@v2
|
|
- run: pip install tox
|
|
- run: tox -e ${{ matrix.toxenv }}
|
|
|
|
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:
|
|
# Note: This and the script can be simplified once we drop Buildkite. See:
|
|
# https://github.com/actions/checkout/issues/266#issuecomment-638346893
|
|
# https://github.com/actions/checkout/issues/416
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@v2
|
|
- run: pip install tox
|
|
- name: Patch Buildkite-specific test script
|
|
run: |
|
|
sed -i -e 's/\$BUILDKITE_PULL_REQUEST/${{ github.event.number }}/' \
|
|
scripts-dev/check-newsfragment
|
|
- run: scripts-dev/check-newsfragment
|
|
|
|
lint-sdist:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-python@v2
|
|
with:
|
|
python-version: "3.x"
|
|
- run: pip install wheel
|
|
- run: python setup.py sdist bdist_wheel
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: Python Distributions
|
|
path: dist/*
|
|
|
|
# Dummy step to gate other tests on without repeating the whole list
|
|
linting-done:
|
|
if: ${{ !cancelled() }} # Run this even if prior jobs were skipped
|
|
needs: [lint, lint-crlf, lint-newsfile, lint-sdist]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- run: "true"
|
|
|
|
trial:
|
|
if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
|
|
needs: linting-done
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.6", "3.7", "3.8", "3.9"]
|
|
database: ["sqlite"]
|
|
include:
|
|
# Newest Python without optional deps
|
|
- python-version: "3.9"
|
|
toxenv: "py-noextras,combine"
|
|
|
|
# Oldest Python with PostgreSQL
|
|
- python-version: "3.6"
|
|
database: "postgres"
|
|
postgres-version: "9.6"
|
|
|
|
# Newest Python with PostgreSQL
|
|
- python-version: "3.9"
|
|
database: "postgres"
|
|
postgres-version: "13"
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- run: sudo apt-get -qq install xmlsec1
|
|
- name: Set up PostgreSQL ${{ matrix.postgres-version }}
|
|
if: ${{ matrix.postgres-version }}
|
|
run: |
|
|
docker run -d -p 5432:5432 \
|
|
-e POSTGRES_PASSWORD=postgres \
|
|
-e POSTGRES_INITDB_ARGS="--lc-collate C --lc-ctype C --encoding UTF8" \
|
|
postgres:${{ matrix.postgres-version }}
|
|
- uses: actions/setup-python@v2
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- run: pip install tox
|
|
- name: Await PostgreSQL
|
|
if: ${{ matrix.postgres-version }}
|
|
timeout-minutes: 2
|
|
run: until pg_isready -h localhost; do sleep 1; done
|
|
- run: tox -e py,combine
|
|
env:
|
|
TRIAL_FLAGS: "--jobs=2"
|
|
SYNAPSE_POSTGRES: ${{ matrix.database == 'postgres' || '' }}
|
|
SYNAPSE_POSTGRES_HOST: localhost
|
|
SYNAPSE_POSTGRES_USER: postgres
|
|
SYNAPSE_POSTGRES_PASSWORD: postgres
|
|
- name: Dump logs
|
|
# 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:
|
|
if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
|
|
needs: linting-done
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Test with old deps
|
|
uses: docker://ubuntu:bionic # For old python and sqlite
|
|
with:
|
|
workdir: /github/workspace
|
|
entrypoint: .buildkite/scripts/test_old_deps.sh
|
|
env:
|
|
TRIAL_FLAGS: "--jobs=2"
|
|
- name: Dump logs
|
|
# 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'
|
|
if: ${{ contains(github.ref, 'pypy') && !failure() && !cancelled() }}
|
|
needs: linting-done
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version: ["pypy-3.6"]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- run: sudo apt-get -qq install xmlsec1 libxml2-dev libxslt-dev
|
|
- uses: actions/setup-python@v2
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- run: pip install tox
|
|
- run: tox -e py,combine
|
|
env:
|
|
TRIAL_FLAGS: "--jobs=2"
|
|
- name: Dump logs
|
|
# 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:
|
|
if: ${{ !failure() && !cancelled() }}
|
|
needs: linting-done
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: matrixdotorg/sytest-synapse:${{ matrix.sytest-tag }}
|
|
volumes:
|
|
- ${{ github.workspace }}:/src
|
|
env:
|
|
BUILDKITE_BRANCH: ${{ github.head_ref }}
|
|
POSTGRES: ${{ matrix.postgres && 1}}
|
|
MULTI_POSTGRES: ${{ (matrix.postgres == 'multi-postgres') && 1}}
|
|
WORKERS: ${{ matrix.workers && 1 }}
|
|
REDIS: ${{ matrix.redis && 1 }}
|
|
BLACKLIST: ${{ matrix.workers && 'synapse-blacklist-with-workers' }}
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- sytest-tag: bionic
|
|
|
|
- sytest-tag: bionic
|
|
postgres: postgres
|
|
|
|
- sytest-tag: testing
|
|
postgres: postgres
|
|
|
|
- sytest-tag: bionic
|
|
postgres: multi-postgres
|
|
workers: workers
|
|
|
|
- sytest-tag: buster
|
|
postgres: multi-postgres
|
|
workers: workers
|
|
|
|
- sytest-tag: buster
|
|
postgres: postgres
|
|
workers: workers
|
|
redis: redis
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Prepare test blacklist
|
|
run: cat sytest-blacklist .buildkite/worker-blacklist > synapse-blacklist-with-workers
|
|
- name: Run SyTest
|
|
run: /bootstrap.sh synapse
|
|
working-directory: /src
|
|
- name: Summarise results.tap
|
|
if: ${{ always() }}
|
|
run: /sytest/scripts/tap_to_gha.pl /logs/results.tap
|
|
- name: Upload SyTest logs
|
|
uses: actions/upload-artifact@v2
|
|
if: ${{ always() }}
|
|
with:
|
|
name: Sytest Logs - ${{ job.status }} - (${{ join(matrix.*, ', ') }})
|
|
path: |
|
|
/logs/results.tap
|
|
/logs/**/*.log*
|
|
|
|
portdb:
|
|
if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
|
|
needs: linting-done
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- python-version: "3.6"
|
|
postgres-version: "9.6"
|
|
|
|
- python-version: "3.9"
|
|
postgres-version: "13"
|
|
|
|
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
|
|
- uses: actions/setup-python@v2
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- name: Patch Buildkite-specific test scripts
|
|
run: |
|
|
sed -i -e 's/host="postgres"/host="localhost"/' .buildkite/scripts/postgres_exec.py
|
|
sed -i -e 's/host: postgres/host: localhost/' .buildkite/postgres-config.yaml
|
|
sed -i -e 's|/src/||' .buildkite/{sqlite,postgres}-config.yaml
|
|
sed -i -e 's/\$TOP/\$GITHUB_WORKSPACE/' .coveragerc
|
|
- run: .buildkite/scripts/test_synapse_port_db.sh
|
|
|
|
complement:
|
|
if: ${{ !failure() && !cancelled() }}
|
|
needs: linting-done
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
# https://github.com/matrix-org/complement/blob/master/dockerfiles/ComplementCIBuildkite.Dockerfile
|
|
image: matrixdotorg/complement:latest
|
|
env:
|
|
CI: true
|
|
ports:
|
|
- 8448:8448
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
|
|
steps:
|
|
- name: Run actions/checkout@v2 for synapse
|
|
uses: actions/checkout@v2
|
|
with:
|
|
path: synapse
|
|
|
|
# Attempt to check out the same branch of Complement as the PR. If it
|
|
# doesn't exist, fallback to master.
|
|
- name: Checkout complement
|
|
shell: bash
|
|
run: |
|
|
mkdir -p complement
|
|
# Attempt to use the version of complement which best matches the current
|
|
# build. Depending on whether this is a PR or release, etc. we need to
|
|
# use different fallbacks.
|
|
#
|
|
# 1. First check if there's a similarly named branch (GITHUB_HEAD_REF
|
|
# for pull requests, otherwise GITHUB_REF).
|
|
# 2. Attempt to use the base branch, e.g. when merging into release-vX.Y
|
|
# (GITHUB_BASE_REF for pull requests).
|
|
# 3. Use the default complement branch ("master").
|
|
for BRANCH_NAME in "$GITHUB_HEAD_REF" "$GITHUB_BASE_REF" "${GITHUB_REF#refs/heads/}" "master"; do
|
|
# Skip empty branch names and merge commits.
|
|
if [[ -z "$BRANCH_NAME" || $BRANCH_NAME =~ ^refs/pull/.* ]]; then
|
|
continue
|
|
fi
|
|
|
|
(wget -O - "https://github.com/matrix-org/complement/archive/$BRANCH_NAME.tar.gz" | tar -xz --strip-components=1 -C complement) && break
|
|
done
|
|
|
|
# Build initial Synapse image
|
|
- run: docker build -t matrixdotorg/synapse:latest -f docker/Dockerfile .
|
|
working-directory: synapse
|
|
|
|
# Build a ready-to-run Synapse image based on the initial image above.
|
|
# This new image includes a config file, keys for signing and TLS, and
|
|
# other settings to make it suitable for testing under Complement.
|
|
- run: docker build -t complement-synapse -f Synapse.Dockerfile .
|
|
working-directory: complement/dockerfiles
|
|
|
|
# Run Complement
|
|
- run: go test -v -tags synapse_blacklist,msc2403,msc2946,msc3083 ./tests
|
|
env:
|
|
COMPLEMENT_BASE_IMAGE: complement-synapse:latest
|
|
working-directory: complement
|