#!/usr/bin/env bash # Tier-1 (workstation Docker) entrypoint. Selector-parity sibling of # `e2e/jetson/run-tier2.sh`. # # Usage: # ./run-tier1.sh \ # --fc-adapter \ # --vio-strategy \ # [-k ] \ # [--build-kind ] \ # [--enable-chamber] \ # [--dry-run] # # AZ-444 AC-1: this script + run-tier2.sh accept the same `-k ` # flag and emit the same pytest invocation modulo the TIER env var. set -euo pipefail FC_ADAPTER="" VIO_STRATEGY="" SELECTOR="" BUILD_KIND="production" ENABLE_CHAMBER=0 DRY_RUN=0 usage() { grep -E '^# ' "$0" | sed 's/^# //' >&2 exit 1 } while [[ $# -gt 0 ]]; do case "$1" in --fc-adapter) FC_ADAPTER="$2"; shift 2 ;; --vio-strategy) VIO_STRATEGY="$2"; shift 2 ;; -k|--selector) SELECTOR="$2"; shift 2 ;; --build-kind) BUILD_KIND="$2"; shift 2 ;; --enable-chamber) ENABLE_CHAMBER=1; shift ;; --dry-run) DRY_RUN=1; shift ;; -h|--help) usage ;; *) echo "Unknown arg: $1" >&2; usage ;; esac done if [[ -z "$FC_ADAPTER" || -z "$VIO_STRATEGY" ]]; then echo "ERROR: --fc-adapter and --vio-strategy are required" >&2 usage fi case "$FC_ADAPTER" in ardupilot|inav) ;; *) echo "ERROR: --fc-adapter must be ardupilot or inav (got: $FC_ADAPTER)" >&2; exit 2 ;; esac case "$VIO_STRATEGY" in okvis2|klt_ransac|vins_mono) ;; *) echo "ERROR: --vio-strategy must be okvis2 | klt_ransac | vins_mono (got: $VIO_STRATEGY)" >&2; exit 2 ;; esac case "$BUILD_KIND" in production|asan) ;; *) echo "ERROR: --build-kind must be production or asan (got: $BUILD_KIND)" >&2; exit 2 ;; esac : "${RUN_ID:=tier1-$(date -u +%Y%m%dT%H%M%SZ)-${FC_ADAPTER}-${VIO_STRATEGY}}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" PYTEST_ARGS=("/test-suite") PYTEST_ARGS+=("--csv=/e2e-results/run-${RUN_ID}/report.csv") PYTEST_ARGS+=("--csv-columns=test_id,test_name,traces_to,fc_adapter,vio_strategy,tier,started_at_utc,execution_time_ms,result,error_message,evidence_paths") PYTEST_ARGS+=("--evidence-out=/e2e-results/run-${RUN_ID}/evidence") PYTEST_ARGS+=("--build-kind=${BUILD_KIND}") [[ "${ENABLE_CHAMBER}" -eq 1 ]] && PYTEST_ARGS+=("--enable-chamber") [[ -n "${SELECTOR}" ]] && PYTEST_ARGS+=("-k" "${SELECTOR}") COMPOSE_CMD=( docker compose -f "${SCRIPT_DIR}/docker-compose.test.yml" run --rm -e TIER=tier1-workstation -e BUILD_KIND="${BUILD_KIND}" e2e-runner pytest "${PYTEST_ARGS[@]}" ) if [[ "${DRY_RUN}" -eq 1 ]]; then echo "[tier1] --dry-run:" echo "[tier1] RUN_ID=${RUN_ID}" echo "[tier1] ${COMPOSE_CMD[*]}" exit 0 fi RUN_ID="${RUN_ID}" \ FC_ADAPTER="${FC_ADAPTER}" \ VIO_STRATEGY="${VIO_STRATEGY}" \ TIER="tier1-workstation" \ "${COMPOSE_CMD[@]}" echo "[tier1] Suite complete. RUN_ID=${RUN_ID}"