Rabbi_Gerzi/nix/checks/module-eval.nix
2026-07-04 21:24:05 +03:00

74 lines
1.9 KiB
Nix

{
lib,
nixpkgs,
module,
pkgs,
system,
}:
let
uploadLimits = import ../upload-limits.nix;
evaluatedConfig =
(nixpkgs.lib.nixosSystem {
inherit system;
modules = [
module
{
system.stateVersion = "26.05";
services.rabbi-gerzi = {
enable = true;
frontend.hostName = "www.example.test";
backend = {
hostName = "api.example.test";
environmentFile = "/run/secrets/rabbi-gerzi.env";
};
};
}
];
}).config;
evaluatedHostName = evaluatedConfig.services.rabbi-gerzi.backend.hostName;
backendVirtualHost = evaluatedConfig.services.nginx.virtualHosts.${evaluatedHostName};
phpOptions = evaluatedConfig.services.phpfpm.pools.rabbi-gerzi.phpOptions;
expectedUploadMaxFilesize = "upload_max_filesize = ${uploadLimits.phpUploadLimit}";
expectedPostMaxSize = "post_max_size = ${uploadLimits.phpUploadLimit}";
expectedNginxClientMaxBodySize = "client_max_body_size ${uploadLimits.nginxClientMaxBodySize};";
assertions = [
{
passed = lib.hasInfix expectedUploadMaxFilesize phpOptions;
message = "php-fpm upload_max_filesize is not 6M";
}
{
passed = lib.hasInfix expectedPostMaxSize phpOptions;
message = "php-fpm post_max_size is not 6M";
}
{
passed = lib.hasInfix expectedNginxClientMaxBodySize backendVirtualHost.extraConfig;
message = "nginx client_max_body_size is not 6m";
}
];
failedAssertions = lib.filter (assertion: !assertion.passed) assertions;
in
pkgs.runCommand "rabbi-gerzi-module-eval"
{
failures = lib.concatMapStringsSep "\n" (assertion: assertion.message) failedAssertions;
value = evaluatedHostName;
preferLocalBuild = true;
}
''
if [ -n "$failures" ]; then
printf '%s\n' "$failures" >&2
exit 1
fi
echo "$value" > $out
''