forgejo deployment

This commit is contained in:
John Lancaster
2026-07-18 12:21:03 -05:00
parent 25ecb7ad06
commit ac5128bf74
2 changed files with 80 additions and 47 deletions
+80 -38
View File
@@ -3,6 +3,18 @@
let
cfg = config.forgejo;
needsPrivilegedPort = cfg.port < 1024;
wrappedForgejo = (inputs.self.wrappers.forgejo.forgejo.apply {
inherit pkgs;
serviceConfig = config.services.forgejo;
}).wrapper;
cleanForgejo = (inputs.self.wrappers.forgejo.clean.apply {
inherit pkgs;
serviceConfig = config.services.forgejo;
}).wrapper;
cleanPostgres = (inputs.self.wrappers.forgejo.clean-postgres.apply {
inherit pkgs;
serviceConfig = config.services.postgresql;
}).wrapper;
in
{
options.forgejo = {
@@ -154,17 +166,15 @@
client_id="$(<${config.sops.secrets."forgejo/pocket_id/client_id".path})"
client_secret="$(<${config.sops.secrets."forgejo/pocket_id/client_secret".path})"
provider_name="${cfg.pocketId.name}"
forgejo_bin="${lib.getExe config.services.forgejo.package}"
forgejo_config="${config.services.forgejo.customDir}/conf/app.ini"
forgejo_work_path="${config.services.forgejo.stateDir}"
forgejo_bin="${lib.getExe wrappedForgejo}"
auth_id="$(
"$forgejo_bin" --config "$forgejo_config" --work-path "$forgejo_work_path" admin auth list \
"$forgejo_bin" admin auth list \
| ${lib.getExe' pkgs.gawk "awk"} '$2 == "'"$provider_name"'" { print $1; exit }'
)"
if [ -n "$auth_id" ]; then
"$forgejo_bin" --config "$forgejo_config" --work-path "$forgejo_work_path" admin auth update-oauth \
"$forgejo_bin" admin auth update-oauth \
--id "$auth_id" \
--name "$provider_name" \
--provider openidConnect \
@@ -175,7 +185,7 @@
--scopes profile \
--scopes email
else
"$forgejo_bin" --config "$forgejo_config" --work-path "$forgejo_work_path" admin auth add-oauth \
"$forgejo_bin" admin auth add-oauth \
--name "$provider_name" \
--provider openidConnect \
--key "$client_id" \
@@ -188,39 +198,71 @@
'';
};
environment.systemPackages =
let
systemctl = lib.getExe' pkgs.systemd "systemctl";
clean-forgejo = (pkgs.writeShellScriptBin "clean-forgejo" ''
set -euo pipefail
sudo ${systemctl} stop forgejo.service
${lib.getExe' pkgs.coreutils "echo"} "Stopped Forgejo"
sudo ${lib.getExe' pkgs.coreutils "rm"} -rf ${config.services.forgejo.stateDir}
${lib.getExe' pkgs.coreutils "echo"} "Removed ${config.services.forgejo.stateDir}"
'');
clean-postgres = (pkgs.writeShellScriptBin "clean-postgres" ''
set -euo pipefail
sudo ${systemctl} stop postgresql.service
${lib.getExe' pkgs.coreutils "echo"} "Stopped PostgreSQL"
sudo ${lib.getExe' pkgs.coreutils "rm"} -rf ${config.services.postgresql.dataDir}
${lib.getExe' pkgs.coreutils "echo"} "Removed ${config.services.postgresql.dataDir}"
'');
in [
clean-forgejo
clean-postgres
(pkgs.writeShellScriptBin "clean-all" ''
set -euo pipefail
GREEN_CHECK="\e[32m\e[0m"
YELLOW_BANG="\e[33m!\e[0m"
${lib.getExe' pkgs.coreutils "echo"} -n -e "$YELLOW_BANG Remove everything related to Forgejo and the PostgreSQL database behind it?"
read -p " (y/n) " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
${lib.getExe clean-forgejo}
${lib.getExe clean-postgres}
${lib.getExe' pkgs.coreutils "echo"} -e "$GREEN_CHECK Removed everything related to forgejo"
fi
'')
environment.systemPackages = [
wrappedForgejo
cleanForgejo
cleanPostgres
];
};
};
flake.wrappers.forgejo = {
forgejo = inputs.wrappers.lib.wrapModule ({ config, lib, wlib, ... }: {
options = {
serviceConfig = lib.mkOption { type = lib.types.attrs; };
};
config = let
cfg = config.serviceConfig;
forgejo_config="${cfg.customDir}/conf/app.ini";
forgejo_work_path="${cfg.stateDir}";
in {
binName = "my-forgejo";
package = cfg.package;
args = [
"--config" forgejo_config
"--work-path" forgejo_work_path
];
};
});
clean = inputs.wrappers.lib.wrapModule ({ config, lib, wlib, ... }: {
options = {
serviceConfig = lib.mkOption { type = lib.types.attrs; };
};
config = let
cfg = config.serviceConfig;
pkgs = config.pkgs;
in {
binName = "forgejo-clean";
package = pkgs.coreutils;
exePath = lib.getExe' pkgs.coreutils "rm";
extraPackages = [ pkgs.systemd ];
preHook = ''
sudo systemctl stop forgejo.service
echo "Stopped Forgejo"
'';
args = [ "-rf" cfg.stateDir ];
postHook = ''echo "Removed ${cfg.stateDir}"'';
};
});
clean-postgres = inputs.wrappers.lib.wrapModule ({ config, lib, wlib, ... }: {
options = {
serviceConfig = lib.mkOption { type = lib.types.attrs; };
};
config = let
cfg = config.serviceConfig;
pkgs = config.pkgs;
in {
binName = "postgres-clean";
package = pkgs.coreutils;
exePath = lib.getExe' pkgs.coreutils "rm";
extraPackages = [ pkgs.systemd ];
preHook = ''
sudo systemctl stop postgresql.service
echo "Stopped Postgres"
'';
args = [ "-rf" cfg.dataDir ];
postHook = ''echo "Removed ${cfg.dataDir}"'';
};
});
};
}
-9
View File
@@ -119,13 +119,4 @@ in
})
];
};
# flake.homeConfigurations.soteria = withSystem "x86_64-linux" (ctx@{ config, inputs', ...}:
# inputs.home-manager.lib.homeManagerConfiguration {
# pkgs = inputs'.nixpkgs.legacyPackages;
# modules = [
# inputs.self.modules.homeManager."${username}"
# inputs.self.modules.homeManager.soteria
# ];
# });
}