From b81ba1f9a413ea2d350a846be1f8e767de8a990d Mon Sep 17 00:00:00 2001 From: Jeremi Joslin Date: Wed, 12 Aug 2026 21:03:37 +0700 Subject: [PATCH] fix(release): correlate exact rehearsal run Signed-off-by: Jeremi Joslin --- .github/workflows/release-rehearsal.yml | 6 ++++- release/OPERATIONS.md | 32 ++++++++++++++--------- release/scripts/test_release_rehearsal.py | 3 +++ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/.github/workflows/release-rehearsal.yml b/.github/workflows/release-rehearsal.yml index b97d2c19e..75ca61ea9 100644 --- a/.github/workflows/release-rehearsal.yml +++ b/.github/workflows/release-rehearsal.yml @@ -1,5 +1,5 @@ name: Rehearse RegistryStack Release -run-name: Rehearse ${{ inputs.release_id }} v${{ inputs.version }} +run-name: Rehearse ${{ inputs.release_id }} v${{ inputs.version }} (${{ inputs.request_id }}) on: workflow_dispatch: @@ -12,6 +12,10 @@ on: description: Prepared release train identity required: true type: string + request_id: + description: Unique operator-generated identity used to correlate this rehearsal + required: true + type: string permissions: contents: read diff --git a/release/OPERATIONS.md b/release/OPERATIONS.md index 380510f5a..2a8edff41 100644 --- a/release/OPERATIONS.md +++ b/release/OPERATIONS.md @@ -85,22 +85,30 @@ Ubuntu rehearsal from that branch: ```sh rehearsal_branch="$(git branch --show-current)" +rehearsal_request_id="$(openssl rand -hex 16)" gh workflow run release-rehearsal.yml \ --repo registrystack/registry-stack \ --ref "${rehearsal_branch}" \ -f version= \ - -f release_id= - -rehearsal_run="$( - gh run list \ - --repo registrystack/registry-stack \ - --workflow release-rehearsal.yml \ - --branch "${rehearsal_branch}" \ - --event workflow_dispatch \ - --limit 1 \ - --json databaseId \ - --jq '.[0].databaseId' -)" + -f release_id= \ + -f request_id="${rehearsal_request_id}" + +rehearsal_run="" +for _ in $(seq 1 30); do + rehearsal_run="$( + gh run list \ + --repo registrystack/registry-stack \ + --workflow release-rehearsal.yml \ + --branch "${rehearsal_branch}" \ + --event workflow_dispatch \ + --limit 100 \ + --json databaseId,displayTitle \ + --jq ".[] | select(.displayTitle | endswith(\"(${rehearsal_request_id})\")) | .databaseId" + )" + test -z "${rehearsal_run}" || break + sleep 2 +done +test -n "${rehearsal_run}" gh run watch "${rehearsal_run}" \ --repo registrystack/registry-stack \ --exit-status diff --git a/release/scripts/test_release_rehearsal.py b/release/scripts/test_release_rehearsal.py index bcab43ee3..528f5ac58 100644 --- a/release/scripts/test_release_rehearsal.py +++ b/release/scripts/test_release_rehearsal.py @@ -22,6 +22,9 @@ def test_workflow_is_manual_read_only_and_ubuntu_bounded(self) -> None: self.assertNotIn("push:", trigger) self.assertNotIn("pull_request:", trigger) self.assertNotIn("schedule:", trigger) + self.assertIn("${{ inputs.request_id }}", document["run-name"]) + self.assertIn("request_id:", trigger) + self.assertIn("required: true", trigger) self.assertEqual({"contents": "read"}, document["permissions"]) self.assertEqual(["rehearse"], list(document["jobs"])) job = document["jobs"]["rehearse"]