Skip to content

perf(ci): start native/CEF app builds off detect-changes, not build (re-land #395)#396

Merged
goosewobbler merged 1 commit into
mainfrom
ci/reland-decouple-native-builds
Jun 13, 2026
Merged

perf(ci): start native/CEF app builds off detect-changes, not build (re-land #395)#396
goosewobbler merged 1 commit into
mainfrom
ci/reland-decouple-native-builds

Conversation

@goosewobbler

Copy link
Copy Markdown
Contributor

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 of main. So main currently still has the old needs: [detect-changes, build] + artifact downloads.

This is the exact same commit (7fc5bdfae) cherry-picked cleanly onto current main — 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 build job: drop needs: build, remove the build-artifact download (+ dead show-info step + unused build_id/artifact_size/cache_key inputs); drop --only in the Tauri package build so Turbo builds deps from source. Each leg now starts off detect-changes, in parallel with build, so the e2e/package leg start drops from build + app-build to ≈ app-build. The consuming e2e/package jobs still depend on build directly, so a JS build failure still reds CI.

Verified

To avoid the stale-base trap again, this targets main directly.

🤖 Generated with Claude Code

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>
@github-actions

Copy link
Copy Markdown
Contributor
Release Preview — no release

No bump label detected.
Reason: No release labels found (need bump:* or channel:stable)
Note: Add bump:patch, bump:minor, or bump:major to trigger a release.


Updated automatically by ReleaseKit

@greptile-apps

greptile-apps Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR re-lands #395 (cherry-picked cleanly onto current main), decoupling the 20 Tauri/Dioxus/Electrobun app-build jobs from the Linux build job so they start in parallel off detect-changes instead of waiting for build to complete.

  • All 6 app-build reusable workflows drop the build_id/artifact_size/cache_key inputs, the artifact-download step, and the "Show Build Information" step; the Tauri package-app reusable additionally removes --only from the Turbo invocation so workspace dependencies are compiled from source (remote-cache backed) rather than extracted from the downloaded archive.
  • All 20 build-*-{e2e,package}-app-* jobs in ci.yml drop build from needs; the downstream e2e and package-test jobs retain needs: [detect-changes, build, build-<app>-*], so a JS build failure still blocks all tests.

Confidence Score: 5/5

Safe to merge — the dependency-graph change is internally consistent and all test/package jobs still block on build finishing.

Every app-build job now runs in parallel with build, but the consuming test and package jobs retain needs: [detect-changes, build, build-<app>-*], so build failures still red CI. The --only removal in the Tauri package-app reusable is the only behavioural difference beyond the removed download step, and it is intentional: Turbo will now build workspace deps from its remote cache instead of from the extracted artifact. This is the exact same commit as #395, which was already reviewed and merged (just targeted the wrong branch), reducing re-review risk further.

No files require special attention. All 6 reusable workflows and ci.yml are changed consistently.

Important Files Changed

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
Loading

Reviews (1): Last reviewed commit: "perf(ci): start native/CEF app builds of..." | Re-trigger Greptile

@goosewobbler goosewobbler merged commit 799836b into main Jun 13, 2026
19 of 87 checks passed
@goosewobbler goosewobbler deleted the ci/reland-decouple-native-builds branch June 13, 2026 01:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant