0537b40dcc
Three-tier test orchestrator validates opcode maps, bit widths, packet layouts, and round-trip correctness across FPGA RTL, Python GUI, and STM32 firmware. Catches 3 real bugs: - status_words[0] 37-bit truncation in both USB interfaces - Python radar_mode readback at wrong bit position (bit 21 vs 24) - RadarSettings.cpp buffer overread (min check 74 vs required 82) 29 tests: 24 pass, 5 xfail (documenting confirmed bugs). 4th CI job added: cross-layer-tests (Python + iverilog + cc).
115 lines
3.4 KiB
YAML
115 lines
3.4 KiB
YAML
name: AERIS-10 CI
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [main, develop]
|
|
push:
|
|
branches: [main, develop]
|
|
|
|
jobs:
|
|
# ===========================================================================
|
|
# Python: lint (ruff), syntax check (py_compile), unit tests (pytest)
|
|
# CI structure proposed by hcm444 — uses uv for dependency management
|
|
# ===========================================================================
|
|
python-tests:
|
|
name: Python Lint + Tests
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- uses: astral-sh/setup-uv@v5
|
|
|
|
- name: Install dependencies
|
|
run: uv sync --group dev
|
|
|
|
- name: Ruff lint (whole repo)
|
|
run: uv run ruff check .
|
|
|
|
- name: Syntax check (py_compile)
|
|
run: |
|
|
uv run python - <<'PY'
|
|
import py_compile
|
|
from pathlib import Path
|
|
|
|
skip = {".git", "__pycache__", ".venv", "venv", "docs"}
|
|
for p in Path(".").rglob("*.py"):
|
|
if skip & set(p.parts):
|
|
continue
|
|
py_compile.compile(str(p), doraise=True)
|
|
PY
|
|
|
|
- name: Unit tests
|
|
run: >
|
|
uv run pytest
|
|
9_Firmware/9_3_GUI/test_radar_dashboard.py -v --tb=short
|
|
|
|
# ===========================================================================
|
|
# MCU Firmware Unit Tests (20 tests)
|
|
# Bug regression (15) + Gap-3 safety tests (5)
|
|
# ===========================================================================
|
|
mcu-tests:
|
|
name: MCU Firmware Tests
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install build tools
|
|
run: sudo apt-get update && sudo apt-get install -y build-essential
|
|
|
|
- name: Build and run MCU tests
|
|
run: make test
|
|
working-directory: 9_Firmware/9_1_Microcontroller/tests
|
|
|
|
# ===========================================================================
|
|
# FPGA RTL Regression (25 testbenches + lint)
|
|
# ===========================================================================
|
|
fpga-regression:
|
|
name: FPGA Regression
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Icarus Verilog
|
|
run: sudo apt-get update && sudo apt-get install -y iverilog
|
|
|
|
- name: Run full FPGA regression
|
|
run: bash run_regression.sh
|
|
working-directory: 9_Firmware/9_2_FPGA
|
|
|
|
# ===========================================================================
|
|
# Cross-Layer Contract Tests (Python ↔ Verilog ↔ C)
|
|
# Validates opcode maps, bit widths, packet layouts, and round-trip
|
|
# correctness across FPGA RTL, Python GUI, and STM32 firmware.
|
|
# ===========================================================================
|
|
cross-layer-tests:
|
|
name: Cross-Layer Contract Tests
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- uses: astral-sh/setup-uv@v5
|
|
|
|
- name: Install dependencies
|
|
run: uv sync --group dev
|
|
|
|
- name: Install Icarus Verilog
|
|
run: sudo apt-get update && sudo apt-get install -y iverilog
|
|
|
|
- name: Run cross-layer contract tests
|
|
run: >
|
|
uv run pytest
|
|
9_Firmware/tests/cross_layer/test_cross_layer_contract.py
|
|
-v --tb=short
|