Skip to content

Commit ff05889

Browse files
import: finalize stable release after consumer proof
History-preserving import of the reviewed 1.15.1 stable-release ordering fix. Preserve the two-parent publication topology.
2 parents c199d72 + 7bf30c0 commit ff05889

2 files changed

Lines changed: 52 additions & 3 deletions

File tree

.github/workflows/release.yml

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,9 @@ jobs:
200200
files: artifacts/**/*
201201
generate_release_notes: true
202202
prerelease: ${{ contains(github.ref_name, '-') }}
203-
make_latest: ${{ contains(github.ref_name, '-') && 'false' || 'true' }}
203+
# Stable releases become latest only after crates and exact consumer
204+
# proof pass in finalize-release below. RCs remain prereleases.
205+
make_latest: false
204206

205207
publish-crates:
206208
name: Publish to crates.io
@@ -385,9 +387,36 @@ jobs:
385387
expected_version: ${{ needs.create-release.outputs.release_version }}
386388
release_kind: ${{ needs.create-release.outputs.release_kind }}
387389

390+
finalize-release:
391+
name: Finalize stable GitHub Release
392+
needs: [publish-crates, verify-container, verify-action]
393+
if: ${{ github.repository == 'EffortlessMetrics/tokmd' && !contains(github.ref_name, '-') }}
394+
runs-on: ubuntu-latest
395+
permissions:
396+
contents: write
397+
steps:
398+
- name: Finalize stable release as latest
399+
env:
400+
GH_TOKEN: ${{ github.token }}
401+
REPOSITORY: ${{ github.repository }}
402+
TAG: ${{ github.ref_name }}
403+
shell: bash
404+
run: |
405+
set -euo pipefail
406+
release="$(gh api "repos/${REPOSITORY}/releases/tags/${TAG}")"
407+
test "$(jq -r '.draft' <<<"${release}")" = false
408+
test "$(jq -r '.prerelease' <<<"${release}")" = false
409+
gh release edit "${TAG}" --repo "${REPOSITORY}" --draft=false --latest
410+
latest="$(gh api "repos/${REPOSITORY}/releases/latest" --jq '.tag_name')"
411+
test "${latest}" = "${TAG}"
412+
{
413+
echo "- stable_release: finalized"
414+
echo "- latest_tag: ${latest}"
415+
} >> "${GITHUB_STEP_SUMMARY}"
416+
388417
promote-aliases:
389418
name: Promote stable aliases
390-
needs: [publish-crates, verify-container, verify-action]
419+
needs: finalize-release
391420
if: ${{ github.repository == 'EffortlessMetrics/tokmd' && !contains(github.ref_name, '-') }}
392421
runs-on: ubuntu-latest
393422
permissions:

policy/ci-lane-whitelist.toml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,26 @@ duplicate_of = ["test_action_main"]
950950
review_after = "2026-08-02"
951951
expires = "2027-02-02"
952952

953+
[[lane]]
954+
id = "release_finalize"
955+
workflow = ".github/workflows/release.yml"
956+
job = "Finalize stable GitHub Release"
957+
kind = "release"
958+
tier = "deep"
959+
default_pr = false
960+
blocking = true
961+
runner = "ubuntu_latest"
962+
base_lem = 5
963+
owner = "release/publish"
964+
intent = "Finalize a stable GitHub Release as latest only after registry and exact consumer proof pass."
965+
failure_mode = "A partial stable publication is presented as the latest release before registry completion."
966+
proof_obligation = "Verify the release is non-draft and non-prerelease, finalize it as latest, and verify the latest tag points at the expected stable tag."
967+
evidence = ["release workflow logs", "GitHub latest release tag"]
968+
allowed_triggers = ["push"]
969+
duplicate_of = []
970+
review_after = "2026-08-05"
971+
expires = "2027-02-05"
972+
953973
[[lane]]
954974
id = "release_promote_aliases"
955975
workflow = ".github/workflows/release.yml"
@@ -963,7 +983,7 @@ base_lem = 4
963983
owner = "release/publish"
964984
intent = "Move v1 and mutable GHCR aliases only after exact release, crate, container, and Action gates pass."
965985
failure_mode = "Mutable consumer aliases move before the release surfaces are proven."
966-
proof_obligation = "Require publish-crates, exact-container verification, and exact-tag Action verification before moving aliases."
986+
proof_obligation = "Require finalized stable release, exact-container verification, and exact-tag Action verification before moving aliases."
967987
evidence = ["release workflow logs", "GitHub tag ref", "GHCR manifest tags"]
968988
allowed_triggers = ["push"]
969989
duplicate_of = []

0 commit comments

Comments
 (0)