#!/usr/bin/env python3 from http.client import parse_headers from http.server import BaseHTTPRequestHandler from http.server import HTTPServer import subprocess import config ## Simple way to automatically pull and recompile on a remote server. ## Run this from the root directory. ## ## Currently supports: ## - Gitea (Via GET method). ## class HttpHandler(BaseHTTPRequestHandler): def do_GET(self): got_gitea_push_event = False got_auth = False for header in self.headers: match [header, self.headers[header]]: case ["X-Gitea-Event", "push"]: got_gitea_push_event = True case ["Authorization", config.webhook_auth]: got_auth = True if not got_gitea_push_event or not got_auth: self.send_response(400) return # todo: This way of doing it blocks both parties. Not ideal. self.send_response(200) subprocess.run(["git", "pull"]) subprocess.run(["./compile.sh"]) print("Pulled and recompiled.") def run(server_class=HTTPServer, handler_class=HttpHandler): server_address = ('', config.webhook_port) httpd = server_class(server_address, handler_class) try: httpd.serve_forever() except KeyboardInterrupt: httpd.server_close() if __name__ == "__main__": run()