Skip to content

Pin PUTUP_VERSION so CI stops resolving "latest" over the GitHub API - #25

Closed
typeless wants to merge 1 commit into
mainfrom
feature/pin-putup-version
Closed

Pin PUTUP_VERSION so CI stops resolving "latest" over the GitHub API#25
typeless wants to merge 1 commit into
mainfrom
feature/pin-putup-version

Conversation

@typeless

Copy link
Copy Markdown
Owner

install.sh queries api.github.com for the latest release unless PUTUP_VERSION is set. That query fails intermittently on runners, and when it does it takes the whole job with it — it killed the arm64 job of the post-merge run on cda4991 (Phase 5):

error Failed to query GitHub API for latest release.
error Set PUTUP_VERSION=vX.Y.Z to skip the API query.

The installer names its own fix. Every build job repeats the query (3-arch matrix × 2 workflows), so each run gets several independent chances to lose the coin flip. A sweep of the preceding 60 runs (07-16 → 07-20) found zero occurrences, which made the flake look extinct — then it fired on the next run. It is low-rate intermittent, not gone.

Change

Top-level env: PUTUP_VERSION: v2.2.0 in putup.yml and putup-release.yml — one pin site per file, covering every matrix job. v2.2.0 is the current latest (published 2026-07-18).

Two benefits: the flaky API call disappears from the critical path, and a new upstream putup can no longer land in CI unannounced — the toolchain moves only when we bump it deliberately.

Verification

Exercised locally against a sandboxed HOME:

$ HOME=$PWD/pintest PUTUP_VERSION=v2.2.0 sh install.sh
info  Using specified version: v2.2.0
info  Downloading putup-linux-x86_64 v2.2.0...
info  Checksum verified.
done  Installed putup 2.2.0
$ pintest/.local/bin/putup --version
putup 2.2.0

The Resolving latest version... line is absent — that is the branch containing the failing API call (install.sh:98-108), and the pin short-circuits it at line 88. Both workflows parse as valid YAML with env resolving to {'PUTUP_VERSION': 'v2.2.0'}.

Notes

  • Expected to be behaviorally a no-op: v2.2.0 is 2 days old, so recent latest runs were most likely already resolving to it. Unconfirmed — the logs do not record the resolved version. This PR's own CI is the check.
  • The pin is a standing maintenance obligation: nothing signals a new putup release, so the version only moves when someone bumps it.

https://claude.ai/code/session_01YEkLFtTYQZuQHgQP5qYtq7

install.sh queries api.github.com for the latest release unless PUTUP_VERSION
is set. That query fails intermittently on runners -- it took down the arm64
job of the post-merge run on cda4991 with "Failed to query GitHub API for
latest release", after four clean days that made the flake look extinct. Every
build job repeats the query, so each run gets several independent chances to
lose the coin flip.

Pinning removes the query entirely (install.sh takes PUTUP_VERSION and skips
straight to the download) and stops a new upstream putup from landing in CI
unannounced -- the toolchain now moves only when we bump it.

Claude-Session: https://claude.ai/code/session_01YEkLFtTYQZuQHgQP5qYtq7
@typeless

Copy link
Copy Markdown
Owner Author

Closing unmerged — decision: keep tracking the latest putup rather than pinning. Picking up new putup releases automatically is worth more than removing an occasional flake, and the flake is cheap to clear with gh run rerun <id> --failed.

The commit is preserved at 79f6a31 if this is ever revisited.

@typeless typeless closed this Jul 20, 2026
@typeless
typeless deleted the feature/pin-putup-version branch July 20, 2026 05:27
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