Files
gps-denied-onboard/.github/workflows/ci.yml
T
Oleksandr Bezdieniezhnykh 1ebab29a4f [AZ-332] C1 OKVIS2 Strategy: facade + binding skeleton
Python facade (`Okvis2Strategy`) is production-quality and satisfies
AZ-331's `VioStrategy` protocol; full AC-1..10 coverage with
AC-9 + NFR-perf marked `tier2`. The C++ pybind11 binding compiles
and loads but throws `OkvisFatalException("estimator not yet wired")`
on first `add_frame` — the `okvis::ThreadedKFVio` wiring is a tier2
follow-up the Step-15 Product Completeness Gate is expected to track
as a remediation task.

Resolved contradictions:

* Constructor signature aligned with the AZ-331 factory: `(config, *,
  fdr_client, clock=None)`. Calibration / preintegrator / logger
  built internally from config. No churn on AZ-331.
* IMU substrate: OKVIS2 owns its internal estimator IMU integration;
  the AZ-276 `ImuPreintegrator` is a separate substrate consumed by
  E-C5's fusion graph. Single source of truth lives at the sample
  stream, not the integrator instance.
* FDR API: `FdrClient.enqueue(record)` with new `vio.health` kind
  added to AZ-272 `KNOWN_PAYLOAD_KEYS`.

CI matrix forces `-DBUILD_OKVIS2=OFF` until the tier2 wiring task
brings Ceres / SuiteSparse / OKVIS2 vendored submodules into the
Linux build.

Files: 17 added/modified across `c1_vio/`, `fdr_client/records.py`,
`cpp/okvis2/CMakeLists.txt`, CI workflow, AZ-332 task spec
(implementation-notes section), batch 23 report.

Tests: 17 new (15 tier1 + 2 tier2). Full Tier-1 suite: 1109 pass,
2 skipped (env), 2 deselected (tier2). No regressions.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-12 09:56:45 +03:00

100 lines
3.1 KiB
YAML

name: ci-tier1
on:
push:
branches: [dev, stage, main]
pull_request:
branches: [dev, stage, main]
jobs:
lint:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- run: pip install -e ".[dev]"
- run: ruff check src tests
- run: mypy src
unit:
runs-on: ubuntu-22.04
needs: lint
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- run: pip install -e ".[dev]"
- name: pytest unit (per-component coverage gate)
run: pytest -q --cov=gps_denied_onboard --cov-fail-under=75 tests/unit
integration:
runs-on: ubuntu-22.04
needs: unit
steps:
- uses: actions/checkout@v4
- name: docker compose up
run: docker compose -f docker-compose.test.yml up --abort-on-container-exit --exit-code-from e2e-runner --build
build:
name: build-${{ matrix.kind }}
runs-on: ubuntu-22.04
needs: lint
strategy:
fail-fast: false
matrix:
kind: [deployment, research]
include:
# AZ-332 — BUILD_OKVIS2 forced OFF in Tier-1 CI until the tier2
# follow-up wires `okvis::ThreadedKFVio` end-to-end. The C++
# binding skeleton + CMake glue still ship in this build; full
# OKVIS2 native compile is gated on installing Ceres-solver +
# OKVIS2 vendored submodules (BRISK, DBoW2) via apt, plus
# `submodules: recursive` checkout. That CI lift is the
# tier2 task's surface, not AZ-332's.
- kind: deployment
cmake_flags: >-
-DBUILD_OKVIS2=OFF -DBUILD_VINS_MONO=OFF
-DBUILD_VPR_SALAD=OFF -DBUILD_C11_TILE_MANAGER=OFF
- kind: research
cmake_flags: >-
-DBUILD_OKVIS2=OFF -DBUILD_VINS_MONO=ON -DBUILD_VPR_SALAD=ON
steps:
- uses: actions/checkout@v4
- run: cmake -S . -B build ${{ matrix.cmake_flags }}
- run: cmake --build build --parallel
sbom-diff:
runs-on: ubuntu-22.04
needs: build
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: SBOM diff (ADR-002 enforcement)
run: python ci/sbom_diff.py --deployment build-deployment-sbom.json --research build-research-sbom.json
security:
runs-on: ubuntu-22.04
needs: build
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- run: pip install pip-audit
- run: pip-audit -r pyproject.toml || true
- name: OpenCV pin gate (D-CROSS-CVE-1)
run: python ci/opencv_pin_gate.py --pyproject pyproject.toml
push-images:
runs-on: ubuntu-22.04
if: github.event_name == 'push' && contains(fromJson('["refs/heads/dev","refs/heads/stage","refs/heads/main"]'), github.ref)
needs: [unit, integration, build, sbom-diff, security]
steps:
- uses: actions/checkout@v4
- run: echo "push images to GHCR (deployment + research) — wiring lands per release task"