about summary refs log tree commit diff
path: root/nixos/tests/firefly-iii.nix
blob: 2373ba836026458842a1d83424901fa88b8c5dd4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import ./make-test-python.nix ({ lib, ... }:

let
  db-pass = "Test2Test2";
  app-key = "TestTestTestTestTestTestTestTest";
in
{
  name = "firefly-iii";
  meta.maintainers = [ lib.maintainers.savyajha ];

  nodes.fireflySqlite = { config, ... }: {
    environment.etc = {
      "firefly-iii-appkey".text = app-key;
    };
    services.firefly-iii = {
      enable = true;
      enableNginx = true;
      settings = {
        APP_KEY_FILE = "/etc/firefly-iii-appkey";
        LOG_CHANNEL = "stdout";
        SITE_OWNER = "mail@example.com";
      };
    };
  };

  nodes.fireflyPostgresql = { config, pkgs, ... }: {
    environment.etc = {
      "firefly-iii-appkey".text = app-key;
      "postgres-pass".text = db-pass;
    };
    services.firefly-iii = {
      enable = true;
      enableNginx = true;
      settings = {
        APP_KEY_FILE = "/etc/firefly-iii-appkey";
        LOG_CHANNEL = "stdout";
        SITE_OWNER = "mail@example.com";
        DB_CONNECTION = "pgsql";
        DB_DATABASE = "firefly";
        DB_USERNAME = "firefly";
        DB_PASSWORD_FILE = "/etc/postgres-pass";
      };
    };

    services.postgresql = {
      enable = true;
      package = pkgs.postgresql_15;
      authentication = ''
        local all postgres peer
        local firefly firefly password
      '';
      initialScript = pkgs.writeText "firefly-init.sql" ''
        CREATE USER "firefly" WITH LOGIN PASSWORD '${db-pass}';
        CREATE DATABASE "firefly" WITH OWNER "firefly";
        CREATE SCHEMA AUTHORIZATION firefly;
      '';
    };
  };

  nodes.fireflyMysql = { config, pkgs, ... }: {
    environment.etc = {
      "firefly-iii-appkey".text = app-key;
      "mysql-pass".text = db-pass;
    };
    services.firefly-iii = {
      enable = true;
      enableNginx = true;
      settings = {
        APP_KEY_FILE = "/etc/firefly-iii-appkey";
        LOG_CHANNEL = "stdout";
        SITE_OWNER = "mail@example.com";
        DB_CONNECTION = "mysql";
        DB_DATABASE = "firefly";
        DB_USERNAME = "firefly";
        DB_PASSWORD_FILE = "/etc/mysql-pass";
        DB_SOCKET = "/run/mysqld/mysqld.sock";
      };
    };

    services.mysql = {
      enable = true;
      package = pkgs.mariadb;
      initialScript = pkgs.writeText "firefly-init.sql" ''
        create database firefly DEFAULT CHARACTER SET utf8mb4;
        create user 'firefly'@'localhost' identified by '${db-pass}';
        grant all on firefly.* to 'firefly'@'localhost';
      '';
      settings.mysqld.character-set-server = "utf8mb4";
    };
  };

  testScript = ''
    fireflySqlite.wait_for_unit("phpfpm-firefly-iii.service")
    fireflySqlite.wait_for_unit("nginx.service")
    fireflySqlite.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
    fireflySqlite.succeed("curl -fvvv -Ls http://localhost/v1/js/app.js")
    fireflySqlite.succeed("systemctl start firefly-iii-cron.service")
    fireflyPostgresql.wait_for_unit("phpfpm-firefly-iii.service")
    fireflyPostgresql.wait_for_unit("nginx.service")
    fireflyPostgresql.wait_for_unit("postgresql.service")
    fireflyPostgresql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
    fireflyPostgresql.succeed("systemctl start firefly-iii-cron.service")
    fireflyMysql.wait_for_unit("phpfpm-firefly-iii.service")
    fireflyMysql.wait_for_unit("nginx.service")
    fireflyMysql.wait_for_unit("mysql.service")
    fireflyMysql.succeed("curl -fvvv -Ls http://localhost/ | grep 'Firefly III'")
    fireflyMysql.succeed("systemctl start firefly-iii-cron.service")
  '';
})