From a4b1a0eb479be9c2bafcd699be97af09d6b84cbf Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Thu, 18 Jul 2024 22:26:05 +0200 Subject: [PATCH] Commit generated code otherwise CI cannot check types --- .gitignore | 1 - pkgs/clan-cli/clan_cli/inventory/classes.py | 176 ++++++++++++++++++++ pkgs/clan-cli/flake-module.nix | 31 +++- pkgs/classgen/main.py | 7 +- 4 files changed, 210 insertions(+), 5 deletions(-) create mode 100644 pkgs/clan-cli/clan_cli/inventory/classes.py diff --git a/.gitignore b/.gitignore index 753b87c05..84945a95e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,6 @@ democlan example_clan result* /pkgs/clan-cli/clan_cli/nixpkgs -/pkgs/clan-cli/clan_cli/inventory/classes.py /pkgs/clan-cli/clan_cli/webui/assets nixos.qcow2 **/*.glade~ diff --git a/pkgs/clan-cli/clan_cli/inventory/classes.py b/pkgs/clan-cli/clan_cli/inventory/classes.py new file mode 100644 index 000000000..c411a3a7c --- /dev/null +++ b/pkgs/clan-cli/clan_cli/inventory/classes.py @@ -0,0 +1,176 @@ +# DON NOT EDIT THIS FILE MANUALLY. IT IS GENERATED. +# +# ruff: noqa: N815 +# ruff: noqa: N806 +# ruff: noqa: F401 +# fmt: off +from dataclasses import dataclass, field +from typing import Any + + +@dataclass +class MachineDeploy: + targetHost: str | None = field(default=None ) + + +@dataclass +class Machine: + deploy: MachineDeploy + name: str + description: str | None = field(default=None ) + icon: str | None = field(default=None ) + system: str | None = field(default=None ) + tags: list[str] = field(default_factory=list ) + + +@dataclass +class Meta: + name: str + description: str | None = field(default=None ) + icon: str | None = field(default=None ) + + +@dataclass +class BorgbackupConfigDestination: + repo: str + name: str + + +@dataclass +class BorgbackupConfig: + destinations: dict[str, BorgbackupConfigDestination] = field(default_factory=dict ) + + +@dataclass +class ServiceBorgbackupMachine: + config: BorgbackupConfig = field(default_factory=BorgbackupConfig ) + imports: list[str] = field(default_factory=list ) + + +@dataclass +class ServiceBorgbackupMeta: + name: str + description: str | None = field(default=None ) + icon: str | None = field(default=None ) + + +@dataclass +class ServiceBorgbackupRoleClient: + config: BorgbackupConfig = field(default_factory=BorgbackupConfig ) + imports: list[str] = field(default_factory=list ) + machines: list[str] = field(default_factory=list ) + tags: list[str] = field(default_factory=list ) + + +@dataclass +class ServiceBorgbackupRoleServer: + config: BorgbackupConfig = field(default_factory=BorgbackupConfig ) + imports: list[str] = field(default_factory=list ) + machines: list[str] = field(default_factory=list ) + tags: list[str] = field(default_factory=list ) + + +@dataclass +class ServiceBorgbackupRole: + client: ServiceBorgbackupRoleClient + server: ServiceBorgbackupRoleServer + + +@dataclass +class ServiceBorgbackup: + meta: ServiceBorgbackupMeta + roles: ServiceBorgbackupRole + config: BorgbackupConfig = field(default_factory=BorgbackupConfig ) + machines: dict[str, ServiceBorgbackupMachine] = field(default_factory=dict ) + + +@dataclass +class PackagesConfig: + packages: list[str] = field(default_factory=list ) + + +@dataclass +class ServicePackageMachine: + config: PackagesConfig = field(default_factory=PackagesConfig ) + imports: list[str] = field(default_factory=list ) + + +@dataclass +class ServicePackageMeta: + name: str + description: str | None = field(default=None ) + icon: str | None = field(default=None ) + + +@dataclass +class ServicePackageRoleDefault: + config: PackagesConfig = field(default_factory=PackagesConfig ) + imports: list[str] = field(default_factory=list ) + machines: list[str] = field(default_factory=list ) + tags: list[str] = field(default_factory=list ) + + +@dataclass +class ServicePackageRole: + default: ServicePackageRoleDefault + + +@dataclass +class ServicePackage: + meta: ServicePackageMeta + roles: ServicePackageRole + config: PackagesConfig = field(default_factory=PackagesConfig ) + machines: dict[str, ServicePackageMachine] = field(default_factory=dict ) + + +@dataclass +class SingleDiskConfig: + device: str | None = field(default=None ) + + +@dataclass +class ServiceSingleDiskMachine: + config: SingleDiskConfig = field(default_factory=SingleDiskConfig ) + imports: list[str] = field(default_factory=list ) + + +@dataclass +class ServiceSingleDiskMeta: + name: str + description: str | None = field(default=None ) + icon: str | None = field(default=None ) + + +@dataclass +class ServiceSingleDiskRoleDefault: + config: SingleDiskConfig = field(default_factory=SingleDiskConfig ) + imports: list[str] = field(default_factory=list ) + machines: list[str] = field(default_factory=list ) + tags: list[str] = field(default_factory=list ) + + +@dataclass +class ServiceSingleDiskRole: + default: ServiceSingleDiskRoleDefault + + +@dataclass +class ServiceSingleDisk: + meta: ServiceSingleDiskMeta + roles: ServiceSingleDiskRole + config: SingleDiskConfig = field(default_factory=SingleDiskConfig ) + machines: dict[str, ServiceSingleDiskMachine] = field(default_factory=dict ) + + +@dataclass +class Service: + borgbackup: dict[str, ServiceBorgbackup] = field(default_factory=dict ) + packages: dict[str, ServicePackage] = field(default_factory=dict ) + single_disk: dict[str, ServiceSingleDisk] = field(default_factory=dict , metadata={"original_name": "single-disk"}) + + +@dataclass +class Inventory: + meta: Meta + services: Service + machines: dict[str, Machine] = field(default_factory=dict ) diff --git a/pkgs/clan-cli/flake-module.nix b/pkgs/clan-cli/flake-module.nix index be891828c..c783a494f 100644 --- a/pkgs/clan-cli/flake-module.nix +++ b/pkgs/clan-cli/flake-module.nix @@ -89,6 +89,35 @@ default = self'.packages.clan-cli; }; - checks = self'.packages.clan-cli.tests; + checks = self'.packages.clan-cli.tests // { + inventory-classes-up-to-date = pkgs.stdenv.mkDerivation { + name = "inventory-classes-up-to-date"; + src = ./clan_cli/inventory; + + env = { + classFile = "classes.py"; + }; + installPhase = '' + ${self'.packages.classgen}/bin/classgen ${self'.packages.inventory-schema}/schema.json b_classes.py + file1=$classFile + file2=b_classes.py + + echo "Comparing $file1 and $file2" + if cmp -s "$file1" "$file2"; then + echo "Files are identical" + echo "Classes file is up to date" + else + echo "Classes file is out of date or has been modified" + echo "run ./update.sh in the inventory directory to update the classes file" + echo "--------------------------------\n" + diff "$file1" "$file2" + echo "--------------------------------\n\n" + exit 1 + fi + + touch $out + ''; + }; + }; }; } diff --git a/pkgs/classgen/main.py b/pkgs/classgen/main.py index c6a731776..93d33dd9a 100644 --- a/pkgs/classgen/main.py +++ b/pkgs/classgen/main.py @@ -179,11 +179,12 @@ def run_gen(args: argparse.Namespace) -> None: with open(args.output, "w") as f: f.write( - """ -# DON NOT EDIT THIS FILE MANUALLY. IT IS GENERATED. -# UPDATE + """# DON NOT EDIT THIS FILE MANUALLY. IT IS GENERATED. +# # ruff: noqa: N815 # ruff: noqa: N806 +# ruff: noqa: F401 +# fmt: off from dataclasses import dataclass, field from typing import Any\n\n """