c['schedulers'].append(hook_scheduler("Docs", timer=1))
c['schedulers'].append(hook_scheduler("History", timer=1))
c['schedulers'].append(hook_scheduler("BIP39", timer=1))
+ c['schedulers'].append(hook_scheduler("Symfony_Chloe", timer=1))
+ c['schedulers'].append(hook_scheduler("Symfony_Florian", timer=1))
+ c['schedulers'].append(hook_scheduler("Symfony_Ludivine", timer=1))
+ c['schedulers'].append(hook_scheduler("Symfony_IsabelleAten", timer=1))
+ c['schedulers'].append(hook_scheduler("Symfony_Piedsjaloux", timer=1))
+ c['schedulers'].append(hook_scheduler("Symfony_Connexionswing", timer=1))
c['schedulers'].append(schedulers.Nightly(name="GSMCells-weekly",
builderNames=["GSMCells_build"], dayOfWeek=6, hour=3))
c['schedulers'].append(force_scheduler("force_immae_eu", [
"ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
- "Recettes_build", "History_build", "BIP39_build"
+ "Recettes_build", "History_build", "BIP39_build",
+ "Symfony_Chloe_build", "Symfony_Florian_build",
+ "Symfony_IsabelleAten_build", "Symfony_Ludivine_build",
+ "Symfony_Piedsjaloux_build", "Symfony_Connexionswing_build"
]))
c['schedulers'].append(schedulers.ForceScheduler(
name="GSMCells-force", label="Force build",
c['builders'].append(docs_factory())
c['builders'].append(history_factory())
c['builders'].append(bip39_factory())
+ c['builders'].append(symfony_project_factory("Chloe", "gitolite@git.immae.eu:perso/Immae/Sites/Chloe/New", "phpfpm-chloe_new_integration"))
+ c['builders'].append(symfony_project_factory("Florian", "gitolite@git.immae.eu:perso/florian_telles/stabilo", "phpfpm-florian_app"))
+ c['builders'].append(symfony_project_factory("IsabelleAten", "gitolite@git.immae.eu:perso/Immae/Sites/Aten", "phpfpm-isabelle_aten_integration", parameters_path=None,
+ other_steps=lambda path_env : [
+ NixShellCommand(name="Install yarn",
+ logEnviron=False, haltOnFailure=True, workdir="build",
+ env=path_env, command="yarn install"),
+ NixShellCommand(name="Build frontend",
+ logEnviron=False, haltOnFailure=True, workdir="build",
+ env=path_env, command="yarn run encore production")
+ ]
+ ))
+ c['builders'].append(symfony_project_factory("Ludivine", "gitolite@git.immae.eu:perso/Immae/Sites/Ludivine", "phpfpm-ludivine_integration"))
+ c['builders'].append(symfony_project_factory("Connexionswing", "gitolite@git.immae.eu:perso/Immae/Projets/Connexionswing", "phpfpm-connexionswing_integration"))
+ c['builders'].append(symfony_project_factory("Piedsjaloux", "gitolite@git.immae.eu:Pieds_jaloux/NewSite", "phpfpm-piedsjaloux_integration"))
c['services'].append(SlackStatusPush(
name="slack_status_immae_eu_project",
builders=[
"ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
"GSMCells_build", "Recettes_build", "History_build",
- "BIP39_build"
+ "BIP39_build", "Symfony_Chloe_build", "Symfony_Florian_build",
+ "Symfony_IsabelleAten_build", "Symfony_Ludivine_build",
+ "Symfony_Piedsjaloux_build", "Symfony_Connexionswing_build"
],
serverUrl=open(E.SECRETS_FILE + "/slack_webhook", "r").read().rstrip()))
c['services'].append(XMPPStatusPush(
builders=[
"ImmaeEu_build", "Normalesup_build", "Cours_build", "Docs_build",
"GSMCells_build", "Recettes_build", "History_build",
- "BIP39_build"
+ "BIP39_build", "Symfony_Chloe_build", "Symfony_Florian_build",
+ "Symfony_IsabelleAten_build", "Symfony_Ludivine_build",
+ "Symfony_Piedsjaloux_build", "Symfony_Connexionswing_build"
],
recipients=E.XMPP_RECIPIENTS,
password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip()))
factory.addStep(steps.MasterShellCommand(command="chmod -R a+rX {}".format(E.GSMCELLS_RELEASE_PATH)))
return util.BuilderConfig(name="GSMCells_build", workernames=["generic-worker-immae-eu"], factory=factory)
+
+def symfony_project_factory(name, repourl, service_name, parameters_path="app/config/parameters.yml", other_steps=lambda a : []):
+ if "BUILDBOT_PATH_SYMFONY_{}".format(name) in os.environ:
+ path_env = {
+ "PATH": os.environ["BUILDBOT_PATH_SYMFONY_{}".format(name)] + ":${PATH}"
+ }
+ else:
+ path_env = {
+ "PATH": "${PATH}"
+ }
+
+ for k, v in os.environ.items():
+ if k.startswith("BUILDBOT_SYMFONY_{}_".format(name)):
+ path_env[k[len("BUILDBOT_SYMFONY_{}_".format(name)):]] = v
+
+ factory = util.BuildFactory()
+ factory.addStep(steps.Git(logEnviron=False, repourl=repourl,
+ submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(),
+ sshHostKey=E.SSH_HOST_KEY, mode="full", method="copy"))
+ if parameters_path is not None:
+ factory.addStep(steps.FileDownload(mastersrc=(E.SECRETS_FILE + "/symfony_{}_parameters.yml".format(name)),
+ workerdest=parameters_path))
+ factory.addStep(NixShellCommand(name="build website",
+ logEnviron=False, haltOnFailure=True, workdir="build",
+ env=path_env, command="composer install"))
+ if parameters_path is not None:
+ factory.addStep(steps.ShellCommand(name="Remove parameters.yml",
+ logEnviron=False, haltOnFailure=True,
+ command="rm -f {}".format(parameters_path)))
+ for step in other_steps(path_env):
+ factory.addStep(step)
+ package = util.Interpolate("{}_%(kw:clean_branch)s.tar.gz".format(name), clean_branch=clean_branch)
+ release_file = "{0}/{1}/%(kw:clean_branch)s.tar.gz"
+ package_dest = util.Interpolate(release_file.format("/var/lib/ftp/release.immae.eu/buildbot", name), clean_branch=clean_branch)
+ # Tar doesn’t like creating the tarball in the same directory
+ factory.addStep(steps.ShellCommand(name="Make a tarball 1/2",
+ logEnviron=False, haltOnFailure=True, workdir="build", env=path_env,
+ command=["touch", package]))
+ factory.addStep(steps.ShellCommand(name="Make a tarball 2/2",
+ logEnviron=False, haltOnFailure=True, workdir="build", env=path_env,
+ command=["tar", "--exclude", package, "-czf", package, "."]))
+ factory.addStep(steps.FileUpload(name="upload package",
+ workersrc=package, workdir="build",
+ masterdest=package_dest, mode=0o644))
+ factory.addStep(steps.MasterShellCommand(command="/run/wrappers/bin/sudo systemctl restart {}.service".format(service_name)))
+ return util.BuilderConfig(name="Symfony_{}_build".format(name), workernames=["generic-worker-immae-eu"], factory=factory)
+