This repository has been archived by the owner on Apr 26, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add CI job to act as a canary for testing against latest dependencies (…
…#12472) Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com>
- Loading branch information
Showing
3 changed files
with
161 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
--- | ||
title: CI run against latest deps is failing | ||
--- | ||
See https://github.com/{{env.GITHUB_REPOSITORY}}/actions/runs/{{env.GITHUB_RUN_ID}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
# People who are freshly `pip install`ing from PyPI will pull in the latest versions of | ||
# dependencies which match the broad requirements. Since most CI runs are against | ||
# the locked poetry environment, run specifically against the latest dependencies to | ||
# know if there's an upcoming breaking change. | ||
# | ||
# As an overview this workflow: | ||
# - checks out develop, | ||
# - installs from source, pulling in the dependencies like a fresh `pip install` would, and | ||
# - runs mypy and test suites in that checkout. | ||
# | ||
# Based on the twisted trunk CI job. | ||
|
||
name: Latest dependencies | ||
|
||
on: | ||
schedule: | ||
- cron: 0 7 * * * | ||
workflow_dispatch: | ||
|
||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
mypy: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
# The dev dependencies aren't exposed in the wheel metadata (at least with current | ||
# poetry-core versions), so we install with poetry. | ||
- uses: matrix-org/setup-python-poetry@v1 | ||
with: | ||
python-version: "3.x" | ||
poetry-version: "1.2.0b1" | ||
# Dump installed versions for debugging. | ||
- run: poetry run pip list > before.txt | ||
# Upgrade all runtime dependencies only. This is intended to mimic a fresh | ||
# `pip install matrix-synapse[all]` as closely as possible. | ||
- run: poetry update --no-dev | ||
- run: poetry run pip list > after.txt && (diff -u before.txt after.txt || true) | ||
- run: poetry run mypy | ||
trial: | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
include: | ||
- database: "sqlite" | ||
- database: "postgres" | ||
postgres-version: "14" | ||
|
||
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: "3.x" | ||
- run: pip install .[all,test] | ||
- name: Await PostgreSQL | ||
if: ${{ matrix.postgres-version }} | ||
timeout-minutes: 2 | ||
run: until pg_isready -h localhost; do sleep 1; done | ||
- run: python -m twisted.trial --jobs=2 tests | ||
env: | ||
SYNAPSE_POSTGRES: ${{ matrix.database == 'postgres' || '' }} | ||
SYNAPSE_POSTGRES_HOST: localhost | ||
SYNAPSE_POSTGRES_USER: postgres | ||
SYNAPSE_POSTGRES_PASSWORD: postgres | ||
- name: Dump logs | ||
# Logs are most useful when the command fails, always include them. | ||
if: ${{ always() }} | ||
# 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: | ||
runs-on: ubuntu-latest | ||
container: | ||
image: matrixdotorg/sytest-synapse:testing | ||
volumes: | ||
- ${{ github.workspace }}:/src | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
include: | ||
- sytest-tag: focal | ||
|
||
- sytest-tag: focal | ||
postgres: postgres | ||
workers: workers | ||
redis: redis | ||
env: | ||
POSTGRES: ${{ matrix.postgres && 1}} | ||
WORKERS: ${{ matrix.workers && 1 }} | ||
REDIS: ${{ matrix.redis && 1 }} | ||
BLACKLIST: ${{ matrix.workers && 'synapse-blacklist-with-workers' }} | ||
|
||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: Ensure sytest runs `pip install` | ||
# Delete the lockfile so sytest will `pip install` rather than `poetry install` | ||
run: rm /src/poetry.lock | ||
working-directory: /src | ||
- name: Prepare test blacklist | ||
run: cat sytest-blacklist .ci/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* | ||
# TODO: run complement (as with twisted trunk, see #12473). | ||
|
||
# open an issue if the build fails, so we know about it. | ||
open-issue: | ||
if: failure() | ||
needs: | ||
# TODO: should mypy be included here? It feels more brittle than the other two. | ||
- mypy | ||
- trial | ||
- sytest | ||
|
||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v2 | ||
- uses: JasonEtco/create-an-issue@5d9504915f79f9cc6d791934b8ef34f2353dd74d # v2.5.0, 2020-12-06 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
update_existing: true | ||
filename: .ci/latest_deps_build_failed_issue_template.md | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Add a CI job which tests Synapse against the latest version of all dependencies. |