docs(lanes): settle this repo's lane-artifact root at docs/lanes/ (aof) #123
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| jobs: | |
| test: | |
| name: pytest (${{ matrix.os }}, py${{ matrix.python-version }}) | |
| runs-on: ${{ matrix.os }} | |
| # Typical runtime is ~20-30s. A hang must fail LOUDLY and fast, not sit | |
| # burning runner time until the 6h default limit -- macOS minutes bill at | |
| # 10x, and a job stuck at "in_progress" reads as "not done yet" rather | |
| # than "broken", which is how a false green gets merged. | |
| timeout-minutes: 10 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| # requires-python = ">=3.11" in pyproject.toml -- cover the floor | |
| # and the latest supported minor. | |
| python-version: ["3.11", "3.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install dependencies | |
| run: uv sync --all-extras --dev | |
| - name: Run test suite | |
| # No exclusions. The whole suite runs on every push and PR, on both | |
| # platforms. If you are tempted to add a --deselect here, fix the test | |
| # or fix the product instead -- an excluded test is a test nobody is | |
| # watching, which is how a total macOS breakage (#247) shipped. | |
| run: uv run pytest -q | |
| integration: | |
| name: pytest -m integration (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| # These fork real pty children. A pty child whose output is never drained | |
| # can wedge unreapably on macOS (state ``?Es``), so this job is the most | |
| # likely place in the repo for a hang to appear. Bound it. | |
| timeout-minutes: 10 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # No windows-latest here, deliberately. Every test this job selects | |
| # (`-m integration`) forks a real child process and, in most of the | |
| # files, allocates a real pty pair via the POSIX-only `pty`/`termios` | |
| # stdlib modules -- there is no Windows equivalent of either | |
| # mechanism. `test_ctrlc_functional_integration.py` and | |
| # `test_terminal_echo_integration.py` already `pytest.skip(..., | |
| # allow_module_level=True)` on win32 (they import `pty`/`termios` at | |
| # module scope, so skipping is the only way to avoid a collection | |
| # error). `test_stdout_offload_freeze_integration.py` calls | |
| # `os.fork()` directly with no platform guard at all, and `os.fork` | |
| # simply does not exist on Windows -- it fails with | |
| # `AttributeError: module 'os' has no attribute 'fork'` | |
| # (confirmed on a real windows-latest run, job id 94301234220). | |
| # A Windows leg of this job would therefore either run zero tests | |
| # (all skipped) or hard-fail on the one file missing a guard -- pure | |
| # CI theatre, burning runner minutes to report a "green" (or "red") | |
| # that says nothing about Windows support. If a genuinely | |
| # cross-platform integration test is ever added to this job, add | |
| # windows-latest back for it specifically. | |
| os: [ubuntu-latest, macos-latest] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install dependencies | |
| run: uv sync --all-extras --dev | |
| - name: Run integration tests | |
| # pyproject.toml sets `addopts = -m "not integration"`, so these tests | |
| # -- the ones that fork a real pty child and probe real termios state | |
| # -- are skipped by default and, before this job existed, ran nowhere. | |
| # They are exactly the tests that guard the dedicated-tty-input | |
| # mechanism, so they get their own job (POSIX only -- see the | |
| # `matrix.os` comment above for why Windows is excluded). | |
| run: uv run pytest -m integration -q |