]>
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 BIP39_GIT_URL
= "https://git.immae.eu/perso/Immae/Projets/Cryptomonnaies/BIP39.git"
19 IMMAE_EU_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Sites/Blog"
20 HISTORY_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Sites/History"
21 RECETTES_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Sites/Recettes"
22 COURS_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Sites/Cours"
23 DOCS_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Sites/Docs"
24 NORMALESUP_GIT_URL
= "gitolite@git.immae.eu:perso/Immae/Projets/Sites/Normalesup"
26 COURS_RELEASE_PATH
= "/var/lib/buildbot/outputs/immae/cours"
27 COURS_TARBALL_PATH
= "/var/lib/ftp/release.immae.eu/cours"
28 COURS_TARBALL_URL
= "https://release.immae.eu/cours"
29 BIP39_RELEASE_PATH
= "/var/lib/buildbot/outputs/immae/bip39"
30 HISTORY_RELEASE_PATH
= "/var/lib/buildbot/outputs/immae/history"
31 IMMAE_EU_RELEASE_PATH
= "/var/lib/buildbot/outputs/immae/blog"
32 DOCS_RELEASE_PATH
= "/var/lib/buildbot/outputs/immae/docs"
33 RECETTES_RELEASE_PATH
= "/var/lib/buildbot/outputs/immae/recettes"
34 NORMALESUP_RELEASE_PATH
= "/var/lib/buildbot/outputs/immae/recherche"
35 GSMCELLS_RELEASE_PATH
= "/var/lib/ftp/release.immae.eu/gsm_cells"
36 GSMCELLS_RELEASE_URL
= "https://release.immae.eu/gsm_cells"
39 SECRETS_FILE
= os
.getcwd() + "/secrets"
40 LDAP_URL
= "ldaps://ldap.immae.eu:636"
41 LDAP_ADMIN_USER
= "cn=buildbot,ou=services,dc=immae,dc=eu"
42 LDAP_BASE
= "dc=immae,dc=eu"
43 LDAP_PATTERN
= "(uid=%(username)s)"
44 LDAP_GROUP_PATTERN
= "(&(memberOf=cn=groups,ou=immaeEu,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))"
45 TITLE_URL
= "https://www.immae.eu"
46 TITLE
= "Immae website"
48 class CustomBase(webhooks
.base
):
49 def getChanges(self
, request
):
51 content
= request
.content
.read()
52 args
= json
.loads(bytes2unicode(content
))
53 except Exception as e
:
54 raise ValueError("Error loading JSON: " + str(e
))
56 args
.setdefault("comments", "")
57 args
.setdefault("repository", "")
58 args
.setdefault("author", args
.get("who", "unknown"))
63 c
["buildbotURL"] = E
.BUILDBOT_URL
64 c
["www"]["port"] = E
.SOCKET
66 c
["www"]["change_hook_dialects"]["base"] = {
67 "custom_class": CustomBase
69 c
['workers'].append(worker
.LocalWorker("generic-worker-immae-eu"))
71 c
['schedulers'].append(hook_scheduler("ImmaeEu", timer
=1))
72 c
['schedulers'].append(hook_scheduler("Normalesup", timer
=1))
73 c
['schedulers'].append(hook_scheduler("Cours", timer
=1))
74 c
['schedulers'].append(hook_scheduler("Recettes", timer
=1))
75 c
['schedulers'].append(hook_scheduler("Docs", timer
=1))
76 c
['schedulers'].append(hook_scheduler("History", timer
=1))
77 c
['schedulers'].append(hook_scheduler("BIP39", timer
=1))
78 c
['schedulers'].append(hook_scheduler("Symfony_Chloe", timer
=1))
79 c
['schedulers'].append(hook_scheduler("Symfony_Florian", timer
=1))
80 c
['schedulers'].append(hook_scheduler("Symfony_Ludivine", timer
=1))
81 c
['schedulers'].append(hook_scheduler("Symfony_IsabelleAten", timer
=1))
82 c
['schedulers'].append(hook_scheduler("Symfony_Piedsjaloux", timer
=1))
83 c
['schedulers'].append(hook_scheduler("Symfony_Connexionswing", timer
=1))
84 c
['schedulers'].append(schedulers
.Nightly(name
="GSMCells-weekly",
85 builderNames
=["GSMCells_build"], dayOfWeek
=6, hour
=3))
86 c
['schedulers'].append(force_scheduler("force_immae_eu", [
87 "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
88 "Recettes_build", "History_build", "BIP39_build",
89 "Symfony_Chloe_build", "Symfony_Florian_build",
90 "Symfony_IsabelleAten_build", "Symfony_Ludivine_build",
91 "Symfony_Piedsjaloux_build", "Symfony_Connexionswing_build"
93 c
['schedulers'].append(schedulers
.ForceScheduler(
94 name
="GSMCells-force", label
="Force build",
95 buttonName
="Force build",
96 reason
=util
.StringParameter(name
="reason", label
="Reason", default
="Force build"),
98 util
.CodebaseParameter("",
99 branch
=util
.FixedParameter(name
="branch", default
=""),
100 revision
=util
.FixedParameter(name
="revision", default
=""),
101 repository
=util
.FixedParameter(name
="repository", default
=""),
102 project
=util
.FixedParameter(name
="project", default
=""),
105 username
=util
.FixedParameter(name
="username", default
="Web button"),
106 builderNames
=["GSMCells_build"]
109 c
['builders'].append(immae_eu_factory())
110 c
['builders'].append(normalesup_factory())
111 c
['builders'].append(cours_factory())
112 c
['builders'].append(gsm_cells_factory())
113 c
['builders'].append(recettes_factory())
114 c
['builders'].append(docs_factory())
115 c
['builders'].append(history_factory())
116 c
['builders'].append(bip39_factory())
117 c
['builders'].append(symfony_project_factory("Chloe", "gitolite@git.immae.eu:perso/Immae/Sites/Chloe/New", "phpfpm-chloe_new_integration"))
118 c
['builders'].append(symfony_project_factory("Florian", "gitolite@git.immae.eu:perso/florian_telles/stabilo", "phpfpm-florian_app"))
119 c
['builders'].append(symfony_project_factory("IsabelleAten", "gitolite@git.immae.eu:perso/Immae/Sites/Aten", "phpfpm-isabelle_aten_integration", parameters_path
=None,
120 other_steps
=lambda path_env
: [
121 NixShellCommand(name
="Install yarn",
122 logEnviron
=False, haltOnFailure
=True, workdir
="build",
123 env
=path_env
, command
="yarn install"),
124 NixShellCommand(name
="Build frontend",
125 logEnviron
=False, haltOnFailure
=True, workdir
="build",
126 env
=path_env
, command
="yarn run encore production")
129 c
['builders'].append(symfony_project_factory("Ludivine", "gitolite@git.immae.eu:perso/Immae/Sites/Ludivine", "phpfpm-ludivine_integration"))
130 c
['builders'].append(symfony_project_factory("Connexionswing", "gitolite@git.immae.eu:perso/Immae/Projets/Connexionswing", "phpfpm-connexionswing_integration"))
131 c
['builders'].append(symfony_project_factory("Piedsjaloux", "gitolite@git.immae.eu:Pieds_jaloux/NewSite", "phpfpm-piedsjaloux_integration"))
133 c
['services'].append(SlackStatusPush(
134 name
="slack_status_immae_eu_project",
136 "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
137 "GSMCells_build", "Recettes_build", "History_build",
138 "BIP39_build", "Symfony_Chloe_build", "Symfony_Florian_build",
139 "Symfony_IsabelleAten_build", "Symfony_Ludivine_build",
140 "Symfony_Piedsjaloux_build", "Symfony_Connexionswing_build"
142 serverUrl
=open(E
.SECRETS_FILE
+ "/slack_webhook", "r").read().rstrip()))
143 c
['services'].append(XMPPStatusPush(
144 name
="xmpp_status_immae_eu_project",
146 "ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
147 "GSMCells_build", "Recettes_build", "History_build",
148 "BIP39_build", "Symfony_Chloe_build", "Symfony_Florian_build",
149 "Symfony_IsabelleAten_build", "Symfony_Ludivine_build",
150 "Symfony_Piedsjaloux_build", "Symfony_Connexionswing_build"
152 recipients
=E
.XMPP_RECIPIENTS
,
153 password
=open(E
.SECRETS_FILE
+ "/notify_xmpp_password", "r").read().rstrip()))
155 def history_factory():
157 "PATH": os
.environ
["BUILDBOT_PATH_History"] + ":${PATH}"
159 factory
= util
.BuildFactory()
160 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.HISTORY_GIT_URL
,
161 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
162 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
163 factory
.addStep(steps
.ShellCommand(name
="build website",
164 logEnviron
=False, haltOnFailure
=True, workdir
="source",
165 env
=path_env
, command
=["jekyll", "build"]))
166 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.HISTORY_RELEASE_PATH
)))
167 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/_site",
168 masterdest
=E
.HISTORY_RELEASE_PATH
,
169 url
="https://www.immae.eu/history"))
170 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.HISTORY_RELEASE_PATH
)))
172 return util
.BuilderConfig(name
="History_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
176 "PATH": os
.environ
["BUILDBOT_PATH_Docs"] + ":${PATH}"
178 factory
= util
.BuildFactory()
179 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.DOCS_GIT_URL
,
180 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
181 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
182 factory
.addStep(steps
.ShellCommand(name
="build website",
183 logEnviron
=False, haltOnFailure
=True, workdir
="source",
184 env
=path_env
, command
=["make", "clean", "html"]))
185 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.DOCS_RELEASE_PATH
)))
186 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/_build/html",
187 masterdest
=E
.DOCS_RELEASE_PATH
,
188 url
="https://www.immae.eu/docs"))
189 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.DOCS_RELEASE_PATH
)))
191 return util
.BuilderConfig(name
="Docs_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
193 def recettes_factory():
195 "PATH": os
.environ
["BUILDBOT_PATH_Recettes"] + ":${PATH}"
197 factory
= util
.BuildFactory()
198 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.RECETTES_GIT_URL
,
199 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
200 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
201 factory
.addStep(NixShellCommand(name
="build website",
202 logEnviron
=False, haltOnFailure
=True, workdir
="source",
203 env
=path_env
, command
="jekyll build --trace --baseurl /recettes"))
204 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.RECETTES_RELEASE_PATH
)))
205 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/_site",
206 masterdest
=E
.RECETTES_RELEASE_PATH
,
207 url
="https://www.immae.eu/recettes"))
208 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.RECETTES_RELEASE_PATH
)))
210 return util
.BuilderConfig(name
="Recettes_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
214 "PATH": os
.environ
["BUILDBOT_PATH_BIP39"] + ":${PATH}"
216 factory
= util
.BuildFactory()
217 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.BIP39_GIT_URL
,
218 submodules
=True, mode
="full", method
="copy"))
219 factory
.addStep(steps
.ShellCommand(name
="build file",
220 logEnviron
=False, haltOnFailure
=True, workdir
="source",
221 env
=path_env
, command
=["python", "compile.py"]))
222 factory
.addStep(steps
.FileUpload(name
="upload file", workersrc
="bip39-standalone.html",
223 workdir
="source", masterdest
=E
.BIP39_RELEASE_PATH
+ "/index.html",
224 url
="https://tools.immae.eu/BIP39", mode
=0o644))
225 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.BIP39_RELEASE_PATH
)))
227 return util
.BuilderConfig(name
="BIP39_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
229 def immae_eu_factory():
231 "PATH": os
.environ
["BUILDBOT_PATH_ImmaeEu"] + ":${PATH}"
233 factory
= util
.BuildFactory()
234 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.IMMAE_EU_GIT_URL
,
235 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
236 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
237 factory
.addStep(steps
.ShellCommand(name
="build website",
238 logEnviron
=False, haltOnFailure
=True, workdir
="source",
239 env
=path_env
, command
=["make", "html"]))
240 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.IMMAE_EU_RELEASE_PATH
)))
241 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/output",
242 masterdest
=E
.IMMAE_EU_RELEASE_PATH
,
243 url
="https://www.immae.eu"))
244 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.IMMAE_EU_RELEASE_PATH
)))
246 return util
.BuilderConfig(name
="ImmaeEu_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
250 "PATH": os
.environ
["BUILDBOT_PATH_Cours"] + ":${PATH}",
253 factory
= util
.BuildFactory()
254 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.COURS_GIT_URL
,
255 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
256 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
257 factory
.addStep(steps
.ShellCommand(name
="build website",
258 logEnviron
=False, haltOnFailure
=True, workdir
="source",
259 command
=["make", "build"], env
=path_env
))
260 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.COURS_RELEASE_PATH
)))
261 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/build",
262 masterdest
=E
.COURS_RELEASE_PATH
,
263 url
="https://www.immae.eu/cours"))
264 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.COURS_RELEASE_PATH
)))
266 factory
.addStep(steps
.ShellCommand(name
="build pdfs",
267 logEnviron
=False, haltOnFailure
=True, workdir
="source",
268 command
=["make", "pdfs"], env
=path_env
))
270 package
= util
.Interpolate("cours_%(kw:clean_branch)s.tar.gz", clean_branch
=clean_branch
)
271 release_file
= "{0}/cours_%(kw:clean_branch)s.tar.gz"
272 package_dest
= util
.Interpolate(release_file
.format(E
.COURS_TARBALL_PATH
), clean_branch
=clean_branch
)
273 package_url
= util
.Interpolate(release_file
.format(E
.COURS_TARBALL_URL
), clean_branch
=clean_branch
)
274 factory
.addStep(steps
.ShellCommand(name
="build pdf tarball",
275 logEnviron
=False, haltOnFailure
=True, workdir
="source",
276 command
=["tar", "-cvf", package
, "-C", "pdfs", "mp", "mpsi"], env
=path_env
))
277 factory
.addStep(steps
.FileUpload(name
="upload package", workersrc
=package
,
278 workdir
="source", masterdest
=package_dest
,
279 url
=package_url
, mode
=0o644))
281 return util
.BuilderConfig(name
="Cours_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
283 def normalesup_factory():
285 "PATH": os
.environ
["BUILDBOT_PATH_Normalesup"] + ":${PATH}"
287 factory
= util
.BuildFactory()
288 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=E
.NORMALESUP_GIT_URL
,
289 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
290 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
291 factory
.addStep(steps
.ShellCommand(name
="build website",
292 logEnviron
=False, haltOnFailure
=True, workdir
="source",
293 command
=["make", "build"], env
=path_env
))
294 factory
.addStep(steps
.ShellCommand(name
="give read access to all files",
295 logEnviron
=False, haltOnFailure
=True, workdir
="source",
296 command
="chmod -R a+rX build", env
=path_env
))
297 factory
.addStep(steps
.ShellCommand(name
="synchronize with phare",
298 logEnviron
=False, haltOnFailure
=True, workdir
="source",
299 env
=path_env
, command
=[
300 "rsync", "-av", "--delete",
301 "-e", "ssh -i {} -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=no".format(E
.SSH_KEY_PATH
),
303 os
.environ
["BUILDBOT_NORMALESUP_HOST"]
305 factory
.addStep(steps
.MasterShellCommand(command
="rm -rf {}".format(E
.NORMALESUP_RELEASE_PATH
)))
306 factory
.addStep(steps
.DirectoryUpload(workersrc
="../source/build", masterdest
=E
.NORMALESUP_RELEASE_PATH
,
307 url
="https://www.immae.eu/recherche"))
308 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.NORMALESUP_RELEASE_PATH
)))
310 return util
.BuilderConfig(name
="Normalesup_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
312 def gsm_cells_factory():
314 "PATH": os
.environ
["BUILDBOT_PATH_GSMCells"] + ":${PATH}",
315 "IN_BUILDBOT": "yes",
319 Options +FollowSymLinks
323 for k
, v
in os
.environ
.items():
324 if k
.startswith("BUILDBOT_GSM_CELLS_"):
325 path_env
[k
[len("BUILDBOT_GSM_CELLS_"):]] = v
327 script
= os
.environ
["BUILDBOT_PROJECT_DIR"] + "/scripts/lacells_download"
328 factory
= util
.BuildFactory()
329 factory
.addStep(steps
.ShellCommand(name
="download files",
330 logEnviron
=False, haltOnFailure
=True, command
=[script
], env
=path_env
))
331 factory
.addStep(steps
.ShellCommand(name
="give read access to all files",
332 logEnviron
=False, haltOnFailure
=True,
333 command
="chmod a+r lacells.db", env
=path_env
))
334 factory
.addStep(steps
.FileUpload(workersrc
="lacells.db",
335 masterdest
=(E
.GSMCELLS_RELEASE_PATH
+"/lacells.db"), url
=(E
.GSMCELLS_RELEASE_URL
+"/lacells.db")))
336 factory
.addStep(steps
.MasterShellCommand(command
="touch {}/.duplicity-ignore".format(E
.GSMCELLS_RELEASE_PATH
)))
337 factory
.addStep(steps
.MasterShellCommand(command
='echo "$HTACCESS" > {}/.htaccess'.format(E
.GSMCELLS_RELEASE_PATH
),
339 factory
.addStep(steps
.MasterShellCommand(command
="ln -sf lacells.db {}/lacells.db.new".format(E
.GSMCELLS_RELEASE_PATH
)))
340 factory
.addStep(steps
.MasterShellCommand(command
="chmod -R a+rX {}".format(E
.GSMCELLS_RELEASE_PATH
)))
342 return util
.BuilderConfig(name
="GSMCells_build", workernames
=["generic-worker-immae-eu"], factory
=factory
)
344 def symfony_project_factory(name
, repourl
, service_name
, parameters_path
="app/config/parameters.yml", other_steps
=lambda a
: []):
345 if "BUILDBOT_PATH_SYMFONY_{}".format(name
) in os
.environ
:
347 "PATH": os
.environ
["BUILDBOT_PATH_SYMFONY_{}".format(name)] + ":${PATH}"
354 for k
, v
in os
.environ
.items():
355 if k
.startswith("BUILDBOT_SYMFONY_{}_".format(name
)):
356 path_env
[k
[len("BUILDBOT_SYMFONY_{}_".format(name
)):]] = v
358 factory
= util
.BuildFactory()
359 factory
.addStep(steps
.Git(logEnviron
=False, repourl
=repourl
,
360 submodules
=True, sshPrivateKey
=open(E
.SSH_KEY_PATH
).read().rstrip(),
361 sshHostKey
=E
.SSH_HOST_KEY
, mode
="full", method
="copy"))
362 if parameters_path
is not None:
363 factory
.addStep(steps
.FileDownload(mastersrc
=(E
.SECRETS_FILE
+ "/symfony_{}_parameters.yml".format(name
)),
364 workerdest
=parameters_path
))
365 factory
.addStep(NixShellCommand(name
="build website",
366 logEnviron
=False, haltOnFailure
=True, workdir
="build",
367 env
=path_env
, command
="composer install"))
368 if parameters_path
is not None:
369 factory
.addStep(steps
.ShellCommand(name
="Remove parameters.yml",
370 logEnviron
=False, haltOnFailure
=True,
371 command
="rm -f {}".format(parameters_path
)))
372 for step
in other_steps(path_env
):
373 factory
.addStep(step
)
374 package
= util
.Interpolate("{}_%(kw:clean_branch)s.tar.gz".format(name
), clean_branch
=clean_branch
)
375 release_file
= "{0}/{1}/%(kw:clean_branch)s.tar.gz"
376 package_dest
= util
.Interpolate(release_file
.format("/var/lib/ftp/release.immae.eu/buildbot", name
), clean_branch
=clean_branch
)
377 # Tar doesn’t like creating the tarball in the same directory
378 factory
.addStep(steps
.ShellCommand(name
="Make a tarball 1/2",
379 logEnviron
=False, haltOnFailure
=True, workdir
="build", env
=path_env
,
380 command
=["touch", package
]))
381 factory
.addStep(steps
.ShellCommand(name
="Make a tarball 2/2",
382 logEnviron
=False, haltOnFailure
=True, workdir
="build", env
=path_env
,
383 command
=["tar", "--exclude", package
, "-czf", package
, "."]))
384 factory
.addStep(steps
.FileUpload(name
="upload package",
385 workersrc
=package
, workdir
="build",
386 masterdest
=package_dest
, mode
=0o644))
387 factory
.addStep(steps
.MasterShellCommand(command
="/run/wrappers/bin/sudo systemctl restart {}.service".format(service_name
)))
388 return util
.BuilderConfig(name
="Symfony_{}_build".format(name
), workernames
=["generic-worker-immae-eu"], factory
=factory
)