Archived
Work with gitlab
This commit is contained in:
1 parent
7af37d2572
commit
3a3fea3624
1 file changed
+33
-28
@@ -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
|
||||||
|
|||||||
Reference in new issue
Block a user