Skip to content

Commit 18e49cb

Browse files
jrusso1020claude
andcommitted
ci: fast-fail regression matrix + preflight gate before expensive jobs
Don't burn 60+ runner-minutes on regression shards, perf shards, preview-parity, Windows renders, or catalog-preview renders when the PR is already failing lint or format. - regression: matrix fail-fast: false → true (first failing shard cancels the rest), plus a new preflight (lint + format:check) job gating regression-shards. - player-perf: matrix fail-fast → true, plus preflight gate. - preview-regression, windows-render, catalog-previews: preflight gate added; heavy jobs now needs: [..., preflight]. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4fd9520 commit 18e49cb

5 files changed

Lines changed: 88 additions & 7 deletions

File tree

.github/workflows/catalog-previews.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,23 @@ concurrency:
1717
cancel-in-progress: true
1818

1919
jobs:
20+
preflight:
21+
name: Preflight (lint + format)
22+
runs-on: ubuntu-latest
23+
timeout-minutes: 5
24+
steps:
25+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
26+
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
27+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
28+
with:
29+
node-version: 22
30+
- run: bun install --frozen-lockfile
31+
- run: bun run lint
32+
- run: bun run format:check
33+
2034
render-previews:
2135
name: Render catalog previews
36+
needs: preflight
2237
runs-on: ubuntu-latest
2338
timeout-minutes: 30
2439
steps:

.github/workflows/player-perf.yml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,30 @@ jobs:
3737
- "bun.lock"
3838
- ".github/workflows/player-perf.yml"
3939
40+
preflight:
41+
name: Preflight (lint + format)
42+
needs: changes
43+
if: needs.changes.outputs.perf == 'true'
44+
runs-on: ubuntu-latest
45+
timeout-minutes: 5
46+
steps:
47+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
48+
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
49+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
50+
with:
51+
node-version: 22
52+
- run: bun install --frozen-lockfile
53+
- run: bun run lint
54+
- run: bun run format:check
55+
4056
perf-shards:
4157
name: "Perf: ${{ matrix.shard }}"
42-
needs: changes
58+
needs: [changes, preflight]
4359
if: needs.changes.outputs.perf == 'true'
4460
runs-on: ubuntu-latest
4561
timeout-minutes: 20
4662
strategy:
47-
fail-fast: false
63+
fail-fast: true
4864
matrix:
4965
include:
5066
- shard: load

.github/workflows/preview-regression.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,25 @@ jobs:
4141
- "bun.lock"
4242
- ".github/workflows/preview-regression.yml"
4343
44+
preflight:
45+
name: Preflight (lint + format)
46+
needs: changes
47+
if: needs.changes.outputs.preview == 'true'
48+
runs-on: ubuntu-latest
49+
timeout-minutes: 5
50+
steps:
51+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
52+
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
53+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
54+
with:
55+
node-version: 22
56+
- run: bun install --frozen-lockfile
57+
- run: bun run lint
58+
- run: bun run format:check
59+
4460
preview-parity:
4561
name: Preview parity
46-
needs: changes
62+
needs: [changes, preflight]
4763
if: needs.changes.outputs.preview == 'true'
4864
runs-on: ubuntu-latest
4965
timeout-minutes: 20

.github/workflows/regression.yml

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,29 @@ jobs:
3434
- "packages/engine/**"
3535
- "Dockerfile*"
3636
37-
regression-shards:
37+
preflight:
38+
name: Preflight (lint + format)
3839
needs: changes
3940
if: needs.changes.outputs.code == 'true'
4041
runs-on: ubuntu-latest
42+
timeout-minutes: 5
43+
steps:
44+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
45+
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
46+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
47+
with:
48+
node-version: 22
49+
- run: bun install --frozen-lockfile
50+
- run: bun run lint
51+
- run: bun run format:check
52+
53+
regression-shards:
54+
needs: [changes, preflight]
55+
if: needs.changes.outputs.code == 'true'
56+
runs-on: ubuntu-latest
4157
timeout-minutes: 60
4258
strategy:
43-
fail-fast: false
59+
fail-fast: true
4460
matrix:
4561
# Shards are bin-packed by measured per-test duration (LPT heuristic on
4662
# CI run 25893372795) so each row carries ~15-16 min of work. When a

.github/workflows/windows-render.yml

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,27 @@ jobs:
5757
- "bun.lock"
5858
- ".github/workflows/windows-render.yml"
5959
60+
preflight:
61+
name: Preflight (lint + format)
62+
needs: changes
63+
if: needs.changes.outputs.code == 'true' || github.event_name == 'workflow_dispatch'
64+
runs-on: ubuntu-latest
65+
timeout-minutes: 5
66+
steps:
67+
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
68+
with:
69+
ref: ${{ github.event.inputs.ref }}
70+
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2
71+
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
72+
with:
73+
node-version: 22
74+
- run: bun install --frozen-lockfile
75+
- run: bun run lint
76+
- run: bun run format:check
77+
6078
render-windows:
6179
name: Render on windows-latest
62-
needs: changes
80+
needs: [changes, preflight]
6381
if: needs.changes.outputs.code == 'true' || github.event_name == 'workflow_dispatch'
6482
runs-on: windows-latest
6583
timeout-minutes: 30
@@ -344,7 +362,7 @@ jobs:
344362
# -------------------------------------------------------------------
345363
test-windows:
346364
name: Tests on windows-latest
347-
needs: changes
365+
needs: [changes, preflight]
348366
if: needs.changes.outputs.code == 'true' || github.event_name == 'workflow_dispatch'
349367
runs-on: windows-latest
350368
timeout-minutes: 20

0 commit comments

Comments
 (0)