Work with gitlab

This commit is contained in:
nikolark committed 2014-10-06 11:37:36 +02:00
1 parent 7af37d2572
commit 3a3fea3624
1 file changed
+33 -28
+33 -28
View File
@@ -1,43 +1,48 @@
# coding: utf8 # coding: utf8
import codecs import codecs
import os import os
import simplejson as json
import web
from datetime import datetime from datetime import datetime
from socket import socket, AF_INET, SOCK_DGRAM from socket import socket, AF_INET, SOCK_DGRAM
from subprocess import Popen from subprocess import Popen
import sys
try:
import json
except ImportError:
import simplejson as json
""" import web
Recieve pings from Github Webhook API and perform actions.
Examples of actions:
- Run a script to deploy on your webserver. Yup.
- Send a message to IRC (via an ircbot listening for UDP-messages). Yup.
- Send an email.
- Send a signal to an Arduino.
TODO: class Ping:
- Provide deploy log """
- Send mail to commiter on error. Recieve pings from Github Webhook API and perform actions.
Written in web.py Examples of actions:
""" - Run a script to deploy on your webserver. Yup.
- Send a message to IRC (via an ircbot listening for UDP-messages). Yup.
- Send an email.
- Send a signal to an Arduino.
class ping: TODO:
- Provide deploy log
- Send mail to commiter on error.
Written in web.py
"""
def __init__(self):
pass
def script_path(self): def script_path(self):
return os.path.dirname(os.path.abspath(__file__)) return os.path.dirname(os.path.abspath(__file__))
def url_allowed(self,url): def url_allowed(self, url):
for allowed_url, deploy_to in settings.REPOS.iteritems(): for allowed_url, deploy_to in settings.REPOS.iteritems():
if url == allowed_url: if url == allowed_url:
return True return True
return False return False
def POST(self): def POST(self):
post_data = web.input() data = web.data()
data = post_data.get('payload')
if not data: if not data:
error = "Error: No payload in POST." error = "Error: No payload in POST."
return json.dumps({'result': error}) return json.dumps({'result': error})
@@ -60,7 +65,7 @@ class ping:
self.update_repo(data['repository']['name'], repo_url) self.update_repo(data['repository']['name'], repo_url)
self.send_to_irc(data) self.send_to_irc(data)
return json.dumps({'result' : "Thank you :-)"}) return json.dumps({'result': "Thank you :-)"})
def update_repo(self, name, url): def update_repo(self, name, url):
if not settings.REPOS[url]: if not settings.REPOS[url]:
@@ -73,11 +78,10 @@ class ping:
Popen(args) Popen(args)
def format_who(self, commits): def format_who(self, commits):
who = ""
if len(commits) == 1: if len(commits) == 1:
who = commits[0]['author']['name'] who = commits[0]['author']['name']
else: else:
who = set() # unique entries who = set() # unique entries
for commit in commits: for commit in commits:
who.add(commit['author']['name']) who.add(commit['author']['name'])
who = ", ".join(who) who = ", ".join(who)
@@ -103,10 +107,11 @@ class ping:
who, who,
len(data['commits']), len(data['commits']),
compare_url).encode('utf8') compare_url).encode('utf8')
return u"[{0}] {1} (by {2}): {3}".format(data['repository']['name'], return u"[{0}] {1} (by {2}): {3}".format(
commit_msg, data['repository']['name'],
who, commit_msg,
compare_url).encode('utf8') who,
compare_url).encode('utf8')
def send_to_irc(self, data): def send_to_irc(self, data):
# Send the message to snurr via UDP. # Send the message to snurr via UDP.
@@ -122,8 +127,8 @@ class ping:
log.write(datetime.now().isoformat() + ": " + msg + "\n") log.write(datetime.now().isoformat() + ": " + msg + "\n")
log.close() log.close()
# import settings (full path to cur dir has to be on path). # import settings (full path to cur dir has to be on path).
import sys
path = os.path.dirname(os.path.abspath(__file__)) path = os.path.dirname(os.path.abspath(__file__))
if path not in sys.path: if path not in sys.path:
sys.path.append(path) sys.path.append(path)
@@ -131,7 +136,7 @@ import settings
# define urls # define urls
urls = ( urls = (
'/', 'ping', '/', 'Ping',
) )
# run app # run app