Skip to content

Commit 7ddd939

Browse files
ci: run only github actions affected by PR (#5402)
https://coveord.atlassian.net/browse/KIT-4301 Using a NX command, we can determine what projects are affected by the files changed. We can then add a condition to every github action that will check if one of its dependant project is affected. Example : This typedoc action builds typedoc for headless & headless-react. If one of those is in the projects affected, it will run it. If not, it will skip it. ``` typedoc: name: 'Build typedoc' needs: affected if: contains(needs.affected.outputs.projects, 'headless') || contains(needs.affected.outputs.projects, 'headless-react') ``` **Please review each action to make sure it has the right projects in the condition.**
1 parent 2a0d833 commit 7ddd939

File tree

3 files changed

+60
-133
lines changed

3 files changed

+60
-133
lines changed

.github/workflows/prbot.yml

Lines changed: 60 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,29 @@ jobs:
103103
- uses: ./.github/actions/build
104104
with:
105105
cache-suffix: 'cdn'
106+
affected:
107+
name: 'Determine affected projects'
108+
runs-on: ubuntu-latest
109+
needs: build
110+
outputs:
111+
projects: ${{ steps.set.outputs.projects }}
112+
steps:
113+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
114+
with:
115+
fetch-depth: 0
116+
- uses: ./.github/actions/setup
117+
- name: Get affected projects
118+
id: set
119+
run: |
120+
AFFECTED=$(npx nx show projects --affected --base=origin/master | tr '\n' ' ')
121+
echo "projects=$AFFECTED" >> "$GITHUB_OUTPUT"
122+
- name: Log affected projects
123+
run: |
124+
echo "Affected projects: ${{ steps.set.outputs.projects }}"
106125
cdn-checks:
107126
name: 'CDN Checks'
108-
needs: build-cdn
127+
needs: [affected, build-cdn]
128+
if: contains(needs.affected.outputs.projects, 'atomic') || contains(needs.affected.outputs.projects, 'headless-commerce-react-samples') || contains(needs.affected.outputs.projects, 'atomic-hosted-page')
109129
env:
110130
DEPLOYMENT_ENVIRONMENT: CDN
111131
runs-on: ubuntu-latest
@@ -149,10 +169,12 @@ jobs:
149169
egress-policy: audit
150170

151171
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
172+
with:
173+
fetch-depth: 0
152174
- uses: ./.github/actions/setup
153175
- name: Install Playwright Browsers
154176
run: npx playwright install --with-deps
155-
- run: npm test
177+
- run: npx nx affected --target=test --base=origin/master --head=HEAD
156178
package-compatibility:
157179
name: 'Verify compatibility of packages'
158180
needs: build
@@ -168,7 +190,8 @@ jobs:
168190
- run: npm run package-compatibility
169191
typedoc:
170192
name: 'Build typedoc'
171-
needs: build
193+
needs: affected
194+
if: contains(needs.affected.outputs.projects, 'headless') || contains(needs.affected.outputs.projects, 'headless-react')
172195
runs-on: ubuntu-latest
173196
steps:
174197
- name: Harden Runner
@@ -184,27 +207,10 @@ jobs:
184207
- name: 'Build headless-react typedoc'
185208
run: npm run build:typedoc
186209
working-directory: packages/headless-react
187-
should-e2e-atomic:
188-
name: 'Should e2e test Atomic?'
189-
needs: build
190-
runs-on: ubuntu-latest
191-
outputs:
192-
changesOnlyInQuantic: ${{ steps.shouldRunAtomice2e.outputs.changesOnlyInQuantic }}
193-
steps:
194-
- name: Harden Runner
195-
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
196-
with:
197-
egress-policy: audit
198-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
199-
with:
200-
fetch-depth: 0
201-
- uses: ./.github/actions/setup
202-
- run: node ./scripts/ci/everyFilesChangedMatchPatterns.mjs changesOnlyInQuantic 'packages/quantic/**/*'
203-
id: shouldRunAtomice2e
204210
e2e-atomic-csp-test:
205211
name: 'Run e2e tests on Atomic CSP'
206-
needs: should-e2e-atomic
207-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
212+
needs: affected
213+
if: contains(needs.affected.outputs.projects, 'atomic')
208214
runs-on: ubuntu-latest
209215
steps:
210216
- name: Harden Runner
@@ -217,8 +223,8 @@ jobs:
217223
- uses: ./.github/actions/e2e-atomic-csp
218224
prepare-playwright-atomic:
219225
name: 'Determine Playwright E2E tests to run'
220-
needs: should-e2e-atomic
221-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
226+
needs: affected
227+
if: contains(needs.affected.outputs.projects, 'atomic')
222228
runs-on: ubuntu-latest
223229
env:
224230
maximumShards: 12
@@ -315,8 +321,8 @@ jobs:
315321
copy: true
316322
playwright-atomic-theming:
317323
name: 'Run theming smoke tests for Atomic'
318-
needs: should-e2e-atomic
319-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
324+
needs: affected
325+
if: contains(needs.affected.outputs.projects, 'atomic')
320326
runs-on: ubuntu-latest
321327
steps:
322328
- name: Harden Runner
@@ -330,8 +336,8 @@ jobs:
330336
- uses: ./.github/actions/playwright-atomic-theming
331337
e2e-atomic-test:
332338
name: 'Run e2e tests on Atomic'
333-
needs: should-e2e-atomic
334-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
339+
needs: affected
340+
if: contains(needs.affected.outputs.projects, 'atomic')
335341
runs-on: ubuntu-latest
336342
strategy:
337343
fail-fast: false
@@ -384,8 +390,8 @@ jobs:
384390
SPLIT_INDEX: ${{ strategy.job-index }}
385391
e2e-atomic-screenshots:
386392
name: 'Run e2e screenshots tests on Atomic'
387-
needs: should-e2e-atomic
388-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
393+
needs: affected
394+
if: contains(needs.affected.outputs.projects, 'atomic')
389395
runs-on: ubuntu-latest
390396
steps:
391397
- name: Harden Runner
@@ -398,8 +404,8 @@ jobs:
398404
- uses: ./.github/actions/e2e-atomic-screenshots
399405
e2e-atomic-react-test:
400406
name: 'Run e2e tests on Atomic React'
401-
needs: should-e2e-atomic
402-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
407+
needs: affected
408+
if: contains(needs.affected.outputs.projects, 'atomic-react-samples')
403409
runs-on: ubuntu-latest
404410
steps:
405411
- name: Harden Runner
@@ -412,8 +418,8 @@ jobs:
412418
- uses: ./.github/actions/e2e-atomic-react
413419
e2e-atomic-react-nextjs-test:
414420
name: 'Run e2e tests on Atomic React NextJS'
415-
needs: should-e2e-atomic
416-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
421+
needs: affected
422+
if: contains(needs.affected.outputs.projects, 'atomic-next-samples')
417423
runs-on: ubuntu-latest
418424
steps:
419425
- name: Harden Runner
@@ -426,8 +432,8 @@ jobs:
426432
- uses: ./.github/actions/e2e-atomic-next
427433
e2e-iife-test:
428434
name: 'Run e2e tests for IIFE'
429-
needs: should-e2e-atomic
430-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
435+
needs: affected
436+
if: contains(needs.affected.outputs.projects, 'iife-samples')
431437
runs-on: ubuntu-latest
432438
steps:
433439
- name: Harden Runner
@@ -441,8 +447,8 @@ jobs:
441447
# - uses: ./.github/actions/e2e-iife
442448
e2e-atomic-angular-test:
443449
name: 'Run e2e tests on Atomic Angular'
444-
needs: should-e2e-atomic
445-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
450+
needs: affected
451+
if: contains(needs.affected.outputs.projects, 'atomic-angular-samples')
446452
runs-on: ubuntu-latest
447453
steps:
448454
- name: Harden Runner
@@ -455,8 +461,8 @@ jobs:
455461
- uses: ./.github/actions/e2e-atomic-angular
456462
e2e-atomic-vuejs-test:
457463
name: 'Run e2e tests on Vue.js sample'
458-
needs: should-e2e-atomic
459-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
464+
needs: affected
465+
if: contains(needs.affected.outputs.projects, 'atomic-vuejs-samples')
460466
runs-on: ubuntu-latest
461467
steps:
462468
- name: Harden Runner
@@ -469,8 +475,8 @@ jobs:
469475
- uses: ./.github/actions/e2e-vuejs
470476
e2e-atomic-stencil-test:
471477
name: 'Run e2e tests on Stencil.js sample'
472-
needs: should-e2e-atomic
473-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
478+
needs: affected
479+
if: contains(needs.affected.outputs.projects, 'atomic-stencil-samples')
474480
runs-on: ubuntu-latest
475481
steps:
476482
- name: Harden Runner
@@ -483,8 +489,8 @@ jobs:
483489
- uses: ./.github/actions/e2e-stencil
484490
playwright-atomic-hosted-page-test:
485491
name: 'Run e2e tests for Atomic Hosted Page'
486-
needs: should-e2e-atomic
487-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
492+
needs: affected
493+
if: contains(needs.affected.outputs.projects, 'atomic-hosted-page')
488494
runs-on: ubuntu-latest
489495
steps:
490496
- name: Harden Runner
@@ -498,8 +504,8 @@ jobs:
498504
- uses: ./.github/actions/playwright-atomic-hosted-pages
499505
playwright-headless-ssr-commerce:
500506
name: 'Run e2e tests for Headless Commerce SSR'
501-
needs: should-e2e-atomic
502-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
507+
needs: affected
508+
if: contains(needs.affected.outputs.projects, 'headless-ssr-commerce-samples')
503509
runs-on: ubuntu-latest
504510
steps:
505511
- name: Harden Runner
@@ -513,8 +519,8 @@ jobs:
513519
- uses: ./.github/actions/playwright-headless-ssr-commerce-nextjs
514520
e2e-atomic-insight-panel-test:
515521
name: 'Run e2e tests on Atomic insight panel'
516-
needs: should-e2e-atomic
517-
if: ${{ needs.should-e2e-atomic.outputs.changesOnlyInQuantic == 'false' }}
522+
needs: affected
523+
if: contains(needs.affected.outputs.projects, 'atomic')
518524
runs-on: ubuntu-latest
519525
steps:
520526
- name: Harden Runner
@@ -527,7 +533,8 @@ jobs:
527533
- uses: ./.github/actions/e2e-atomic-insight-panel
528534
e2e-headless-ssr-test-app:
529535
name: 'Run e2e tests on Headless SSR App router sample'
530-
needs: build
536+
needs: affected
537+
if: contains(needs.affected.outputs.projects, 'headless-ssr-samples-app-router')
531538
runs-on: ubuntu-latest
532539
steps:
533540
- name: Harden Runner
@@ -540,7 +547,8 @@ jobs:
540547
- uses: ./.github/actions/e2e-headless-ssr-app
541548
e2e-headless-ssr-test-pages:
542549
name: 'Run e2e tests on Headless SSR Pages router sample'
543-
needs: build
550+
needs: affected
551+
if: contains(needs.affected.outputs.projects, 'headless-ssr-samples-pages-router')
544552
runs-on: ubuntu-latest
545553
steps:
546554
- name: Harden Runner
@@ -551,28 +559,10 @@ jobs:
551559
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
552560
- uses: ./.github/actions/setup
553561
- uses: ./.github/actions/e2e-headless-ssr-pages
554-
should-e2e-quantic:
555-
name: 'Should test Quantic?'
556-
needs: build
557-
runs-on: ubuntu-latest
558-
outputs:
559-
shouldRunQuantic: ${{ steps.shouldRunQuantic.outputs.shouldRunQuantic }}
560-
steps:
561-
- name: Harden Runner
562-
uses: step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
563-
with:
564-
egress-policy: audit
565-
566-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
567-
with:
568-
fetch-depth: 0
569-
- uses: ./.github/actions/setup
570-
- run: node ./scripts/ci/someFilesChangedInPatterns.mjs shouldRunQuantic 'packages/quantic/**/*' 'packages/headless/**/*' 'packages/bueno/**/*' package.json package-lock.json
571-
id: shouldRunQuantic
572562
e2e-quantic:
573563
name: 'Run Quantic E2E tests'
574-
needs: should-e2e-quantic
575-
if: ${{ needs.should-e2e-quantic.outputs.shouldRunQuantic == 'true' }}
564+
needs: affected
565+
if: contains(needs.affected.outputs.projects, 'quantic')
576566
uses: ./.github/workflows/e2e-quantic.yml
577567
secrets:
578568
SFDX_AUTH_CLIENT_ID: ${{ secrets.SFDX_AUTH_CLIENT_ID }}

scripts/ci/everyFilesChangedMatchPatterns.mjs

Lines changed: 0 additions & 33 deletions
This file was deleted.

scripts/ci/someFilesChangedInPatterns.mjs

Lines changed: 0 additions & 30 deletions
This file was deleted.

0 commit comments

Comments
 (0)