Skip to content
Snippets Groups Projects
Unverified Commit 8bc47c0c authored by Paulus Schoutsen's avatar Paulus Schoutsen Committed by GitHub
Browse files

Catch it when files are ignored by coverage but shouldn't (#41876)

parent 62343f87
Branches
Tags
No related merge requests found
...@@ -87,5 +87,5 @@ repos: ...@@ -87,5 +87,5 @@ repos:
entry: script/run-in-env.sh python3 -m script.hassfest entry: script/run-in-env.sh python3 -m script.hassfest
pass_filenames: false pass_filenames: false
language: script language: script
types: [json] types: [text]
files: ^homeassistant/.+/(manifest|strings)\.json$ files: ^(homeassistant/.+/(manifest|strings)\.json|\.coveragerc)$
...@@ -4,6 +4,70 @@ from typing import Dict ...@@ -4,6 +4,70 @@ from typing import Dict
from .model import Config, Integration from .model import Config, Integration
DONT_IGNORE = (
"config_flow.py",
"device_action.py",
"device_condition.py",
"device_trigger.py",
"group.py",
"intent.py",
"logbook.py",
"media_source.py",
"scene.py",
)
# They were violating when we introduced this check
# Need to be fixed in a future PR.
ALLOWED_IGNORE_VIOLATIONS = {
("ambient_station", "config_flow.py"),
("cast", "config_flow.py"),
("daikin", "config_flow.py"),
("doorbird", "config_flow.py"),
("doorbird", "logbook.py"),
("elkm1", "config_flow.py"),
("elkm1", "scene.py"),
("fibaro", "scene.py"),
("flume", "config_flow.py"),
("hangouts", "config_flow.py"),
("harmony", "config_flow.py"),
("hisense_aehw4a1", "config_flow.py"),
("home_connect", "config_flow.py"),
("huawei_lte", "config_flow.py"),
("ifttt", "config_flow.py"),
("ios", "config_flow.py"),
("iqvia", "config_flow.py"),
("knx", "scene.py"),
("konnected", "config_flow.py"),
("lcn", "scene.py"),
("life360", "config_flow.py"),
("lifx", "config_flow.py"),
("lutron", "scene.py"),
("mobile_app", "config_flow.py"),
("nest", "config_flow.py"),
("plaato", "config_flow.py"),
("point", "config_flow.py"),
("rachio", "config_flow.py"),
("sense", "config_flow.py"),
("sms", "config_flow.py"),
("solarlog", "config_flow.py"),
("somfy", "config_flow.py"),
("sonos", "config_flow.py"),
("speedtestdotnet", "config_flow.py"),
("spider", "config_flow.py"),
("starline", "config_flow.py"),
("tado", "config_flow.py"),
("tahoma", "scene.py"),
("totalconnect", "config_flow.py"),
("tradfri", "config_flow.py"),
("tuya", "config_flow.py"),
("tuya", "scene.py"),
("upnp", "config_flow.py"),
("velux", "scene.py"),
("wemo", "config_flow.py"),
("wiffi", "config_flow.py"),
("wink", "scene.py"),
}
def validate(integrations: Dict[str, Integration], config: Config): def validate(integrations: Dict[str, Integration], config: Config):
"""Validate coverage.""" """Validate coverage."""
...@@ -31,11 +95,34 @@ def validate(integrations: Dict[str, Integration], config: Config): ...@@ -31,11 +95,34 @@ def validate(integrations: Dict[str, Integration], config: Config):
path = Path(line) path = Path(line)
# Discard wildcard # Discard wildcard
while "*" in path.name: path_exists = path
path = path.parent while "*" in path_exists.name:
path_exists = path_exists.parent
if not path.exists(): if not path_exists.exists():
not_found.append(line) not_found.append(line)
continue
if (
not line.startswith("homeassistant/components/")
or not len(path.parts) == 4
or not path.parts[-1] == "*"
):
continue
integration_path = path.parent
integration = integrations[integration_path.name]
for check in DONT_IGNORE:
if (integration_path.name, check) in ALLOWED_IGNORE_VIOLATIONS:
continue
if (integration_path / check).exists():
integration.add_error(
"coverage",
f"{check} must not be ignored by the .coveragerc file",
)
if not not_found: if not not_found:
return return
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment