nixos/hledger-web: init module and test
This commit is contained in:
parent
d439e559ef
commit
f56089ded5
|
@ -876,6 +876,7 @@
|
||||||
./services/web-apps/gotify-server.nix
|
./services/web-apps/gotify-server.nix
|
||||||
./services/web-apps/grocy.nix
|
./services/web-apps/grocy.nix
|
||||||
./services/web-apps/hedgedoc.nix
|
./services/web-apps/hedgedoc.nix
|
||||||
|
./services/web-apps/hledger-web.nix
|
||||||
./services/web-apps/icingaweb2/icingaweb2.nix
|
./services/web-apps/icingaweb2/icingaweb2.nix
|
||||||
./services/web-apps/icingaweb2/module-monitoring.nix
|
./services/web-apps/icingaweb2/module-monitoring.nix
|
||||||
./services/web-apps/ihatemoney
|
./services/web-apps/ihatemoney
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
{ lib, pkgs, config, ... }:
|
||||||
|
with lib;
|
||||||
|
let
|
||||||
|
cfg = config.services.hledger-web;
|
||||||
|
in {
|
||||||
|
options.services.hledger-web = {
|
||||||
|
|
||||||
|
enable = mkEnableOption "hledger-web service";
|
||||||
|
|
||||||
|
serveApi = mkEnableOption "Serve only the JSON web API, without the web UI.";
|
||||||
|
|
||||||
|
host = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "127.0.0.1";
|
||||||
|
description = ''
|
||||||
|
Address to listen on.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.port;
|
||||||
|
default = 5000;
|
||||||
|
example = "80";
|
||||||
|
description = ''
|
||||||
|
Port to listen on.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
capabilities = mkOption {
|
||||||
|
type = types.commas;
|
||||||
|
default = "view";
|
||||||
|
description = ''
|
||||||
|
Enable the view, add, and/or manage capabilities. E.g. view,add
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
journalFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
example = "/home/hledger/.hledger.journal";
|
||||||
|
description = ''
|
||||||
|
Input journal file.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
baseUrl = mkOption {
|
||||||
|
type = with types; nullOr str;
|
||||||
|
default = null;
|
||||||
|
example = "https://example.org";
|
||||||
|
description = ''
|
||||||
|
Base URL, when sharing over a network.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
systemd.services.hledger-web = {
|
||||||
|
description = "hledger-web - web-app for the hledger accounting tool.";
|
||||||
|
documentation = [ https://hledger.org/hledger-web.html ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "networking.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = ''
|
||||||
|
${pkgs.hledger-web}/bin/hledger-web \
|
||||||
|
--host=${cfg.host} \
|
||||||
|
--port=${toString cfg.port} \
|
||||||
|
--file=${cfg.journalFile} \
|
||||||
|
"--capabilities=${cfg.capabilities}" \
|
||||||
|
${optionalString (cfg.baseUrl != null) "--base-url=${cfg.baseUrl}"} \
|
||||||
|
${optionalString (cfg.serveApi) "--serve-api"}
|
||||||
|
'';
|
||||||
|
Restart = "always";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
meta.maintainers = with lib.maintainers; [ marijanp ];
|
||||||
|
}
|
|
@ -155,6 +155,7 @@ in
|
||||||
# not on other platforms.
|
# not on other platforms.
|
||||||
hibernate = handleTestOn ["x86_64-linux"] ./hibernate.nix {};
|
hibernate = handleTestOn ["x86_64-linux"] ./hibernate.nix {};
|
||||||
hitch = handleTest ./hitch {};
|
hitch = handleTest ./hitch {};
|
||||||
|
hledger-web = handleTest ./hledger-web.nix {};
|
||||||
hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
|
hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
|
||||||
home-assistant = handleTest ./home-assistant.nix {};
|
home-assistant = handleTest ./home-assistant.nix {};
|
||||||
hostname = handleTest ./hostname.nix {};
|
hostname = handleTest ./hostname.nix {};
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||||
|
let
|
||||||
|
journal = pkgs.writeText "test.journal" ''
|
||||||
|
2010/01/10 Loan
|
||||||
|
assets:cash 500$
|
||||||
|
income:loan -500$
|
||||||
|
2010/01/10 NixOS Foundation donation
|
||||||
|
expenses:donation 250$
|
||||||
|
assets:cash -250$
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
rec {
|
||||||
|
name = "hledger-web";
|
||||||
|
meta.maintainers = with lib.maintainers; [ marijanp ];
|
||||||
|
|
||||||
|
nodes = {
|
||||||
|
server = { config, pkgs, ... }: rec {
|
||||||
|
services.hledger-web = {
|
||||||
|
host = "127.0.0.1";
|
||||||
|
port = 5000;
|
||||||
|
enable = true;
|
||||||
|
journalFile = journal;
|
||||||
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [ services.hledger-web.port ];
|
||||||
|
};
|
||||||
|
apiserver = { config, pkgs, ... }: rec {
|
||||||
|
services.hledger-web = {
|
||||||
|
host = "127.0.0.1";
|
||||||
|
port = 5000;
|
||||||
|
enable = true;
|
||||||
|
serveApi = true;
|
||||||
|
journalFile = journal;
|
||||||
|
};
|
||||||
|
networking.firewall.allowedTCPPorts = [ services.hledger-web.port ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
start_all()
|
||||||
|
|
||||||
|
server.wait_for_unit("hledger-web.service")
|
||||||
|
server.wait_for_open_port(5000)
|
||||||
|
with subtest("Check if web UI is accessible"):
|
||||||
|
page = server.succeed("curl -L http://127.0.0.1:5000")
|
||||||
|
assert "test.journal" in page
|
||||||
|
|
||||||
|
apiserver.wait_for_unit("hledger-web.service")
|
||||||
|
apiserver.wait_for_open_port(5000)
|
||||||
|
with subtest("Check if the JSON API is served"):
|
||||||
|
transactions = apiserver.succeed("curl -L http://127.0.0.1:5000/transactions")
|
||||||
|
assert "NixOS Foundation donation" in transactions
|
||||||
|
'';
|
||||||
|
})
|
Loading…
Reference in New Issue