feat(gitea): add native NATS JetStream and webhook bridge

This commit is contained in:
Tibo De Peuter 2026-08-05 19:39:51 +02:00
parent 2340c5a0e7
commit 41f5e6bae8
Signed by: tdpeuter
SSH key fingerprint: SHA256:u/h/LVoqKF1Iz02uOyxe6hcjmoZASCGV2HM0TG9ZMoU
2 changed files with 46 additions and 0 deletions

View file

@ -21,6 +21,50 @@ in {
options.homelab.apps.gitea.enable = lib.mkEnableOption "Gitea";
config = lib.mkIf cfg.enable {
services.nats = {
enable = true;
listenAddress = "0.0.0.0";
port = 4222;
jetstream = true;
};
networking.firewall.allowedTCPPorts = [ 4222 9000 ];
systemd.services.gitea-webhook-bridge = {
description = "Gitea Webhook Bridge to NATS JetStream";
after = [ "network.target" "nats.service" ];
wants = [ "nats.service" ];
wantedBy = [ "multi-user.target" ];
path = with pkgs; [ natscli python3 ];
script = ''
python3 -c '
import http.server
import subprocess
import sys
class WebhookHandler(http.server.BaseHTTPRequestHandler):
def do_POST(self):
content_length = int(self.headers.get("Content-Length", 0))
body = self.rfile.read(content_length)
try:
subprocess.run(["nats", "pub", "--server=nats://127.0.0.1:4222", "forgejo.staging"], input=body, check=True)
self.send_response(200)
self.end_headers()
self.wfile.write(b"OK\n")
except Exception as e:
self.send_response(500)
self.end_headers()
self.wfile.write(str(e).encode("utf-8"))
def log_message(self, format, *args):
sys.stderr.write("%s - - [%s] %s\n" % (self.client_address[0], self.log_date_time_string(), format%args))
server = http.server.ThreadingHTTPServer(("0.0.0.0", 9000), WebhookHandler)
server.serve_forever()
'
'';
};
homelab = {
users = {
apps.enable = true;
@ -438,6 +482,7 @@ in {
# ... oath2_client
# ... webhook
FORGEJO__webhook__ALLOWED_HOST_LIST = "192.168.0.0/16,127.0.0.0/8,host.docker.internal,*";
FORGEJO__mailer__ENABLED = "true";
# Buffer length of channel, keep it as it is if you don't know what it is.