2024-09-03 10:22:49 +00:00
|
|
|
#!/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
|
|
|
|
|
2024-09-03 10:27:46 +00:00
|
|
|
# todo: This way of doing it blocks both parties. Not ideal.
|
2024-09-03 10:22:49 +00:00
|
|
|
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()
|