From fe0d323af527b8d222312d251dc876b44bf05d29 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Thu, 22 Aug 2024 19:16:28 +0200 Subject: [PATCH 1/2] nixos/engelsystem: prune template cache on version changes After upgrading to 3.5.0 we noticed, that registering would redirect to the login page and not work at all. At the same time the admin user was unable to access its user settings. This issue could be tracked back to the template cache, that must be invalidated between release upgrades. --- nixos/modules/services/web-apps/engelsystem.nix | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/nixos/modules/services/web-apps/engelsystem.nix b/nixos/modules/services/web-apps/engelsystem.nix index fe815f0a9742..fcc0fc923bf8 100644 --- a/nixos/modules/services/web-apps/engelsystem.nix +++ b/nixos/modules/services/web-apps/engelsystem.nix @@ -163,7 +163,17 @@ in { Group = "engelsystem"; }; script = '' - ${cfg.package}/bin/migrate + versionFile="/var/lib/engelsystem/.version" + version=$(cat "$versionFile" 2>/dev/null || echo 0) + + if [[ $version != ${cfg.package.version} ]]; then + # prune template cache between releases + rm -rfv /var/lib/engelsystem/storage/cache/* + + ${cfg.package}/bin/migrate + + echo ${cfg.package.version} > "$versionFile" + fi ''; after = [ "engelsystem-init.service" "mysql.service" ]; }; From 760b2b55621bdbfb9cade9a012760f945525ac6c Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Thu, 22 Aug 2024 19:49:07 +0200 Subject: [PATCH 2/2] nixos/engelsystem: refactor option setup --- .../modules/services/web-apps/engelsystem.nix | 67 +++++++++++-------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/nixos/modules/services/web-apps/engelsystem.nix b/nixos/modules/services/web-apps/engelsystem.nix index fcc0fc923bf8..b32e5e05953f 100644 --- a/nixos/modules/services/web-apps/engelsystem.nix +++ b/nixos/modules/services/web-apps/engelsystem.nix @@ -1,40 +1,49 @@ -{ config, lib, pkgs, utils, ... }: +{ + config, + lib, + pkgs, + utils, + ... +}: let - inherit (lib) mkDefault mkEnableOption mkIf mkOption types mkPackageOption; + inherit (lib) + mkDefault + mkEnableOption + mkIf + mkOption + mkPackageOption + mkRenamedOptionModule + types + ; + cfg = config.services.engelsystem; in { - options = { - services.engelsystem = { - enable = mkOption { - default = false; - example = true; - description = '' - Whether to enable engelsystem, an online tool for coordinating volunteers - and shifts on large events. - ''; - type = lib.types.bool; - }; + imports = [ + (mkRenamedOptionModule [ "services" "engelsystem" "config" ] [ "services" "engelsystem" "settings" ]) + ]; - domain = mkOption { - type = types.str; - example = "engelsystem.example.com"; - description = "Domain to serve on."; - }; + options.services.engelsystem = { + enable = mkEnableOption "engelsystem, an online tool for coordinating volunteers and shifts on large events"; - package = mkPackageOption pkgs "engelsystem" { }; + package = mkPackageOption pkgs "engelsystem" { }; - createDatabase = mkOption { - type = types.bool; - default = true; - description = '' - Whether to create a local database automatically. - This will override every database setting in {option}`services.engelsystem.config`. - ''; - }; + domain = mkOption { + type = types.str; + example = "engelsystem.example.com"; + description = "Domain to serve on."; }; - services.engelsystem.config = mkOption { + createDatabase = mkOption { + type = types.bool; + default = true; + description = '' + Whether to create a local database automatically. + This will override every database setting in {option}`services.engelsystem.config`. + ''; + }; + + settings = mkOption { type = types.attrs; default = { database = { @@ -144,7 +153,7 @@ in { script = let genConfigScript = pkgs.writeScript "engelsystem-gen-config.sh" - (utils.genJqSecretsReplacementSnippet cfg.config "config.json"); + (utils.genJqSecretsReplacementSnippet cfg.settings "config.json"); in '' umask 077 mkdir -p /var/lib/engelsystem/storage/app