2525 required : false
2626 type : boolean
2727 default : false
28+ force_run :
29+ description : " Force execution even if already successful for this commit"
30+ required : false
31+ type : boolean
32+ default : false
2833 workflow_call :
2934 pull_request :
3035 types : [opened, labeled, reopened, synchronize]
@@ -47,27 +52,11 @@ permissions:
4752 id-token : write
4853
4954jobs :
50- # job 0: skip-check
51- # prevents duplicate workflow runs on same commit hash
52- skip-check :
53- runs-on : ubuntu-latest
54- outputs :
55- should_skip : ${{ steps.skip_check.outputs.should_skip }}
56- steps :
57- - id : skip_check
58- uses : fkirc/skip-duplicate-actions@f75f66ce1886f00957d99748a42c724f4330bdcf # ratchet:fkirc/skip-duplicate-actions@v5
59- with :
60- skip_after_successful_duplicate : ' true'
61- do_not_skip : ' ["schedule"]'
62- concurrent_skipping : ' never'
63- cancel_others : ' false'
64-
6555 # job 1: secrets-scan
6656 # scans repository for hardcoded secrets using gitleaks
67- # ALWAYS runs (ignores skip-check) - security critical
57+ # Security critical - runs for all commits
6858 secrets-scan :
6959 name : gitleaks
70- needs : skip-check
7160 runs-on : ubuntu-latest
7261 if : |
7362 !cancelled() &&
7867 - name : Checkout repository
7968 uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # ratchet:actions/checkout@v4
8069 with :
81- fetch-depth : 0
70+ fetch-depth : 0 # Required for git diff in composite action and comprehensive secret scanning
71+
72+ - name : Check execution cache
73+ id : cache
74+ uses : ./.github/actions/cached-ci-job
75+ with :
76+ force-run : ${{ inputs.force_run || 'false' }}
77+ # No path-filters - security scanning always relevant
8278
8379 - name : Setup Nix
80+ if : steps.cache.outputs.should-run == 'true'
8481 uses : ./.github/actions/setup-nix
8582 env :
8683 SOPS_AGE_KEY : ${{ secrets.SOPS_AGE_KEY }}
@@ -90,13 +87,14 @@ jobs:
9087 enable-cachix : true
9188
9289 - name : Scan for secrets with gitleaks
90+ if : steps.cache.outputs.should-run == 'true'
9391 run : nix develop -c just scan-secrets
9492
9593 # job 2: set-variables
9694 # determines deployment settings and variables based on event type
97- # ALWAYS runs (ignores skip-check) - needed for job routing
95+ # Always runs - needed for production job routing and provides outputs
9896 set-variables :
99- needs : [skip-check, secrets-scan]
97+ needs : [secrets-scan]
10098 runs-on : ubuntu-latest
10199 if : |
102100 !cancelled() &&
@@ -186,10 +184,9 @@ jobs:
186184 strategy :
187185 matrix :
188186 os : [ubuntu-latest]
189- needs : [skip-check , set-variables]
187+ needs : [secrets-scan , set-variables]
190188 if : |
191189 !cancelled() &&
192- needs.skip-check.outputs.should_skip != 'true' &&
193190 needs.set-variables.outputs.skip_ci != 'true' &&
194191 (github.event_name != 'workflow_dispatch' ||
195192 inputs.job == '' ||
@@ -199,7 +196,18 @@ jobs:
199196 cancel-in-progress : true
200197 steps :
201198 - uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # ratchet:actions/checkout@v4
199+ with :
200+ fetch-depth : 0 # Required for git diff in composite action
201+
202+ - name : Check execution cache
203+ id : cache
204+ uses : ./.github/actions/cached-ci-job
205+ with :
206+ path-filters : ' \.nix$|flake\.lock|justfile|packages/.*\.(ts|tsx|js|jsx)|.*\.config\.(ts|js)|package\.json|.*\.lock'
207+ force-run : ${{ inputs.force_run || 'false' }}
208+
202209 - name : Setup Nix
210+ if : steps.cache.outputs.should-run == 'true'
203211 uses : ./.github/actions/setup-nix
204212 env :
205213 SOPS_AGE_KEY : ${{ secrets.SOPS_AGE_KEY }}
@@ -209,31 +217,40 @@ jobs:
209217 enable-cachix : true
210218 cachix-name : ${{ vars.CACHIX_CACHE_NAME }}
211219 cachix-auth-token : ${{ secrets.CACHIX_AUTH_TOKEN }}
220+
212221 - name : Setup tmate debug session
222+ if : steps.cache.outputs.should-run == 'true' && needs.set-variables.outputs.debug == 'true'
213223 uses : mxschmitt/action-tmate@e5c7151931ca95bad1c6f4190c730ecf8c7dde48 # ratchet:mxschmitt/action-tmate@v3
214- if : ${{ needs.set-variables.outputs.debug == 'true' }}
224+
215225 - name : Install omnix
226+ if : steps.cache.outputs.should-run == 'true'
216227 run : nix --accept-flake-config profile install "github:juspay/omnix"
228+
217229 - name : Summarize flake
230+ if : steps.cache.outputs.should-run == 'true'
218231 run : om show .
232+
219233 - name : Run flake CI and push to cachix
234+ if : steps.cache.outputs.should-run == 'true'
220235 env :
221236 SOPS_AGE_KEY : ${{ secrets.SOPS_AGE_KEY }}
222237 run : |
223238 nix develop -c sops exec-env vars/shared.yaml '
224239 om ci run | tee /dev/stderr | cachix push "$CACHIX_CACHE_NAME"
225240 '
226241
242+ # Note: Reusable workflow calls cannot use composite action steps directly
243+ # Per-matrix-element caching happens via GitHub Checks API based on job name: test (package-name)
227244 test :
228- needs : [skip-check , set-variables]
245+ needs : [secrets-scan , set-variables]
229246 if : |
230247 !cancelled() &&
231- needs.skip-check.outputs.should_skip != 'true' &&
232248 needs.set-variables.outputs.skip_ci != 'true' &&
233249 (github.event_name != 'workflow_dispatch' ||
234250 inputs.job == '' ||
235251 inputs.job == 'test')
236252 strategy :
253+ fail-fast : false
237254 matrix :
238255 package : ${{ fromJson(needs.set-variables.outputs.packages) }}
239256 uses : ./.github/workflows/package-test.yaml
@@ -320,7 +337,7 @@ jobs:
320337
321338 # job 5: production-release-packages
322339 # Release packages to production on main/beta branches
323- # IGNORES skip-check but REQUIRES test+nix success/skipped (safe for fast-forward merge)
340+ # Requires test+nix success/skipped (safe for fast-forward merge)
324341 production-release-packages :
325342 needs : [set-variables, test, nix]
326343 if : |
@@ -347,7 +364,7 @@ jobs:
347364
348365 # job 6: production-docs-deploy
349366 # Documentation deployment to production (conditional)
350- # IGNORES skip-check - depends on production-release-packages to ensure packages released first
367+ # Depends on production-release-packages to ensure packages released first
351368 production-docs-deploy :
352369 needs : [set-variables, test, production-release-packages]
353370 if : |
0 commit comments