summaryrefslogtreecommitdiffstats
path: root/pkgs/servers
diff options
context:
space:
mode:
authorMartin Weinelt <hexa@darmstadt.ccc.de>2023-11-25 16:32:41 +0100
committerMartin Weinelt <hexa@darmstadt.ccc.de>2023-12-06 03:55:33 +0100
commit01616e5331d2790127aa2e61c126fff9467889f2 (patch)
treee00117db74b6800f478e9404bb036d970d641b25 /pkgs/servers
parent8c87a98ce1e8850faee64a0a540acff233b66bd2 (diff)
buildHomeAssistantComponent: migrate from pname to owner/domain
Also make the attribute name to match the domain name. This is more in line with the home-assistant custom component ecosystem and allows additional validation between the derivation and the manifest. Also, at a later time, this will enable us to check for domain conflicts at eval time.
Diffstat (limited to 'pkgs/servers')
-rw-r--r--pkgs/servers/home-assistant/build-custom-component/check_manifest.py38
-rw-r--r--pkgs/servers/home-assistant/build-custom-component/default.nix4
-rw-r--r--pkgs/servers/home-assistant/custom-components/README.md30
-rw-r--r--pkgs/servers/home-assistant/custom-components/default.nix2
-rw-r--r--pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix (renamed from pkgs/servers/home-assistant/custom-components/prometheus-sensor/default.nix)3
5 files changed, 55 insertions, 22 deletions
diff --git a/pkgs/servers/home-assistant/build-custom-component/check_manifest.py b/pkgs/servers/home-assistant/build-custom-component/check_manifest.py
index bbe9535824e7..463a7579763d 100644
--- a/pkgs/servers/home-assistant/build-custom-component/check_manifest.py
+++ b/pkgs/servers/home-assistant/build-custom-component/check_manifest.py
@@ -1,28 +1,31 @@
#!/usr/bin/env python3
import json
-import importlib_metadata
+import os
import sys
+import importlib_metadata
from packaging.requirements import Requirement
+def error(msg: str) -> None:
+ print(f" - {msg}", file=sys.stderr)
+ return False
+
+
def check_requirement(req: str):
# https://packaging.pypa.io/en/stable/requirements.html
requirement = Requirement(req)
try:
version = importlib_metadata.distribution(requirement.name).version
except importlib_metadata.PackageNotFoundError:
- print(f" - Dependency {requirement.name} is missing", file=sys.stderr)
- return False
+ return error(f"{requirement.name}{requirement.specifier} not present")
# https://packaging.pypa.io/en/stable/specifiers.html
- if not version in requirement.specifier:
- print(
- f" - {requirement.name}{requirement.specifier} expected, but got {version}",
- file=sys.stderr,
+ if version not in requirement.specifier:
+ return error(
+ f"{requirement.name}{requirement.specifier} expected, but got {version}"
)
- return False
return True
@@ -30,13 +33,24 @@ def check_requirement(req: str):
def check_manifest(manifest_file: str):
with open(manifest_file) as fd:
manifest = json.load(fd)
+
+ ok = True
+
+ derivation_domain = os.environ.get("domain")
+ manifest_domain = manifest["domain"]
+ if derivation_domain != manifest_domain:
+ ok = False
+ error(
+ f"Derivation attribute domain ({derivation_domain}) must match manifest domain ({manifest_domain})"
+ )
+
if "requirements" in manifest:
- ok = True
for requirement in manifest["requirements"]:
ok &= check_requirement(requirement)
- if not ok:
- print("Manifest requirements are not met", file=sys.stderr)
- sys.exit(1)
+
+ if not ok:
+ error("Manifest check failed.")
+ sys.exit(1)
if __name__ == "__main__":
diff --git a/pkgs/servers/home-assistant/build-custom-component/default.nix b/pkgs/servers/home-assistant/build-custom-component/default.nix
index 5a6e76deb413..2948d15bb814 100644
--- a/pkgs/servers/home-assistant/build-custom-component/default.nix
+++ b/pkgs/servers/home-assistant/build-custom-component/default.nix
@@ -3,7 +3,8 @@
, makeSetupHook
}:
-{ pname
+{ owner
+, domain
, version
, format ? "other"
, ...
@@ -17,6 +18,7 @@ let
in
home-assistant.python.pkgs.buildPythonPackage (
{
+ pname = "${owner}/${domain}";
inherit format;
installPhase = ''
diff --git a/pkgs/servers/home-assistant/custom-components/README.md b/pkgs/servers/home-assistant/custom-components/README.md
index a7244b25c173..d7137e5c62f7 100644
--- a/pkgs/servers/home-assistant/custom-components/README.md
+++ b/pkgs/servers/home-assistant/custom-components/README.md
@@ -25,7 +25,7 @@ versions into the Python environment.
}:
buildHomeAssistantComponent {
- # pname, version
+ # owner, domain, version
src = fetchFromGithub {
# owner, repo, rev, hash
@@ -40,18 +40,34 @@ buildHomeAssistantComponent {
}
}
-## Package name normalization
+## Package attribute
-Apply the same normalization rules as defined for python packages in
-[PEP503](https://peps.python.org/pep-0503/#normalized-names).
-The name should be lowercased and dots, underlines or multiple
-dashes should all be replaced by a single dash.
+The attribute name must reflect the domain as seen in the
+`manifest.json`, which in turn will match the python module name below
+in the `custom_components/` directory.
+
+**Example:**
+
+The project [mweinelt/ha-prometheus-sensor](https://github.com/mweinelt/ha-prometheus-sensor/blob/1.0.0/custom_components/prometheus_sensor/manifest.json#L2)
+would receive the attribute name `"prometheus_sensor"`, because both
+domain in the `manifest.json` as well as the module name are
+`prometheus_sensor`.
+
+## Package name
+
+The `pname` attribute is a composition of both `owner` and `domain`.
+
+Don't set `pname`, set `owner and `domain` instead.
+
+Exposing the `domain` attribute separately allows checking for
+conflicting components at eval time.
## Manifest check
The `buildHomeAssistantComponent` builder uses a hook to check whether
the dependencies specified in the `manifest.json` are present and
-inside the specified version range.
+inside the specified version range. It also makes sure derivation
+and manifest agree about the domain name.
There shouldn't be a need to disable this hook, but you can set
`dontCheckManifest` to `true` in the derivation to achieve that.
diff --git a/pkgs/servers/home-assistant/custom-components/default.nix b/pkgs/servers/home-assistant/custom-components/default.nix
index 4a96b305964a..15bd721c72e8 100644
--- a/pkgs/servers/home-assistant/custom-components/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/default.nix
@@ -2,5 +2,5 @@
}:
{
- prometheus-sensor = callPackage ./prometheus-sensor {};
+ prometheus_sensor = callPackage ./prometheus_sensor {};
}
diff --git a/pkgs/servers/home-assistant/custom-components/prometheus-sensor/default.nix b/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix
index 07bcd9abec1c..2368d85552b2 100644
--- a/pkgs/servers/home-assistant/custom-components/prometheus-sensor/default.nix
+++ b/pkgs/servers/home-assistant/custom-components/prometheus_sensor/default.nix
@@ -4,7 +4,8 @@
}:
buildHomeAssistantComponent rec {
- pname = "prometheus-sensor";
+ owner = "mweinelt";
+ domain = "prometheus_sensor";
version = "1.0.0";
src = fetchFromGitHub {