mirror of
https://github.com/perstarkse/minne.git
synced 2026-07-09 22:32:48 +02:00
dev: toolchain harmonization, additional checks and formatters
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
minne-pkg,
|
||||
surrealdbPkg,
|
||||
minneNixosModule,
|
||||
nixosSystem,
|
||||
}:
|
||||
let
|
||||
evalModule =
|
||||
module:
|
||||
(nixosSystem {
|
||||
inherit (pkgs.stdenv.hostPlatform) system;
|
||||
modules = [
|
||||
minneNixosModule
|
||||
{
|
||||
nixpkgs.pkgs = pkgs;
|
||||
boot.loader.grub.enable = false;
|
||||
fileSystems."/".device = "/dev/sda1";
|
||||
system.stateVersion = "25.11";
|
||||
}
|
||||
module
|
||||
];
|
||||
}).config;
|
||||
|
||||
combined = evalModule {
|
||||
services.minne = {
|
||||
enable = true;
|
||||
package = minne-pkg;
|
||||
};
|
||||
};
|
||||
|
||||
split = evalModule {
|
||||
services.minne = {
|
||||
enable = true;
|
||||
package = minne-pkg;
|
||||
mode = "split";
|
||||
};
|
||||
};
|
||||
|
||||
external = evalModule {
|
||||
services.minne = {
|
||||
enable = true;
|
||||
package = minne-pkg;
|
||||
surrealdb = {
|
||||
enable = false;
|
||||
host = "db.internal";
|
||||
port = 9999;
|
||||
after = [ "surrealdb.service" ];
|
||||
requires = [ "surrealdb.service" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
bundled = evalModule {
|
||||
services.minne = {
|
||||
enable = true;
|
||||
package = minne-pkg;
|
||||
surrealdb = {
|
||||
enable = true;
|
||||
package = surrealdbPkg;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
hasUnit = cfg: name: cfg.systemd.services ? ${name};
|
||||
|
||||
assertions = [
|
||||
{
|
||||
assertion = hasUnit combined "minne" && !(hasUnit combined "minne-server");
|
||||
message = "combined mode must define only the `minne` unit.";
|
||||
}
|
||||
{
|
||||
assertion = combined.systemd.services.minne.serviceConfig.ExecStart == "${minne-pkg}/bin/main";
|
||||
message = "combined mode must run the `main` binary.";
|
||||
}
|
||||
{
|
||||
assertion =
|
||||
hasUnit split "minne-server" && hasUnit split "minne-worker" && !(hasUnit split "minne");
|
||||
message = "split mode must define `minne-server` and `minne-worker`, not `minne`.";
|
||||
}
|
||||
{
|
||||
assertion =
|
||||
split.systemd.services.minne-server.serviceConfig.ExecStart == "${minne-pkg}/bin/server";
|
||||
message = "split mode `minne-server` must run the `server` binary.";
|
||||
}
|
||||
{
|
||||
assertion =
|
||||
split.systemd.services.minne-worker.serviceConfig.ExecStart == "${minne-pkg}/bin/worker";
|
||||
message = "split mode `minne-worker` must run the `worker` binary.";
|
||||
}
|
||||
{
|
||||
assertion = !(hasUnit external "surrealdb");
|
||||
message = "external SurrealDB must not define a bundled `surrealdb` unit.";
|
||||
}
|
||||
{
|
||||
assertion =
|
||||
external.systemd.services.minne.environment.SURREALDB_ADDRESS == "ws://db.internal:9999";
|
||||
message = "external SurrealDB host/port must be threaded into SURREALDB_ADDRESS.";
|
||||
}
|
||||
{
|
||||
assertion =
|
||||
lib.elem "surrealdb.service" external.systemd.services.minne.after
|
||||
&& lib.elem "surrealdb.service" external.systemd.services.minne.requires;
|
||||
message = "external SurrealDB after/requires must order Minne after the DB unit.";
|
||||
}
|
||||
{
|
||||
assertion = hasUnit bundled "surrealdb";
|
||||
message = "bundled SurrealDB must define the `surrealdb` unit.";
|
||||
}
|
||||
{
|
||||
assertion = lib.hasPrefix "${surrealdbPkg}/bin/surreal" bundled.systemd.services.surrealdb.serviceConfig.ExecStart;
|
||||
message = "bundled SurrealDB unit must use the overridden `surrealdb.package`.";
|
||||
}
|
||||
];
|
||||
|
||||
failures = lib.filter (a: !a.assertion) assertions;
|
||||
in
|
||||
pkgs.runCommand "minne-module-eval-checks" { } (
|
||||
if failures == [ ] then
|
||||
"touch $out"
|
||||
else
|
||||
''
|
||||
echo "services.minne module shape checks failed:" >&2
|
||||
${lib.concatMapStringsSep "\n" (a: "echo ' - ${a.message}' >&2") failures}
|
||||
exit 1
|
||||
''
|
||||
)
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
pkgs,
|
||||
minne-pkg,
|
||||
surrealdbPkg,
|
||||
minneNixosModule,
|
||||
}:
|
||||
pkgs.testers.nixosTest {
|
||||
name = "minne-smoke";
|
||||
|
||||
nodes.machine =
|
||||
{ ... }:
|
||||
{
|
||||
imports = [ minneNixosModule ];
|
||||
|
||||
virtualisation.memorySize = 4096;
|
||||
|
||||
services.minne = {
|
||||
enable = true;
|
||||
package = minne-pkg;
|
||||
surrealdb = {
|
||||
enable = true;
|
||||
package = surrealdbPkg;
|
||||
username = "root_user";
|
||||
password = "root_password";
|
||||
namespace = "test";
|
||||
database = "test";
|
||||
};
|
||||
environment = {
|
||||
OPENAI_API_KEY = "test-key";
|
||||
STORAGE = "local";
|
||||
EMBEDDING_BACKEND = "hashed";
|
||||
INDEX_REBUILD_INTERVAL_SECS = "0";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("surrealdb.service")
|
||||
machine.wait_for_unit("minne.service")
|
||||
machine.wait_for_open_port(3000)
|
||||
machine.succeed("curl -sf http://127.0.0.1:3000/api/v1/live")
|
||||
machine.succeed("curl -sf http://127.0.0.1:3000/api/v1/ready")
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user