d3c4fc0fd4
test / integration (pull_request) Successful in 7s
test / unit (pull_request) Successful in 44s
test / coverage (pull_request) Successful in 36s
test / integration (push) Successful in 7s
Update Quality Badges / update-badges (push) Failing after 11s
test / unit (push) Successful in 29s
test / coverage (push) Successful in 35s
lint / lint (push) Successful in 2m24s
The old act_runner engine (v0.2.13 on the delphi-ci runner) mishandles actions/setup-python's PATH injection: pip installs coverage into the toolcache interpreter while `python3` in later steps resolves back to the image's system Python, so unit/coverage jobs failed with "No module named coverage". Newer runners (TrueNAS's v0.6.1) don't, which is why it only broke on delphi. The runner-images/act container already ships Python 3.12, and the job container is ephemeral, so drop setup-python entirely and install straight into the system Python with --break-system-packages. Every step now uses one interpreter consistently, on any runner version. Also removes the redundant setup-python step from the integration job (stdlib-only). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UoEZHDjv84ChoZbozQERhJ
98 lines
3.7 KiB
YAML
98 lines
3.7 KiB
YAML
# Run the project's test suite on every PR push and on push to main.
|
|
#
|
|
# The suite uses stdlib `unittest` discovery — no external Python
|
|
# dependencies are required to execute it. Tests are split by directory:
|
|
#
|
|
# tests/unit/ — pure unit tests; always run
|
|
# tests/integration/ — need a reachable Docker daemon; skip cleanly
|
|
# (via tests/_docker.py:skip_unless_docker) when
|
|
# Docker isn't available on the runner
|
|
# tests/canaries/ — upstream regression canaries; run on a separate
|
|
# schedule (see canaries.yml), not here
|
|
#
|
|
# This workflow assumes the Gitea Actions runner exposes the host Docker
|
|
# socket to the job container so `docker` commands inside the job can
|
|
# reach the daemon. If that's not yet configured on the runner the
|
|
# integration tests will skip rather than fail.
|
|
|
|
name: test
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
paths:
|
|
- '**.py'
|
|
pull_request:
|
|
paths:
|
|
- '**.py'
|
|
|
|
jobs:
|
|
unit:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
# No actions/setup-python: the runner image already ships Python 3.12,
|
|
# and older act_runner engines mishandle setup-python's PATH (coverage
|
|
# lands in one interpreter, `python3` resolves to another). Install
|
|
# straight into the ephemeral job container's system Python —
|
|
# --break-system-packages is safe because the container is disposable.
|
|
- name: Install dev requirements
|
|
run: python3 -m pip install --break-system-packages -r requirements-dev.txt
|
|
|
|
- name: Run unit tests
|
|
run: python3 -m coverage run -m unittest discover -t . -s tests/unit -v
|
|
|
|
- name: Report unit coverage
|
|
run: python3 -m coverage report -m
|
|
|
|
integration:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
# No actions/setup-python (see the note in the `unit` job); the
|
|
# container's system Python 3.12 runs the stdlib test suite directly.
|
|
- name: Show environment
|
|
run: |
|
|
python3 --version
|
|
if command -v docker >/dev/null 2>&1; then
|
|
docker version || true
|
|
else
|
|
echo "docker not on PATH — integration tests will skip"
|
|
fi
|
|
|
|
- name: Run integration tests
|
|
run: python3 -m unittest discover -t . -s tests/integration -v
|
|
|
|
# Combined unit+integration coverage report (informational). See
|
|
# docs/decisions/0004-coverage-policy.md.
|
|
#
|
|
# The hard diff-coverage gate (changed lines >= 90%) is DEFERRED: the
|
|
# Firecracker backend's VM/SSH orchestration is covered by the integration
|
|
# suite, which needs /dev/kvm + the provisioned TAP/nft pool — a
|
|
# container-based runner skips it and those lines read uncovered, so the
|
|
# gate can't pass here. Re-enabling it on a self-hosted KVM runner is
|
|
# tracked separately (see PRD 0069 / #348 and the ci-runner branch).
|
|
coverage:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
# No actions/setup-python: the runner image already ships Python 3.12,
|
|
# and older act_runner engines mishandle setup-python's PATH (coverage
|
|
# lands in one interpreter, `python3` resolves to another). Install
|
|
# straight into the ephemeral job container's system Python —
|
|
# --break-system-packages is safe because the container is disposable.
|
|
- name: Install dev requirements
|
|
run: python3 -m pip install --break-system-packages -r requirements-dev.txt
|
|
|
|
- name: Combined coverage report (unit + integration)
|
|
run: PYTHON=python3 bash scripts/coverage.sh critical
|