From 39c1dfafd8e88d56fd6e1533fb0890f260668526 Mon Sep 17 00:00:00 2001 From: Patrick Dodgen Date: Mon, 13 Jul 2026 11:50:16 -0600 Subject: [PATCH] =?UTF-8?q?fix(helm-deploy-eks):=20switch=20makeLatest=20l?= =?UTF-8?q?egacy=20=E2=86=92=20true=20(legacy=20semver=20broken)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up to #155. Tested `legacy` against encodium/batch rc.9 vs rc.12 on 2026-07-13 and it did NOT re-designate. GH's semver comparator appears to treat `2026-07-09` in the prerelease identifier as an alphanumeric segment (hyphens present), then compares subsequent segments incorrectly — so `-rc.2026-07-09.12` does not rank above `-rc.2026-07-09.9` in its impl. Switching to `make_latest: true`. Semantic under RT v2: 'latest release' = whatever is currently running in prod. Every successful prod deploy re-designates latest. Rollback deploys of older rc's correctly move latest backwards to reflect what's actually deployed — which is what you want during an incident anyway (latest = truth of what's live). Main-branch clean tags (`vX.Y.Z`) go through a different action on create (not PATCH) and use normal semver ordering — not affected by this change. --- .github/workflows/helm-deploy-eks.yaml | 39 +++++++++++++++----------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/.github/workflows/helm-deploy-eks.yaml b/.github/workflows/helm-deploy-eks.yaml index 59a72a9..466db5b 100644 --- a/.github/workflows/helm-deploy-eks.yaml +++ b/.github/workflows/helm-deploy-eks.yaml @@ -140,21 +140,28 @@ jobs: prerelease: false allowUpdates: true omitBodyDuringUpdate: true - # DEVEX-1655 (2026-07-13): explicitly set makeLatest=legacy so - # GitHub re-evaluates the "latest release" designation on this - # PATCH. Per GH REST docs, if `make_latest` is not defined on - # an update, "the release will not be reevaluated" — the - # previous latest sticks. The ncipollo action documents - # `legacy` as its default but doesn't actually pass the field - # when the input is omitted, so we hit the "no reevaluation" - # case. + # DEVEX-1655 (2026-07-13): explicitly set makeLatest=true so + # GitHub re-designates this release as "latest" on the PATCH. # - # `legacy` = "determine based on release creation date and - # higher semantic version," which is the semantic we want for - # RT v2: every promoted rc becomes latest if it's semver-higher - # than the previous latest. A rollback deploy of an older rc - # will correctly leave the newer rc as latest. + # Why not `legacy` (semver-based auto-detect): tested against + # encodium/batch rc.9 vs rc.12 on 2026-07-13 — `legacy` did + # not re-designate. GH's semver comparator appears to treat + # `2026-07-09` in the prerelease identifier as an alphanumeric + # segment (because of the hyphens) and compares subsequent + # segments incorrectly, so `-rc.2026-07-09.12` does not + # cleanly rank above `-rc.2026-07-09.9` in its impl. `true` + # sidesteps that. # - # Surfaced 2026-07-13 on encodium/batch — rc.9 stayed pinned as - # "latest" after rc.10/11/12 were successfully promoted. - makeLatest: legacy + # Why not omitted (relying on ncipollo default): the action + # doesn't forward the default to the PATCH request, so GH's + # 'no reevaluation on undefined' behavior kicks in and the + # first-promoted rc stays pinned as latest indefinitely. + # + # Semantic under RT v2: "latest release" = whatever is + # currently running in prod. Rollback deploys of older rc's + # correctly move latest backwards to reflect what's actually + # deployed. Main-branch clean tags (`vX.Y.Z`) go through a + # different action (mathieudutour/ncipollo on create, not + # PATCH) so they're not affected by this change — they use + # normal semver ordering on release create. + makeLatest: true