diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index fdc79715ac..045d3dd257 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -22,6 +22,9 @@ jobs:
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
@@ -33,9 +36,45 @@ jobs:
- 'rust/**'
- 'Cargo.toml'
- 'Cargo.lock'
+ - '.rustfmt.toml'
+
+ trial:
+ - 'synapse/**'
+ - 'tests/**'
+ - 'rust/**'
+ - 'Cargo.toml'
+ - 'Cargo.lock'
+ - 'pyproject.toml'
+ - 'poetry.lock'
+
+ integration:
+ - 'synapse/**'
+ - 'rust/**'
+ - 'docker/**'
+ - 'Cargo.toml'
+ - 'Cargo.lock'
+ - 'pyproject.toml'
+ - 'poetry.lock'
+ - 'docker/**'
+
+ linting:
+ - 'synapse/**'
+ - 'docker/**'
+ - 'tests/**'
+ - 'scripts-dev/**'
+ - 'contrib/**'
+ - 'synmark/**'
+ - 'stubs/**'
+ - '.ci/**'
+ - 'mypy.ini'
+ - 'pyproject.toml'
+ - 'poetry.lock'
check-sampleconfig:
runs-on: ubuntu-latest
+ needs: changes
+ if: ${{ needs.changes.outputs.linting == 'true' }}
+
steps:
- uses: actions/checkout@v4
- name: Install Rust
@@ -51,6 +90,9 @@ jobs:
check-schema-delta:
runs-on: ubuntu-latest
+ needs: changes
+ if: ${{ needs.changes.outputs.linting == 'true' }}
+
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
@@ -70,6 +112,9 @@ jobs:
lint:
runs-on: ubuntu-latest
+ needs: changes
+ if: ${{ needs.changes.outputs.linting == 'true' }}
+
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -92,6 +137,9 @@ jobs:
lint-mypy:
runs-on: ubuntu-latest
name: Typechecking
+ needs: changes
+ if: ${{ needs.changes.outputs.linting == 'true' }}
+
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -149,6 +197,9 @@ jobs:
lint-pydantic:
runs-on: ubuntu-latest
+ needs: changes
+ if: ${{ needs.changes.outputs.linting == 'true' }}
+
steps:
- uses: actions/checkout@v4
with:
@@ -250,8 +301,10 @@ jobs:
sytest_test_matrix: ${{ steps.get-matrix.outputs.sytest_test_matrix }}
trial:
- if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
- needs: calculate-test-jobs
+ 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:
@@ -306,8 +359,10 @@ jobs:
trial-olddeps:
# Note: sqlite only; no postgres
- if: ${{ !cancelled() && !failure() }} # Allow previous steps to be skipped, but not fail
- needs: linting-done
+ 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
@@ -362,8 +417,10 @@ jobs:
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: linting-done
+ if: ${{ contains(github.ref, 'pypy') && !failure() && !cancelled() && needs.changes.outputs.trial == 'true' }}
+ needs:
+ - linting-done
+ - changes
runs-on: ubuntu-latest
strategy:
matrix:
@@ -394,8 +451,10 @@ jobs:
|| true
sytest:
- if: ${{ !failure() && !cancelled() }}
- needs: calculate-test-jobs
+ 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 }}
@@ -476,8 +535,10 @@ jobs:
portdb:
- if: ${{ !failure() && !cancelled() }} # Allow previous steps to be skipped, but not fail
- needs: linting-done
+ if: ${{ !failure() && !cancelled() && needs.changes.outputs.linting == 'true' }} # Allow previous steps to be skipped, but not fail
+ needs:
+ - linting-done
+ - changes
runs-on: ubuntu-latest
strategy:
matrix:
@@ -537,8 +598,10 @@ jobs:
schema_diff
complement:
- if: "${{ !failure() && !cancelled() }}"
- needs: linting-done
+ if: "${{ !failure() && !cancelled() && needs.changes.outputs.integration == 'true' }}"
+ needs:
+ - linting-done
+ - changes
runs-on: ubuntu-latest
strategy:
@@ -632,9 +695,14 @@ jobs:
with:
needs: ${{ toJSON(needs) }}
- # The newsfile and signoff lints may be skipped on non PR builds
- # Cargo test is skipped if there is no changes on Rust code
+ # Various bits are skipped if there was no applicable changes.
+ # The newsfile and signoff lint may be skipped on non PR builds.
skippable: |
+ trial
+ trial-olddeps
+ sytest
+ portdb
+ complement
check-signoff
lint-newsfile
cargo-test
|