feat: Add URL attachment to issue and handle Sentry event webhook
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
3a2c0a510b
commit
979b5e8f1a
56
app.py
56
app.py
@ -73,6 +73,27 @@ def linear_issue():
|
||||
return jsonify({'message': 'Ok'}), 200
|
||||
|
||||
|
||||
def _attach_url_to_issue(issue_id, url, title=None):
|
||||
data = {'query': 'mutation { attachmentLinkURL (title: "%s" url: "%s" issueId: "%s") { success } }' % (title, url, issue_id)}
|
||||
headers = {'Authorization': LINEAR_API_KEY}
|
||||
resp = requests.post(LINEAR_API_URL, json=data, headers=headers)
|
||||
if resp.status_code != 200:
|
||||
logger.error('Failed to attach url to issue: %s' % resp.text)
|
||||
return False
|
||||
if not resp.json().get('data', {}).get('attachmentLinkURL', {}).get('success'):
|
||||
logger.error('Failed to attach url to issue: %s' % resp.text)
|
||||
return False
|
||||
return True
|
||||
|
||||
def _get_labels():
|
||||
headers = {'Authorization': LINEAR_API_KEY}
|
||||
data = {'query': '{issueLabels { edges { node { id name } }}}'}
|
||||
resp = requests.post(LINEAR_API_URL, json=data, headers=headers)
|
||||
labels = []
|
||||
for label in resp.json().get('data').get('issueLabels').get('edges'):
|
||||
labels.append(label['node'])
|
||||
return labels
|
||||
|
||||
@app.route('/gitea/push', methods=['POST'])
|
||||
def gitea_push():
|
||||
""" https://docs.gitea.io/en-us/webhooks/
|
||||
@ -100,17 +121,6 @@ def gitea_push():
|
||||
logger.error('Failed to get completed state')
|
||||
return jsonify({'message': 'Failed to get completed state'}), 500
|
||||
|
||||
def _attach_url_to_issue(issue_id, url, title=None):
|
||||
data = {'query': 'mutation { attachmentLinkURL (title: "%s" url: "%s" issueId: "%s") { success } }' % (title, url, issue_id)}
|
||||
resp = requests.post(LINEAR_API_URL, json=data, headers=headers)
|
||||
if resp.status_code != 200:
|
||||
logger.error('Failed to attach url to issue: %s' % resp.text)
|
||||
return False
|
||||
if not resp.json().get('data', {}).get('attachmentLinkURL', {}).get('success'):
|
||||
logger.error('Failed to attach url to issue: %s' % resp.text)
|
||||
return False
|
||||
return True
|
||||
|
||||
# check if the commit message contains a linear issue id like 'TUN-21'
|
||||
# if yes, update the issue state to completed
|
||||
for commit in data['commits']:
|
||||
@ -142,5 +152,29 @@ def gitea_push():
|
||||
return jsonify({'message': 'Ok'}), 200
|
||||
|
||||
|
||||
@app.route('/sentry/event', methods=['POST'])
|
||||
def sentry_event():
|
||||
"""
|
||||
https://docs.sentry.io/product/integrations/integration-platform/webhooks/
|
||||
"""
|
||||
data = request.json
|
||||
logger.info('Received sentry event webhook: %s' % data)
|
||||
event = request.headers.get('Sentry-Hook-Resource')
|
||||
if event == 'issue':
|
||||
if data.get('action') == 'created':
|
||||
title = f"{data['issue']['shortId']} {data['issue']['title']}"
|
||||
body = data['issue']['culprit']
|
||||
# create a new issue in linear
|
||||
create_data = {'query': 'mutation { issueCreate(input: { title: "%s" description: "%s" teamId: "1f28d52c-c91a-4c48-8ca8-96425dfd6516" assigneeId: "38c20f6d-8088-461c-9ea3-9f36e185cb62" labelIds: ["b40ea30a-e48b-4511-bde7-0a3c732cf752"]}) { issue { id } } }' % (title, body)}
|
||||
resp = requests.post(LINEAR_API_URL, json=create_data, headers={'Authorization': LINEAR_API_KEY})
|
||||
if resp.status_code != 200:
|
||||
logger.error('Failed to create issue: %s' % resp.text)
|
||||
return jsonify({'message': 'Failed to create issue'}), 500
|
||||
issue_id = resp.json().get('data').get('issueCreate').get('issue').get('id')
|
||||
_attach_url_to_issue(issue_id, data['issue']['web_url'], title)
|
||||
|
||||
return jsonify({'message': 'Ok'}), 200
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=5000)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user