from buildbot.plugins import *
from buildbot_common.build_helpers import *
import os
+from buildbot.util import bytes2unicode
+import json
__all__ = [ "configure", "E" ]
LDAP_HOST = "ldap.immae.eu"
LDAP_DN = "cn=buildbot,ou=services,dc=immae,dc=eu"
LDAP_ROLES_BASE = "ou=roles,ou=hosts,dc=immae,dc=eu"
+ XMPP_RECIPIENTS = os.environ["BUILDBOT_XMPP_RECIPIENTS"].split(" ")
PUPPET_HOST = {
"integration": "root@caldance.immae.eu",
TITLE_URL = "https://caldance.immae.eu"
TITLE = "Caldance"
+class CustomBase(webhooks.base):
+ def getChanges(self, request):
+ try:
+ content = request.content.read()
+ args = json.loads(bytes2unicode(content))
+ except Exception as e:
+ raise ValueError("Error loading JSON: " + str(e))
+
+ args.setdefault("comments", "")
+ args.setdefault("repository", "")
+ args.setdefault("author", args.get("who", "unknown"))
+
+ if args["category"] == "deploy_webhook":
+ args = {
+ "category": "deploy_webhook",
+ "comments": "",
+ "repository": "",
+ "author": "webhook",
+ "project": "Caldance",
+ "properties": {
+ "environment": args.get("environment", "integration"),
+ "build": "caldance_{}.tar.gz".format(args.get("build", "master"))
+ }
+ }
+
+ return ([args], None)
+
+def deploy_hook_scheduler(project, timer=1):
+ return schedulers.AnyBranchScheduler(
+ change_filter=util.ChangeFilter(category="deploy_webhook", project=project),
+ name="{}_deploy".format(project), treeStableTimer=timer, builderNames=["{}_deploy".format(project)])
+
def configure(c):
c["buildbotURL"] = E.BUILDBOT_URL
c["www"]["port"] = E.SOCKET
+ c["www"]["change_hook_dialects"]["base"] = {
+ "custom_class": CustomBase
+ }
c['workers'].append(worker.LocalWorker("generic-worker"))
c['workers'].append(worker.LocalWorker("deploy-worker"))
c['schedulers'].append(hook_scheduler("Caldance", timer=1))
c['schedulers'].append(force_scheduler("force_caldance", ["Caldance_build"]))
c['schedulers'].append(deploy_scheduler("deploy_caldance", ["Caldance_deploy"]))
+ c['schedulers'].append(deploy_hook_scheduler("Caldance", timer=1))
c['builders'].append(factory("caldance"))
name="slack_status_caldance",
builders=["Caldance_build", "Caldance_deploy"],
serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip()))
+ c['services'].append(XMPPStatusPush(
+ name="xmpp_status_caldance",
+ builders=["Caldance_build", "Caldance_deploy"],
+ recipients=E.XMPP_RECIPIENTS,
+ password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip()))
def factory(project, ignore_fails=False):
release_file = "{1}/{0}_%(kw:clean_branch)s.tar.gz"