testsAndMisc/.github/workflows/python-tests.yml
Krzysztof kuhy Rudnicki a1f8044a4a Extract system-maintenance, the isolated subsystem
github.com/kuhyx/system-maintenance, cloned to ~/system-maintenance

First of the four live subsystems, and the one with no cross-unit source
edges, so it establishes the pattern for the harder three. Passed in
vmbox first -- the installer ran from an extracted-layout copy in the
guest and detected its distro without any monorepo path -- then on the
host.

Its 21 Python and shell test files lived in linux_configuration/tests/,
reaching bin/ through a shared conftest. Twenty moved with the code and
got their own conftest; the shared one stays, since it serves several
script directories that are not going anywhere.

test_shutdown_timer_monitor.sh stays here. It is a pair test: it checks
that digital_wellbeing's installer template and the monitor it installs
still agree, so it belongs to whichever half owns the installer. It now
reads the monitor from ~/system-maintenance and SKIPs when that checkout
is absent.

An intermediate version of that test fell back to /usr/local/bin, which
HUNG -- the installed copy is stale and differs from source, so the test
was comparing an installer template against a binary it never generated.
Falling back to it would have been worse than skipping, so the fallback
is gone and the comment says why.

Also removed test_hosts_file_monitor.sh from shell-tests.yml's explicit
list: it left with the subsystem, and CI would have failed on the missing
file rather than quietly skipping it.

Verified: 136 tests pass in the new repo, 202 still pass here, the pair
test passes against the checkout and skips without it, and both the shell
coverage gate and shellcheck are clean. Depth 294 -> 267.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PJrqKERAo5QUeEHWS5Asgp
2026-08-23 17:55:29 +02:00

68 lines
2.7 KiB
YAML

name: Python tests
on:
push:
branches: [main]
paths:
- "python_pkg/lichess_bot/**"
- "python_pkg/**"
- "tests/**"
- "linux_configuration/tests/**"
# Both spellings: the root requirements.txt is a SYMLINK into meta/,
# and GitHub matches path filters against the changed path as git
# records it. Editing meta/requirements.txt therefore did NOT match
# "requirements.txt", so a dependency fix silently skipped this
# workflow and the red run stayed on an older commit.
- "requirements.txt"
- "meta/requirements.txt"
- "meta/requirements-test.txt"
- ".github/workflows/python-tests.yml"
pull_request:
branches: [main]
paths:
- "python_pkg/lichess_bot/**"
- "python_pkg/**"
- "tests/**"
- "linux_configuration/tests/**"
# Both spellings: the root requirements.txt is a SYMLINK into meta/,
# and GitHub matches path filters against the changed path as git
# records it. Editing meta/requirements.txt therefore did NOT match
# "requirements.txt", so a dependency fix silently skipped this
# workflow and the red run stayed on an older commit.
- "requirements.txt"
- "meta/requirements.txt"
- "meta/requirements-test.txt"
- ".github/workflows/python-tests.yml"
workflow_dispatch: {}
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
# Cache the pip DOWNLOAD cache, keyed on the requirements file, so a
# run that changes nothing about dependencies reuses the wheels
# instead of re-fetching ~80 packages from PyPI. Points at
# meta/requirements.txt, not the root symlink: the cache key is
# hashed from the file at this path, and hashing a symlink is not
# the same as hashing its target.
cache: pip
cache-dependency-path: meta/requirements-test.txt
- name: Install system dependencies
run: |
set -euo pipefail
sudo apt-get update && sudo apt-get install -y librsvg2-bin
rsvg-convert --version
- name: Install dependencies
run: |
python -m pip install --upgrade pip
# The TEST subset, not the full requirements.txt. This job runs
# pytest and nothing else, so the ~62 linters and formatters in the
# full list were pure install time. See meta/requirements-test.txt.
pip install -r meta/requirements-test.txt
- name: Run pytest with coverage
run: pytest --cov=python_pkg --cov-branch --cov-report=term-missing --cov-fail-under=100