51 lines
2.0 KiB
YAML
51 lines
2.0 KiB
YAML
# Quality gate: lint + unit tests.
|
|
#
|
|
# The test suite is stdlib-only (parsers, intents, running-apps) and runs the
|
|
# vendored ha_adb_common helpers without installing Home Assistant — see
|
|
# tests/conftest.py. androidtvremote2 is installed so the real-library
|
|
# volume/TYPED-dict tests execute (tests/test_protocol_transport.py). Real
|
|
# firmware captures live in tests/fixtures
|
|
# (how to capture more: docs/RESEARCH_SHIELD.md §8).
|
|
|
|
name: Test
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
pull_request:
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install test tooling
|
|
run: |
|
|
set -euo pipefail
|
|
# Try the plain install first: it succeeds on images whose Python is
|
|
# not externally managed (and on pip < 23, which has no PEP 668
|
|
# enforcement at all). When the runner image DOES mark its Python as
|
|
# externally managed — Debian/Ubuntu based Gitea act images do — pip
|
|
# refuses with externally-managed-environment and we retry with the
|
|
# sanctioned override. That override is safe here specifically
|
|
# because the job runs in a disposable container, and because the
|
|
# flag only exists on pip >= 23.0.1, the same version that raises
|
|
# the refusal in the first place.
|
|
#
|
|
# Tools are pinned to the versions the suite was validated against so
|
|
# a newer ruff rule set cannot redden the gate on unrelated commits;
|
|
# androidtvremote2 tracks the manifest floor so CI exercises the same
|
|
# dependency users install.
|
|
PKGS="pytest~=9.1 pytest-asyncio~=1.4 ruff~=0.17.0 'androidtvremote2>=0.2.0'"
|
|
if ! eval python3 -m pip install --quiet $PKGS; then
|
|
echo "system Python is externally managed; retrying with --break-system-packages"
|
|
eval python3 -m pip install --quiet --break-system-packages $PKGS
|
|
fi
|
|
|
|
- name: Lint
|
|
run: ruff check custom_components tests
|
|
|
|
- name: Unit tests
|
|
run: python3 -m pytest tests -q
|