Merge pull request #78096 from marijanp/add-hledger-web-service

Add hledger-web service/ module
This commit is contained in:
Jacek Galowicz 2021-01-28 15:46:44 +01:00 committed by GitHub
commit f3b05f7b6f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 138 additions and 0 deletions

View file

@ -5630,6 +5630,12 @@
email = "markus@wotringer.de";
name = "Markus Wotringer";
};
marijanp = {
name = "Marijan Petričević";
email = "marijan.petricevic94@gmail.com";
github = "marijanp";
githubId = 13599169;
};
marius851000 = {
email = "mariusdavid@laposte.net";
name = "Marius David";

View file

@ -876,6 +876,7 @@
./services/web-apps/gotify-server.nix
./services/web-apps/grocy.nix
./services/web-apps/hedgedoc.nix
./services/web-apps/hledger-web.nix
./services/web-apps/icingaweb2/icingaweb2.nix
./services/web-apps/icingaweb2/module-monitoring.nix
./services/web-apps/ihatemoney

View file

@ -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 ];
}

View file

@ -155,6 +155,7 @@ in
# not on other platforms.
hibernate = handleTestOn ["x86_64-linux"] ./hibernate.nix {};
hitch = handleTest ./hitch {};
hledger-web = handleTest ./hledger-web.nix {};
hocker-fetchdocker = handleTest ./hocker-fetchdocker {};
home-assistant = handleTest ./home-assistant.nix {};
hostname = handleTest ./hostname.nix {};

View file

@ -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
'';
})