Skip to content

ci: releases build alongside their checks, from caches kept warm on main - #84

Merged
sean-brydon merged 1 commit into
mainfrom
faster-release
Oct 13, 2026
Merged

sean-brydon merged 1 commit into
mainfrom
faster-release

Conversation

@sean-brydon

Copy link
Copy Markdown
Collaborator

Tag-to-published took about 37 minutes for v0.3.16. Where it went:

  • Waiting for the checks before anything was built: about 13 minutes from the tag. The checks had already passed on the release PR.
  • macos, 16 minutes, of which about 9 were compiling the app's Rust from scratch twice (Apple silicon 5m 04s, then Intel 4m 07s) and about 3 were cold Go builds.
  • The cause: CI runs only on pull requests. Their caches are scoped to the PR, and a tag's run can read only main's caches, so every release started cold.

Changes

  1. Builds run alongside the checks. release, macos and linux no longer need checks. feed, the job that publishes (--draft=false --latest), needs checks and runs only if they pass. Until then the release is a draft, which releases/latest/download/ (the install script and the updater feed) never serves. So a failed check still publishes nothing, as before; it just leaves a draft with assets.
  2. Caches warmed on main by a new release-cache.yml, on dependency changes, Mondays and Thursdays (GitHub evicts a cache unread for 7 days), and on demand:
    • mac: the Go build cache from the same go build invocations as make app-binaries and daemons, and the Rust deps of pnpm tauri build --target universal-apple-darwin --no-bundle (same features as the release, no signing or bundling)
    • linux: the Rust deps of pnpm tauri build --no-bundle (release profile)
  3. Release jobs restore those caches (Swatinem/rust-cache, the pin ci.yml already uses, with shared-key and save-if: false; actions/cache/restore by prefix for Go) and never save their own, since no later tag could read them.

The release skill describes the new order. Expected: about 15 minutes from tag to published once the caches are warm. Merging this runs release-cache.yml once, since it's in its own path filter.

Not done: per-architecture parallel builds or two dmgs, and larger macOS runners.

Checks: actionlint passes on both workflows, tauri build --no-bundle --target exists in the app's CLI, and the warm job's Go commands run locally.

🤖 Generated with Claude Code

- the release, macos and linux jobs no longer wait for the checks; the
  feed job, which publishes the release, waits for them, so a failed check
  still publishes nothing (the release stays a draft, which
  releases/latest/download and installed apps never see)
- release-cache.yml keeps, on main, the caches a tag's run can read: the
  Mac's Go build cache and the Rust dependencies of the Mac (universal)
  and Linux apps, by building what the release builds without signing or
  bundling; on dependency changes and twice a week, since GitHub drops a
  cache nobody reads for seven days
- the macos and linux jobs restore them (Swatinem/rust-cache, and the Go
  build cache by prefix), and never write caches no later tag could read

CI runs on pull requests only, whose caches no tag sees: every release
compiled the app's Rust twice (about 9 minutes) and its Go cold (about 3)
after waiting for the checks (about 13).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
berth Ready Ready Preview Oct 13, 2026 3:39pm UTC
berth-docs Ready Ready Preview Oct 13, 2026 3:39pm UTC

Request Review

@sean-brydon
sean-brydon merged commit 0c40062 into main Oct 13, 2026
8 checks passed
@linear-code

linear-code Bot commented Oct 13, 2026

Copy link
Copy Markdown

ENG-6019

This branch was successfully deployed

2 active deployments
Preview – berth-docs — b8dbd098 Deployed Oct 13, 2026 by vercel[bot]
Preview – berth — b8dbd098 Deployed Oct 13, 2026 by vercel[bot]
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