Compare commits

...

8 Commits

Author SHA1 Message Date
epenet
e36f9d2708 Tweak 2025-01-28 11:21:34 +00:00
epenet
6177a5978e Only run validation if it's the only plugin 2025-01-28 11:21:33 +00:00
epenet
528ba2be0e Add new "Check quality scale" job 2025-01-28 11:18:32 +00:00
epenet
32a059fc0d Fix 2025-01-28 11:18:32 +00:00
epenet
e894a9c0dc Tweak 2025-01-28 11:18:31 +00:00
epenet
184783943f fix 2025-01-28 11:18:31 +00:00
epenet
edc2570ac3 test 2025-01-28 11:18:31 +00:00
epenet
da7db73e5e Speedup hassfest on single-integration 2025-01-28 11:18:31 +00:00
2 changed files with 59 additions and 4 deletions

View File

@@ -590,6 +590,52 @@ jobs:
. venv/bin/activate
python -m script.hassfest --requirements --action validate
quality-scale:
name: Check quality scale
runs-on: ubuntu-24.04
if: |
github.event.inputs.pylint-only != 'true'
&& github.event.inputs.mypy-only != 'true'
&& github.event.inputs.audit-licenses-only != 'true'
needs:
- info
- base
steps:
- name: Install additional OS dependencies
run: |
sudo rm /etc/apt/sources.list.d/microsoft-prod.list
sudo apt-get update
sudo apt-get -y install \
libturbojpeg
- name: Check out code from GitHub
uses: actions/checkout@v4.2.2
- name: Set up Python ${{ env.DEFAULT_PYTHON }}
id: python
uses: actions/setup-python@v5.3.0
with:
python-version: ${{ env.DEFAULT_PYTHON }}
check-latest: true
- name: Restore full Python ${{ env.DEFAULT_PYTHON }} virtual environment
id: cache-venv
uses: actions/cache/restore@v4.1.2
with:
path: venv
fail-on-cache-miss: true
key: >-
${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{
needs.info.outputs.python_cache_key }}
- name: Run quality-scale checks
run: |
. venv/bin/activate
integration_glob="${{ needs.info.outputs.integrations_glob }}"
integration_params=()
if [[ "${integration_glob}" != "" && "${integration_glob}" != *","* ]]; then
integration_params+=(--integration-path homeassistant/components/${integration_glob})
fi
python -m script.hassfest -p quality_scale --requirements --action validate ${integration_params[@]}
gen-requirements-all:
name: Check all requirements
runs-on: ubuntu-24.04

View File

@@ -2357,7 +2357,9 @@ SCHEMA = vol.Schema(
)
def validate_iqs_file(config: Config, integration: Integration) -> None:
def validate_iqs_file(
config: Config, integration: Integration, run_validation: bool
) -> None:
"""Validate quality scale file for integration."""
if not integration.core:
return
@@ -2448,8 +2450,12 @@ def validate_iqs_file(config: Config, integration: Integration) -> None:
rules_done.add(rule_name)
for rule_name in rules_done:
if (validator := VALIDATORS.get(rule_name)) and (
errors := validator.validate(config, integration, rules_done=rules_done)
if (
run_validation
and (validator := VALIDATORS.get(rule_name))
and (
errors := validator.validate(config, integration, rules_done=rules_done)
)
):
for error in errors:
integration.add_error("quality_scale", f"[{rule_name}] {error}")
@@ -2476,5 +2482,8 @@ def validate_iqs_file(config: Config, integration: Integration) -> None:
def validate(integrations: dict[str, Integration], config: Config) -> None:
"""Handle YAML files inside integrations."""
# Only run validation if this is the only plugin
run_validation = len(config.plugins) == 1
for integration in integrations.values():
validate_iqs_file(config, integration)
validate_iqs_file(config, integration, run_validation)