57 lines
1.3 KiB
Python
57 lines
1.3 KiB
Python
|
#!/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
|
||
|
|
||
|
# Don't make em wait.
|
||
|
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()
|