Skip to content

ci: parallel builds + pre-built sidecar binaries#8

Merged
jacderida merged 1 commit intomainfrom
ci/parallel-builds-prebuilt-sidecar
Apr 8, 2026
Merged

ci: parallel builds + pre-built sidecar binaries#8
jacderida merged 1 commit intomainfrom
ci/parallel-builds-prebuilt-sidecar

Conversation

@Nic-dorman
Copy link
Copy Markdown
Contributor

Summary

Optimise the release workflow to cut build times from ~50 minutes to ~19 minutes by addressing two bottlenecks:

Change Before After Saving
Windows build Sequential (waits ~21min for Linux/macOS) Parallel (starts immediately) ~21 min
Sidecar binary Built from source (git clone + cargo build --release) ~10min/platform Downloaded pre-built from ant-client releases ~10s/platform ~10 min/platform
Total wall clock ~50 min ~19 min ~31 min

Before: sequential pipeline

0:00 ─── Linux + macOS (parallel) ───────────────────── 21min
          ├─ clone ant-client + cargo build sidecar        ~9min
          └─ tauri build + bundle                          ~11min

21:00 ── Windows (waits for above) ──────────────────── 28min
          ├─ clone ant-client + cargo build sidecar        ~10min
          └─ tauri build + sign + bundle MSI               ~18min

49:00 ── merge latest.json ─────────────────────────── <1min

After: parallel pipeline

0:00 ── create-release (lightweight) ────────────────── <1min

0:01 ┬─ Linux ──────────────────────── ~12min
     ├─ macOS aarch64 ──────────────── ~12min    ALL PARALLEL
     ├─ macOS x86_64 ───────────────── ~12min
     └─ Windows (signed MSI) ──────── ~19min

19:00 ── merge latest.json ─────────────────────────── <1min

What changed

1. Parallel Windows build

Windows previously had needs: [build-linux-macos] because tauri-action created the draft release as a side effect, and Windows needed the release to exist for gh release upload.

Fix: a new lightweight create-release job creates the draft release first (via GitHub API), then passes the release_id to tauri-action via its releaseId input. All 4 platform builds now depend only on create-release and run in parallel.

2. Pre-built sidecar binaries

The sidecar step previously cloned WithAutonomi/ant-client and ran cargo build --release -p ant-cli (~10 min per platform). But ant-client already publishes pre-built binaries for all targets in its GitHub releases.

Now the workflow downloads the matching archive from ant-client releases (~10 seconds), extracts the ant binary, and places it in src-tauri/binaries/ for Tauri to bundle.

Target mapping:

Tauri target ant-client asset Format
aarch64-apple-darwin aarch64-apple-darwin tar.gz
x86_64-apple-darwin x86_64-apple-darwin tar.gz
x86_64-unknown-linux-gnu x86_64-unknown-linux-musl tar.gz
x86_64-pc-windows-msvc x86_64-pc-windows-msvc zip

Note: Linux uses the musl build (statically linked, works on glibc systems).

3. Configurable ant version (.ant-version)

A new .ant-version file controls which ant-client release to bundle. This allows pinning to a specific version for testing new node features ahead of a formal release.

Resolution priority:

  1. workflow_dispatch input ant_version (for one-off test builds from the Actions tab)
  2. .ant-version file in the repo (version-controlled, visible in PRs)
  3. Falls back to latest if neither is set

Examples:

# Use latest ant-client release (default)
echo "latest" > .ant-version

# Pin to a specific pre-release for testing
echo "ant-cli-v0.1.2-rc.17" > .ant-version

# Or trigger a manual build from Actions tab with a specific version
# without committing anything

Test plan

  • Trigger a release build and verify all 4 platforms build successfully
  • Verify the draft release has all expected artifacts (DMG, AppImage, MSI, updater sigs)
  • Verify latest.json has all platform entries after update-latest-json completes
  • Test workflow_dispatch with a specific ant_version input
  • Verify .ant-version file with a pinned tag works correctly
  • Smoke test installed app on each platform — daemon starts, nodes work

🤖 Generated with Claude Code

Replace sequential Windows build and from-source sidecar compilation
with parallel builds and pre-built binaries from ant-client releases.

- Create draft release in its own job so all 4 platform builds run in
  parallel (Windows no longer waits for Linux/macOS)
- Download pre-built ant binary from ant-client GitHub releases instead
  of cloning and compiling ant-client from source (~10s vs ~10min)
- Add .ant-version file to pin the ant-client release tag (defaults to
  "latest"); can be overridden via workflow_dispatch input for testing
  pre-release node versions
- Add resolve-ant-version job to handle version resolution

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jacderida jacderida merged commit 2af9af2 into main Apr 8, 2026
Nic-dorman added a commit that referenced this pull request Apr 15, 2026
Notable changes since v0.5.0:
- Disable public upload option in the UI until external-signer backend
  support lands (#12)
- Bump evmlib from 0.4 to 0.8 (#11)
- Add Vitest test suite + PR CI checks (typecheck, vitest, cargo
  fmt/clippy) (#8, #9)
- Parallel CI builds with pre-built sidecar binaries (#8)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Nic-dorman Nic-dorman mentioned this pull request Apr 15, 2026
2 tasks
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.

2 participants