Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Avoid running CI steps when the files they check have not been changed. #14745

Merged
merged 7 commits into from
Sep 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 82 additions & 14 deletions .github/workflows/tests.yml
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ironically it seems that many of the steps have been skipped on this PR, I wonder if we should include .github/workflows in the list of steps to run most jobs?

Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ jobs:
runs-on: ubuntu-latest
outputs:
clokep marked this conversation as resolved.
Show resolved Hide resolved
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
Expand All @@ -33,9 +36,45 @@ jobs:
- 'rust/**'
- 'Cargo.toml'
- 'Cargo.lock'
clokep marked this conversation as resolved.
Show resolved Hide resolved
- '.rustfmt.toml'

trial:
- 'synapse/**'
- 'tests/**'
- 'rust/**'
- 'Cargo.toml'
- 'Cargo.lock'
- 'pyproject.toml'
- 'poetry.lock'

integration:
- 'synapse/**'
- 'rust/**'
- 'docker/**'
- 'Cargo.toml'
clokep marked this conversation as resolved.
Show resolved Hide resolved
- 'Cargo.lock'
- 'pyproject.toml'
- 'poetry.lock'
- 'docker/**'

linting:
- 'synapse/**'
- 'docker/**'
- 'tests/**'
- 'scripts-dev/**'
- 'contrib/**'
- 'synmark/**'
- 'stubs/**'
- '.ci/**'
- 'mypy.ini'
- 'pyproject.toml'
clokep marked this conversation as resolved.
Show resolved Hide resolved
- 'poetry.lock'

check-sampleconfig:
runs-on: ubuntu-latest
needs: changes
if: ${{ needs.changes.outputs.linting == 'true' }}

steps:
- uses: actions/checkout@v4
- name: Install Rust
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aside: I think the olddeps job doesn't care if poetry.lock changes, only if pyproject.toml does. Not worth the yaml faff to encode that here though!

needs:
- linting-done
- changes
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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 }}
Expand Down Expand Up @@ -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
clokep marked this conversation as resolved.
Show resolved Hide resolved
needs:
- linting-done
- changes
runs-on: ubuntu-latest
strategy:
matrix:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions changelog.d/14745.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Avoid running CI steps when the files they check have not been changed.
Loading