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