ci(sanitizer): das scharfe Tor konnte mit acht von neun Tests gruen m… #575
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ============================================================================ | |
| # 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::" |