Skip to content

ci(release): fold deploy-intent check into tag_info step (fix startup failure from #303)#307

Merged
mateeullahmalik merged 1 commit into
masterfrom
fix/build-release-startup-failure
Jul 5, 2026
Merged

ci(release): fold deploy-intent check into tag_info step (fix startup failure from #303)#307
mateeullahmalik merged 1 commit into
masterfrom
fix/build-release-startup-failure

Conversation

@mateeullahmalik

Copy link
Copy Markdown
Collaborator

Summary

Follow-up to #303. That PR moved the tag-message into a step-level env: block to avoid shell-expanding a multi-line value into run:. Unfortunately GHA rejects that shape at workflow dispatch time — a multi-line output cannot be plumbed into another step's env: — so the release job never got scheduled.

Evidence the previous fix failed to run

Runs on the post-merge master SHA 8eae29e (Build and Release Workflow, id 163702778):

  • 28627254564 — status completed, conclusion failure, jobs=[], run_started_at == updated_at (dispatched and closed in the same second)
  • 28627293599 — same signature
  • Same signature on the fix branch push at 28615651344

This is the classic GHA startup-failure fingerprint: the workflow file parses, but the job graph is refused at scheduling.

Fix

Perform the [no-deploy] grep inside the Get tag information step, where $TAG_MESSAGE already exists as a plain bash variable, and export the single-line draft boolean from the same step. The multi-line tag_message output is still emitted (the release-body heredoc consumes it via <<'EOT', which is safe).

Two downstream references are updated from steps.deploy_check.outputs.draftsteps.tag_info.outputs.draft.

Why this is safer than #303

  • No cross-step propagation of multi-line untrusted content.
  • No step-level env: binding to a multi-line output (which is what tripped the scheduler).
  • The [no-deploy] semantics are byte-identical (same case-insensitive grep).
  • The draft output is a fixed true/false string — always single-line, always safe to consume via ${{ }}.
  • Diff: 12 additions, 13 deletions, one file.

Blast radius

  • .github/workflows/build&release.yml only.
  • No change to the actual build, ldflags, artifact naming, tarball layout, softprops/action-gh-release step, or release-body composition.
  • release-body heredoc (line ~208) still uses <<'EOT' and continues to reference steps.tag_info.outputs.tag_message safely (quoted heredoc suppresses expansion — this was true before and remains true).

Verification

  • Local: python3 -c "import yaml; yaml.safe_load(open('.github/workflows/build&release.yml'))" → OK, jobs ['build', 'release'].
  • Runtime: after merge, will retag v2.6.0-testnet at the new master HEAD and confirm CI produces a completed release job with supernode-linux-amd64.tar.gz + supernode-linux-amd64 attached to the existing release.

Rollback

Revert the commit. No state involved.

Post-merge plan

  1. Confirm this PR merges cleanly.
  2. Force-retag v2.6.0-testnet at new master → CI's Upload assets to existing release path attaches the two artifacts to the existing release (preserving the release notes).
  3. Run ./testnet_version_check.sh on the fleet to verify sn-manager picks it up on the 15 healthy SNs.

Follow-up to #303. The env-based approach in that PR triggered a GHA
startup failure (workflow accepted, 0 jobs scheduled, run completed
in the same second with conclusion=failure) because a step-level
`env:` value cannot safely carry the multi-line `tag_message`
output — GHA rejects the workflow at dispatch time.

Verified failure signature on 8eae29e:
  run 28627254564 / 28627293599 — status=completed, conclusion=failure,
  jobs=[], run_started_at == updated_at (single-second dispatch reject).

Fix: perform the `[no-deploy]` grep INSIDE the `Get tag information`
step, where `$TAG_MESSAGE` already exists as a plain bash variable.
Export the single-line `draft` boolean from the same step. The
multi-line `tag_message` output is preserved (still consumed by the
release-body heredoc, which is safe because it uses `<<'EOT'`).

Update the two downstream references from
  steps.deploy_check.outputs.draft
to
  steps.tag_info.outputs.draft.

Root cause and reasoning preserved as an inline comment.

Signed-off-by: Matee ullah Malik <mateeullahmalik@hotmail.com>
@mateeullahmalik mateeullahmalik merged commit ea1a9c4 into master Jul 5, 2026
8 checks passed
mateeullahmalik added a commit that referenced this pull request Jul 6, 2026
Follow-up to #307. The comment added in that PR contained the literal
text '${{ }} interpolation' inside a run: bash block. GitHub Actions
validates ${{ ... }} expressions everywhere in the workflow file at
dispatch time — including inside bash comments in run: block scalars.
An empty ${{ }} expression is a validation error, so every push to
master (and every tag push) since #307 landed hits a workflow startup
failure: run accepted, 0 jobs scheduled, run_started_at == updated_at,
conclusion=failure.

Verified failure signature on ea1a9c4 (post-#307 master):
  run 28756586178 / 28756630521 — status=completed, conclusion=failure,
  jobs=[], run_started_at == updated_at.

Also observed on tag push of v2.6.0-testnet retagged onto ea1a9c4:
the release job never scheduled, so assets remained empty.

Fix: rephrase the comment to describe the prior pattern in English
rather than embedding the literal syntax. No functional change to
any step logic.

Signed-off-by: Matee ullah Malik <mateeullahmalik@hotmail.com>
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.

2 participants