Use caddy-exec to handling Forgejo webhooks on astral

This commit is contained in:
Nettika 2025-10-15 17:43:36 -07:00
parent 01015c19b9
commit 39f73ef2f2
2 changed files with 20 additions and 33 deletions

View file

@ -36,6 +36,11 @@
services.caddy = { services.caddy = {
enable = true; enable = true;
package = pkgs.caddy.withPlugins {
plugins =
[ "github.com/abiosoft/caddy-exec@v0.0.0-20240914124740-521d8736cb4d" ];
hash = "sha256-ef6/x7wjKk0axjX6MfAzTTwPM2FTOTSSyI9zLLrczV0=";
};
virtualHosts = { virtualHosts = {
"astral.leaf.ninja".extraConfig = '' "astral.leaf.ninja".extraConfig = ''
respond "astral is online" respond "astral is online"

View file

@ -1,39 +1,21 @@
{ pkgs, ... }: { pkgs, lib, ... }:
let let
domain = "nettika.leaf.ninja"; domain = "nettika.leaf.ninja";
root = "/srv/links"; root = "/srv/links";
webhookHandler = pkgs.writeScript "webhook-handler.py" ''
#!${pkgs.python3}/bin/python3
import http.server
import socketserver
import subprocess
import os
class WebhookHandler(http.server.SimpleHTTPRequestHandler):
def do_POST(self):
os.chdir('${root}')
subprocess.run(['${pkgs.git}/bin/git', 'pull'], check=True)
self.send_response(200)
self.end_headers()
self.wfile.write(b'OK')
with socketserver.TCPServer(("127.0.0.1", 8081), WebhookHandler) as httpd:
httpd.serve_forever()
'';
in { in {
systemd.services.links-webhook = { services.caddy.virtualHosts = {
wantedBy = [ "multi-user.target" ]; ${domain}.extraConfig = ''
after = [ "network.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.python3}/bin/python3 ${webhookHandler}";
Restart = "always";
};
};
services.caddy.virtualHosts.${domain}.extraConfig = ''
root * ${root} root * ${root}
file_server file_server
''; '';
"http://localhost:8081".extraConfig = let git = lib.getExe pkgs.git;
in ''
route {
exec {
command ${git} pull --rebase
directory ${root}
}
}
'';
};
} }