from buildbot.plugins import * from buildbot_common.build_helpers import * import os __all__ = [ "configure", "E" ] class E(): PROJECT = "cryptoportfolio" BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) RELEASE_PATH = "/var/lib/ftp/release.immae.eu/{}".format(PROJECT) RELEASE_URL = "https://release.immae.eu/{}".format(PROJECT) GIT_URL = "https://git.immae.eu/perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/{0}.git" SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" 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" DEPLOY_HOSTS = { "production": "root@cryptoportfolio.immae.eu", "integration": "root@cryptoportfolio-dev.immae.eu" } # master.cfg SECRETS_FILE = os.getcwd() + "/secrets" LDAP_URL = "ldaps://ldap.immae.eu:636" LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" LDAP_BASE = "dc=immae,dc=eu" LDAP_PATTERN = "(uid=%(username)s)" LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=cryptoportfolio,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" TITLE_URL = "https://git.immae.eu" TITLE = "Cryptoportfolio" # eval .. dans .zshrc_local # mkdir -p $BUILD/go # export GOPATH=$BUILD/go # go get -u github.com/golang/dep/cmd/dep # export PATH=$PATH:$BUILD/go/bin # go get git.immae.eu/Cryptoportfolio/Front.git # cd $BUILD/go/src/git.immae.eu/Cryptoportfolio/Front.git # git checkout dev # dep ensure def configure(c): c["buildbotURL"] = E.BUILDBOT_URL c["www"]["port"] = E.SOCKET configure_build(c) configure_deploy(c) configure_slack_push(c, E.SECRETS_FILE, all_builder_names(c)) def configure_build(c): front_builder_name = "Front_build" trader_builder_name = "Trader_build" worker_name = "cryptoportfolio-build" c['schedulers'].append(force_scheduler("force_cryptoportfolio", [front_builder_name,trader_builder_name])) c['schedulers'].append(git_hook_scheduler("Trader", [trader_builder_name])) c['schedulers'].append(git_hook_scheduler("Front", [front_builder_name])) c['workers'].append(worker.LocalWorker(worker_name)) c['builders'].append(util.BuilderConfig(name=trader_builder_name, workernames=[worker_name], factory=build_factory("trader"))) c['builders'].append(util.BuilderConfig(name=front_builder_name, workernames=[worker_name], factory=build_factory("front", ignore_fails=True))) def configure_deploy(c): front_builder_name = "Front_deploy" trader_builder_name = "Trader_deploy" worker_name = "cryptoportfolio-deploy" c['schedulers'].append(deploy_scheduler("deploy_cryptoportfolio", [front_builder_name, trader_builder_name])) c['workers'].append(worker.LocalWorker(worker_name)) c['builders'].append(util.BuilderConfig(name=front_builder_name, workernames=[worker_name], factory=deploy_factory("front"))) c['builders'].append(util.BuilderConfig(name=trader_builder_name, workernames=[worker_name], factory=deploy_factory("trader"))) def build_factory(project, ignore_fails=False): release_file = "{1}/{0}/{0}_%(kw:clean_branch)s.tar.gz" url = E.GIT_URL.format(project.capitalize()) package = util.Interpolate("{0}_%(kw:clean_branch)s.tar.gz".format(project), clean_branch=clean_branch) package_dest = util.Interpolate(release_file.format(project, E.RELEASE_PATH), clean_branch=clean_branch) package_url = util.Interpolate(release_file.format(project, E.RELEASE_URL), clean_branch=clean_branch) factory = util.BuildFactory() factory.addStep(steps.Git(logEnviron=False, repourl=url, mode="full", method="fresh")) factory.addStep(steps.ShellCommand(name="make install", logEnviron=False, haltOnFailure=(not ignore_fails), warnOnFailure=ignore_fails, flunkOnFailure=(not ignore_fails), command=["make", "install"])) factory.addStep(steps.ShellCommand(name="make test", logEnviron=False, haltOnFailure=(not ignore_fails), warnOnFailure=ignore_fails, flunkOnFailure=(not ignore_fails), command=["make", "test"])) factory.addSteps(package_and_upload(package, package_dest, package_url)) return factory def deploy_factory(project): package_dest = util.Interpolate("{1}/{0}/%(prop:build)s".format(project, E.RELEASE_PATH)) factory = util.BuildFactory() factory.addStep(steps.MasterShellCommand(command=["test", "-f", package_dest])) factory.addStep(steps.SetProperties(properties=compute_build_infos(project, "{}/{}".format(E.RELEASE_PATH, project)))) factory.addStep(LdapEdit(environment=util.Property("environment"), build_version=util.Property("build_version"), build_hash=util.Property("build_hash"), config_key="role::cryptoportfolio::{}".format(project), ldap_host=E.LDAP_HOST, ldap_roles_base=E.LDAP_ROLES_BASE, ldap_dn=E.LDAP_DN, ldap_cn_template="cryptoportfolio.{}", ldap_password=util.Secret("ldap"))) factory.addStep(steps.MasterShellCommand(command=deploy_ssh_command(E.SSH_KEY_PATH, E.DEPLOY_HOSTS))) return factory