summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParménides GV <parmegv@sdf.org>2015-08-13 20:17:07 +0200
committerParménides GV <parmegv@sdf.org>2015-08-13 20:19:12 +0200
commit13c06d9ad66dcdc43a3d154fb5deb228bb3ac73d (patch)
tree41d28ba5652f8368f44c637b8a0cee4b2b3c8ce2
parente63befb7b35454aeb66ee36fc3eee9fe1ef11a99 (diff)
[feat] Refactor slaves
Custom class, to distinguish between leap and third party slaves. Add some convenience methods to get slave names, leap slave names...
-rw-r--r--master.cfg34
-rw-r--r--slaves.py39
2 files changed, 50 insertions, 23 deletions
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]