perf(ci): start native/CEF app builds off detect-changes, not build (re-land #395)#396
Conversation
The Tauri/Dioxus/Electrobun e2e + package-test app builds (20 jobs) gated on
the Linux `build` job and downloaded its artifact, but never needed it — the
slow Rust/CEF compile is independent of the JS build. Chaining them behind
`build` just delayed every one of those legs (the downstream e2e/package jobs
wait on the app build, so this is on their critical path). Mirrors the RN/Flutter
iOS app builds, which already run off detect-changes only.
For each app-build reusable: drop `needs: build`, remove the build-artifact
download (+ the dead "Show Build Information" step and the now-unused
build_id/artifact_size/cache_key inputs). The app builds are self-contained:
- Tauri e2e: turbo builds the plugin JS + app deps from source (remote-cache backed).
- Tauri package: dropped `--only` so turbo builds the app's deps locally
instead of relying on the downloaded dist/.
- Dioxus e2e/package: build the bridge guest JS explicitly, then cargo build —
the downloaded dist/ was never read.
- Electrobun e2e/package: `electrobun build`; the fixture's only runtime dep is
electrobun (the @wdio/* deps are test-time only), so no workspace dist needed.
The consuming e2e/package jobs still depend on `build` directly for the runnable
service dist, so a JS build failure still reds CI. setup-workspace's install is
untouched. Each leg now starts as soon as detect-changes finishes, in parallel
with build.
Validated with actionlint 1.7.12 (the pinned CI version); no job references
needs.build without build in its needs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Release Preview — no release
Updated automatically by ReleaseKit |
|
| Filename | Overview |
|---|---|
| .github/workflows/ci.yml | Removes build from needs for all 20 app-build jobs, dropping the 3 forwarded build outputs; downstream test/package jobs still gate on build directly — parallelism gain is clean and gating is intact. |
| .github/workflows/_ci-build-tauri-package-app.reusable.yml | Removes the 3 inherited inputs, artifact-download step, and drops --only from the Turbo invocation so workspace deps are built from source (remote-cache backed) instead of from the downloaded dist/. |
| .github/workflows/_ci-build-tauri-e2e-app.reusable.yml | Removes the 3 forwarded inputs, artifact-download step, and Show Build Information step; build logic is otherwise unchanged. |
| .github/workflows/_ci-build-dioxus-e2e-app.reusable.yml | Removes the 3 forwarded inputs, artifact-download step, and Show Build Information step; the explicit pnpm --filter @wdio/dioxus-bridge build step remains, so the JS bridge is still built from source. |
| .github/workflows/_ci-build-dioxus-package-app.reusable.yml | Removes the 3 forwarded inputs and artifact-download step; workspace deps previously supplied via the downloaded archive must now be resolved via Turbo/pnpm from source. |
| .github/workflows/_ci-build-electrobun-e2e-app.reusable.yml | Removes the 3 forwarded inputs, artifact-download step, and Show Build Information step; the CEF/Bun build logic is unchanged. |
| .github/workflows/_ci-build-electrobun-package-app.reusable.yml | Removes the 3 forwarded inputs, artifact-download step, and Show Build Information step; CEF/Bun build is unaffected. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[push / PR] --> B[detect-changes]
B --> C[build Linux]
B --> D[build-tauri-e2e-app-*]
B --> E[build-dioxus-e2e-app-*]
B --> F[build-electrobun-e2e-app-*]
B --> G[build-tauri-package-app-*]
B --> H[build-dioxus-package-app-*]
B --> I[build-electrobun-package-app-*]
C --> J[e2e-tauri-* / package-tauri-*]
D --> J
C --> K[e2e-dioxus-* / package-dioxus-*]
E --> K
C --> L[e2e-electrobun-* / package-electrobun-*]
F --> L
G --> J
H --> K
I --> L
Reviews (1): Last reviewed commit: "perf(ci): start native/CEF app builds of..." | Re-trigger Greptile
Re-lands #395, which was merged but never reached
main: its base was the #394 branch (ci/status-gate-and-redundant-installs), and because that branch wasn't deleted/retargeted after #394 squash-merged, merging #395 put the commit on that stale branch instead ofmain. Somaincurrently still has the oldneeds: [detect-changes, build]+ artifact downloads.This is the exact same commit (
7fc5bdfae) cherry-picked cleanly onto currentmain— its hunks (build-app jobs + the 6 app-build reusables) don't overlap the Dependabot CI-gating that landed on main since, which is preserved.What (unchanged from #395)
Decouples the 20 Tauri/Dioxus/Electrobun e2e + package-test app builds from the Linux
buildjob: dropneeds: build, remove the build-artifact download (+ dead show-info step + unusedbuild_id/artifact_size/cache_keyinputs); drop--onlyin the Tauri package build so Turbo builds deps from source. Each leg now starts offdetect-changes, in parallel withbuild, so the e2e/package leg start drops frombuild + app-buildto≈ app-build. The consuming e2e/package jobs still depend onbuilddirectly, so a JS build failure still reds CI.Verified
actionlint1.7.12 clean.detect-changesif:+ci-statusguard).needs.build.outputs: 88; identical +24/−238 to perf(ci): start native/CEF app builds off detect-changes, not build #395.To avoid the stale-base trap again, this targets
maindirectly.🤖 Generated with Claude Code