Skip to content

Commit 45dcc27

Browse files
committed
fix: skip heavy CI jobs when only workflow files change
Adds a changes detection job using dorny/paths-filter so lint, test, and security jobs only run when packages/parser-core or packages/parser-free source files are actually modified. Workflow-only PRs now complete with just the changes + ci-pass jobs.
1 parent beeb4ee commit 45dcc27

1 file changed

Lines changed: 33 additions & 2 deletions

File tree

.github/workflows/ci.yml

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# CI/CD Pipeline — bankstatementprocessor monorepo
22
#
33
# Jobs (all lint jobs run in parallel):
4+
# changes — detect which paths changed (skips heavy jobs on workflow-only PRs)
45
# lint-core — black, isort, flake8, mypy on packages/parser-core
56
# lint-free — black, isort, flake8 on packages/parser-free
67
# security — bandit + safety on both packages
@@ -46,13 +47,39 @@ permissions:
4647
actions: read
4748

4849
# ---------------------------------------------------------------------------
49-
# Lint jobs (all parallel)
50+
# Jobs
5051
# ---------------------------------------------------------------------------
5152
jobs:
53+
# Detect which paths changed so downstream jobs can skip when irrelevant
54+
changes:
55+
name: Detect changed paths
56+
runs-on: ubuntu-latest
57+
permissions:
58+
pull-requests: read
59+
contents: read
60+
outputs:
61+
core: ${{ steps.filter.outputs.core }}
62+
free: ${{ steps.filter.outputs.free }}
63+
any-src: ${{ steps.filter.outputs.any-src }}
64+
steps:
65+
- uses: actions/checkout@v6
66+
- uses: dorny/paths-filter@v3
67+
id: filter
68+
with:
69+
filters: |
70+
core:
71+
- 'packages/parser-core/**'
72+
free:
73+
- 'packages/parser-free/**'
74+
any-src:
75+
- 'packages/**'
76+
5277
lint-core:
5378
name: Lint — parser-core
5479
runs-on: ubuntu-latest
5580
timeout-minutes: 10
81+
needs: changes
82+
if: needs.changes.outputs.core == 'true'
5683
defaults:
5784
run:
5885
working-directory: packages/parser-core
@@ -102,6 +129,8 @@ jobs:
102129
name: Lint — parser-free
103130
runs-on: ubuntu-latest
104131
timeout-minutes: 10
132+
needs: changes
133+
if: needs.changes.outputs.free == 'true'
105134
defaults:
106135
run:
107136
working-directory: packages/parser-free
@@ -140,6 +169,8 @@ jobs:
140169
name: Security — bandit + safety
141170
runs-on: ubuntu-latest
142171
timeout-minutes: 10
172+
needs: changes
173+
if: needs.changes.outputs.any-src == 'true'
143174

144175
steps:
145176
- uses: actions/checkout@v6
@@ -282,7 +313,7 @@ jobs:
282313
name: CI Pass
283314
runs-on: ubuntu-latest
284315
if: always()
285-
needs: [lint-core, lint-free, security, test-core, test-free]
316+
needs: [changes, lint-core, lint-free, security, test-core, test-free]
286317
steps:
287318
- name: Check all jobs passed
288319
run: |

0 commit comments

Comments
 (0)