Created
December 29, 2015 00:48
-
-
Save zombience/7ed1972022b2f8a55b8e to your computer and use it in GitHub Desktop.
simple python post-commit hook for slack subversion integration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/python | |
############################################################# | |
# add a new integration and generate a new token before using with new repo | |
# https://your_team_name.slack.com/apps/manage/ | |
############################################################# | |
import os | |
import sys | |
import subprocess | |
import urllib | |
import urllib2 | |
import json | |
#Set slack info | |
TOKEN = '' #api token for slack integration | |
DOMAIN = 'your_team_name.slack.com' #add your team's slack URL here | |
#svnlook location | |
LOOK='svnlook' | |
def main(argv): | |
import os.path | |
stream = sys.stderr or sys.stdout | |
status = 0 | |
result = 'posted commit to slack' | |
payload = get_commit_info(argv[1], argv[2]) | |
try: | |
notify_slack(DOMAIN, TOKEN, payload) | |
except: | |
status += 1 | |
result = sys.exc_info()[0] | |
raise | |
stream.write(result) | |
sys.exit(status) | |
def get_commit_info( repo, revision ): | |
log = svn_look('log', repo, '-r', revision) | |
author = svn_look('author', repo, '-r', revision) | |
repo_name = repo.split('/') | |
payload = {'revision' : 'repo: ' + repo_name[-1] + '\nrevision: ' + revision, | |
'log' : 'commit message: \n' + log, | |
'author': '\nauthor: ' + author} | |
return payload | |
def svn_look( *args ): | |
p = subprocess.Popen(' '.join([LOOK] + list(args)), stdout=subprocess.PIPE, shell=True, stderr=subprocess.STDOUT ) | |
out, err = p.communicate() | |
return out | |
def notify_slack(domain, token, payload ): | |
#create request url | |
url = 'https://' + domain + '/services/hooks/subversion?token=' + token | |
#urlencode and post | |
urllib2.urlopen( url, urllib.urlencode( { 'payload' : json.dumps( payload ) } ) ) | |
if __name__ == '__main__': | |
main(sys.argv) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
post-commit.py
this script is a simple notification for slack integration
usage
depending on your SVN configuration, you'll likely have to rename this file from 'post-commit.py' to 'post-commit' with no suffix
copy this file to directory:
path/to/your/repo/hooks/
and svn should take care of the rest
this script uses urllib rather than the request module in order to avoid admin issues around adding python modules to servers.
adding a hook script requires less permissions than installing python modules