name: full-pytest # Post-merge FAST lane — runs on every push to main. # # Marker: -m "not quarantine and not slow" # ~9.5k unit/integration tests; excludes the slow registry in conftest.py # (soak / bench / proof / register-matrix; ~912 tests including the 16 min # phase2 fixture floor). # # Why "full-pytest" still names this file: # Keep the workflow id stable for Forgejo required-check / history matching. # The job display name and this comment state the true contract: FAST on main. # The complete non-quarantine suite runs in nightly-full-pytest.yml. # # PR gate: smoke.yml (small critical subset). # Lane pins: lane-shas.yml. # Full soak: nightly-full-pytest.yml (schedule + workflow_dispatch). # # See: # conftest.py — QUARANTINE + SLOW_FILES / SLOW_TESTS registries # docs/testing-lanes.md — lane commands and CI policy (SSoT) # docs/ci-optimization.md — runner bottleneck + capacity notes on: push: branches: [main] permissions: contents: read concurrency: group: full-pytest-${{ github.ref }} cancel-in-progress: true jobs: pytest: name: fast pytest (-m "not quarantine and not slow" -n 2) runs-on: ubuntu-latest # Headroom over ~9.5 min parallel on a 10-core host; Act 2-vCPU is slower. timeout-minutes: 30 steps: - name: checkout uses: actions/checkout@v4 with: fetch-depth: 1 - name: set up uv uses: astral-sh/setup-uv@v5 with: python-version: '3.12.13' enable-cache: true - name: install dependencies run: | uv sync --locked --extra dev - name: pytest (parallel, quarantine and slow excluded) env: PYTHONPATH: ${{ github.workspace }} CORE_SHOWCASE_SKIP_BUDGET: "1" run: | uv run pytest -m "not quarantine and not slow" -n 2 --tb=short -q --maxfail=10 - name: report quarantine size (informational) if: always() env: PYTHONPATH: ${{ github.workspace }} run: | uv run python -c " import sys sys.path.insert(0, '.') from conftest import QUARANTINE print(f'::notice title=Quarantine size::{len(QUARANTINE)} tests currently quarantined. Goal: shrink this number.') "