gitea webhook service
This commit is contained in:
56
tools/git_webhook.py
Normal file
56
tools/git_webhook.py
Normal file
@ -0,0 +1,56 @@
|
||||
#!/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()
|
Reference in New Issue
Block a user