From a2a9c2ca463e99e8f0dde6d6992bf29097bf436a Mon Sep 17 00:00:00 2001 From: Yuzviak Date: Mon, 11 May 2026 18:33:04 +0300 Subject: [PATCH] feat(02-05): create nightly.yml for sitl + e2e slow-test lanes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Scheduled at 03:00 UTC daily + workflow_dispatch. - sitl job: pytest --collect-only -m sitl (scaffold; tests self-skip without ARDUPILOT_SITL_HOST; real SITL containers remain in sitl.yml) - e2e job: pytest -m 'e2e or e2e_slow' (soft-fail in Phase 2; datasets self-skip via conftest fixtures; hard-fail enabled in Phase 6 / FIXTURE-01) sitl.yml untouched per PATTERNS.md §4.3 item 3. --- .github/workflows/nightly.yml | 52 +++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .github/workflows/nightly.yml diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000..542ebf7 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,52 @@ +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.