mirror of
https://mau.dev/maunium/synapse.git
synced 2024-11-12 04:52:26 +01:00
9902b91257
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/cache/releases">actions/cache's releases</a>.</em></p> <blockquote> <h2>v4.0.0</h2> <h2>What's Changed</h2> <ul> <li>Update action to node20 by <a href="https://github.com/takost"><code>@takost</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1284">actions/cache#1284</a></li> <li>feat: save-always flag by <a href="https://github.com/to-s"><code>@to-s</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1242">actions/cache#1242</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/takost"><code>@takost</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1284">actions/cache#1284</a></li> <li><a href="https://github.com/to-s"><code>@to-s</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1242">actions/cache#1242</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v3...v4.0.0">https://github.com/actions/cache/compare/v3...v4.0.0</a></p> <h2>v3.3.3</h2> <h2>What's Changed</h2> <ul> <li>Cache v3.3.3 by <a href="https://github.com/robherley"><code>@robherley</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1302">actions/cache#1302</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/robherley"><code>@robherley</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1302">actions/cache#1302</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v3...v3.3.3">https://github.com/actions/cache/compare/v3...v3.3.3</a></p> <h2>v3.3.2</h2> <h2>What's Changed</h2> <ul> <li>Fixed readme with new segment timeout values by <a href="https://github.com/kotewar"><code>@kotewar</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1133">actions/cache#1133</a></li> <li>Readme fixes by <a href="https://github.com/kotewar"><code>@kotewar</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1134">actions/cache#1134</a></li> <li>Updated description of the lookup-only input for main action by <a href="https://github.com/kotewar"><code>@kotewar</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1130">actions/cache#1130</a></li> <li>Change two new actions mention as quoted text by <a href="https://github.com/bishal-pdMSFT"><code>@bishal-pdMSFT</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1131">actions/cache#1131</a></li> <li>Update Cross-OS Caching tips by <a href="https://github.com/pdotl"><code>@pdotl</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1122">actions/cache#1122</a></li> <li>Bazel example (Take <a href="https://redirect.github.com/actions/cache/issues/2">#2</a>️⃣) by <a href="https://github.com/vorburger"><code>@vorburger</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1132">actions/cache#1132</a></li> <li>Remove actions to add new PRs and issues to a project board by <a href="https://github.com/jorendorff"><code>@jorendorff</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1187">actions/cache#1187</a></li> <li>Consume latest toolkit and fix dangling promise bug by <a href="https://github.com/chkimes"><code>@chkimes</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1217">actions/cache#1217</a></li> <li>Bump action version to 3.3.2 by <a href="https://github.com/bethanyj28"><code>@bethanyj28</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1236">actions/cache#1236</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/vorburger"><code>@vorburger</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1132">actions/cache#1132</a></li> <li><a href="https://github.com/jorendorff"><code>@jorendorff</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1187">actions/cache#1187</a></li> <li><a href="https://github.com/chkimes"><code>@chkimes</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1217">actions/cache#1217</a></li> <li><a href="https://github.com/bethanyj28"><code>@bethanyj28</code></a> made their first contribution in <a href="https://redirect.github.com/actions/cache/pull/1236">actions/cache#1236</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v3...v3.3.2">https://github.com/actions/cache/compare/v3...v3.3.2</a></p> <h2>v3.3.1</h2> <h2>What's Changed</h2> <ul> <li>Reduced download segment size to 128 MB and timeout to 10 minutes by <a href="https://github.com/kotewar"><code>@kotewar</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1129">actions/cache#1129</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/cache/compare/v3...v3.3.1">https://github.com/actions/cache/compare/v3...v3.3.1</a></p> <h2>v3.3.0</h2> <h2>What's Changed</h2> <ul> <li>Bug: Permission is missing in cache delete example by <a href="https://github.com/kotokaze"><code>@kotokaze</code></a> in <a href="https://redirect.github.com/actions/cache/pull/1123">actions/cache#1123</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/actions/cache/blob/main/RELEASES.md">actions/cache's changelog</a>.</em></p> <blockquote> <h1>Releases</h1> <h3>3.0.0</h3> <ul> <li>Updated minimum runner version support from node 12 -> node 16</li> </ul> <h3>3.0.1</h3> <ul> <li>Added support for caching from GHES 3.5.</li> <li>Fixed download issue for files > 2GB during restore.</li> </ul> <h3>3.0.2</h3> <ul> <li>Added support for dynamic cache size cap on GHES.</li> </ul> <h3>3.0.3</h3> <ul> <li>Fixed avoiding empty cache save when no files are available for caching. (<a href="https://redirect.github.com/actions/cache/issues/624">issue</a>)</li> </ul> <h3>3.0.4</h3> <ul> <li>Fixed tar creation error while trying to create tar with path as <code>~/</code> home folder on <code>ubuntu-latest</code>. (<a href="https://redirect.github.com/actions/cache/issues/689">issue</a>)</li> </ul> <h3>3.0.5</h3> <ul> <li>Removed error handling by consuming actions/cache 3.0 toolkit, Now cache server error handling will be done by toolkit. (<a href="https://redirect.github.com/actions/cache/pull/834">PR</a>)</li> </ul> <h3>3.0.6</h3> <ul> <li>Fixed <a href="https://redirect.github.com/actions/cache/issues/809">#809</a> - zstd -d: no such file or directory error</li> <li>Fixed <a href="https://redirect.github.com/actions/cache/issues/833">#833</a> - cache doesn't work with github workspace directory</li> </ul> <h3>3.0.7</h3> <ul> <li>Fixed <a href="https://redirect.github.com/actions/cache/issues/810">#810</a> - download stuck issue. A new timeout is introduced in the download process to abort the download if it gets stuck and doesn't finish within an hour.</li> </ul> <h3>3.0.8</h3> <ul> <li>Fix zstd not working for windows on gnu tar in issues <a href="https://redirect.github.com/actions/cache/issues/888">#888</a> and <a href="https://redirect.github.com/actions/cache/issues/891">#891</a>.</li> <li>Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable <code>SEGMENT_DOWNLOAD_TIMEOUT_MINS</code>. Default is 60 minutes.</li> </ul> <h3>3.0.9</h3> <ul> <li>Enhanced the warning message for cache unavailablity in case of GHES.</li> </ul> <h3>3.0.10</h3> <ul> <li>Fix a bug with sorting inputs.</li> <li>Update definition for restore-keys in README.md</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="13aacd865c
"><code>13aacd8</code></a> Merge pull request <a href="https://redirect.github.com/actions/cache/issues/1242">#1242</a> from to-s/main</li> <li><a href="53b35c5439
"><code>53b35c5</code></a> Merge branch 'main' into main</li> <li><a href="65b8989fab
"><code>65b8989</code></a> Merge pull request <a href="https://redirect.github.com/actions/cache/issues/1284">#1284</a> from takost/update-to-node-20</li> <li><a href="d0be34d544
"><code>d0be34d</code></a> Fix dist</li> <li><a href="66cf064d47
"><code>66cf064</code></a> Merge branch 'main' into update-to-node-20</li> <li><a href="1326563738
"><code>1326563</code></a> Merge branch 'main' into main</li> <li><a href="e71876755e
"><code>e718767</code></a> Fix format</li> <li><a href="01229828ff
"><code>0122982</code></a> Apply workaround for earlyExit</li> <li><a href="3185ecfd61
"><code>3185ecf</code></a> Update "only-" actions to node20</li> <li><a href="25618a0a67
"><code>25618a0</code></a> Bump version</li> <li>Additional commits viewable in <a href="https://github.com/actions/cache/compare/v3...v4">compare view</a></li> </ul> </details> <br /> [![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/cache&package-manager=github_actions&previous-version=3&new-version=4)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
732 lines
23 KiB
YAML
732 lines
23 KiB
YAML
name: Tests
|
|
|
|
on:
|
|
push:
|
|
branches: ["develop", "release-*"]
|
|
pull_request:
|
|
merge_group:
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# Job to detect what has changed so we don't run e.g. Rust checks on PRs that
|
|
# don't modify Rust code.
|
|
changes:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
rust: ${{ !startsWith(github.ref, 'refs/pull/') || steps.filter.outputs.rust }}
|
|
trial: ${{ !startsWith(github.ref, 'refs/pull/') || steps.filter.outputs.trial }}
|
|
integration: ${{ !startsWith(github.ref, 'refs/pull/') || steps.filter.outputs.integration }}
|
|
linting: ${{ !startsWith(github.ref, 'refs/pull/') || steps.filter.outputs.linting }}
|
|
steps:
|
|
- uses: dorny/paths-filter@v2
|
|
id: filter
|
|
# We only check on PRs
|
|
if: startsWith(github.ref, 'refs/pull/')
|
|
with:
|
|
filters: |
|
|
rust:
|
|
- 'rust/**'
|
|
- 'Cargo.toml'
|
|
- 'Cargo.lock'
|
|
- '.rustfmt.toml'
|
|
- '.github/workflows/tests.yml'
|
|
|
|
trial:
|
|
- 'synapse/**'
|
|
- 'tests/**'
|
|
- 'rust/**'
|
|
- '.ci/scripts/calculate_jobs.py'
|
|
- 'Cargo.toml'
|
|
- 'Cargo.lock'
|
|
- 'pyproject.toml'
|
|
- 'poetry.lock'
|
|
- '.github/workflows/tests.yml'
|
|
|
|
integration:
|
|
- 'synapse/**'
|
|
- 'rust/**'
|
|
- 'docker/**'
|
|
- 'Cargo.toml'
|
|
- 'Cargo.lock'
|
|
- 'pyproject.toml'
|
|
- 'poetry.lock'
|
|
- 'docker/**'
|
|
- '.ci/**'
|
|
- 'scripts-dev/complement.sh'
|
|
- '.github/workflows/tests.yml'
|
|
|
|
linting:
|
|
- 'synapse/**'
|
|
- 'docker/**'
|
|
- 'tests/**'
|
|
- 'scripts-dev/**'
|
|
- 'contrib/**'
|
|
- 'synmark/**'
|
|
- 'stubs/**'
|
|
- '.ci/**'
|
|
- 'mypy.ini'
|
|
- 'pyproject.toml'
|
|
- 'poetry.lock'
|
|
- '.github/workflows/tests.yml'
|
|
|
|
check-sampleconfig:
|
|
runs-on: ubuntu-latest
|
|
needs: changes
|
|
if: ${{ needs.changes.outputs.linting == 'true' }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
- uses: matrix-org/setup-python-poetry@v1
|
|
with:
|
|
python-version: "3.x"
|
|
poetry-version: "1.3.2"
|
|
extras: "all"
|
|
- run: poetry run scripts-dev/generate_sample_config.sh --check
|
|
- run: poetry run scripts-dev/config-lint.sh
|
|
|
|
check-schema-delta:
|
|
runs-on: ubuntu-latest
|
|
needs: changes
|
|
if: ${{ needs.changes.outputs.linting == 'true' }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.x"
|
|
- run: "pip install 'click==8.1.1' 'GitPython>=3.1.20'"
|
|
- run: scripts-dev/check_schema_delta.py --force-colors
|
|
|
|
check-lockfile:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.x"
|
|
- run: .ci/scripts/check_lockfile.py
|
|
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
needs: changes
|
|
if: ${{ needs.changes.outputs.linting == 'true' }}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Setup Poetry
|
|
uses: matrix-org/setup-python-poetry@v1
|
|
with:
|
|
install-project: "false"
|
|
|
|
- name: Import order (isort)
|
|
run: poetry run isort --check --diff .
|
|
|
|
- name: Code style (black)
|
|
run: poetry run black --check --diff .
|
|
|
|
- name: Semantic checks (ruff)
|
|
# --quiet suppresses the update check.
|
|
run: poetry run ruff --quiet .
|
|
|
|
lint-mypy:
|
|
runs-on: ubuntu-latest
|
|
name: Typechecking
|
|
needs: changes
|
|
if: ${{ needs.changes.outputs.linting == 'true' }}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- name: Setup Poetry
|
|
uses: matrix-org/setup-python-poetry@v1
|
|
with:
|
|
# We want to make use of type hints in optional dependencies too.
|
|
extras: all
|
|
# We have seen odd mypy failures that were resolved when we started
|
|
# installing the project again:
|
|
# https://github.com/matrix-org/synapse/pull/15376#issuecomment-1498983775
|
|
# To make CI green, err towards caution and install the project.
|
|
install-project: "true"
|
|
|
|
# Cribbed from
|
|
# https://github.com/AustinScola/mypy-cache-github-action/blob/85ea4f2972abed39b33bd02c36e341b28ca59213/src/restore.ts#L10-L17
|
|
- name: Restore/persist mypy's cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
.mypy_cache
|
|
key: mypy-cache-${{ github.context.sha }}
|
|
restore-keys: mypy-cache-
|
|
|
|
- name: Run mypy
|
|
run: poetry run mypy
|
|
|
|
lint-crlf:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Check line endings
|
|
run: scripts-dev/check_line_terminators.sh
|
|
|
|
lint-newsfile:
|
|
if: ${{ (github.base_ref == 'develop' || contains(github.base_ref, 'release-')) && github.actor != 'dependabot[bot]' }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
fetch-depth: 0
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.x"
|
|
- run: "pip install 'towncrier>=18.6.0rc1'"
|
|
- run: scripts-dev/check-newsfragment.sh
|
|
env:
|
|
PULL_REQUEST_NUMBER: ${{ github.event.number }}
|
|
|
|
lint-pydantic:
|
|
runs-on: ubuntu-latest
|
|
needs: changes
|
|
if: ${{ needs.changes.outputs.linting == 'true' }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
- uses: matrix-org/setup-python-poetry@v1
|
|
with:
|
|
poetry-version: "1.3.2"
|
|
extras: "all"
|
|
- run: poetry run scripts-dev/check_pydantic_models.py
|
|
|
|
lint-clippy:
|
|
runs-on: ubuntu-latest
|
|
needs: changes
|
|
if: ${{ needs.changes.outputs.rust == 'true' }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
with:
|
|
components: clippy
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- run: cargo clippy -- -D warnings
|
|
|
|
# We also lint against a nightly rustc so that we can lint the benchmark
|
|
# suite, which requires a nightly compiler.
|
|
lint-clippy-nightly:
|
|
runs-on: ubuntu-latest
|
|
needs: changes
|
|
if: ${{ needs.changes.outputs.rust == 'true' }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: nightly-2022-12-01
|
|
components: clippy
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- run: cargo clippy --all-features -- -D warnings
|
|
|
|
lint-rustfmt:
|
|
runs-on: ubuntu-latest
|
|
needs: changes
|
|
if: ${{ needs.changes.outputs.rust == 'true' }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
# We use nightly so that it correctly groups together imports
|
|
toolchain: nightly-2022-12-01
|
|
components: rustfmt
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- run: cargo fmt --check
|
|
|
|
# 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-mypy
|
|
- lint-crlf
|
|
- lint-newsfile
|
|
- lint-pydantic
|
|
- check-sampleconfig
|
|
- check-schema-delta
|
|
- check-lockfile
|
|
- lint-clippy
|
|
- lint-clippy-nightly
|
|
- lint-rustfmt
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: matrix-org/done-action@v2
|
|
with:
|
|
needs: ${{ toJSON(needs) }}
|
|
|
|
# Various bits are skipped if there was no applicable changes.
|
|
skippable: |
|
|
check-sampleconfig
|
|
check-schema-delta
|
|
lint
|
|
lint-mypy
|
|
lint-newsfile
|
|
lint-pydantic
|
|
lint-clippy
|
|
lint-clippy-nightly
|
|
lint-rustfmt
|
|
|
|
|
|
calculate-test-jobs:
|
|
if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
|
|
needs: linting-done
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.x"
|
|
- id: get-matrix
|
|
run: .ci/scripts/calculate_jobs.py
|
|
outputs:
|
|
trial_test_matrix: ${{ steps.get-matrix.outputs.trial_test_matrix }}
|
|
sytest_test_matrix: ${{ steps.get-matrix.outputs.sytest_test_matrix }}
|
|
|
|
trial:
|
|
if: ${{ !cancelled() && !failure() && needs.changes.outputs.trial == 'true' }} # Allow previous steps to be skipped, but not fail
|
|
needs:
|
|
- calculate-test-jobs
|
|
- changes
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
job: ${{ fromJson(needs.calculate-test-jobs.outputs.trial_test_matrix) }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- run: sudo apt-get -qq install xmlsec1
|
|
- name: Set up PostgreSQL ${{ matrix.job.postgres-version }}
|
|
if: ${{ matrix.job.postgres-version }}
|
|
# 1. Mount postgres data files onto a tmpfs in-memory filesystem to reduce overhead of docker's overlayfs layer.
|
|
# 2. Expose the unix socket for postgres. This removes latency of using docker-proxy for connections.
|
|
run: |
|
|
docker run -d -p 5432:5432 \
|
|
--tmpfs /var/lib/postgres:rw,size=6144m \
|
|
--mount 'type=bind,src=/var/run/postgresql,dst=/var/run/postgresql' \
|
|
-e POSTGRES_PASSWORD=postgres \
|
|
-e POSTGRES_INITDB_ARGS="--lc-collate C --lc-ctype C --encoding UTF8" \
|
|
postgres:${{ matrix.job.postgres-version }}
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- uses: matrix-org/setup-python-poetry@v1
|
|
with:
|
|
python-version: ${{ matrix.job.python-version }}
|
|
poetry-version: "1.3.2"
|
|
extras: ${{ matrix.job.extras }}
|
|
- name: Await PostgreSQL
|
|
if: ${{ matrix.job.postgres-version }}
|
|
timeout-minutes: 2
|
|
run: until pg_isready -h localhost; do sleep 1; done
|
|
- run: poetry run trial --jobs=6 tests
|
|
env:
|
|
SYNAPSE_POSTGRES: ${{ matrix.job.database == 'postgres' || '' }}
|
|
SYNAPSE_POSTGRES_HOST: /var/run/postgresql
|
|
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
|
|
|
|
trial-olddeps:
|
|
# Note: sqlite only; no postgres
|
|
if: ${{ !cancelled() && !failure() && needs.changes.outputs.trial == 'true' }} # Allow previous steps to be skipped, but not fail
|
|
needs:
|
|
- linting-done
|
|
- changes
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
# There aren't wheels for some of the older deps, so we need to install
|
|
# their build dependencies
|
|
- run: |
|
|
sudo apt-get -qq update
|
|
sudo apt-get -qq install build-essential libffi-dev python-dev \
|
|
libxml2-dev libxslt-dev xmlsec1 zlib1g-dev libjpeg-dev libwebp-dev
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.8'
|
|
|
|
- name: Prepare old deps
|
|
if: steps.cache-poetry-old-deps.outputs.cache-hit != 'true'
|
|
run: .ci/scripts/prepare_old_deps.sh
|
|
|
|
# Note: we install using `pip` here, not poetry. `poetry install` ignores the
|
|
# build-system section (https://github.com/python-poetry/poetry/issues/6154), but
|
|
# we explicitly want to test that you can `pip install` using the oldest version
|
|
# of poetry-core and setuptools-rust.
|
|
- run: pip install .[all,test]
|
|
|
|
# We nuke the local copy, as we've installed synapse into the virtualenv
|
|
# (rather than use an editable install, which we no longer support). If we
|
|
# don't do this then python can't find the native lib.
|
|
- run: rm -rf synapse/
|
|
|
|
# Sanity check we can import/run Synapse
|
|
- run: python -m synapse.app.homeserver --help
|
|
|
|
- run: python -m twisted.trial -j6 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
|
|
|
|
trial-pypy:
|
|
# Very slow; only run if the branch name includes 'pypy'
|
|
# Note: sqlite only; no postgres. Completely untested since poetry move.
|
|
if: ${{ contains(github.ref, 'pypy') && !failure() && !cancelled() && needs.changes.outputs.trial == 'true' }}
|
|
needs:
|
|
- linting-done
|
|
- changes
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
python-version: ["pypy-3.8"]
|
|
extras: ["all"]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
# Install libs necessary for PyPy to build binary wheels for dependencies
|
|
- run: sudo apt-get -qq install xmlsec1 libxml2-dev libxslt-dev
|
|
- uses: matrix-org/setup-python-poetry@v1
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
poetry-version: "1.3.2"
|
|
extras: ${{ matrix.extras }}
|
|
- 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:
|
|
if: ${{ !failure() && !cancelled() && needs.changes.outputs.integration == 'true' }}
|
|
needs:
|
|
- calculate-test-jobs
|
|
- changes
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: matrixdotorg/sytest-synapse:${{ matrix.job.sytest-tag }}
|
|
volumes:
|
|
- ${{ github.workspace }}:/src
|
|
env:
|
|
SYTEST_BRANCH: ${{ github.head_ref }}
|
|
POSTGRES: ${{ matrix.job.postgres && 1}}
|
|
MULTI_POSTGRES: ${{ (matrix.job.postgres == 'multi-postgres') || '' }}
|
|
ASYNCIO_REACTOR: ${{ (matrix.job.reactor == 'asyncio') || '' }}
|
|
WORKERS: ${{ matrix.job.workers && 1 }}
|
|
BLACKLIST: ${{ matrix.job.workers && 'synapse-blacklist-with-workers' }}
|
|
TOP: ${{ github.workspace }}
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
job: ${{ fromJson(needs.calculate-test-jobs.outputs.sytest_test_matrix) }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Prepare test blacklist
|
|
run: cat sytest-blacklist .ci/worker-blacklist > synapse-blacklist-with-workers
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- 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@v4
|
|
if: ${{ always() }}
|
|
with:
|
|
name: Sytest Logs - ${{ job.status }} - (${{ join(matrix.job.*, ', ') }})
|
|
path: |
|
|
/logs/results.tap
|
|
/logs/**/*.log*
|
|
|
|
export-data:
|
|
if: ${{ !failure() && !cancelled() && needs.changes.outputs.integration == 'true'}} # Allow previous steps to be skipped, but not fail
|
|
needs: [linting-done, portdb, changes]
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
TOP: ${{ github.workspace }}
|
|
|
|
services:
|
|
postgres:
|
|
image: postgres
|
|
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@v4
|
|
- run: sudo apt-get -qq install xmlsec1 postgresql-client
|
|
- uses: matrix-org/setup-python-poetry@v1
|
|
with:
|
|
poetry-version: "1.3.2"
|
|
extras: "postgres"
|
|
- run: .ci/scripts/test_export_data_command.sh
|
|
env:
|
|
PGHOST: localhost
|
|
PGUSER: postgres
|
|
PGPASSWORD: postgres
|
|
PGDATABASE: postgres
|
|
|
|
|
|
portdb:
|
|
if: ${{ !failure() && !cancelled() && needs.changes.outputs.integration == 'true'}} # Allow previous steps to be skipped, but not fail
|
|
needs:
|
|
- linting-done
|
|
- changes
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- python-version: "3.8"
|
|
postgres-version: "11"
|
|
|
|
- python-version: "3.11"
|
|
postgres-version: "15"
|
|
|
|
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@v4
|
|
- name: Add PostgreSQL apt repository
|
|
# We need a version of pg_dump that can handle the version of
|
|
# PostgreSQL being tested against. The Ubuntu package repository lags
|
|
# behind new releases, so we have to use the PostreSQL apt repository.
|
|
# Steps taken from https://www.postgresql.org/download/linux/ubuntu/
|
|
run: |
|
|
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
|
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
|
sudo apt-get update
|
|
- run: sudo apt-get -qq install xmlsec1 postgresql-client
|
|
- uses: matrix-org/setup-python-poetry@v1
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
poetry-version: "1.3.2"
|
|
extras: "postgres"
|
|
- run: .ci/scripts/test_synapse_port_db.sh
|
|
id: run_tester_script
|
|
env:
|
|
PGHOST: localhost
|
|
PGUSER: postgres
|
|
PGPASSWORD: postgres
|
|
PGDATABASE: postgres
|
|
- name: "Upload schema differences"
|
|
uses: actions/upload-artifact@v4
|
|
if: ${{ failure() && !cancelled() && steps.run_tester_script.outcome == 'failure' }}
|
|
with:
|
|
name: Schema dumps
|
|
path: |
|
|
unported.sql
|
|
ported.sql
|
|
schema_diff
|
|
|
|
complement:
|
|
if: "${{ !failure() && !cancelled() && needs.changes.outputs.integration == 'true' }}"
|
|
needs:
|
|
- linting-done
|
|
- changes
|
|
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: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- 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
|
|
|
|
# use p=1 concurrency as GHA boxes are underpowered and don't like running tons of synapses at once.
|
|
- run: |
|
|
set -o pipefail
|
|
COMPLEMENT_DIR=`pwd`/complement synapse/scripts-dev/complement.sh -p 1 -json 2>&1 | synapse/.ci/scripts/gotestfmt
|
|
shell: bash
|
|
env:
|
|
POSTGRES: ${{ (matrix.database == 'Postgres') && 1 || '' }}
|
|
WORKERS: ${{ (matrix.arrangement == 'workers') && 1 || '' }}
|
|
name: Run Complement Tests
|
|
|
|
cargo-test:
|
|
if: ${{ needs.changes.outputs.rust == 'true' }}
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- linting-done
|
|
- changes
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@1.61.0
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- run: cargo test
|
|
|
|
# We want to ensure that the cargo benchmarks still compile, which requires a
|
|
# nightly compiler.
|
|
cargo-bench:
|
|
if: ${{ needs.changes.outputs.rust == 'true' }}
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- linting-done
|
|
- changes
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Rust
|
|
uses: dtolnay/rust-toolchain@master
|
|
with:
|
|
toolchain: nightly-2022-12-01
|
|
- uses: Swatinem/rust-cache@v2
|
|
|
|
- run: cargo bench --no-run
|
|
|
|
# a job which marks all the other jobs as complete, thus allowing PRs to be merged.
|
|
tests-done:
|
|
if: ${{ always() }}
|
|
needs:
|
|
- trial
|
|
- trial-olddeps
|
|
- sytest
|
|
- export-data
|
|
- portdb
|
|
- complement
|
|
- cargo-test
|
|
- cargo-bench
|
|
- linting-done
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: matrix-org/done-action@v2
|
|
with:
|
|
needs: ${{ toJSON(needs) }}
|
|
|
|
# Various bits are skipped if there was no applicable changes.
|
|
# The newsfile lint may be skipped on non PR builds.
|
|
skippable: |
|
|
trial
|
|
trial-olddeps
|
|
sytest
|
|
portdb
|
|
export-data
|
|
complement
|
|
lint-newsfile
|
|
cargo-test
|
|
cargo-bench
|