fix(ci): retry mise install on transient GitHub API failures - #328
fix(ci): retry mise install on transient GitHub API failures#328nsheaps wants to merge 1 commit into
Conversation
lint/build/test all started failing today with `mise ERROR Failed to install aqua:anthropics/claude-code@2.1.128: builder error: relative URL without a base`. Root-caused by reproducing locally with a fresh mise 2026.8.4 binary and MISE_VERBOSE=1: the GitHub releases-list API call for the tool fails, and mise's aqua backend doesn't fall back gracefully, instead crashing while building a download URL from nothing. mise 2026.8.3 (yesterday's version) didn't hit this failure mode. Rather than pin mise's version (which just defers the same class of problem to the next upstream release, and this repo wants to keep riding the latest mise), retry mise install itself: the underlying GitHub API call is exactly the kind of transient failure retries are for, and unauthenticated/shared-IP GitHub API calls from Actions runners are known to intermittently 403/429 regardless of which tool triggers them. install: false on the mise-action step (still sets up the mise binary and PATH), then a separate `mise install` wrapped in nick-fields/retry@v3 (3 attempts, 15s backoff) across all three jobs that share this setup.
|
Closing without merging. The diagnosis this PR was based on (transient
Generated by Claude Code Generated by Claude Code |
Summary
lint/build/testall started failing today with:Root cause
jdx/mise-actionfetches whatever mise release is latest with no version pin. Between two CI runs on the same day, it picked up2026.8.4(previously2026.8.3was in use and worked). Reproduced locally with a fresh2026.8.4binary andMISE_VERBOSE=1:When the GitHub releases-list API call for a tool fails, mise's aqua backend doesn't fall back gracefully — it crashes trying to build a download URL with nothing to build it from.
2026.8.3didn't hit this failure mode for the same install. Unauthenticated/shared-IP calls toapi.github.comfrom GitHub Actions runners are a known source of intermittent 403/429s, independent of which tool triggers them.Fix
Rather than pin mise's version (which just defers the same class of problem to whenever this happens again on a future release, and we want to keep riding the latest mise), retry
mise installitself — the triggering API call is exactly the kind of transient failure retries are for:install: falseon thejdx/mise-actionstep (still sets up the mise binary and PATH; only skips the auto-mise install)mise installstep wrapped innick-fields/retry@v3(3 attempts, 15s backoff), applied to all three jobs intest.yamlthat share this setup (lint,build,test)Test plan
yaml.safe_load)mise installnow succeeds (either on first try if the upstream API recovers, or via retry if it doesn't)Generated by Claude Code