Derive the rollback target for scheduled release rehearsals

The weekly release-dry-run schedule failed at 'Resolve rehearsal
metadata' because GitHub does not apply workflow_dispatch input
defaults to schedule events, so rollback_version arrived empty and
resolve_release_promotion.py rejected the run.

Scheduled runs now pass --derive-rollback-latest-stable, which fills
an empty rollback_version with the latest stable tag preceding the
rehearsal version (currently v6.0.4 for 6.0.5-rc.3). Manual dispatches
keep the explicit rollback_version requirement; the stale prefilled
5.1.29 default is removed so operators state the target themselves.
The deployment-installability contract records the scoped scheduled
exception.
This commit is contained in:
rcourtman 2026-07-08 13:52:48 +01:00
parent 0d787a4b1f
commit 7645965afe
5 changed files with 156 additions and 7 deletions

View file

@ -1,11 +1,13 @@
name: Release Dry Run
on:
# Weekly drift watchdog: fires every Tuesday 07:00 UTC against pulse/v6-release
# so fixture, manifest, and load-calibration drift surfaces a week at a time
# instead of piling up until an RC publish. Scheduled runs use the input
# defaults below. Update rollback_version once v6 GA ships and a different
# stable line becomes the rollback target.
# Weekly drift watchdog: fires every Tuesday 07:00 UTC against the governed
# release branch so fixture, manifest, and load-calibration drift surfaces a
# week at a time instead of piling up until an RC publish. Scheduled runs
# carry no workflow_dispatch inputs (GitHub does not apply input defaults to
# schedule events), so the rehearsal step derives the rollback target as the
# latest stable tag preceding VERSION. Manual dispatches must still supply
# rollback_version explicitly.
schedule:
- cron: '0 7 * * 2'
workflow_dispatch:
@ -19,10 +21,9 @@ on:
required: false
type: string
rollback_version:
description: 'Required rollback stable version to rehearse (for example 5.1.14 or v5.1.14)'
description: 'Required rollback stable version to rehearse (for example 6.0.4 or v6.0.4)'
required: true
type: string
default: '5.1.29'
ga_date:
description: 'Stable v6.0.0 rehearsal only: planned GA publish date (YYYY-MM-DD)'
required: false
@ -107,6 +108,7 @@ jobs:
- name: Resolve rehearsal metadata
id: rehearsal
env:
EVENT_NAME: ${{ github.event_name }}
VERSION_INPUT: ${{ inputs.version }}
PROMOTED_FROM_TAG_INPUT: ${{ inputs.promoted_from_tag }}
ROLLBACK_VERSION_INPUT: ${{ inputs.rollback_version }}
@ -154,6 +156,13 @@ jobs:
if [ "${HOTFIX_EXCEPTION_INPUT:-false}" = "true" ]; then
HELPER_ARGS+=(--hotfix-exception)
fi
if [ "${EVENT_NAME}" = "schedule" ] && [ -z "${ROLLBACK_VERSION_INPUT:-}" ]; then
# Scheduled watchdog runs carry no dispatch inputs; derive the
# rollback target instead of failing. Manual dispatches never get
# this flag, so their explicit-rollback requirement stands.
HELPER_ARGS+=(--derive-rollback-latest-stable)
echo "[OK] Scheduled rehearsal: deriving rollback target from the latest preceding stable tag"
fi
python3 scripts/release_control/resolve_release_promotion.py \
"${HELPER_ARGS[@]}" > "$RUNNER_TEMP/rehearsal-metadata.out"