39 lines
1 KiB
Nix
39 lines
1 KiB
Nix
{ pkgs, ... }:
|
|
let
|
|
domain = "nettika.leaf.ninja";
|
|
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 {
|
|
systemd.services.links-webhook = {
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network.target" ];
|
|
serviceConfig = {
|
|
Type = "simple";
|
|
ExecStart = "${pkgs.python3}/bin/python3 ${webhookHandler}";
|
|
Restart = "always";
|
|
};
|
|
};
|
|
|
|
services.caddy.virtualHosts.${domain}.extraConfig = ''
|
|
root * ${root}
|
|
file_server
|
|
'';
|
|
}
|