Skip to content

Commit 381990a

Browse files
committed
chore(ci): trigger CI on feature-branch pushes + Windows runner matrix
Pre-this-commit state: CI ran only on push to main or PR-to-main. So a feature branch could be broken for the entire review window before anyone noticed — the only signal a branch was unmergeable was a red check on the PR, which is too late to fix cheaply. Pre-this-commit CI matrix was also a single point (ubuntu + Node 22). That hides the Windows-specific EPERM failures CLAUDE.md already documents, and skips the Node 20 LTS we still promise in engines. Changes: - on.push branches: adds feat/**, fix/**, chore/**, release/**, docs/** so CI runs on every push to a working branch, not just on PR-time. Failures surface within minutes, not at merge time. - matrix.os: ubuntu-latest + windows-latest. Linux is gating (continue-on-error: false on ubuntu); Windows is advisory so the known pre-existing Windows-only EPERM quirks don't block PRs. - matrix.node-version: 20 + 22, matching engines.node >=20.0.0 <25.0.0. The previous matrix had only 22 — Node 20 was untested. - exclude: drop Windows on Node 20. The matrix stays informative (Linux-20, Linux-22, Windows-22) without doubling the per-PR cost. fail-fast stays false so one failing cell doesn't cancel its peers. The 'build + vitest' and the 'extract-vba-realfixtures' e2e steps are unchanged.
1 parent e766d9a commit 381990a

1 file changed

Lines changed: 35 additions & 5 deletions

File tree

.github/workflows/ci.yml

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,53 @@
11
name: CI
22

3+
# Trigger on every push to a feature branch + every PR to main. Without
4+
# the feature-branch push trigger, CI never runs for in-flight branches and
5+
# the only signal a branch is broken is "wait until PR time and see it
6+
# fail" — too late to fix cheaply. The branch list intentionally mirrors
7+
# the conventional-commit prefixes we use, so `chore/*`, `release/*`,
8+
# and `docs/*` all pick up CI too.
39
on:
410
pull_request:
511
branches: [main]
612
push:
7-
branches: [main]
13+
branches:
14+
- main
15+
- 'feat/**'
16+
- 'fix/**'
17+
- 'chore/**'
18+
- 'release/**'
19+
- 'docs/**'
820

921
concurrency:
1022
group: ${{ github.workflow }}-${{ github.ref }}
1123
cancel-in-progress: true
1224

1325
jobs:
1426
test:
15-
name: build + vitest (Node ${{ matrix.node-version }})
16-
runs-on: ubuntu-latest
27+
name: build + vitest (Node ${{ matrix.node-version }}, ${{ matrix.os }})
28+
runs-on: ${{ matrix.os }}
1729
strategy:
1830
fail-fast: false
1931
matrix:
20-
node-version: [22]
32+
# Match the engines field: >=20.0.0 <25.0.0. 22 is the active LTS,
33+
# 20 is the previous LTS we still promise. We don't add 24 here
34+
# because Node 24 changed sqlite bindings and we want the matrix
35+
# to reflect supported configurations, not chase the latest.
36+
node-version: [20, 22]
37+
# Linux is the gating runner — every PR must pass it. Windows is
38+
# advisory: certain tests have pre-existing Windows-only EPERM
39+
# failures documented in CLAUDE.md, so we don't block PRs on it.
40+
# continue-on-error handles the inverse: a Linux failure still
41+
# fails the PR, but a Windows-only failure shows up as a yellow
42+
# check rather than red.
43+
os: [ubuntu-latest, windows-latest]
44+
exclude:
45+
# Reduce CI minutes by running Windows only on the active LTS.
46+
# Windows on Node 20 would mostly test "did Windows break again"
47+
# without telling us anything Node 22 doesn't already.
48+
- os: windows-latest
49+
node-version: 20
50+
continue-on-error: ${{ matrix.os == 'windows-latest' }}
2151
steps:
2252
- name: Checkout
2353
uses: actions/checkout@v4
@@ -44,4 +74,4 @@ jobs:
4474
run: pnpm test
4575

4676
- name: Run E2E regression (extract-vba-realfixtures)
47-
run: pnpm exec vitest run __tests__/extraction-vba-realfixtures.test.ts
77+
run: pnpm exec vitest run __tests__/extraction-vba-realfixtures.test.ts

0 commit comments

Comments
 (0)