name: Nightly (slow tests) # Run nightly at 03:00 UTC + on manual dispatch. # Owns the slow-test lanes that don't fit the PR feedback loop: # - sitl: pytest -m sitl (gated by ARDUPILOT_SITL_HOST in tests) # - e2e: pytest -m e2e + e2e_slow against real datasets (when present) # # The on-demand SITL workflow lives in .github/workflows/sitl.yml and is unchanged. on: schedule: - cron: "0 3 * * *" workflow_dispatch: jobs: sitl: name: SITL marker collection (scaffold — real SITL via sitl.yml) runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" cache: pip - run: sudo apt-get update -qq && sudo apt-get install -y --no-install-recommends libgl1 libglib2.0-0 - run: pip install --no-cache-dir -e ".[dev]" - name: Collect SITL tests (skipped without ARDUPILOT_SITL_HOST) # In nightly, ARDUPILOT_SITL_HOST is intentionally absent; tests self-skip. # The on-demand .github/workflows/sitl.yml runs the actual SITL containers. # This job exists so the -m sitl marker is exercised on a recurring basis # and a collection regression is caught. run: python -m pytest tests/ -m sitl --collect-only -q e2e: name: E2E real-flight dataset replay runs-on: ubuntu-latest timeout-minutes: 120 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" cache: pip - run: sudo apt-get update -qq && sudo apt-get install -y --no-install-recommends libgl1 libglib2.0-0 - run: pip install --no-cache-dir -e ".[dev]" - name: Run e2e tests (skip when datasets are absent) # tests/e2e/conftest.py fixtures self-skip tests when their dataset path is missing. # If no dataset is present in the runner image, the job runs the collection but # most assertions short-circuit on the skip fixture. run: python -m pytest tests/ -m "e2e or e2e_slow" -v --tb=short || true # `|| true` to allow soft-failure during Phase 2 bootstrap; flip to hard-fail in # Phase 6 when FIXTURE-01 lands a CI-provisioned Azaion dataset.