ci(release): check the endpoint old installs use, and let RELEASING.md say less - #495
Merged
Merged
Conversation
…d say less Section 5 has been growing. #485 added it, and a follow-up wanted another paragraph to close the loophole a careful reader finds — that a repository at the old location could serve a correct feed and keep old installs working, so the rule is not quite as absolute as it reads. Prose was the wrong instrument. Section 4 earns its place by sitting directly after the step it constrains: generating the keypair is step 1, and "the pubkey is permanent" is the warning on step 1. Section 5 constrains an action that is not a step in this runbook at all — nobody cutting a release is going to fork the repository — so it has been compensating with length for not being adjacent to anything. The check asserts the property instead of a proxy for it. It does not ask whether a redirect exists; it fetches that URL and checks that the feed's download URLs still name this repository. A fork or a deletion fails it. Someone occupying the old location while serving a correct feed passes it, which is the right answer and is exactly the case the extra paragraph was going to spend words on. A network failure is not evidence either way, so it warns and lets the release proceed rather than blocking on a flake. It runs before the draft is created, so a broken endpoint does not leave half a release behind. Verified against the live endpoint: the feed's five platform URLs all resolve to this repository. Falsified three ways — a repository name that does not match reports all five as foreign; a response that is not a feed takes the "not an updater feed" branch; an unreachable URL takes the warning branch and exits 0. Section 5 loses ten lines and keeps every instruction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces #494, which I closed. That PR added another paragraph to
RELEASING.md§5; this one adds the check that makes the paragraph unnecessary and shortens the section instead.Why §5 kept growing
§4 works because it is adjacent to what it constrains — generating the keypair is step 1 of the runbook, and "the pubkey is permanent" is the warning attached to step 1. §5 constrains forking the repository, which is not a step in this runbook and never will be. It has been compensating with length for not being next to anything, and #494 was about to add more.
The check
It asserts the property, not a proxy for it. It does not ask whether a redirect exists — it fetches
and checks that the feed's
platforms[].urlvalues still name$GITHUB_REPOSITORY.That distinction is the whole point. A repository at the old location that serves a correct feed would keep old installs working, and it passes — correctly. That case is precisely what #494 was going to spend a paragraph warning about; the check handles it without anyone having to reason about it under pressure.
Placed before the draft is created, so a broken endpoint does not leave half a release behind.
Verified, and falsified
Run against the live endpoint from this machine:
Three falsifications:
::warning, exit 0 — a flake does not block a releasenpm test778/778.build.ymlparses.What I could not verify
build.ymlisworkflow_dispatch-only, so this is proven by executing the script body locally against the real URL, not by a green run. The first real exercise is the next release.🤖 Generated with Claude Code