2016-06-17 19:53:21 +02:00
|
|
|
# Webhooks for external integrations.
|
|
|
|
|
2017-11-16 00:43:10 +01:00
|
|
|
from typing import Any, Dict
|
|
|
|
|
|
|
|
import ujson
|
2016-06-17 19:53:21 +02:00
|
|
|
from django.http import HttpRequest, HttpResponse
|
|
|
|
from django.utils.translation import ugettext as _
|
|
|
|
|
2017-10-31 04:25:48 +01:00
|
|
|
from zerver.decorator import api_key_only_webhook_view
|
2017-09-30 04:18:16 +02:00
|
|
|
from zerver.lib.actions import check_send_stream_message
|
2017-10-31 04:25:48 +01:00
|
|
|
from zerver.lib.request import REQ, has_request_variables
|
2017-11-16 00:43:10 +01:00
|
|
|
from zerver.lib.response import json_error, json_success
|
2017-10-31 04:25:48 +01:00
|
|
|
from zerver.models import UserProfile, get_client
|
2016-06-17 19:53:21 +02:00
|
|
|
|
|
|
|
@api_key_only_webhook_view('Semaphore')
|
|
|
|
@has_request_variables
|
2017-05-02 01:00:50 +02:00
|
|
|
def api_semaphore_webhook(request, user_profile,
|
2016-06-17 19:53:21 +02:00
|
|
|
payload=REQ(argument_type='body'),
|
|
|
|
stream=REQ(default='builds')):
|
2017-05-02 01:00:50 +02:00
|
|
|
# type: (HttpRequest, UserProfile, Dict[str, Any], str) -> HttpResponse
|
2016-06-17 19:53:21 +02:00
|
|
|
|
|
|
|
# semaphore only gives the last commit, even if there were multiple commits
|
|
|
|
# since the last build
|
2017-08-24 17:31:04 +02:00
|
|
|
branch_name = payload["branch_name"]
|
|
|
|
project_name = payload["project_name"]
|
|
|
|
result = payload["result"]
|
|
|
|
event = payload["event"]
|
|
|
|
commit_id = payload["commit"]["id"]
|
|
|
|
commit_url = payload["commit"]["url"]
|
|
|
|
author_email = payload["commit"]["author_email"]
|
|
|
|
message = payload["commit"]["message"]
|
2016-06-17 19:53:21 +02:00
|
|
|
|
|
|
|
if event == "build":
|
2017-08-24 17:31:04 +02:00
|
|
|
build_url = payload["build_url"]
|
|
|
|
build_number = payload["build_number"]
|
2016-06-17 19:53:21 +02:00
|
|
|
content = u"[build %s](%s): %s\n" % (build_number, build_url, result)
|
|
|
|
|
|
|
|
elif event == "deploy":
|
2017-08-24 17:31:04 +02:00
|
|
|
build_url = payload["build_html_url"]
|
|
|
|
build_number = payload["build_number"]
|
|
|
|
deploy_url = payload["html_url"]
|
|
|
|
deploy_number = payload["number"]
|
|
|
|
server_name = payload["server_name"]
|
2016-06-17 19:53:21 +02:00
|
|
|
content = u"[deploy %s](%s) of [build %s](%s) on server %s: %s\n" % \
|
|
|
|
(deploy_number, deploy_url, build_number, build_url, server_name, result)
|
|
|
|
|
2017-05-07 21:37:02 +02:00
|
|
|
else: # should never get here
|
2016-06-17 19:53:21 +02:00
|
|
|
content = u"%s: %s\n" % (event, result)
|
|
|
|
|
|
|
|
content += "!avatar(%s) [`%s`](%s): %s" % (author_email, commit_id[:7],
|
|
|
|
commit_url, message)
|
|
|
|
subject = u"%s/%s" % (project_name, branch_name)
|
|
|
|
|
2017-09-30 04:18:16 +02:00
|
|
|
check_send_stream_message(user_profile, request.client, stream, subject, content)
|
2016-06-17 19:53:21 +02:00
|
|
|
return json_success()
|