From 08d26b946371940c90747847cc696f9da3847b72 Mon Sep 17 00:00:00 2001 From: Johannes Kirschbauer Date: Wed, 9 Oct 2024 12:45:09 +0200 Subject: [PATCH] Inventory/schemas: move all schemas to legacyPackages --- docs/site/manual/inventory.md | 2 +- lib/inventory/flake-module.nix | 14 ------------- lib/inventory/schemas/default.nix | 23 +++++++++++++++++++++- pkgs/clan-cli/clan_cli/inventory/update.sh | 2 +- pkgs/clan-cli/flake-module.nix | 12 ++++++----- pkgs/clan-cli/shell.nix | 2 +- 6 files changed, 32 insertions(+), 23 deletions(-) diff --git a/docs/site/manual/inventory.md b/docs/site/manual/inventory.md index d31d3cee5..8ffec7301 100644 --- a/docs/site/manual/inventory.md +++ b/docs/site/manual/inventory.md @@ -128,7 +128,7 @@ It is possible to add services to multiple machines via tags as shown Or it can build anytime via: ```sh -nix build git+https://git.clan.lol/clan/clan-core#inventory-schema +nix build git+https://git.clan.lol/clan/clan-core#schemas.inventory > result > ├── schema.cue > └── schema.json diff --git a/lib/inventory/flake-module.nix b/lib/inventory/flake-module.nix index 81ac138c6..1e654cae9 100644 --- a/lib/inventory/flake-module.nix +++ b/lib/inventory/flake-module.nix @@ -25,20 +25,6 @@ in ]; }; - packages.inventory-schema-abstract = pkgs.stdenv.mkDerivation { - name = "inventory-schema"; - buildInputs = [ pkgs.cue ]; - src = ./.; - buildPhase = '' - export SCHEMA=${builtins.toFile "inventory-schema.json" (builtins.toJSON self'.legacyPackages.schemas.inventory)} - cp $SCHEMA schema.json - cue import -f -p compose -l '#Root:' schema.json - mkdir $out - cp schema.cue $out - cp schema.json $out - ''; - }; - legacyPackages.schemas = ( import ./schemas { inherit diff --git a/lib/inventory/schemas/default.nix b/lib/inventory/schemas/default.nix index 01bc36aaf..0206314a9 100644 --- a/lib/inventory/schemas/default.nix +++ b/lib/inventory/schemas/default.nix @@ -30,10 +30,31 @@ let "E501" ]; } ./render_schema.py; + + inventory-schema-abstract = pkgs.stdenv.mkDerivation { + name = "inventory-schema-files"; + buildInputs = [ pkgs.cue ]; + src = ./.; + buildPhase = '' + export SCHEMA=${builtins.toFile "inventory-schema.json" (builtins.toJSON inventorySchema)} + cp $SCHEMA schema.json + # Also generate a CUE schema version that is derived from the JSON schema + cue import -f -p compose -l '#Root:' schema.json + mkdir $out + cp schema.cue $out + cp schema.json $out + ''; + }; in { - inherit inventorySchema modulesSchema renderSchema; + inherit + inventorySchema + modulesSchema + renderSchema + inventory-schema-abstract + ; + # Inventory schema, with the modules schema added per role inventory = pkgs.runCommand "rendered" { diff --git a/pkgs/clan-cli/clan_cli/inventory/update.sh b/pkgs/clan-cli/clan_cli/inventory/update.sh index 4debccddf..8954efff9 100755 --- a/pkgs/clan-cli/clan_cli/inventory/update.sh +++ b/pkgs/clan-cli/clan_cli/inventory/update.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash -jsonSchema=$(nix build .#inventory-schema-abstract --print-out-paths)/schema.json +jsonSchema=$(nix build .#schemas.inventory-schema-abstract --print-out-paths)/schema.json nix run .#classgen "$jsonSchema" "$PKG_ROOT/clan_cli/inventory/classes.py" \ No newline at end of file diff --git a/pkgs/clan-cli/flake-module.nix b/pkgs/clan-cli/flake-module.nix index d0747c94d..ccd4cc847 100644 --- a/pkgs/clan-cli/flake-module.nix +++ b/pkgs/clan-cli/flake-module.nix @@ -47,7 +47,8 @@ packages = { clan-cli = pkgs.python3.pkgs.callPackage ./default.nix { inherit (inputs) nixpkgs; - inherit (self'.packages) inventory-schema-abstract classgen; + inherit (self'.packages) classgen; + inherit (self'.legacyPackages.schemas) inventory-schema-abstract; clan-core-path = clanCoreWithVendoredDeps; includedRuntimeDeps = [ "age" @@ -56,7 +57,8 @@ }; clan-cli-full = pkgs.python3.pkgs.callPackage ./default.nix { inherit (inputs) nixpkgs; - inherit (self'.packages) inventory-schema-abstract classgen; + inherit (self'.packages) classgen; + inherit (self'.legacyPackages.schemas) inventory-schema-abstract; clan-core-path = clanCoreWithVendoredDeps; includedRuntimeDeps = lib.importJSON ./clan_cli/nix/allowed-programs.json; }; @@ -71,7 +73,7 @@ ]; installPhase = '' - ${self'.packages.classgen}/bin/classgen ${self'.packages.inventory-schema-abstract}/schema.json ./clan_cli/inventory/classes.py --stop-at "Service" + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json ./clan_cli/inventory/classes.py --stop-at "Service" python docs.py reference mkdir -p $out @@ -89,7 +91,7 @@ ]; installPhase = '' - ${self'.packages.classgen}/bin/classgen ${self'.packages.inventory-schema-abstract}/schema.json ./clan_cli/inventory/classes.py --stop-at "Service" + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json ./clan_cli/inventory/classes.py --stop-at "Service" mkdir -p $out # Retrieve python API Typescript types python api.py > $out/API.json @@ -113,7 +115,7 @@ classFile = "classes.py"; }; installPhase = '' - ${self'.packages.classgen}/bin/classgen ${self'.packages.inventory-schema-abstract}/schema.json b_classes.py --stop-at "Service" + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json b_classes.py --stop-at "Service" file1=$classFile file2=b_classes.py diff --git a/pkgs/clan-cli/shell.nix b/pkgs/clan-cli/shell.nix index 2398a660f..1f51b4edd 100644 --- a/pkgs/clan-cli/shell.nix +++ b/pkgs/clan-cli/shell.nix @@ -46,6 +46,6 @@ mkShell { # Generate classes.py from inventory schema # This file is in .gitignore - ${self'.packages.classgen}/bin/classgen ${self'.packages.inventory-schema-abstract}/schema.json $PKG_ROOT/clan_cli/inventory/classes.py --stop-at "Service" + ${self'.packages.classgen}/bin/classgen ${self'.legacyPackages.schemas.inventory-schema-abstract}/schema.json $PKG_ROOT/clan_cli/inventory/classes.py --stop-at "Service" ''; }