feat(evergreen-tracks): add a tracks input so latest can be moved without cutting a release - #37037
Open
sfreudenthaler wants to merge 1 commit into
Open
feat(evergreen-tracks): add a tracks input so latest can be moved without cutting a release#37037sfreudenthaler wants to merge 1 commit into
sfreudenthaler wants to merge 1 commit into
Conversation
…-of-band When the 2026-08-12 release cut failed to move `latest` (#37025, Hub 403 on the unauthenticated tag walk), there was no supported way to repoint it: this workflow hardcoded `--tracks standard,trailing`, the admin workflow only does taint/hold, and re-running the failed release job replays the pre-fix commit. The only route left was cutting a throwaway release to move a tag. The new `tracks` input defaults to `standard,trailing`, so the daily cron and every existing dispatch behave exactly as before — a `schedule` event carries no inputs at all, which the `||` fallback covers. Dispatching with `tracks=latest` lands behind the same required-reviewer gate as any other manual move, and the apply job still holds the registry lock, so it cannot race the release pipeline's latest-promote. Also widens the moved-summary grep to include `latest`. It matched only `^(standard|trailing)`, so a latest move would have applied correctly but reported moved=false and posted no Slack notice — silent success is the one outcome this workflow is built to avoid. Verified: YAML parses, both steps resolve TRACKS identically (they must — apply diffs its re-derived plan against the approved one), the empty/cron path still yields standard,trailing, and the engine plans a latest-only scope correctly against the live registry in 2 calls. Closes: #37036 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PqQqV1iv96Db8AzBSWTXV4
Contributor
|
Claude finished @sfreudenthaler's task in 1m 42s —— View job Review: evergreen-tracks
|
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.
Adds a
tracksinput to the promote workflow solatestcan be repointed without cutting a release.Why
When the 2026-08-12 release cut failed to move
latest(#37025 — Hub started refusing anonymous tag pagination), there was no supported way to fix it. The promote workflow hardcoded--tracks standard,trailing, the admin workflow only does taint/hold, and re-running the failed release job replays the pre-fix commit. We ended up cutting26.08.12-02— code-identical to-01apart from the CI fix — to move one floating tag. That works (verified below), but it rebuilds artifacts, redeploys to Artifactory, regenerates release notes and publishes a changelog entry to dev.dotcms.com, and leaves a phantom release in front of customers.What changes
standard,trailingstandard,trailing(unchanged)standard,trailingstandard,trailing(unchanged)tracks=latestlatest, behind the approval gateA
scheduleevent carries no inputs at all, so the|| 'standard,trailing'fallback is what keeps the cron on its current behaviour — same pattern the existingrepo/*_daysinputs already use.lateststays owned by the release pipeline; this is explicitly the break-glass path, and the header comment says so. The apply job still holds theevergreen-tracks-registrylock, so it cannot race the release pipeline's latest-promote — and if a GA cut repointslatestwhile an approval sits, the existing drift check makes apply refuse rather than fight it, which is the outcome we want.Latent bug fixed along the way
The moved-summary grep matched only
^(standard|trailing), so alatestmove would have applied correctly but reportedmoved=falseand posted no Slack notice. Silent success is the one outcome this workflow exists to prevent. Now^(latest|standard|trailing).Worth flagging for review: this bug was invisible until the input existed, and it would have shown up as "we moved latest and nobody heard about it" — the same shape as the original incident.
Verification
planandapplyresolveTRACKSto the identical expression, which they must —applydiffs its re-derived plan against the approved one, so any divergence would fail every run.--trackscall sites now read$TRACKS(plan, apply's re-plan, apply's mutation).standard,trailing.latest-only scope correctly against the live registry in 2 calls.26.08.12-02(run 31628506475) movedlateston both repos in 2 filtered calls each —dotcms/dotcms→07e6e29f…,dotcms/dotcms-dev→982dc0fd…, both matching26.08.12-02.Closes: #37036
🤖 Generated with Claude Code
https://claude.ai/code/session_01PqQqV1iv96Db8AzBSWTXV4