Skip to content

Commit

Permalink
nixos/wakapi: fix running under sqlite3; add stateDir; add sqlite tes…
Browse files Browse the repository at this point in the history
…t case (#370497)
  • Loading branch information
wolfgangwalther authored Jan 16, 2025
2 parents 167585a + fde8246 commit 459db35
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 20 deletions.
10 changes: 10 additions & 0 deletions nixos/modules/services/web-apps/wakapi.nix
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ in
options.services.wakapi = {
enable = mkEnableOption "Wakapi";
package = mkPackageOption pkgs "wakapi" { };
stateDir = mkOption {
type = types.path;
default = "/var/lib/wakapi";
description = ''
The state directory where data is stored. Will also be used as the
working directory for the wakapi service.
'';
};

settings = mkOption {
inherit (settingsFormat) type;
Expand Down Expand Up @@ -166,6 +174,8 @@ in
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
WorkingDirectory = cfg.stateDir;
RuntimeDirectory = "wakapi";
StateDirectory = "wakapi";
StateDirectoryMode = "0700";
Restart = "always";
Expand Down
67 changes: 47 additions & 20 deletions nixos/tests/wakapi.nix
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,63 @@ import ./make-test-python.nix (
{
name = "Wakapi";

nodes.machine = {
services.wakapi = {
enable = true;
settings = {
server.port = 3000; # upstream default, set explicitly in case upstream changes it

db = {
dialect = "postgres"; # `createLocally` only supports postgres
host = "/run/postgresql";
port = 5432; # service will fail if port is not set
name = "wakapi";
user = "wakapi";
nodes = {
wakapiPsql = {
services.wakapi = {
enable = true;
settings = {
server.port = 3000; # upstream default, set explicitly in case upstream changes it
db = {
dialect = "postgres"; # `createLocally` only supports postgres
host = "/run/postgresql";
port = 5432; # service will fail if port is not set
name = "wakapi";
user = "wakapi";
};
};

# Automatically create our database
database.createLocally = true; # only works with Postgresql for now

# Created with `cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w ${1:-32} | head -n 1`
# Prefer passwordSaltFile in production.
passwordSalt = "NpqCY7eY7fMoIWYmPx5mAgr6YoSlXSuI";
};
};

database.createLocally = true;
wakapiSqlite = {
services.wakapi = {
enable = true;
settings = {
server.port = 3001;
db = {
dialect = "sqlite3";
name = "wakapi";
user = "wakapi";
};
};

# Created with `cat /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9' | fold -w ${1:-32} | head -n 1`
# Prefer passwordSaltFile in production.
passwordSalt = "NpqCY7eY7fMoIWYmPx5mAgr6YoSlXSuI";
passwordSalt = "NpqCY7eY7fMoIWYmPx5mAgr6YoSlXSuI";
};
};
};

# Test that the service is running and that it is reachable.
# Test that service works under both postgresql and sqlite3
# by starting all machines, and curling the default address.
# This is not very comprehensive for a test, but it should
# catch very basic mistakes in the module.
testScript = ''
machine.wait_for_unit("wakapi.service")
machine.wait_for_open_port(3000)
machine.succeed("curl --fail http://localhost:3000")
with subtest("Test Wakapi with postgresql backend"):
wakapiPsql.start()
wakapiPsql.wait_for_unit("wakapi.service")
wakapiPsql.wait_for_open_port(3000)
wakapiPsql.succeed("curl --fail http://localhost:3000")
with subtest("Test Wakapi with sqlite3 backend"):
wakapiSqlite.start()
wakapiSqlite.wait_for_unit("wakapi.service")
wakapiSqlite.wait_for_open_port(3001)
wakapiSqlite.succeed("curl --fail http://localhost:3001")
'';

meta.maintainers = [ lib.maintainers.NotAShelf ];
Expand Down

0 comments on commit 459db35

Please sign in to comment.