Merge pull request #1603 from DeusData/fix/vt-evidence-marker

fix(ci): publish VT evidence under the marker the gate actually writes
This commit is contained in:
Martin Vogel
2026-08-14 06:11:37 +02:00
committed by GitHub
2 changed files with 26 additions and 1 deletions
+1 -1
View File
@@ -40,7 +40,7 @@ publish_copy() {
publish_copy "$VT_ASSOCIATIONS" cbm-release-scan-associations-v3 virustotal-associations.tsv
publish_copy "$VT_EXPECTED_SCAN_SET" cbm-release-scan-set-v2 virustotal-scan-set.tsv
publish_copy "$VT_RESULTS_PATH" cbm-virustotal-results-v1 virustotal-results.tsv
publish_copy "$VT_RESULTS_PATH" cbm-virustotal-results-v2 virustotal-results.tsv
for name in virustotal-associations.tsv virustotal-results.tsv virustotal-scan-set.tsv; do
if command -v sha256sum >/dev/null 2>&1; then
+25
View File
@@ -32,6 +32,31 @@ grep -Fq 'Microsoft `!ml` tolerance' "$ROOT/README.md" || \
grep -Fq 'Policy identifier: `cbm-vt-candidate-selection-v1`' "$ROOT/SECURITY.md" || \
fail "SECURITY.md must name the versioned candidate-selection policy"
# Every marker publish-vt-evidence.sh validates must be one the gate actually
# writes. These drifted silently: the results format went to v2 while the
# publisher still demanded v1, and nothing caught it because the publisher had
# no caller for a while. Restoring the caller failed a real release at the very
# last step, after the full test matrix, both builds, smoke and soak had passed.
python3 - "$ROOT" <<'MARKERS' || fail "evidence markers disagree between writer and publisher"
import pathlib, re, sys
root = pathlib.Path(sys.argv[1])
publisher = (root / "scripts/ci/publish-vt-evidence.sh").read_text(encoding="utf-8")
writers = "\n".join(
(root / name).read_text(encoding="utf-8")
for name in ("scripts/ci/check-virustotal.sh", "scripts/ci/append-vt-notes.sh")
)
expected = re.findall(r"^publish_copy\s+\S+\s+(\S+)", publisher, re.M)
if not expected:
print("no publish_copy markers found - has the publisher been restructured?", file=sys.stderr)
raise SystemExit(1)
missing = [m for m in expected if m not in writers]
if missing:
for m in missing:
print(f"publisher expects marker never written by the gate: {m}", file=sys.stderr)
raise SystemExit(1)
print(f"OK: all {len(expected)} published evidence markers match what the gate writes")
MARKERS
# Tripwire for the REVERTED endpoint-verification mechanism specifically. The
# current `!ml` tolerance is a policy branch inside this gate, not a callout to
# an external verification service, and must never become one.