dotCMS / dotCMS/core

evergreen-tracks: no supported way to move `latest` outside a release cut

Open
#37,036 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Team : Enablement
Dominant language
Java
Stars
970
Forks
486
Avg merge
3d 33m
Merged PRs (30d)
170

Description

Problem

When the 2026-08-12 release cut failed to move latest (#37025 — Hub started refusing anonymous tag pagination), there was no supported way to repoint it:

  • cicd_evergreen-tracks-promote.yml hardcodes --tracks standard,trailing and has no input to change that.
  • cicd_evergreen-tracks-admin.yml only does taint / untaint / hold / release-hold.
  • Re-running the failed release job replays the pre-fix commit, so it just fails again.

The only route left was cutting a throwaway release to repoint a tag — which is what we did (26.08.12-02, code-identical to -01 apart from the CI fix). That works, but rebuilding artifacts, redeploying to Artifactory, regenerating release notes and publishing a changelog entry to dev.dotcms.com is a lot of blast radius for moving one floating tag, and it puts a phantom release in front of customers.

Proposal

Add a tracks dispatch input to the promote workflow, defaulting to standard,trailing.

  • The daily cron and every existing dispatch behave exactly as today — a schedule event carries no inputs at all, which the || fallback covers.
  • tracks=latest becomes the break-glass path, behind the same evergreen-tracks-apply required-reviewer gate as any other manual move.
  • The apply job still holds the evergreen-tracks-registry lock, so it cannot race the release pipeline's latest-promote. If a GA cut repoints latest while an approval sits, the existing drift check makes apply refuse rather than fight the release pipeline — the correct outcome.

Also fixes a latent bug

The moved-summary grep matches only ^(standard|trailing):

MOVES=$(printf '%s\n' "$CURRENT_PLAN" | grep -E '^(standard|trailing) (\(held\) )?-> ' ...)

So a latest move would apply correctly but report moved=false and post no Slack notice. Silent success is the one outcome this workflow is built to avoid. Widened to include latest.

Related: #37025, #37028.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with cicd_evergreen-tracks-promote.yml and compare its schedule and dispatch handling with cicd_evergreen-tracks-admin.yml; inspect the existing evergreen-tracks-apply gate, registry lock, drift check, and moved-summary grep. Done means a manual tracks=latest path is supported without changing scheduled behavior, and a latest move reports success to Slack.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, shell
Domain
ci-cd, release
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.