]>
git.immae.eu Git - perso/Immae/Config/Nix.git/blob - modules/private/buildbot/projects/immaeEu/__init__.py
1 from buildbot
.plugins
import *
2 from buildbot_common
.build_helpers
import *
4 from buildbot
.util
import bytes2unicode
7 __all__
= [ "configure", "E" ]
11 BUILDBOT_URL
= "https://git.immae.eu/buildbot/{}/".format(PROJECT
)
12 SOCKET
= "unix:/run/buildbot/{}.sock".format(PROJECT
)
13 PB_SOCKET
= "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT
)
14 SSH_KEY_PATH
= "/var/lib/buildbot/buildbot_key"
15 SSH_HOST_KEY
= "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF"
16 XMPP_RECIPIENTS
= os
.environ
["BUILDBOT_XMPP_RECIPIENTS"].split(" ")
18 IMMAE_EU_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Sites/Blog"
19 COURS_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Sites/Cours"
20 NORMALESUP_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Projets/Sites/Normalesup"
22 COURS_RELEASE_PATH
= "/var/lib/buildbot/outputs/cours"
23 COURS_TARBALL_PATH
= "/var/lib/ftp/release.immae.eu/cours"
24 COURS_TARBALL_URL
= "https://release.immae.eu/cours"
25 IMMAE_EU_RELEASE_PATH
= "/var/lib/buildbot/outputs/immaeEu"
26 NORMALESUP_RELEASE_PATH
= "/var/lib/buildbot/outputs/recherche"
29 SECRETS_FILE
= os
.getcwd() + "/secrets"
30 LDAP_URL
= "ldaps://ldap.immae.eu:636"
31 LDAP_ADMIN_USER
= "cn=buildbot,ou=services,dc=immae,dc=eu"
32 LDAP_BASE
= "dc=immae,dc=eu"
33 LDAP_PATTERN
= "(uid=%(username)s)"
34 LDAP_GROUP_PATTERN
= "(&(memberOf=cn=groups,ou=immaeEu,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))"
35 TITLE_URL
= "https://www.immae.eu"
36 TITLE
= "Immae website"
38 class CustomBase(webhooks
.base
):
39 def getChanges(self
, request
):
41 content
= request
.content
.read()
42 args
= json
.loads(bytes2unicode(content
))
43 except Exception as e
:
44 raise ValueError("Error loading JSON: " + str(e
))
46 args
.setdefault("comments", "")
47 args
.setdefault("repository", "")
48 args
.setdefault("author", args
.get("who", "unknown"))
53 c
["buildbotURL"] = E
.BUILDBOT_URL
54 c
["www"]["port"] = E
.SOCKET
56 c
["www"]["change_hook_dialects"]["base"] = {
57 "custom_class": CustomBase
59 c
['workers'].append(worker
.LocalWorker("generic-worker-immae-eu"))
61 c
['schedulers'].append(hook_scheduler("ImmaeEu", timer
=1))
62 c
['schedulers'].append(hook_scheduler("Normalesup", timer
=1))
63 c
['schedulers'].append(hook_scheduler("Cours", timer
=1))
64 c
['schedulers'].append(force_scheduler("force_immae_eu", ["ImmaeEu_build", "Normalesup_build", "Cours_build"]))
66 c
['builders'].append(immae_eu_factory())
67 c
['builders'].append(normalesup_factory())
68 c
['builders'].append(cours_factory())
70 c
['services'].append(SlackStatusPush(
71 name
="slack_status_immae_eu_project",
72 builders
=["ImmaeEu_build", "Normalesup_build", "Cours_build"],
73 serverUrl
=open(E
.SECRETS_FILE
+ "/slack_webhook", "r").read().rstrip()))
74 c
['services'].append(XMPPStatusPush(
75 name
="xmpp_status_immae_eu_project",
76 builders
=["ImmaeEu_build", "Normalesup_build", "Cours_build"],
77 recipients
=E
.XMPP_RECIPIENTS
,
78 password
=open(E
.SECRETS_FILE
+ "/notify_xmpp_password", "r").read().rstrip()))
80 def immae_eu_factory():
82 "PATH": os
.environ
["BUILDBOT_PATH_ImmaeEu"] + ":${PATH}"
84 factory
= util
.BuildFactory()
85 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.IMMAE_EU_GIT_URL
,
86 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
87 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
88 factory
.addStep(steps
.ShellCommand(name
="build website",
89 logEnviron
=False, haltOnFailure
=True, workdir
="source",
90 env
=path_env
, command
=["make", "html"]))
91 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.IMMAE_EU_RELEASE_PATH
)))
92 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/output",
93 masterdest
=E
.IMMAE_EU_RELEASE_PATH
,
94 url
="https://www.immae.eu"))
95 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.IMMAE_EU_RELEASE_PATH
)))
97 return util
.BuilderConfig(name
="ImmaeEu_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
101 "PATH": os
.environ
["BUILDBOT_PATH_Cours"] + ":${PATH}"
103 factory
= util
.BuildFactory()
104 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.COURS_GIT_URL
,
105 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
106 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
107 factory
.addStep(steps
.ShellCommand(name
="build website",
108 logEnviron
=False, haltOnFailure
=True, workdir
="source",
109 command
=["make", "build"], env
=path_env
))
110 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.COURS_RELEASE_PATH
)))
111 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/build",
112 masterdest
=E
.COURS_RELEASE_PATH
,
113 url
="https://www.immae.eu/cours"))
114 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.COURS_RELEASE_PATH
)))
116 factory
.addStep(steps
.ShellCommand(name
="build pdfs",
117 logEnviron
=False, haltOnFailure
=True, workdir
="source",
118 command
=["make", "pdfs"], env
=path_env
))
120 package
= util
.Interpolate("cours_%(kw:clean_branch)s.tar.gz", clean_branch
=clean_branch
)
121 release_file
= "{0}/cours_%(kw:clean_branch)s.tar.gz"
122 package_dest
= util
.Interpolate(release_file
.format(E
.COURS_TARBALL_PATH
), clean_branch
=clean_branch
)
123 package_url
= util
.Interpolate(release_file
.format(E
.COURS_TARBALL_URL
), clean_branch
=clean_branch
)
124 factory
.addStep(steps
.ShellCommand(name
="build pdf tarball",
125 logEnviron
=False, haltOnFailure
=True, workdir
="source",
126 command
=["tar", "-cvf", package
, "-C", "pdfs", "mp", "mpsi"], env
=path_env
))
127 factory
.addStep(steps
.FileUpload(name
="upload package", workersrc
=package
,
128 workdir
="source", masterdest
=package_dest
,
129 url
=package_url
, mode
=0o644))
131 return util
.BuilderConfig(name
="Cours_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
133 def normalesup_factory():
135 "PATH": os
.environ
["BUILDBOT_PATH_Normalesup"] + ":${PATH}"
137 factory
= util
.BuildFactory()
138 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.NORMALESUP_GIT_URL
,
139 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
140 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
141 factory
.addStep(steps
.ShellCommand(name
="build website",
142 logEnviron
=False, haltOnFailure
=True, workdir
="source",
143 command
=["make", "build"], env
=path_env
))
144 factory
.addStep(steps
.ShellCommand(name
="give read access to all files",
145 logEnviron
=False, haltOnFailure
=True, workdir
="source",
146 command
="chmod -R a+rX build", env
=path_env
))
147 factory
.addStep(steps
.ShellCommand(name
="synchronize with phare",
148 logEnviron
=False, haltOnFailure
=True, workdir
="source",
149 env
=path_env
, command
=[
150 "rsync", "-av", "--delete",
151 "-e", "ssh -i {} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no".format(E
.SSH_KEY_PATH
),
153 os
.environ
["BUILDBOT_NORMALESUP_HOST"]
155 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.NORMALESUP_RELEASE_PATH
)))
156 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/build", masterdest
=E
.NORMALESUP_RELEASE_PATH
,
157 url
="https://www.immae.eu/recherche"))
158 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.NORMALESUP_RELEASE_PATH
)))
160 return util
.BuilderConfig(name
="Normalesup_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)