From f6c820eb289de287565db41aeb0e26d7879a12b6 Mon Sep 17 00:00:00 2001 From: maithri471 Date: Mon, 22 Jun 2026 10:35:18 -0400 Subject: [PATCH 1/3] fix(build): repair esbuild TS include so commons .ts transpiles The shared rollup.common.config esbuild plugin gated TS transpilation on the glob `${ROOT}/**/*.ts+(|x)`. That extglob no longer matches .ts files under picomatch 4.x, and CI runs `npm install` (which ignores our yarn.lock), so picomatch floats to 4.x. esbuild therefore silently stopped transpiling TypeScript and every component build failed on the first raw .ts import (commons/src/define-component-patch.ts -> "Unexpected token ... need plugins to import files that are not JavaScript"). Replace the fragile glob with a cwd/picomatch-independent regex /\.tsx?$/. Verified with the repo's exact plugin versions (rollup-plugin-esbuild@4.5.0, esbuild@0.12.15): the old glob reproduces the error, the regex transpiles cleanly. This was masked for a long time because CI's build job died at the deprecated actions/cache@v2 setup gate before ever running `yarn build`. Co-Authored-By: Claude Opus 4.8 (1M context) --- rollup.common.config.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rollup.common.config.js b/rollup.common.config.js index 326bfa5e..cc14bda7 100644 --- a/rollup.common.config.js +++ b/rollup.common.config.js @@ -45,7 +45,12 @@ const config = { ], }), esbuild({ - include: [`${ROOT}/**/*.ts+(|x)`], + // Transpile every .ts/.tsx by extension, regardless of cwd. The previous + // glob `${ROOT}/**/*.ts+(|x)` relied on an extglob that newer picomatch + // (floated in via `npm install`, which ignores our yarn.lock) no longer + // matches — so esbuild silently stopped transpiling TS and every component + // build choked on raw TS in commons (e.g. define-component-patch.ts). + include: /\.tsx?$/, minify: !!production, }), commonjs(), From 954eca1ac192edb7c655b3fa44a4ee2cc331de3a Mon Sep 17 00:00:00 2001 From: maithri471 Date: Mon, 22 Jun 2026 14:54:31 -0400 Subject: [PATCH 2/3] ci: make lint/type-check/test-unit self-contained (checkout + install) These jobs had no checkout step and pulled the entire workspace from the build job via actions/cache (path: ./*). That cross-job handoff broke after the mandatory cache@v2 -> v4 migration (the v2 backend was shut down): the restore misses, so the jobs run against an empty workspace and fail fast with `npm ERR! enoent ... package.json`. Give each job its own actions/checkout@v4 + npm install (matching the build job) so it no longer depends on the fragile cache handoff. Note: test-cypress uses the same handoff but also needs the built app to serve; left for a separate change. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/build-test-publish.yaml | 32 ++++++++++++----------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build-test-publish.yaml b/.github/workflows/build-test-publish.yaml index ae5dc68b..8cd9ee88 100644 --- a/.github/workflows/build-test-publish.yaml +++ b/.github/workflows/build-test-publish.yaml @@ -70,16 +70,20 @@ jobs: fail-fast: true needs: build steps: + # Check out + install rather than restoring the build job's workspace via + # actions/cache. That cross-job cache handoff (path: ./*) stopped working + # after the forced cache@v2 -> v4 migration, leaving these jobs with no + # package.json (npm ENOENT). Each job is now self-contained. + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Node uses: actions/setup-node@v2 with: node-version: 14 - - uses: actions/cache@v4 - id: restore-build - with: - path: ./* - key: ${{ github.sha }} + - name: Install dependencies + run: npm install - name: Run linter run: npm run lint:ci @@ -90,15 +94,14 @@ jobs: fail-fast: true needs: build steps: + - name: Checkout + uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v2 with: node-version: "14" - - uses: actions/cache@v4 - id: restore-build - with: - path: ./* - key: ${{ github.sha }} + - name: Install dependencies + run: npm install - name: Run type-check run: npm run tsc @@ -108,15 +111,14 @@ jobs: fail-fast: true needs: build steps: + - name: Checkout + uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v2 with: node-version: "14" - - uses: actions/cache@v4 - id: restore-build - with: - path: ./* - key: ${{ github.sha }} + - name: Install dependencies + run: npm install - name: Run unit tests run: npm run test From d4216324e50fbf0c5cc08bf62d90896f2e7c78a9 Mon Sep 17 00:00:00 2001 From: maithri471 Date: Mon, 22 Jun 2026 15:28:07 -0400 Subject: [PATCH 3/3] ci: run lint/type-check/test-unit in parallel with build (drop needs: build) These jobs now check out and install on their own, so they no longer need build's output. `needs: build` only made them idle ~22 min waiting for the build to finish before starting. Dropping it lets them run immediately in parallel, cutting feedback time from ~25 min to ~5-6 min. publish still gates on all four jobs via its own needs list; test-cypress keeps needs: build (it serves the built app). Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/build-test-publish.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/build-test-publish.yaml b/.github/workflows/build-test-publish.yaml index 8cd9ee88..ea004a3e 100644 --- a/.github/workflows/build-test-publish.yaml +++ b/.github/workflows/build-test-publish.yaml @@ -68,7 +68,6 @@ jobs: runs-on: ubuntu-latest strategy: fail-fast: true - needs: build steps: # Check out + install rather than restoring the build job's workspace via # actions/cache. That cross-job cache handoff (path: ./*) stopped working @@ -92,7 +91,6 @@ jobs: runs-on: ubuntu-latest strategy: fail-fast: true - needs: build steps: - name: Checkout uses: actions/checkout@v4 @@ -109,7 +107,6 @@ jobs: runs-on: ubuntu-latest strategy: fail-fast: true - needs: build steps: - name: Checkout uses: actions/checkout@v4