Set conservative line and branch coverage floors for stable HA versions (#1566)

This commit is contained in:
Bas Nijholt 2026-09-06 17:18:47 +02:00 committed by GitHub
commit 87486f9eb3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 10 additions and 1 deletions

View file

@ -103,6 +103,15 @@ jobs:
exit 1
fi
if [[ "${CORE_VERSION}" != "dev" && "${PYTEST_OUTCOME}" == "success" ]]; then
echo "Required coverage: 89% lines and 80% branches." >> "${GITHUB_STEP_SUMMARY}"
if ! jq -e '.totals | .covered_lines * 100 >= .num_statements * 89
and .covered_branches * 100 >= .num_branches * 80' core/coverage.json > /dev/null; then
echo "::error::Coverage must be at least 89% lines and 80% branches."
exit 1
fi
fi
- name: Upload coverage reports
if: ${{ !cancelled() }}
uses: actions/upload-artifact@v7.0.1

View file

@ -5,7 +5,7 @@ Alternatively, you can use the provided Docker image to run the tests locally or
## Coverage reports
Open a `pytest` workflow run in GitHub Actions to see line and branch coverage in each job's summary. Download its `coverage-<Home Assistant version>-py<Python version>` artifact for the XML and JSON reports and the browsable HTML report. After extracting it, open `htmlcov/index.html` to inspect missing lines and branches.
Open a `pytest` workflow run in GitHub Actions to see line and branch coverage in each job's summary. Download its `coverage-<Home Assistant version>-py<Python version>` artifact for the XML and JSON reports and the browsable HTML report. After extracting it, open `htmlcov/index.html` to inspect missing lines and branches. Supported stable Home Assistant versions require at least 89% line coverage and 80% branch coverage. The `dev` job reports coverage without enforcing these floors.
Coverage measures executed code, not whether assertions would catch a bug. Add tests for observable behavior: emitted light commands, final states, manual-control events, and timer expiry. The integration suite runs inside Home Assistant with simulated lights; it does not establish physical-device behavior. It also does not execute every documentation generator included in the package's coverage total.