Compare commits

...
Sign in to create a new pull request.

1 commit

Author SHA1 Message Date
f9645b9384
add data model entity: application 2025-06-17 12:21:29 +02:00
4 changed files with 110 additions and 0 deletions

View file

@ -15,6 +15,12 @@ jobs:
- uses: actions/checkout@v4
- run: nix-build -A tests
check-data-model:
runs-on: native
steps:
- uses: actions/checkout@v4
- run: nix-shell --run 'nix-unit ./test.nix'
check-peertube:
runs-on: native
steps:

View file

@ -41,6 +41,23 @@ in
shell = pkgs.mkShellNoCC {
inherit (pre-commit-check) shellHook;
buildInputs = pre-commit-check.enabledPackages;
packages =
let
test-loop = pkgs.writeShellApplication {
name = "test-loop";
runtimeInputs = [
pkgs.watchexec
pkgs.nix-unit
];
text = ''
watchexec -w ${builtins.toString ./.} -- nix-unit ${builtins.toString ./test.nix} "$@"
'';
};
in
[
pkgs.nix-unit
test-loop
];
};
tests = {

View file

@ -0,0 +1,42 @@
{
lib,
...
}:
let
inherit (lib) types mkOption;
in
with types;
{
options = {
runtime-environments = mkOption {
type = attrsOf (attrTag {
nixos = mkOption {
type = submodule {
options = {
module = mkOption {
description = "The NixOS module of the run-time environment";
type = deferredModule;
};
};
};
};
});
};
applications = mkOption {
description = "Collection of NixOS modules, each implementing a Fediversity application";
type = attrsOf (submoduleWith {
description = "A Fediversity application";
modules = [
{
options = {
module = mkOption {
description = "The NixOS module to compose into an operator's configuration";
type = deferredModule;
};
};
}
];
});
};
};
}

45
test.nix Normal file
View file

@ -0,0 +1,45 @@
let
inherit (import ./default.nix { }) pkgs;
inherit (pkgs) lib;
eval =
module:
(lib.evalModules {
modules = [
module
./deployment/application.nix
];
}).config;
in
{
test-foo = {
expr =
let
example = eval {
runtime-environments.bar.nixos = {
module =
{ ... }:
{
system.stateVersion = "25.05";
};
};
applications.foo = {
module =
{ pkgs, ... }:
{
environment.systemPackages = [
pkgs.hello
];
};
};
};
in
{
has-runtime = example.runtime-environments.bar.nixos ? module;
has-application = example.applications.foo ? module;
};
expected = {
has-runtime = true;
has-application = true;
};
};
}