Commit Graph

385 Commits

Author SHA1 Message Date
Johannes Kirschbauer
3d09c98ed3 Checks: add json-compat check wrapper to ensure all clan.modules stay json-compatible 2025-04-29 15:31:02 +02:00
Johannes Kirschbauer
a4a1363195 refactor(clan.service): make evalClanService a standalone function to interact with standalone modules 2025-04-29 15:12:44 +02:00
Johannes Kirschbauer
9b5f100ac6 Feat(clan.service): require roles.interface to be json serializable 2025-04-29 14:42:47 +02:00
Brian McGee
a438fe77a7 feat: configure age plugins for SOPS in buildClan 2025-04-29 16:02:32 +10:00
Michael Hoang
5879c48616 container-test-driver: fix SSH not working inside container tests 2025-04-29 15:10:09 +10:00
Michael Hoang
7d46237b67 container-test-driver: add Machine.fail 2025-04-29 14:57:58 +10:00
DavHau
ebada396dd build-clan: Throw better error when _class is not provided by nixpkgs 2025-04-28 15:49:14 +00:00
Michael Hoang
6c8ef6e9be cli: don't use select from clanLib 2025-04-28 12:52:00 +10:00
hsjobeki
5fc1f2cdbb Merge pull request 'Chore: remove unused legacy endpoints' (#3418) from hsjobeki/clan-core:chores-remove-unused into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/3418
2025-04-27 11:25:00 +00:00
Johannes Kirschbauer
b87d5a238c chore: remove unused moduleSchemas and related API endpoint for legacy modules
We didn't reach the state where we would display these schemas in the
UI.
We might need to wire this up in a similar way for the newer
clan.services
2025-04-27 13:14:09 +02:00
Johannes Kirschbauer
7007b7d62e refactor: rename clanLib.values to introspection 2025-04-27 13:10:42 +02:00
Johannes Kirschbauer
6dfc324661 Feat(clan.service): init automatic assertions for api schema checks 2025-04-27 11:49:56 +02:00
Johannes Kirschbauer
8495106ec4 feat(services): init feature flags in the module manifest: 'manifest.features.API' 2025-04-27 11:07:45 +02:00
Michael Hoang
cc4b009f06 lib: move select.select -> select for backwards compat with old CLIs 2025-04-25 17:30:06 +10:00
lassulus
5feccf4e57 Refactor select with new maybe selector
This is a great refactor of the select functionality in the flake class.
This now uses the same parser as the nix code, but runs it in python for
nice stacktraces.

Also we now have a maybe selector which can be used by prepending the
selector with a ?

Tests have been expanded to make sure the code is more stable and easier
to understand
2025-04-25 16:26:45 +10:00
Johannes Kirschbauer
a589736f9b lib/tests: fix container driver module path 2025-04-23 16:23:09 +02:00
Johannes Kirschbauer
f6e514ec6f Refactor: move checks/lib into lib/ to avoid duplicate lib
Lets avoid the mistake of nixpkgs having multiple
libs
2025-04-23 16:19:16 +02:00
DavHau
e2fb237c33 inventory tests: use containers by default 2025-04-23 19:49:02 +07:00
Michael Hoang
5cadb0cfbc Merge pull request 'nixosModules/clanCore: support nix-darwin' (#3287) from nix-darwin into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/3287
2025-04-22 13:50:38 +00:00
Michael Hoang
f40ab5c379 docs: always evaluate with class of nixos 2025-04-22 23:39:47 +10:00
Michael Hoang
a575894a83 nixosModules/clanCore: support nix-darwin 2025-04-22 23:14:03 +10:00
Johannes Kirschbauer
999c47dbed Checks: add nixosIntegration test example to hello-service 2025-04-22 06:32:32 +00:00
hsjobeki
5908aed2c7 Merge pull request 'Inventory/tags: init {nixos,darwin} tags' (#3370) from hsjobeki/clan-core:tags-2 into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/3370
2025-04-21 15:27:13 +00:00
Johannes Kirschbauer
cd0e8eafce Fix: manually define empty tags for testing 2025-04-21 17:17:56 +02:00
Johannes Kirschbauer
9d413a7682 Inventory/tags: init {nixos,darwin} tags 2025-04-21 16:43:15 +02:00
Johannes Kirschbauer
b791656694 clanLib: init flakeModules for better testing 2025-04-21 16:10:05 +02:00
Michael Hoang
41ff4a4247 build-clan: fix constructing nix-darwin machines 2025-04-17 20:23:54 +02:00
Valentin Gagarin
ebd5afe8f5 fixup(jsonschema): test attrsOf submodules with valid value 2025-04-16 16:55:50 +02:00
Valentin Gagarin
6a2e81373c lib/jsonschema: render defaults for submodule options
this relaxes the constraint that options of type `submodule` are always
required, and will render benign default values.
2025-04-16 16:55:46 +02:00
Johannes Kirschbauer
9f7e9ca9df feat(jsonschema): add test for attrsof submodule 2025-04-16 14:48:49 +02:00
Valentin Gagarin
e28681c4f2 lib/jsonschema: make attrs required
Before the change, modules of the form

```nix
{ lib, ... }: {
  foo.bar = lib.mkOption {
    # ...
  };
}
```

or

```nix
{ lib, ... }: {
  foo = lib.mkOption {
    type = lib.types.subModule {
      bar = lib.mkOption {
        # ...
      };
    };
  };
}
```

would not render with `foo` as required, which is not faithful to the
module system's semantics.

This change also tests that fields with defaults are not marked required.
Note that submodule options cannot have their defaults rendered to JSON
schema, and are therefore always marked required.

Architecturally this change is rather unfortunate: So far the checks for
defaults happen in the rendering (using `isDefault`) and not in the parsing,
but here we're adding a field to `$exportedModuleInfo`. While strictly
speaking we probably don't want to consider requiredness as module-level
information, it seems more reasonable to me to do it that way since at
the JSON schema level we have lost the distinction between `attrs`,
`attrsOf`, `submodule`.
2025-04-16 13:20:00 +02:00
Johannes Kirschbauer
2796038254 chore(test/makeTestClan): document all options, remove magic specialArgs 2025-04-16 10:33:32 +02:00
Johannes Kirschbauer
7bdb2cabf9 fix: rename folder lib/tests -> lib/test to be consistent with the attribute name 2025-04-16 10:04:31 +02:00
Johannes Kirschbauer
8ae0f5ddcb tests(clan): move test-inventory.nix to clanLib. And name it 'makeTestClan'
Exposing the function via clanLib makes it more accessible to clan modules
This allows each module to define its own test without needing to depend on any fileSystem path assumptions in the clan-core repo
2025-04-15 18:17:40 +02:00
Johannes Kirschbauer
f331295dd5 feat(buildClan): expose {nixosModules,darwinModules} from clanInternals
These are the exact same modules that where used internally to construct the corresponding
'nixosConfiguration', 'darwinConfiguration'
They can be externally used, and would yield the same result
Given that you pass the same 'specialArgs'
2025-04-15 17:25:57 +02:00
Johannes Kirschbauer
9800255a2c refactor(buildClan): simplify pkgs overriding logic 2025-04-15 16:05:57 +02:00
Johannes Kirschbauer
e68ab67112 refactor(buildClan): move modules into 'forName' and import the correct core module depending on class 2025-04-15 15:29:01 +02:00
Johannes Kirschbauer
d264e262bd fixup(buildClan): use clan.inventory instead of refering to the clanInternals dumping ground within the module 2025-04-15 15:10:08 +02:00
Johannes Kirschbauer
af04bf547f fixup(buildClan): split up the inner-module into: {forSystem, forName}
I am preparing this such that we can move the forName modules into the
defaults for the deferred module outputs and the forSystem modules are
added later and only for the 'configsPerSystem' where we actually need
the system modules
2025-04-15 15:02:37 +02:00
Johannes Kirschbauer
14ace40820 refactor: buildClan output; output deferred modules instead of nixosConfig 2025-04-15 14:25:02 +02:00
Michael Hoang
5cc1d823aa build-clan: drop unused machinesFunc 2025-04-15 13:30:28 +02:00
Michael Hoang
95fd1ec7eb build-clan: expose Clan configuration as a module 2025-04-14 16:04:06 +02:00
Johannes Kirschbauer
35379d3b86 Reapply "Merge pull request 'chore(buildClan): move machineClass option into inventory.machines submodule' (#3259) from hsjobeki/clan-core:buildclan-cleanup into main"
This reverts commit 62dfb23e41.
2025-04-09 18:16:35 +02:00
Johannes Kirschbauer
c344d57298 fix(checks/data-mesher): format, dont pass a duplicate data-mesher module 2025-04-09 18:03:04 +02:00
Johannes Kirschbauer
ec2aee3013 fix(eval/inventory): fix some test arguments to buildInventory 2025-04-09 17:38:06 +02:00
Johannes Kirschbauer
05c45371af feat(buildInventory): move instance resolution into buildInventory
Such that buildClan doesn't have to compose the results
buildInventory should be more self contained. But it is NOT meant a
public API! use buildClan argument 'inventory' instead
2025-04-09 17:31:35 +02:00
Johannes Kirschbauer
a6a79e83a0 treewide(clanLib): rename all occurences of {clan-core,self}.lib to 'clanLib' 2025-04-09 11:32:46 +02:00
Johannes Kirschbauer
c357cfa29f chore(lib/buildClan): remove dependencies {nixpkgs,nix-darwin} from the clanLib file 2025-04-08 22:13:46 +02:00
Johannes Kirschbauer
f399aad06e chore(lib/getModuleClass): remove unused library function 2025-04-08 22:09:10 +02:00
hsjobeki
f60da91dea Merge pull request 'docs(authoring): restructure authoring guides' (#3248) from hsjobeki/clan-core:docs-authoring into main
Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/3248
2025-04-08 19:58:59 +00:00