Skip to content

ci(sanitizer): das scharfe Tor konnte mit acht von neun Tests gruen m… #575

ci(sanitizer): das scharfe Tor konnte mit acht von neun Tests gruen m…

ci(sanitizer): das scharfe Tor konnte mit acht von neun Tests gruen m… #575

Workflow file for this run

# ============================================================================
# UnifiedFloppyTool — Audit conformance gate
#
# Runs the forensic hardware-provider audit (audit/, MF-187) as a CI lane:
# - every audit/<provider>/diff.py — UFT-side constants vs the reference;
# exits non-zero on a FAIL row (a real wire-protocol divergence)
# - syntax-checks every audit/<provider>/test_*_vectors.c (native backends)
# - py_compile every audit/<provider>/mock_*.py (CLI-wrapper backends)
#
# Stdlib-Python + gcc only — no Qt, no external SDK. Fast.
#
# NOT yet wired here: the older tests/external_audits/{gw,fluxengine}/ scripts.
# extract_uft_calls.py there parses the V1 fluxenginehardwareprovider.cpp,
# deleted in P1.18 — those scripts need a V2 refresh before they can be a
# gate (tracked follow-up, audit/MASTER_REPORT.md). test_gw_encoder.c, the
# byte-exact GW encoder regression test, already runs in the main ctest
# suite (tests/CMakeLists.txt) — it is not duplicated here.
# ============================================================================
name: Audit
on:
push:
branches: [main, 'refactor/**']
pull_request:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
provider-audits:
# MF-432: without this GitHub's default is 360 min. On 2026-08-19
# five Linux jobs hung in the Qt/apt download and would have burned
# six hours each. A hang now dies here instead.
timeout-minutes: 20
name: Hardware-provider audit
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v7
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Provider constants diff (audit/*/diff.py)
run: |
set -e
fail=0
for f in audit/*/diff.py; do
echo "==== $f ===="
python3 "$f" || fail=1
done
if [ "$fail" -ne 0 ]; then
echo "::error::one or more audit diff.py reported a FAIL row"
exit 1
fi
- name: Syntax-check native vector tests (audit/*/test_*_vectors.c)
run: |
set -e
for c in audit/*/test_*_vectors.c; do
echo "==== $c ===="
gcc -std=c11 -I include -fsyntax-only "$c"
done
- name: Byte-compile CLI-wrapper mocks (audit/*/mock_*.py)
run: |
set -e
for m in audit/*/mock_*.py; do
echo "==== $m ===="
python3 -m py_compile "$m"
done
- name: Tier-2.5 hardware simulator gate (tests/hil/run_simulated.py)
run: |
# MF-268: byte-compile the simulator scripts + run the Tier-2.5
# gate. The gate exits 1 on any FAIL — SIMULATED is acceptable,
# NOT_RUN is acceptable, FAIL means a simulator-output regression.
# See tools/hw_simulators/README.md.
set -e
for s in tools/hw_simulators/sim_*.py tools/adfcopy_sim.py \
tools/applesauce_sim.py tools/greaseweazle_sim.py; do
echo "==== $s ===="
python3 -m py_compile "$s"
done
PYTHONIOENCODING=utf-8 python3 tests/hil/run_simulated.py \
--out hil_simulated_ci.md
echo "::group::Tier-2.5 simulation report"
cat hil_simulated_ci.md
echo "::endgroup::"