1 import flask
2
3 from coprs import db, app
4 from coprs import helpers
5
6 from coprs.logic.builds_logic import BuildsLogic
7 from coprs.logic.complex_logic import ComplexLogic
8 from coprs.logic.coprs_logic import CoprsLogic
9 from coprs.logic.packages_logic import PackagesLogic
10
11 from coprs.exceptions import ObjectNotFound, AccessRestricted
12
13 from coprs.views.webhooks_ns import webhooks_ns
14 from coprs.views.misc import page_not_found, access_restricted
15
16 import logging
17 log = logging.getLogger(__name__)
18
19
20 @webhooks_ns.route("/github/<copr_id>/<uuid>/", methods=["POST"])
22
23
24 try:
25 copr = ComplexLogic.get_copr_by_id_safe(copr_id)
26 except ObjectNotFound:
27 return page_not_found("Project does not exist")
28
29 if copr.webhook_secret != uuid:
30 return access_restricted("This webhook is not valid")
31
32 try:
33 payload = flask.request.json
34 clone_url = payload['repository']['clone_url']
35 commits = []
36 payload_commits = payload.get('commits', [])
37 for payload_commit in payload_commits:
38 commits.append({
39 'added': payload_commit['added'],
40 'modified': payload_commit['modified'],
41 'removed': payload_commit['removed'],
42 })
43
44 ref_type = payload.get('ref_type', '')
45 ref = payload.get('ref', '')
46 except KeyError:
47 return "Bad Request", 400
48
49 packages = PackagesLogic.get_for_webhook_rebuild(copr_id, uuid, clone_url, commits, ref_type, ref)
50
51 for package in packages:
52 BuildsLogic.rebuild_package(package)
53
54 db.session.commit()
55
56 return "OK", 200
57
58 @webhooks_ns.route("/gitlab/<copr_id>/<uuid>/", methods=["POST"])
60
61
62 try:
63 copr = ComplexLogic.get_copr_by_id_safe(copr_id)
64 except ObjectNotFound:
65 return page_not_found("Project does not exist")
66
67 if copr.webhook_secret != uuid:
68 return access_restricted("This webhook is not valid")
69
70 try:
71 payload = flask.request.json
72 clone_url = payload['project']['git_http_url']
73 commits = []
74 payload_commits = payload.get('commits', [])
75 for payload_commit in payload_commits:
76 commits.append({
77 'added': payload_commit['added'],
78 'modified': payload_commit['modified'],
79 'removed': payload_commit['removed'],
80 })
81 if payload['object_kind'] == 'tag_push':
82 ref_type = 'tag'
83 else:
84 ref_type = None
85 ref = payload.get('ref', '')
86 except KeyError:
87 return "Bad Request", 400
88
89 packages = PackagesLogic.get_for_webhook_rebuild(copr_id, uuid, clone_url, commits, ref_type, ref)
90
91 for package in packages:
92 BuildsLogic.rebuild_package(package)
93
94 db.session.commit()
95
96 return "OK", 200
97