Repository navigation
Add a manual workflow to promote the release tag - #20
Merged
matt-edmondson merged 1 commit intoSep 16, 2026
Merged
Conversation
Every repository's ci.yml resolves ci-shared.yml@release, so moving that tag is a change to CI in fifty repositories at once. Doing it from a terminal means that change has no record, no checks and no summary. This makes the promotion a dispatch with three refusals in front of it: the ref has to resolve, the commit has to be contained in main so nothing reaches those repositories without review here, and ci-shared.yml plus every pipeline it dispatches to has to exist at that commit. The last one is cheap and the failure it prevents is org-wide -- a release whose dispatcher names a missing pipeline breaks every caller the moment the tag moves. The tag is annotated, so `git show release` says who promoted it and from which run. Promotions are queued rather than cancelled, because cancelling a run that may already have pushed the tag leaves it somewhere nobody read a summary for. Depends on the Update Readme trigger fix in this branch: an unfiltered `push:` fires on tags, where checkout leaves a detached HEAD and the bare `git push` fails, so every promotion would otherwise have produced a failing run. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014RABe2NufFc9hwm94iB3Rf
matt-edmondson
deleted the
claude/dependabot-ci-workflow-rollout-fbrhdn
branch
September 16, 2026 05:09
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.
What
promote-release.yml— aworkflow_dispatchthat moves thereleasetag, plus the matching section indocs/shared-ci.md.Why a workflow rather than
git push -fEvery repository's
ci.ymlresolvesci-shared.yml@release, so moving that tag is a change to CI in fifty repositories at once. From a terminal it has no record, no checks and no summary.What it refuses
Dispatch takes a
ref(defaultmain) and the tag does not move unless all three hold:main. Nothing reaches fifty repositories' CI without having gone through review here — this is the check that makes the tag safe to move from a dispatch box.ci-shared.ymlexists at that commit, and so does every pipeline it dispatches to. Cheap to check, and the failure it prevents is org-wide: a release whose dispatcher names a missing pipeline breaks every caller the instant the tag moves.Then it force-moves an annotated tag recording who promoted it and from which run, and writes a step summary naming the commit the tag moved from and to.
concurrencyqueues promotions rather than cancelling them — cancelling a run that may already have pushed the tag would leave it somewhere nobody read a summary for.Testing
The validation step is a shell script with an embedded Python heredoc, which
actionlintcannot execute, so I extracted therun:block after YAML dedent and ran it against a real clone:mainf855adc, confirms both pipelines presentno-such-ref-xyza1e16a8(on main, predatesci-shared.yml)ci-shared.ymlat that commitmainSo each refusal above is demonstrated, not just asserted.
actionlint1.7.7 withshellcheckclean;markdownlint-cliclean.Ordering
Depends on #19, already merged — an unfiltered
push:fires on tags, whereactions/checkoutleaves a detached HEAD and the baregit pushfails, so every promotion would otherwise have produced a failingUpdate Readmerun.Once this merges, the first dispatch creates
release. Nothing references it yet, so creating it is inert until repositories get aci.yml.🤖 Generated with Claude Code
https://claude.ai/code/session_014RABe2NufFc9hwm94iB3Rf
Generated by Claude Code