Skip to content

fix(release): dispatch the release workflow for a candidate tag - #465

Merged
joshua-temple merged 1 commit into
mainfrom
fix/release-trigger-reliability
Jul 5, 2026
Merged

joshua-temple merged 1 commit into
mainfrom
fix/release-trigger-reliability

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

Problem

The orchestrate finalize job cuts the release-candidate tag on the setup head SHA. In steady state that SHA is a prior chore: update state commit whose message carries a CI-skip marker. GitHub evaluates the marker on the tagged commit and suppresses every workflow the tag push would start, so the tag-push trigger that builds and publishes the candidate never fires. Recent candidates (v0.8.0-rc.6/rc.7) produced zero downstream Release runs for exactly this reason; rc.5 only worked because it happened to tag a normal commit.

Fix

When release.workflow is configured and the trunk is dispatch-driven (release_trigger: dispatch), the finalize job now dispatches that workflow explicitly against the candidate tag (gh workflow run --ref), mirroring the promote flow's existing post-publish dispatch. This is the dependable trigger regardless of the tagged commit's message.

  • Gated to dispatch-mode trunks so it never races a push-mode trunk's native tag-push trigger (no candidate is built twice).
  • Gated to real GitHub (github.server_url) so the act e2e harness, which has no workflow-dispatch API, is unaffected.
  • Config-driven and generic: any generated orchestrate benefits by setting release.workflow. cascade's own manifest is wired to its release.yaml and the workflows regenerated.

Verification

go build ./..., go test ./internal/generate ./internal/config (941 pass), golangci-lint run, actionlint on the regenerated workflows (no new findings), and cascade verify (3 files, no drift) all clean. New generator unit tests cover the emit/omit matrix and path normalization.

Notes

Release-path change: warrants a fleet validation run before it is considered fully accepted. This depends on fix/release-trigger-reliability's companion PR #464: the dispatched Release arrives at the fleet as an event: workflow_dispatch source run, which #464's broadened resolve gate must accept to fan the fleet out and produce the version-under-test artifact. Land #464 first (or together); this PR alone would fire the candidate build but the fleet would not validate it until #464 is in.

The regenerated promote.yaml gains the already-specified Trigger Release Build step as a side effect of setting release.workflow; it is guarded on is_final_env and inert for cascade (no environments; final publish runs through the hand-written auto-promote.yaml).

The orchestrate finalize job cuts the release-candidate tag on the setup
head SHA, which in steady state is a prior state commit whose message
carries a CI-skip marker. GitHub evaluates that marker on the tagged
commit and suppresses every workflow the tag push would start, so the
tag-push trigger that builds and publishes the candidate never fires.
Recent candidates produced zero downstream release runs as a result.

When release.workflow is configured and the trunk is dispatch-driven,
finalize now dispatches that workflow explicitly against the candidate
tag (gh workflow run --ref), mirroring the promote flow's post-publish
dispatch. The dispatch is gated to dispatch-mode trunks so it never
races a push-mode trunk's native tag trigger, and to real GitHub so the
act e2e harness is unaffected. Wire cascade's own manifest to its
release workflow and regenerate.

Verification: go build, go test ./internal/generate ./internal/config,
golangci-lint, actionlint on the regenerated workflows, and cascade
verify (no drift) all clean.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple
joshua-temple merged commit daa9b93 into main Jul 5, 2026
21 checks passed
@joshua-temple
joshua-temple deleted the fix/release-trigger-reliability branch July 5, 2026 15:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant