Files
codebase-memory-mcp/.github/workflows
Martin Vogel 1670414211 fix(release): skip_tests silently skipped smoke and soak too
Run 30504814537 built all eight platforms successfully with skip_tests=true, and
reported:

  test:  skipped     (intended)
  smoke: skipped     (NOT intended)
  soak:  skipped     (NOT intended)
  release-draft: running

GitHub propagates "skipped" TRANSITIVELY down the needs graph. `build` carried
`!cancelled() && !failure()` so it overrode the skipped `test` and ran; `smoke`
had no `if:` and `soak` only checked soak_level, so both inherited the skip.
Nothing failed. Nothing announced it. The run then proceeded toward publishing
binaries that had never been smoke-tested or soaked -- the exact opposite of what
skip_tests was for, which was to skip a phase already proven green, not to
quietly stop testing the artifacts.

The second half of the defect is worse than the first: `release-draft` guarded
itself with a bare `!cancelled() && !failure()`, which is fail-OPEN. A skipped
job is neither cancelled nor failed, so a skipped smoke sails straight through
it. The draft was one gate away from being cut from unverified binaries, and the
only reason it was not is that the run was cancelled by hand.

Fixes, both directions:
  - smoke and soak get `!cancelled() && !failure()`, so a deliberately skipped
    ancestor no longer skips them;
  - release-draft now requires `needs.smoke.result == 'success'` and enumerates
    `needs.soak.result` explicitly, so a SKIPPED smoke BLOCKS the draft, and a
    legitimately skipped soak (soak_level=none) stays distinguishable from a soak
    that never ran.

tests/test_release_gate_chain_contract.sh pins both properties: every job
downstream of the optional phase must carry the override, and the draft must
demand smoke success rather than smoke non-failure. Verified in both directions
-- it passes on this workflow and fails with 2 violations when the previous
smoke/soak conditions are restored.

Nothing was published: the release remained a draft (isDraft=true,
publishedAt=null) and the run is cancelled.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
2026-07-30 03:45:33 +02:00
..