Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ PROJECT_NAME="airstack"
# If you've run ./airstack.sh setup, then this will auto-generate from the git commit hash every time a change is made
# to a Dockerfile or docker-compose.yaml file. Otherwise this can also be set explicitly to make a release version.
# auto-generated from git commit hash
VERSION="0.20.0-alpha.17"
VERSION="0.20.0-alpha.18"
# Image-tag discriminator ONLY (appears in the image tag suffix, e.g. ..._robot-x86-64_dev).
# No Dockerfile consumes it: "prebuilt" does NOT bake the built ros_ws into the image today —
# a real prebuilt (workspace-baked) stage is future work. Keep "dev" (mounted code, built live).
Expand Down
9 changes: 7 additions & 2 deletions .github/workflows/system-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,9 @@ jobs:
python-version: "3.12"

- name: Install report dependencies
run: pip install tabulate
# parse_metrics.py imports the tests/harness package, so it needs the
# full test requirements (pyyaml et al.), not just tabulate.
run: pip install -r tests/requirements.txt

- name: Resolve PR base branch
if: github.event_name == 'issue_comment' || github.event_name == 'pull_request'
Expand Down Expand Up @@ -655,8 +657,11 @@ jobs:

- name: Fail on regression
if: steps.report.outcome == 'failure'
# parse_metrics.py writes report.md before exiting 1 on a regression;
# an uncaught crash also exits 1 but never writes the report. Require
# both so a parser crash cannot masquerade as a metric regression.
run: |
if [ "${{ steps.report.outputs.parser_exit }}" = "1" ]; then
if [ "${{ steps.report.outputs.parser_exit }}" = "1" ] && [ -f report.md ]; then
echo "::error::Metric regression detected — see the report above for details."
else
echo "::error::Metrics report generation failed — see the report step log."
Expand Down
20 changes: 20 additions & 0 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# The tests/meta contract tests exercise `airstack up --dry-run`,
# whose preflight requires the PegasusSimulator submodule, and the
# docs-catalog contract resolves nav entries that live inside
# submodules (e.g. vdb_mapping_ros2/README.md).
submodules: recursive

- name: Set up Python
uses: actions/setup-python@v5
Expand All @@ -32,6 +38,20 @@ jobs:
- name: Install test dependencies
run: python -m pip install -r tests/requirements.txt

# `airstack up --dry-run --sim isaac` preflight hard-errors without
# Nucleus credentials. Provision the same guest stub that
# module-system-tests.yml creates; hosted runners never launch Isaac.
- name: Create Isaac Sim omni_pass.env (preflight stub)
run: |
mkdir -p simulation/isaac-sim/docker
cat > simulation/isaac-sim/docker/omni_pass.env <<'EOF'
OMNI_USER=guest
OMNI_PASS=guest
OMNI_SERVER="omniverse://airlab-nucleus.andrew.cmu.edu/NVIDIA/Assets/Isaac/5.1"
ACCEPT_EULA=Y
OMNI_ENV_PRIVACY_CONSENT=Y
EOF

- name: Run unit tests
env:
AIRSTACK_ROOT: ${{ github.workspace }}
Expand Down
16 changes: 16 additions & 0 deletions docs/release_notes/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,22 @@ its own notes. -->

## 0.20.0 (Unreleased)

- **CI un-redded: Metrics Report and Unit Tests fixed.** Every PR had been
failing since ~2026-08-20 for reasons unrelated to the code under test.
The system-tests **Metrics Report** job installed only `tabulate`, so
`tests/parse_metrics.py` (which imports the `tests/harness` package)
crashed with `ModuleNotFoundError: No module named 'yaml'` — and the crash
was misreported as "Metric regression detected"; the job now installs
`tests/requirements.txt`, and the regression verdict additionally requires
a written `report.md` so a parser crash can never masquerade as a metric
regression. The **Unit Tests** workflow ran the `tests/meta/` contract
suite on a checkout with no submodules and no `omni_pass.env`, so every
`airstack up --dry-run --sim isaac` contract hard-failed preflight and the
docs-catalog contract missed the submodule-resident vdb_mapping_ros2
README; the workflow now checks out submodules recursively and provisions
the same guest `omni_pass.env` stub that `module-system-tests.yml` uses
(preflight itself stays strict).

- **New reference stack `full_mighty` + registered `mighty` module.** The
MIGHTY Hermite-spline local planner (MIT ACL, RA-L 2026) with its
acl-mapping voxel world model and a NavigateTask/trajectory_controller
Expand Down
Loading