Skip to content

Commit def854b

Browse files
serpentbladeclaude
andcommitted
ci: add Solid + Lit matrix workflows
React/Vue/Svelte/Angular each had a dedicated `*-matrix.yml` workflow that built the workspace, ran the per-target unit suites, and exercised the consumer demo's typecheck + build + Playwright e2e against a small framework-version matrix. Solid and Lit shipped later as targets 5 and 6 and never got the parallel workflow, leaving CI-dark: - 38 per-target test files (`@rozie/target-{solid,lit}` — snapshot suites that drift on every emitter change) - 14 runtime suites (`@rozie/runtime-{solid,lit}`) - The two consumer demos' typecheck, build, and e2e Only the Visual Regression matrix (which renders all 6 targets) exercised them at all — pixel-only coverage, no behavioural assertions. Both workflows mirror svelte-matrix.yml's shape: build all packages, run `core + target-<x> + runtime-<x> + unplugin` vitest, then override the matrix's framework version in the demo, re-install, typecheck, build, install Playwright, run e2e, upload report on failure. Matrices: - solid-matrix: solid-js ~1.8 (runtime-solid's peer-dep floor) + ~1.9 (the line the demo and @rozie/target-solid pin). Single Vite — the demo pins vite ^6. - lit-matrix: lit ~3.2 (universal pinned floor) + ~3 (latest 3.x). Single Vite. The lit-vanilla demo is plain Vite + @rozie/unplugin, so the meaningful axis is the Lit line itself. `push: [main]` runs on every push (no path filter), so any `packages/core/**` emitter change re-exercises Solid and Lit — exactly the drift these workflows are here to catch. Pre-flight: local validation surfaced three pre-existing, CI-dark e2e failures that are also fixed in this push (parent commits `5912061` runtime-lit notifyPropertyWrite dispatch + `140c579` Dropdown demo-page z-fight) so the workflows can land green on their first CI run. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 140c579 commit def854b

2 files changed

Lines changed: 211 additions & 0 deletions

File tree

.github/workflows/lit-matrix.yml

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
name: Lit 3.2 + 3.x Matrix
2+
3+
# Per-target CI for the Lit compile target.
4+
#
5+
# The cross-framework matrix workflows previously covered only
6+
# React/Vue/Svelte/Angular — the "core four". Solid and Lit shipped later as
7+
# targets 5 and 6 and never got dedicated workflows, leaving their per-target
8+
# unit suites and consumer demos CI-dark: only the Visual Regression matrix
9+
# (which renders all six targets) exercised them at all.
10+
#
11+
# This workflow closes the Lit half of that gap. It mirrors svelte-matrix.yml:
12+
# build the workspace, run the Lit target + runtime + unplugin unit suites,
13+
# then build the lit-vanilla demo and run its Playwright e2e.
14+
#
15+
# Matrix: lit ~3.2 (the line every package pins as its floor) + ~3 (latest
16+
# 3.x). The lit-vanilla demo is plain Vite + @rozie/unplugin (no framework
17+
# Vite plugin), so the meaningful axis is the Lit line itself. Single Vite —
18+
# the demo pins vite ^6.
19+
#
20+
# `push: [main]` runs on every push (no path filter) so a `packages/core/**`
21+
# emitter change always re-exercises Lit even when nothing under
22+
# packages/targets/lit changed — the drift the matrix is here to catch.
23+
24+
on:
25+
pull_request:
26+
paths:
27+
- 'packages/targets/lit/**'
28+
- 'packages/runtime/lit/**'
29+
- 'packages/unplugin/**'
30+
- 'packages/core/**'
31+
- 'examples/consumers/lit-vanilla-demo/**'
32+
- '.github/workflows/lit-matrix.yml'
33+
push:
34+
branches: [main]
35+
36+
jobs:
37+
lit-matrix:
38+
runs-on: ubuntu-latest
39+
timeout-minutes: 25
40+
strategy:
41+
fail-fast: false
42+
matrix:
43+
lit-version: ['3.2', '3']
44+
steps:
45+
- uses: actions/checkout@v6
46+
47+
- uses: pnpm/action-setup@v6
48+
49+
- uses: actions/setup-node@v6
50+
with:
51+
node-version: 20
52+
cache: pnpm
53+
54+
- name: Install dependencies
55+
run: pnpm install --frozen-lockfile
56+
57+
- name: Cache turbo build output
58+
uses: actions/cache@v5
59+
with:
60+
path: .turbo
61+
key: ${{ runner.os }}-turbo-${{ github.job }}-${{ github.sha }}
62+
restore-keys: |
63+
${{ runner.os }}-turbo-${{ github.job }}-
64+
${{ runner.os }}-turbo-
65+
66+
# Build the whole workspace via turbo. The swipe canary's emit tests
67+
# import every target's dist/ and the dts-identity test reads every
68+
# target's dist/index.d.mts — so all 6 targets must be built even on a
69+
# Lit-only CI run.
70+
- name: Build all packages
71+
run: pnpm turbo run build
72+
73+
- name: Run unit tests (core + target-lit + runtime-lit + unplugin)
74+
run: |
75+
pnpm exec vitest run --root packages/core
76+
pnpm exec vitest run --root packages/targets/lit
77+
pnpm exec vitest run --root packages/runtime/lit
78+
pnpm exec vitest run --root packages/unplugin
79+
80+
- name: Override Lit version for the demo
81+
working-directory: examples/consumers/lit-vanilla-demo
82+
run: pnpm add lit@~${{ matrix.lit-version }}
83+
84+
- name: Re-install with version override
85+
run: pnpm install --no-frozen-lockfile
86+
87+
- name: Typecheck demo
88+
run: pnpm --filter lit-vanilla-demo run typecheck
89+
90+
- name: Build demo
91+
run: pnpm --filter lit-vanilla-demo run build
92+
93+
- name: Install Playwright Chromium
94+
run: pnpm --filter lit-vanilla-demo run test:e2e:install
95+
96+
- name: Run Playwright e2e tests
97+
run: pnpm --filter lit-vanilla-demo run test:e2e
98+
99+
- name: Upload Playwright HTML report on failure
100+
if: failure()
101+
uses: actions/upload-artifact@v7
102+
with:
103+
name: playwright-report-lit-${{ matrix.lit-version }}
104+
path: examples/consumers/lit-vanilla-demo/playwright-report
105+
retention-days: 7

.github/workflows/solid-matrix.yml

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
name: Solid 1.8 + 1.9 Matrix
2+
3+
# Per-target CI for the Solid compile target.
4+
#
5+
# The cross-framework matrix workflows previously covered only
6+
# React/Vue/Svelte/Angular — the "core four". Solid and Lit shipped later as
7+
# targets 5 and 6 and never got dedicated workflows, leaving their per-target
8+
# unit suites and consumer demos CI-dark: only the Visual Regression matrix
9+
# (which renders all six targets) exercised them at all.
10+
#
11+
# This workflow closes the Solid half of that gap. It mirrors
12+
# svelte-matrix.yml: build the workspace, run the Solid target + runtime +
13+
# unplugin unit suites, then build the solid-vite demo and run its Playwright
14+
# e2e against both supported solid-js lines.
15+
#
16+
# Matrix: solid-js 1.8 (runtime-solid's declared peer-dep floor) + 1.9 (the
17+
# line the demo and @rozie/target-solid pin). Single Vite — the demo pins
18+
# vite ^6 and vite-plugin-solid 2.11 drives the JSX transform; a Vite-version
19+
# axis is deferred (Solid breakage does not live there).
20+
#
21+
# `push: [main]` runs on every push (no path filter) so a `packages/core/**`
22+
# emitter change always re-exercises Solid even when nothing under
23+
# packages/targets/solid changed — the drift the matrix is here to catch.
24+
25+
on:
26+
pull_request:
27+
paths:
28+
- 'packages/targets/solid/**'
29+
- 'packages/runtime/solid/**'
30+
- 'packages/unplugin/**'
31+
- 'packages/core/**'
32+
- 'examples/consumers/solid-vite/**'
33+
- '.github/workflows/solid-matrix.yml'
34+
push:
35+
branches: [main]
36+
37+
jobs:
38+
solid-matrix:
39+
runs-on: ubuntu-latest
40+
timeout-minutes: 25
41+
strategy:
42+
fail-fast: false
43+
matrix:
44+
solid-version: ['1.8', '1.9']
45+
steps:
46+
- uses: actions/checkout@v6
47+
48+
- uses: pnpm/action-setup@v6
49+
50+
- uses: actions/setup-node@v6
51+
with:
52+
node-version: 20
53+
cache: pnpm
54+
55+
- name: Install dependencies
56+
run: pnpm install --frozen-lockfile
57+
58+
- name: Cache turbo build output
59+
uses: actions/cache@v5
60+
with:
61+
path: .turbo
62+
key: ${{ runner.os }}-turbo-${{ github.job }}-${{ github.sha }}
63+
restore-keys: |
64+
${{ runner.os }}-turbo-${{ github.job }}-
65+
${{ runner.os }}-turbo-
66+
67+
# Build the whole workspace via turbo. The swipe canary's emit tests
68+
# import every target's dist/ and the dts-identity test reads every
69+
# target's dist/index.d.mts — so all 6 targets must be built even on a
70+
# Solid-only CI run.
71+
- name: Build all packages
72+
run: pnpm turbo run build
73+
74+
- name: Run unit tests (core + target-solid + runtime-solid + unplugin)
75+
run: |
76+
pnpm exec vitest run --root packages/core
77+
pnpm exec vitest run --root packages/targets/solid
78+
pnpm exec vitest run --root packages/runtime/solid
79+
pnpm exec vitest run --root packages/unplugin
80+
81+
- name: Override Solid version for the demo
82+
working-directory: examples/consumers/solid-vite
83+
run: pnpm add solid-js@~${{ matrix.solid-version }}
84+
85+
- name: Re-install with version override
86+
run: pnpm install --no-frozen-lockfile
87+
88+
- name: Typecheck demo
89+
run: pnpm --filter solid-vite-demo run typecheck
90+
91+
- name: Build demo
92+
run: pnpm --filter solid-vite-demo run build
93+
94+
- name: Install Playwright Chromium
95+
run: pnpm --filter solid-vite-demo run test:e2e:install
96+
97+
- name: Run Playwright e2e tests
98+
run: pnpm --filter solid-vite-demo run test:e2e
99+
100+
- name: Upload Playwright HTML report on failure
101+
if: failure()
102+
uses: actions/upload-artifact@v7
103+
with:
104+
name: playwright-report-solid-${{ matrix.solid-version }}
105+
path: examples/consumers/solid-vite/playwright-report
106+
retention-days: 7

0 commit comments

Comments
 (0)