Skip to content

ci(dry-run): add skip_smoke for a direct build → VirusTotal pass - #1490

Merged
DeusData merged 1 commit into
mainfrom
ci/dry-run-skip-smoke
Aug 7, 2026
Merged

DeusData merged 1 commit into
mainfrom
ci/dry-run-skip-smoke

Conversation

@DeusData

@DeusData DeusData commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Follow-up to #1489. Adding the VirusTotal step left one trip unavailable: build straight to the scan.

Smoke sits in the VirusTotal job's needs, so the only way to reach the scan was to run smoke first — and a smoke failure would withhold precisely the answer such a run was dispatched to get.

The three skips now cover three separate questions

input effect question
skip_builds no artifacts at all "do lint and tests pass?"
skip_smoke build + scan, no smoke "does this diff scan red?"
skip_virustotal build + smoke + soak, no scan "do the archives pass CI?"

skip_smoke is for the case where the scan verdict is the point: the last release scanned clean, so the only question is whether the accumulated diff turns it red. Everything between build and the scan is cost without information for that question.

Skipped vs failed — the distinction that matters

VirusTotal keeps smoke and soak in its needs, deliberately. They order the job last; they don't gate it:

  • a skipped smoke leaves the scan reachable (result == 'skipped', which is not 'failure')
  • a failed smoke still withholds it — a verdict on artifacts already known broken isn't worth two hours of polling

tests/test_release_gate_chain_contract.sh exists to catch exactly the error of an optional phase silently disabling the phases after it. It passes, as do the venue-parity and exec-bit contracts.

Scope

dry-run.yml is workflow_dispatch-only — nothing here runs on PRs or pushes. Workflow-file change only; no scripts, no product code.

Adding the VirusTotal step left one trip unavailable: build straight to the
scan. Smoke is in the VirusTotal job's needs, so the only way to reach the scan
was to run smoke first — and a smoke failure would withhold precisely the answer
such a run was dispatched to get.

The skips now cover the three questions worth asking separately:

  skip_builds      no artifacts at all             "do lint and tests pass?"
  skip_smoke       build + scan, no smoke          "does this diff scan red?"
  skip_virustotal  build + smoke + soak, no scan   "do the archives pass CI?"

skip_smoke is for the case where the scan verdict is the entire point: the last
release scanned clean, so the question is only whether the accumulated diff
turns it red. Everything between build and the scan is cost without information
for that question.

VirusTotal keeps smoke and soak in its needs, and that is deliberate: they order
the job last, they do not gate it. A SKIPPED smoke leaves the scan reachable
(result 'skipped', which is not 'failure'); a FAILED smoke still withholds it,
because a verdict on artifacts already known to be broken is not worth two hours
of polling. The release-gate-chain contract covers exactly this distinction —
an optional phase must not silently disable the phases after it — and passes.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
@DeusData
DeusData merged commit a8c6b3f into main Aug 7, 2026
10 checks passed
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