name: Host SITL smoke on: pull_request: push: workflow_dispatch: permissions: contents: read jobs: smoke: name: Deterministic Gazebo command path runs-on: ubuntu-24.04 timeout-minutes: 25 steps: - name: Check out source uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Check host-SITL contracts working-directory: firmware run: | python3 -m unittest tools/sitl/test_kaptan_sim.py python3 tools/sitl/world-structure-test.py cargo check --locked -p kaptan-mavlink --no-default-features cargo check --locked -p kaptan-log --no-default-features cargo check --locked -p kaptan-diagnostics-mavlink cargo test --locked -p kaptan-log cargo test --locked -p kaptan-diagnostics-mavlink if rg -n '(^use log::|\blog::)' platforms/stm32f7/src/f722; then echo 'the standard log facade is forbidden in F722 IRQ/panic paths' exit 1 fi if rg -n 'max_level_(off|error|warn|info|debug|trace)' --glob 'Cargo.toml' --glob '*.rs' .; then echo 'log/max_level_* removes records before Kaptan can observe them' exit 1 fi cargo test --locked -p kaptan-sitl - name: Run Docker closed-loop smoke run: firmware/tools/sitl/e2e-smoke.sh