-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwebhook-receive.py
53 lines (43 loc) · 2.02 KB
/
webhook-receive.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import asfquart
from quart import request, jsonify
from yaml import load
from yaml import Loader
app = asfquart.construct("merge-queue-webhook")
with open("config.yml") as fp:
config = load(fp, Loader=Loader)
gh_user_map = config.get("gh-user-map", {})
@app.route('/webhook', methods=['POST'])
async def webhook_receiver():
payload = await request.get_json()
event = request.headers.get("X-Github-Event")
action = payload.get("action")
if event == "pull_request" and action == "enqueued":
pr_number = payload.get("number")
login = payload.get("sender").get("login")
asf_id = gh_user_map.get(login)
pull_request = payload.get("pull_request")
title = pull_request.get("title")
print(f"User {login} (Apache ID {asf_id}) added PR #{pr_number} ({title}) to merge queue.")
elif event == "pull_request" and action == "dequeued":
pr_number = payload.get("number")
reason = payload.get("reason")
pull_request = payload.get("pull_request")
if reason.lower() == "merge":
merge_commit_sha = pull_request.get("merge_commit_sha")
title = pull_request.get("title")
login = payload.get("sender").get("login")
asf_id = gh_user_map.get(login)
print(f"User {login} (Apache ID {asf_id}) merged PR #{pr_number} ({title}). Merge SHA is {merge_commit_sha}")
elif event == "merge_group" and action == "checks_requested":
print("Merge group!!")
merge_group = payload.get("merge_group", {})
login = payload.get("sender").get("login")
asf_id = gh_user_map.get(login)
base = merge_group.get("base_sha")
head = merge_group.get("head_sha")
print(f"User {login} (Apache ID {asf_id}) merged commits after {base} up until {head} via merge queue")
else:
print(f"Received webhook event {event} with action {action}")
return jsonify({'message': 'Webhook received successfully'}), 200
if __name__ == '__main__':
asfquart.APP.run(port=3000)