mirror of
https://github.com/zulip/zulip.git
synced 2026-07-09 21:21:47 +08:00
This commit changes APIs and requires and update of all zephyr mirroring bots to deploy properly. (imported from commit 2672d2d07269379f7a865644aaeb6796d54183e1)
100 lines
3.9 KiB
Python
Executable File
100 lines
3.9 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# Humbug's post-receive hook. There is a symlink
|
|
# from /srv/git/humbug.git/hooks/post-receive
|
|
# to ~humbug/humbug/tools/post-receive
|
|
# on git.humbughq.com. So to deploy changes to this script, run
|
|
#
|
|
# ssh humbug@git.humbughq.com 'cd humbug; git pull'
|
|
#
|
|
# The "post-receive" script is run after receive-pack has accepted a pack
|
|
# and the repository has been updated. It is passed arguments in through
|
|
# stdin in the form
|
|
# <oldrev> <newrev> <refname>
|
|
# For example:
|
|
# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
|
|
#
|
|
# see contrib/hooks/ for a sample
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
import time
|
|
|
|
sys.path.append(os.path.dirname(os.path.dirname(os.readlink(__file__))))
|
|
import api.common
|
|
client = api.common.HumbugAPI(email="humbug+commits@humbughq.com",
|
|
site="https://staging.humbughq.com",
|
|
api_key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
verbose=False)
|
|
|
|
def check_output(*popenargs, **kwargs):
|
|
if 'stdout' in kwargs:
|
|
raise ValueError('stdout argument not allowed, it will be overridden.')
|
|
process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
|
|
output, unused_err = process.communicate()
|
|
retcode = process.poll()
|
|
if retcode:
|
|
cmd = kwargs.get("args")
|
|
if cmd is None:
|
|
cmd = popenargs[0]
|
|
raise subprocess.CalledProcessError(retcode, cmd, output=output)
|
|
return output
|
|
subprocess.check_output = check_output
|
|
|
|
def update_deployment(server, oldrev, newrev, refname):
|
|
subprocess.check_call(["ssh", server, "--", "env", "-u", "GIT_DIR",
|
|
"/home/humbug/humbug/tools/update-deployment",
|
|
oldrev, newrev, refname])
|
|
|
|
def git_commit_range(oldrev, newrev):
|
|
log_cmd = ["git", "log", "--reverse",
|
|
"--pretty=%aE %s", "%s..%s" % (oldrev, newrev)]
|
|
commits = ''
|
|
for ln in subprocess.check_output(log_cmd).splitlines():
|
|
email, subject = ln.split(None, 1)
|
|
# This truncation approximately fits the normal message width in the browser.
|
|
# It would be nicer to move this into the client via CSS and a Markdown extension.
|
|
if len(subject) > 60:
|
|
subject = subject[:58].rstrip() + '...'
|
|
commits += '!gravatar(%s) %s\n' % (email, subject)
|
|
return commits
|
|
|
|
def send_bot_message(oldrev, newrev, refname):
|
|
added = git_commit_range(oldrev, newrev)
|
|
removed = git_commit_range(newrev, oldrev)
|
|
|
|
new_head = newrev[:12]
|
|
branch = refname.replace('refs/heads/', '')
|
|
|
|
if removed:
|
|
message = '`%s` was pushed to `%s`, **REMOVING**:\n\n%s' % (new_head, branch, removed)
|
|
if added:
|
|
message += '\n**and adding**:\n\n' + added
|
|
message += '\n**A HISTORY REWRITE HAS OCCURRED!**'
|
|
message += '\nPlease check your local branches to deal with this.'
|
|
elif added:
|
|
message = '`%s` was deployed to `%s` with:\n\n%s' % (new_head, branch, added)
|
|
else:
|
|
message = '`%s` was pushed to `%s`... but nothing changed?' % (new_head, branch)
|
|
|
|
message_data = {
|
|
"type": "stream",
|
|
"to": "test" if refname == "refs/heads/test-post-receive" else "devel",
|
|
"subject": u"deploy \u21D2 " + branch,
|
|
"content": message,
|
|
}
|
|
# Sleep a bit to give time for the server to restart.
|
|
# TODO: Make this work without the sleep
|
|
time.sleep(1)
|
|
client.send_message(message_data)
|
|
|
|
for ln in sys.stdin:
|
|
oldrev, newrev, refname = ln.strip().split()
|
|
if refname in ["refs/heads/prod"]:
|
|
send_bot_message(oldrev, newrev, refname)
|
|
update_deployment("humbughq.com", oldrev, newrev, "origin/prod")
|
|
elif refname in ["refs/heads/master", "refs/heads/test-post-receive"]:
|
|
send_bot_message(oldrev, newrev, refname)
|
|
update_deployment("staging.humbughq.com", oldrev, newrev, "origin/master")
|