From a5339ac9495d7870a682f6a5f5f2b35494af30d1 Mon Sep 17 00:00:00 2001 From: Michel de Graaf Date: Sat, 25 Jul 2026 03:45:43 +0200 Subject: [PATCH] fix(ci): gate the binary and formula jobs on the resolved tag Neither `inputs.tag` nor `github.event.inputs.tag` evaluates in a job-level `if` on workflow_dispatch, so both spellings left the binaries and homebrew jobs skipped on every manual recovery run, while the step-level condition on the same input fired correctly and resolved the tag. The run log settles it: INPUT_TAG reached the step as v7.0.0 and the jobs still skipped. `Resolve tag` already runs exactly when there is something to build, so its output is the honest signal, and a `needs` output does evaluate here. --- .github/workflows/release.yml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eac8a59..22bed3a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -138,7 +138,13 @@ jobs: # `github.event.inputs`, not `inputs`: the latter is empty in a job-level # condition on workflow_dispatch, and `null != ''` coerces to false, which # silently skipped this job on every manual recovery run. - if: needs.release.outputs.created == 'true' || github.event.inputs.tag != '' + # Gate on the resolved tag, not on the dispatch input: neither `inputs.tag` + # nor `github.event.inputs.tag` evaluates in a job-level `if`, so both + # spellings skipped this job on every manual recovery run. `Resolve tag` + # already runs exactly when there is something to build (a fresh release or + # a hand-typed tag), and its output is a plain `needs` value that does work + # here. + if: needs.release.outputs.tag != '' runs-on: ${{ matrix.os }} strategy: # One flaky cross-linker must not hold back the five targets that built. @@ -195,7 +201,13 @@ jobs: homebrew: name: Homebrew tap needs: [release, binaries] - if: needs.release.outputs.created == 'true' || github.event.inputs.tag != '' + # Gate on the resolved tag, not on the dispatch input: neither `inputs.tag` + # nor `github.event.inputs.tag` evaluates in a job-level `if`, so both + # spellings skipped this job on every manual recovery run. `Resolve tag` + # already runs exactly when there is something to build (a fresh release or + # a hand-typed tag), and its output is a plain `needs` value that does work + # here. + if: needs.release.outputs.tag != '' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4