Proof of concept for GitHub Actions (#9661)
Signed-off-by: Dan Callahan <danc@element.io>
This commit is contained in:
parent
48a1f4db31
commit
0277b8f3e6
|
@ -0,0 +1,322 @@
|
||||||
|
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:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- 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: ${{ always() }} # 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: ${{ !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: ${{ !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() }}
|
||||||
|
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() }}
|
||||||
|
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: Dump results.tap
|
||||||
|
if: ${{ always() }}
|
||||||
|
run: cat /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() }} # 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/create_postgres_db.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() }}
|
||||||
|
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
|
||||||
|
|
||||||
|
- name: Run actions/checkout@v2 for complement
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: "matrix-org/complement"
|
||||||
|
path: complement
|
||||||
|
|
||||||
|
# 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 ./tests
|
||||||
|
env:
|
||||||
|
COMPLEMENT_BASE_IMAGE: complement-synapse:latest
|
||||||
|
working-directory: complement
|
|
@ -0,0 +1 @@
|
||||||
|
Experiment with GitHub Actions for CI.
|
Loading…
Reference in New Issue