""" Contains various buildsteps that the build master uses. """ import os from buildbot.steps.shell import ShellCommand from buildbot.process.properties import WithProperties class Bundler(ShellCommand): """ Runs bundler to get the dependencies for a Ruby project. """ name = "bundler" description = "bundle install" descriptionDone = "bundler install complete" command = ["bundle", "install"] flunkOnFailure = True haltOnFailure = True class UnitTests(ShellCommand): """ Runs the unit tests via a rake command. """ name = "unit tests" description = "unit tests" descriptionDone = "passed unit tests" command = ["rake", "test:unit"] flunkOnFailure = True haltOnFailure = True class AcceptanceBoxes(ShellCommand): """ This step will download all the boxes required for the tests. """ name = "acceptance test boxes" description = "downloading required boxes" descriptionDone = description flunkOnFailure = True haltOnFailure = True # Make some of our variables renderable with build properties renderables = ShellCommand.renderables + ["box_dir"] def __init__(self, **kwargs): self.box_dir = WithProperties("%(workdir)s/boxes") ShellCommand.__init__(self, **kwargs) def start(self): # Set the property of the box directory so that later steps # can use it. self.setProperty("box_dir", self.box_dir, self.name) # Set the command to be correct self.setCommand(["rake", "acceptance:boxes[%s]" % self.box_dir]) # Run the actual start method ShellCommand.start(self) class AcceptanceConfig(ShellCommand): """ This step generates the configuration for the acceptance test. """ name = "acceptance test config" description = "generating config" descriptionDone = "config generated" command = ["rake", WithProperties("acceptance:config[%(box_dir)s]")] flunkOnFailure = True haltOnFailure = True def commandComplete(self, cmd): # Set a property with the location of the config file config_path = os.path.join(self.getProperty("workdir"), self.getWorkdir(), "acceptance_config.yml") self.setProperty("acceptance_config_path", config_path, self.name) ShellCommand.commandComplete(self, cmd) class AcceptanceTests(ShellCommand): """ This step runs the actual acceptance tests. """ name = "acceptance tests" description = "running" descriptionDone = "done" command = ["rake", "test:acceptance"] flunkOnFailure = True haltOnFailure = True def __init__(self, **kwargs): # Make sure that the proper environment variables for the test # get passed through to the slave kwargs["env"] = { "ACCEPTANCE_CONFIG": WithProperties("%(acceptance_config_path)s") } kwargs["timeout"] = 3600 ShellCommand.__init__(self, **kwargs)