Twisted Trunk #322
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
name: Twisted Trunk | |
on: | |
schedule: | |
- cron: 0 8 * * * | |
workflow_dispatch: | |
# NB: inputs are only present when this workflow is dispatched manually. | |
# (The default below is the default field value in the form to trigger | |
# a manual dispatch). Otherwise the inputs will evaluate to null. | |
inputs: | |
twisted_ref: | |
description: Commit, branch or tag to checkout from upstream Twisted. | |
required: false | |
default: 'trunk' | |
type: string | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
check_repo: | |
# Prevent this workflow from running on any fork of Synapse other than element-hq/synapse, as it is | |
# only useful to the Synapse core team. | |
# All other workflow steps depend on this one, thus if 'should_run_workflow' is not 'true', the rest | |
# of the workflow will be skipped as well. | |
if: github.repository == 'element-hq/synapse' | |
runs-on: ubuntu-latest | |
outputs: | |
should_run_workflow: ${{ steps.check_condition.outputs.should_run_workflow }} | |
steps: | |
- id: check_condition | |
run: echo "should_run_workflow=${{ github.repository == 'element-hq/synapse' }}" >> "$GITHUB_OUTPUT" | |
mypy: | |
needs: check_repo | |
if: needs.check_repo.outputs.should_run_workflow == 'true' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
- uses: matrix-org/setup-python-poetry@v1 | |
with: | |
python-version: "3.x" | |
extras: "all" | |
- run: | | |
poetry remove twisted | |
poetry add --extras tls git+https://github.com/twisted/twisted.git#${{ inputs.twisted_ref || 'trunk' }} | |
poetry install --no-interaction --extras "all test" | |
- name: Remove unhelpful options from mypy config | |
run: sed -e '/warn_unused_ignores = True/d' -e '/warn_redundant_casts = True/d' -i mypy.ini | |
- run: poetry run mypy | |
trial: | |
needs: check_repo | |
if: needs.check_repo.outputs.should_run_workflow == 'true' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- run: sudo apt-get -qq install xmlsec1 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
- uses: matrix-org/setup-python-poetry@v1 | |
with: | |
python-version: "3.x" | |
extras: "all test" | |
- run: | | |
poetry remove twisted | |
poetry add --extras tls git+https://github.com/twisted/twisted.git#trunk | |
poetry install --no-interaction --extras "all test" | |
- run: poetry run trial --jobs 2 tests | |
- 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: | |
needs: check_repo | |
if: needs.check_repo.outputs.should_run_workflow == 'true' | |
runs-on: ubuntu-latest | |
container: | |
# We're using ubuntu:focal because it uses Python 3.8 which is our minimum supported Python version. | |
# This job is a canary to warn us about unreleased twisted changes that would cause problems for us if | |
# they were to be released immediately. For simplicity's sake (and to save CI runners) we use the oldest | |
# version, assuming that any incompatibilities on newer versions would also be present on the oldest. | |
image: matrixdotorg/sytest-synapse:focal | |
volumes: | |
- ${{ github.workspace }}:/src | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
- name: Patch dependencies | |
# Note: The poetry commands want to create a virtualenv in /src/.venv/, | |
# but the sytest-synapse container expects it to be in /venv/. | |
# We symlink it before running poetry so that poetry actually | |
# ends up installing to `/venv`. | |
run: | | |
ln -s -T /venv /src/.venv | |
poetry remove twisted | |
poetry add --extras tls git+https://github.com/twisted/twisted.git#trunk | |
poetry install --no-interaction --extras "all test" | |
working-directory: /src | |
- name: Run SyTest | |
run: /bootstrap.sh synapse | |
working-directory: /src | |
env: | |
# Use offline mode to avoid reinstalling the pinned version of | |
# twisted. | |
OFFLINE: 1 | |
- name: Summarise results.tap | |
if: ${{ always() }} | |
run: /sytest/scripts/tap_to_gha.pl /logs/results.tap | |
- name: Upload SyTest logs | |
uses: actions/upload-artifact@v4 | |
if: ${{ always() }} | |
with: | |
name: Sytest Logs - ${{ job.status }} - (${{ join(matrix.*, ', ') }}) | |
path: | | |
/logs/results.tap | |
/logs/**/*.log* | |
complement: | |
needs: check_repo | |
if: "!failure() && !cancelled() && needs.check_repo.outputs.should_run_workflow == 'true'" | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- arrangement: monolith | |
database: SQLite | |
- arrangement: monolith | |
database: Postgres | |
- arrangement: workers | |
database: Postgres | |
steps: | |
- name: Run actions/checkout@v4 for synapse | |
uses: actions/checkout@v4 | |
with: | |
path: synapse | |
- name: Prepare Complement's Prerequisites | |
run: synapse/.ci/scripts/setup_complement_prerequisites.sh | |
- uses: actions/setup-go@v5 | |
with: | |
cache-dependency-path: complement/go.sum | |
go-version-file: complement/go.mod | |
# This step is specific to the 'Twisted trunk' test run: | |
- name: Patch dependencies | |
run: | | |
set -x | |
DEBIAN_FRONTEND=noninteractive sudo apt-get install -yqq python3 pipx | |
pipx install poetry==1.3.2 | |
poetry remove -n twisted | |
poetry add -n --extras tls git+https://github.com/twisted/twisted.git#trunk | |
poetry lock --no-update | |
working-directory: synapse | |
- run: | | |
set -o pipefail | |
TEST_ONLY_SKIP_DEP_HASH_VERIFICATION=1 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 | |
shell: bash | |
name: Run Complement Tests | |
# open an issue if the build fails, so we know about it. | |
open-issue: | |
if: failure() && needs.check_repo.outputs.should_run_workflow == 'true' | |
needs: | |
- mypy | |
- trial | |
- sytest | |
- complement | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2.9.2 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
update_existing: true | |
filename: .ci/twisted_trunk_build_failed_issue_template.md |