Skip to content

ci: install release-plz from prebuilt binary - #43

Merged
wavekat-eason merged 1 commit into
mainfrom
ci/release-plz-prebuilt-install
Jul 26, 2026
Merged

ci: install release-plz from prebuilt binary#43
wavekat-eason merged 1 commit into
mainfrom
ci/release-plz-prebuilt-install

Conversation

@wavekat-eason

Copy link
Copy Markdown
Contributor

Problem

Every push to main spends ~12.5 minutes in release-plz-release, of which 8m34s is compiling release-plz from source. This happens even on no-op runs that release nothing.

release-plz/action installs release-plz with cargo-binstall --strategies=crate-meta-data,compile (hardcoded in its composite steps). On the self-hosted wavekat-ci runner, binstall's fetchers exceed their resolution deadline before finding the prebuilt release asset, so the compile strategy wins:

INFO  resolve: Resolving package: 'release-plz@=0.3.160'
WARN  resolve: Timeout reached while checking fetcher invalid url: deadline has elapsed   (47s)
WARN  resolve: Timeout reached while checking fetcher invalid url: deadline has elapsed   (15s)
      Installing release-plz v0.3.160        ← source build, ~600 crates

The same action in the same run on ubuntu-latest (release-plz-pr) resolves the prebuilt in 2.2 seconds. The difference is egress speed from the self-hosted runner — identical tarballs take ~25x longer to fetch there, which is enough to trip binstall's deadline.

Measured from run 30181095552:

Stage self-hosted ubuntu-latest
Set up job 65s 5s
binstall resolve 62s, then fails 2.2s, prebuilt
Install release-plz 8m34s (source) instant
Actual release work ~50s ~50s
Total 12m32s 1m06s

Fix

Install release-plz with taiki-e/install-action, which downloads the prebuilt binary from GitHub Releases directly, then invoke release-plz release with the same arguments the action's composite steps use.

  • release-plz@0.3.160 is present in install-action's manifest (currently its latest).
  • cargo-semver-checks stays pinned at 0.48 — what the action was already installing — so the only variable is install speed.
  • fallback: none is deliberate: without it, a version missing from install-action's manifest silently falls back to cargo-binstall and restores the 10-minute source build with nothing in the log to explain it. Now it fails loudly.
  • Git user config is repo-local rather than --global, since the runner is shared.

Expected: ~12.5 min → ~1.5 min.

Verification

release-plz.yml only triggers on push to main, so this can't be exercised by the PR itself — it gets verified on the first push after merge.

Not included

  • release-plz-pr still runs on ubuntu-latest using the action (fast there, but ~1 min of billed GH-minutes per push — could move to wavekat-ci now that the install path is fixed).
  • The release job still runs on every push to main. At ~1.5 min the no-op case is probably not worth gating.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VbUTWyPHJSyuKYJaz5KgFt

release-plz/action installs release-plz with `cargo-binstall
--strategies=crate-meta-data,compile`. On the self-hosted wavekat-ci
runner, binstall's fetchers exceed their resolution deadline before
finding the prebuilt release asset, so `compile` wins and the job
builds release-plz from source — 8m34s of a 12m32s job, on every
push to main including no-op runs.

Same action on ubuntu-latest resolves the prebuilt in 2.2s; the
difference is egress speed from the self-hosted runner, where the
same tarballs take ~25x longer to fetch.

Install via taiki-e/install-action instead, which downloads the
prebuilt binary directly, and invoke release-plz with the same
arguments the action's composite steps use. cargo-semver-checks
stays pinned at 0.48 to match what the action was installing.

`fallback: none` matters: without it a version missing from
install-action's manifest silently falls back to cargo-binstall and
restores the source build with nothing in the log to explain it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VbUTWyPHJSyuKYJaz5KgFt
@wavekat-eason
wavekat-eason marked this pull request as ready for review July 26, 2026 01:02
@wavekat-eason
wavekat-eason merged commit 960e216 into main Jul 26, 2026
1 check passed
@wavekat-eason
wavekat-eason deleted the ci/release-plz-prebuilt-install branch July 26, 2026 01:02
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