diff --git a/script/hassfest/__main__.py b/script/hassfest/__main__.py index c93d8fd4499..277696c669b 100644 --- a/script/hassfest/__main__.py +++ b/script/hassfest/__main__.py @@ -107,7 +107,13 @@ def get_config() -> Config: "--plugins", type=validate_plugins, default=ALL_PLUGIN_NAMES, - help="Comma-separate list of plugins to run. Valid plugin names: %(default)s", + help="Comma-separated list of plugins to run. Valid plugin names: %(default)s", + ) + parser.add_argument( + "--skip-plugins", + type=validate_plugins, + default=[], + help=f"Comma-separated list of plugins to skip. Valid plugin names: {ALL_PLUGIN_NAMES}", ) parser.add_argument( "--core-path", @@ -131,6 +137,9 @@ def get_config() -> Config: ): raise RuntimeError("Run from Home Assistant root") + if parsed.skip_plugins: + parsed.plugins = set(parsed.plugins) - set(parsed.skip_plugins) + return Config( root=parsed.core_path.absolute(), specific_integrations=parsed.integration_path, diff --git a/script/hassfest/model.py b/script/hassfest/model.py index 08ded687096..1ca4178d9c2 100644 --- a/script/hassfest/model.py +++ b/script/hassfest/model.py @@ -157,8 +157,10 @@ class Integration: @property def core(self) -> bool: """Core integration.""" - return self.path.as_posix().startswith( - self._config.core_integrations_path.as_posix() + return ( + self.path.absolute() + .as_posix() + .startswith(self._config.core_integrations_path.as_posix()) ) @property diff --git a/script/scaffold/__main__.py b/script/scaffold/__main__.py index 93c787df50f..4c102083a74 100644 --- a/script/scaffold/__main__.py +++ b/script/scaffold/__main__.py @@ -60,20 +60,32 @@ def main() -> int: generate.generate(template, info) + hassfest_args = [ + "python", + "-m", + "script.hassfest", + ] + # If we wanted a new integration, we've already done our work. if args.template != "integration": generate.generate(args.template, info) + else: + hassfest_args.extend( + [ + "--integration-path", + info.integration_dir, + "--skip-plugins", + "quality_scale", # Skip quality scale as it will fail for newly generated integrations. + ] + ) - pipe_null = {} if args.develop else {"stdout": subprocess.DEVNULL} - + # Always output sub commands as the output will contain useful information if a command fails. print("Running hassfest to pick up new information.") - subprocess.run(["python", "-m", "script.hassfest"], **pipe_null, check=True) + subprocess.run(hassfest_args, check=True) print() print("Running gen_requirements_all to pick up new information.") - subprocess.run( - ["python", "-m", "script.gen_requirements_all"], **pipe_null, check=True - ) + subprocess.run(["python", "-m", "script.gen_requirements_all"], check=True) print() print("Running script/translations_develop to pick up new translation strings.") @@ -86,7 +98,6 @@ def main() -> int: "--integration", info.domain, ], - **pipe_null, check=True, ) print() diff --git a/script/scaffold/templates/integration/integration/manifest.json b/script/scaffold/templates/integration/integration/manifest.json index 7235500391d..15bc84a9b5e 100644 --- a/script/scaffold/templates/integration/integration/manifest.json +++ b/script/scaffold/templates/integration/integration/manifest.json @@ -7,6 +7,7 @@ "documentation": "https://www.home-assistant.io/integrations/NEW_DOMAIN", "homekit": {}, "iot_class": "IOT_CLASS", + "quality_scale": "bronze", "requirements": [], "ssdp": [], "zeroconf": []