From 13c06d9ad66dcdc43a3d154fb5deb228bb3ac73d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Parm=C3=A9nides=20GV?= Date: Thu, 13 Aug 2015 20:17:07 +0200 Subject: [feat] Refactor slaves Custom class, to distinguish between leap and third party slaves. Add some convenience methods to get slave names, leap slave names... --- master.cfg | 34 +++++++++++----------------------- slaves.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 slaves.py diff --git a/master.cfg b/master.cfg index 668bea4..0b8724a 100644 --- a/master.cfg +++ b/master.cfg @@ -13,24 +13,12 @@ c = BuildmasterConfig = {} ####### BUILDSLAVES -# We store the passwords for the buildslaves in a separate file, so we -# can share this one more widely. Thanks to https://svn.torproject.org/svn/projects/buildbot/trunk/master.cfg -PASSWORD_FILE = "passwords.py" - -d = {} -execfile(PASSWORD_FILE, d) -PASSWORDS = d['PASSWORDS'] -del d - # The 'slaves' list defines the set of recognized buildslaves. Each element is # a BuildSlave object, specifying a unique slave name and password. The same # slave name and password must be configured on the slave. -from buildbot.buildslave import BuildSlave -localhost_slave = "localhost_slave" -c['slaves'] = [BuildSlave(localhost_slave, PASSWORDS[localhost_slave])] - -macmini_kali = "macmini-kali" -c['slaves'].append(BuildSlave(macmini_kali, PASSWORDS[macmini_kali])) +import slaves +reload(slaves) +c['slaves'] = slaves.slaves # 'protocols' contains information about protocols which master will use for # communicating with slaves. @@ -182,10 +170,10 @@ def create_builder(repo_name): factory.addSteps([ ShellCommand(command=['coverage', 'html'], env=venv_path, workdir='.', name="generate html coverage report for " +namespace), - ShellCommand(command=publish_coverage_reports_command('htmlcov', repo_name), workdir='.', doStepIf=(lambda step: step.getProperty('slavename') == localhost_slave)) + ShellCommand(command=publish_coverage_reports_command('htmlcov', repo_name), workdir='.', doStepIf=(lambda step: slaves.is_leap(step.getProperty('slavename')))) ]) - publish_leap_wheels(factory, repo_name, venv_path_factory, doStepIf=(lambda step: step.getProperty('slavename') == localhost_slave)) + publish_leap_wheels(factory, repo_name, venv_path_factory, doStepIf=(lambda step: slaves.is_leap(step.getProperty('slavename')))) if repo_name == 'bitmask_client': publish_sumo = publish_sumo_command('`ls -t *SUMO.tar.gz | head -1`') @@ -193,16 +181,16 @@ def create_builder(repo_name): factory.addSteps([ ShellCommand(command=['make', 'sumo_tarball'], env=venv_path_factory, workdir=repo_name, - doStepIf=(lambda step: step.getProperty('slavename') == localhost_slave), + doStepIf=(lambda step: slaves.is_leap(step.getProperty('slavename'))), name="make sumo tarball"), ShellCommand(command=publish_sumo, env=venv_path_factory, workdir=repo_name + "/dist", - doStepIf=(lambda step: step.getProperty('slavename') == localhost_slave), + doStepIf=(lambda step: slaves.is_leap(step.getProperty('slavename'))), name="publish sumo to ftp") ]) - return BuilderConfig(name=builder_name, slavenames=[localhost_slave, macmini_kali], factory=factory) + return BuilderConfig(name=builder_name, slavenames=slaves.names(), factory=factory) def publish_coverage_reports_command(location, repo_name): target_directory = config.get('ftp', 'coverage_reports_target_directory') + '/' + repo_name + '_' + '`git -C ' + repo_name + ' describe`' @@ -315,11 +303,11 @@ def make_wheel_builder(): else: factory.addStep( ShellCommand(command=generate_wheels, env=sandbox_path, haltOnFailure=True, workdir=workdir, name="wheels for " + repo_name)) - factory.addStep(ShellCommand(command=publish_wheels, env=sandbox_path, doStepIf=(lambda step: step.getProperty('slavename') == localhost_slave), workdir=".", name="publish wheels")) + factory.addStep(ShellCommand(command=publish_wheels, env=sandbox_path, doStepIf=(lambda step: slaves.is_leap(step.getProperty('slavename'))), workdir=".", name="publish wheels")) add_pyside_setup_repo(factory) - return BuilderConfig(name=builder_name, slavenames=[localhost_slave], factory=factory) + return BuilderConfig(name=builder_name, slavenames=slaves.names(), factory=factory) def publish_wheels_command(): original_wheelhouse = config.get('ftp', 'copy_wheels_from') @@ -374,7 +362,7 @@ def make_bundler_builder(): ShellCommand(command=publish_bundle, workdir=workdir + '/' + bundler_output_dir, name="Publish bundle") ]) - return BuilderConfig(name=builder_name, slavenames=[localhost_slave], factory=factory) + return BuilderConfig(name=builder_name, slavenames=slaves.leap_names(), factory=factory) def publish_bundle_command(location): directory = config.get('ftp', 'bundle_target_directory') diff --git a/slaves.py b/slaves.py new file mode 100644 index 0000000..f9a980e --- /dev/null +++ b/slaves.py @@ -0,0 +1,39 @@ +from buildbot.buildslave import BuildSlave + + +class MySlave(BuildSlave): + # We store the passwords for the buildslaves in a separate file, so we + # can share this one more widely. + # Thanks https://svn.torproject.org/svn/projects/buildbot/trunk/master.cfg + PASSWORD_FILE = "passwords.py" + + d = {} + execfile(PASSWORD_FILE, d) + PASSWORDS = d['PASSWORDS'] + del d + + name = "" + is_leap = None + + def __init__(self, name, is_leap): + self.name = name + self.is_leap = is_leap + BuildSlave.__init__(self, name, self.PASSWORDS[name]) + + +slaves = [ + MySlave("localhost_slave", is_leap=True), + MySlave("macmini_kali", is_leap=False) +] + + +def leap_names(): + return [slave.name for slave in slaves if slave.is_leap] + + +def is_leap(slave_name): + return slave_name in leap_names() + + +def names(): + return [slave.name for slave in slaves] -- cgit v1.2.3