def MakeDebBuilder(): f = BuildFactory() f.addSteps(svn_co) f.addStep( ShellCommand( name='revision', command=['bash', 'revision.sh'], workdir='build/os/ubuntu', haltOnFailure=True, env={'SCHAT_REVISION': Property('got_revision')}, )) f.addStep( ShellCommand( name='deb', command=['bash', 'build.sh'], workdir='build/os/ubuntu', env={'SCHAT_VERSION': SCHAT_VERSION}, haltOnFailure=True, )) f.addStep( FileUpload( mode=0644, slavesrc=WithProperties( 'os/ubuntu/deb/schat2_%(version)s-1~%(codename)s_%(arch)s.deb' ), masterdest=UploadFileName( 'schat2_%(version)s-1~%(codename)s%(suffix)s_%(arch)s.deb'), url=WithProperties( 'https://download.schat.me/schat2/snapshots/%(version)s/r%(got_revision)s/schat2_%(version)s-1~%(codename)s%(suffix)s_%(arch)s.deb' ), ))
def testDeferredDefault(self): default = DeferredRenderable() value = Property("no-such-property", default) d = self.build.render(value) d.addCallback(self.failUnlessEqual, "default-value") default.callback("default-value") return d
def Strip(command, **kwargs): return ShellCommand(name="strip", description="stripping", descriptionDone="strip", command=command, doStepIf=Property("package", default=False), **kwargs)
def __init__(self, schedulerNames=[], sourceStamp = None, sourceStamps = None, updateSourceStamp=None, alwaysUseLatest=False, waitForFinish=False, set_properties={}, copy_properties=[], **kwargs): if not schedulerNames: config.error( "You must specify a scheduler to trigger") if (sourceStamp or sourceStamps) and (updateSourceStamp is not None): config.error( "You can't specify both sourceStamps and updateSourceStamp") if (sourceStamp or sourceStamps) and alwaysUseLatest: config.error( "You can't specify both sourceStamps and alwaysUseLatest") if alwaysUseLatest and (updateSourceStamp is not None): config.error( "You can't specify both alwaysUseLatest and updateSourceStamp" ) self.schedulerNames = schedulerNames self.sourceStamps = sourceStamps or [] if sourceStamp: self.sourceStamps.append(sourceStamp) if updateSourceStamp is not None: self.updateSourceStamp = updateSourceStamp else: self.updateSourceStamp = not (alwaysUseLatest or self.sourceStamps) self.alwaysUseLatest = alwaysUseLatest self.waitForFinish = waitForFinish properties = {} properties.update(set_properties) for i in copy_properties: properties[i] = Property(i) self.set_properties = properties self.running = False self.ended = False ResumeBuild.__init__(self, **kwargs)
def testDefaultValueNested(self): self.props.setProperty("xxx", 'yyy', "scheduler") value = Property("do-tests", default=WithProperties("a-%(xxx)s-b")) d = self.build.render(value) d.addCallback(self.failUnlessEqual, "a-yyy-b") return d
def testDefaultValue(self): value = Property("do-tests", default="Hello!") d = self.build.render(value) d.addCallback(self.failUnlessEqual, "Hello!") return d
def test_generator_interpolation(self): value = 'Our_GENERATOR' self.setup_step(CMake(generator=Property('GENERATOR'))) self.properties.setProperty('GENERATOR', value, source='test') self.expect_and_run_command('-G', value)
def test_start_instance_noimage_renderabledockerfile(self): bs = self.setupWorker( 'bot', 'pass', 'tcp://1234:2375', 'customworker', dockerfile=Interpolate('FROM debian:%(kw:distro)s', distro=Property('distro'))) id, name = self.successResultOf(bs.start_instance(self.build)) self.assertEqual(name, 'customworker')
def test_run_jobsProperties(self): """ C{jobs} should accept Properties """ self.setupStep( python_twisted.Trial(workdir='build', tests='testname', jobs=Property('jobs_count'), testpath=None)) self.properties.setProperty('jobs_count', '2', 'Test') self.expectCommands( ExpectShell( workdir='build', command=[ 'trial', '--reporter=bwverbose', '--jobs=2', 'testname' ], usePTY="slave-config", logfiles={ 'test.0.log': '_trial_temp/0/test.log', 'err.0.log': '_trial_temp/0/err.log', 'out.0.log': '_trial_temp/0/out.log', 'test.1.log': '_trial_temp/1/test.log', 'err.1.log': '_trial_temp/1/err.log', 'out.1.log': '_trial_temp/1/out.log', }) + ExpectShell.log('stdio', stdout="Ran 1 tests\n") + 0) self.expectOutcome(result=SUCCESS, state_string='1 test passed') return self.runStep()
def test_volume_bad_format_renderable(self): bs = self.setupWorker( 'bot', 'pass', 'http://localhost:2375', image="worker", volumes=[Interpolate('/data==/worker/%(kw:builder)s/build', builder=Property('builder'))]) f = self.failureResultOf(bs.start_instance(self.build)) f.check(config.ConfigErrors)
def test_options_interpolation(self): prop = 'option' value = 'value' self.setup_step(CMake(options=(Property(prop), ))) self.properties.setProperty(prop, value, source='test') self.expect_and_run_command(value)
def test_path_interpolation(self): prop = 'path' value = 'some/path' self.setup_step(CMake(path=Property(prop))) self.properties.setProperty(prop, value, source='test') self.expect_and_run_command(value)
def test_renderable(self): self.props.setProperty("buildername", "blue fish", "test") command = Interpolate("echo '%s'", Property("buildername")) d = self.build.render(command) d.addCallback(self.failUnlessEqual, "echo 'blue fish'") return d
def testIgnoreDefaultValue(self): self.props.setProperty("do-tests", "string", "scheduler") value = Property("do-tests", default="Hello!") d = self.build.render(value) d.addCallback(self.failUnlessEqual, "string") return d
def testMissingProperty(self): value = Property("do-tests") d = self.build.render(value) d.addCallback(self.failUnlessEqual, None) return d
def MakeMacBuilder(): f = BuildFactory() f.addSteps(svn_co) f.addStep( ShellCommand( name='revision', command=['bash', 'revision.sh'], workdir='build/os/macosx', haltOnFailure=True, env={'SCHAT_REVISION': Property('got_revision')}, )) f.addStep( ShellCommand( name='dmg', command=['bash', 'deploy.sh'], workdir='build/os/macosx', haltOnFailure=True, )) f.addStep( FileUpload( mode=0644, slavesrc=WithProperties( 'os/macosx/dmg/SimpleChat2-%(version)s.dmg'), masterdest=UploadFileName('SimpleChat2-%(version)s%(suffix)s.dmg'), url=WithProperties( 'https://download.schat.me/schat2/snapshots/%(version)s/r%(got_revision)s/SimpleChat2-%(version)s%(suffix)s.dmg' ), ))
def testStringProperty(self): self.props.setProperty("do-tests", "string", "scheduler") value = Property("do-tests") d = self.build.render(value) d.addCallback(self.failUnlessEqual, "string") return d
def test_definitions_renderable(self): b_value = 'real_b' definitions = Property('b') self.setupStep(CMake(definitions=definitions)) self.properties.setProperty('b', {'a': b_value}, source='test') self.expect_and_run_command('-D%s=%s' % ('a', b_value))
def testIgnoreFalseValue(self): self.props.setProperty("do-tests-string", "", "scheduler") self.props.setProperty("do-tests-int", 0, "scheduler") self.props.setProperty("do-tests-list", [], "scheduler") self.props.setProperty("do-tests-None", None, "scheduler") value = [ Property("do-tests-string", default="Hello!"), Property("do-tests-int", default="Hello!"), Property("do-tests-list", default="Hello!"), Property("do-tests-None", default="Hello!") ] d = self.build.render(value) d.addCallback(self.failUnlessEqual, ["Hello!"] * 4) return d
def __init__(self, schedulerNames=None, sourceStamp=None, sourceStamps=None, updateSourceStamp=None, alwaysUseLatest=False, waitForFinish=False, set_properties=None, copy_properties=None, parent_relationship="Triggered from", unimportantSchedulerNames=None, **kwargs): if schedulerNames is None: schedulerNames = [] if unimportantSchedulerNames is None: unimportantSchedulerNames = [] if not schedulerNames: config.error("You must specify a scheduler to trigger") if (sourceStamp or sourceStamps) and (updateSourceStamp is not None): config.error( "You can't specify both sourceStamps and updateSourceStamp") if (sourceStamp or sourceStamps) and alwaysUseLatest: config.error( "You can't specify both sourceStamps and alwaysUseLatest") if alwaysUseLatest and (updateSourceStamp is not None): config.error( "You can't specify both alwaysUseLatest and updateSourceStamp") if not set(schedulerNames).issuperset(set(unimportantSchedulerNames)): config.error( "unimportantSchedulerNames must be a subset of schedulerNames") self.schedulerNames = schedulerNames self.unimportantSchedulerNames = unimportantSchedulerNames self.sourceStamps = sourceStamps or [] if sourceStamp: self.sourceStamps.append(sourceStamp) if updateSourceStamp is not None: self.updateSourceStamp = updateSourceStamp else: self.updateSourceStamp = not (alwaysUseLatest or self.sourceStamps) self.alwaysUseLatest = alwaysUseLatest self.waitForFinish = waitForFinish if set_properties is None: set_properties = {} if copy_properties is None: copy_properties = [] properties = {} properties.update(set_properties) for i in copy_properties: properties[i] = Property(i) self.set_properties = properties self.parent_relationship = parent_relationship self.running = False self.ended = False self.brids = [] self.triggeredNames = None self.waitForFinishDeferred = None BuildStep.__init__(self, **kwargs)
def MakeWinLegacyBuilder(): f = BuildFactory() f.addSteps(svn_co_legacy) f.addStep( ShellCommand( name='revision', command=['cmd', '/c', 'revision.cmd'], workdir='build/os/win32', env={ 'SCHAT_VERSION': SCHAT_VERSION_LEGACY, 'SCHAT_REVISION': Property('got_revision') }, haltOnFailure=True, )) f.addStep( ShellCommand( name='qmake', command=['qmake', '-r'], haltOnFailure=True, )) f.addStep(Compile( command=['jom', '-j3', '/NOLOGO'], haltOnFailure=True, )) f.addStep( ShellCommand( name='nsis', command=['cmd', '/c', 'nsis.cmd'], workdir='build/os/win32', env={ 'SCHAT_SIGN_FILE': schat_passwords.SIGN_FILE, 'SCHAT_SIGN_PASSWORD': schat_passwords.SIGN_PASSWORD, 'SCHAT_VERSION': SCHAT_VERSION_LEGACY, 'SCHAT_REVISION': Property('got_revision') }, haltOnFailure=True, logEnviron=False, )) f.addStep( FileUpload( mode=0644, slavesrc=WithProperties( 'os/win32/out/schat-%(version_legacy)s.%(got_revision)s.exe'), masterdest=UploadFileNameLegacy( 'schat-%(version_legacy)s.%(got_revision)s.exe'), ))
def MakeBetaBuilder(): f = BuildFactory() f.addStep( MasterShellCommand(name='Create Update Channel', command=[ 'php', 'update.php', '--channel', Property('channel', default='beta'), '--version', SCHAT_VERSION, '--revision', Property('revision'), '--os', Property('os', default='win32'), ])) return f
def test_definitions_interpolation(self): b_value = 'real_b' definitions = {'a': Property('b')} self.setupStep(CMake(definitions=definitions)) self.properties.setProperty('b', b_value, source='test') self.expect_and_run_command('-D%s=%s' % ('a', b_value))
def testDefaultWhenFalse(self): self.props.setProperty("do-tests-string", "", "scheduler") self.props.setProperty("do-tests-int", 0, "scheduler") self.props.setProperty("do-tests-list", [], "scheduler") self.props.setProperty("do-tests-None", None, "scheduler") value = [ Property("do-tests-string", default="Hello!", defaultWhenFalse=False), Property("do-tests-int", default="Hello!", defaultWhenFalse=False), Property("do-tests-list", default="Hello!", defaultWhenFalse=False), Property("do-tests-None", default="Hello!", defaultWhenFalse=False) ] self.failUnlessEqual(self.build.render(value), ["", 0, [], None])
def test_rendering(self): self.setupStep( VCx(projectfile=Property('a'), config=Property('b'), project=Property('c'))) self.properties.setProperty('a', 'aa', 'Test') self.properties.setProperty('b', 'bb', 'Test') self.properties.setProperty('c', 'cc', 'Test') self.expectCommands( ExpectShell(workdir='wkdir', command=['command', 'here']) + 0) self.expectOutcome(result=SUCCESS, state_string="compile 0 projects 0 files") yield self.runStep() self.assertEqual( [self.step.projectfile, self.step.config, self.step.project], ['aa', 'bb', 'cc'])
def steps_unibootstrap(self, buildout_slave_path, options, eggs_cache, dump_options_to=None, **step_kw): """return a list of steps for buildout bootstrap, using uniform script. The uniform script is ``unibootstrap.py``. For now it ships with build_utils and is downloaded from the buildmaster. options prefixed with 'bootstrap-' are applied :param dump_options_to: kept for backwards compatibility, (unibootstrap will dump them in all cases). :param step_kw: will be passed to the step constructor. Known use-case: change workdir in packaging step. """ boot_opts = {} if options.get('virtualenv', 'true').strip().lower() == 'true': boot_opts['--python'] = Interpolate( '%(prop:cap_python_venv:-~/openerp-env)s' '/bin/python') bv = options.get('bootstrap-version') if bv is not None: boot_opts['--buildout-version'] = bv.strip() command = [ Property('cap_python_bin', default='python'), 'unibootstrap.py', '--dists-directory', WithProperties(eggs_cache), '--buildout-config', buildout_slave_path ] if dump_options_to is None: command.append('--no-output-bootstrap-config') else: boot_opts['--output-bootstrap-config'] = dump_options_to for o, v in boot_opts.items(): command.extend((o, v)) command.append('.') return [ FileDownload(mastersrc=os.path.join(BUILD_UTILS_PATH, 'unibootstrap.py'), slavedest='unibootstrap.py', name="download", description=['download', 'unibootstrap'], **step_kw), ShellCommand(command=command, name='bootstrap', description="bootstrapping", descriptionDone="bootstrapped", locks=[buildout_caches_lock.access('exclusive')], haltOnFailure=True, **step_kw) ]
async def test_topic_is_renderable(self): @renderer def branch(props): return props.getProperty('branch') await self.setupReporter(name='a', topic='test') await self.setupReporter(name='d', topic=branch) await self.setupReporter(name='b', topic=Property('branch')) await self.setupReporter(name='c', topic=Interpolate('%(prop:event)s'))
def get_pdb_filename(abi=None): "Determines the name of an -pdb.zip file for uploading." suffix = "" if abi and not abi.startswith('cp27-'): suffix = "-py%s.%s" % (abi[2], abi[3]) return Interpolate("Panda3D-%s%s%s-pdb.zip", Property("version"), suffix, arch_suffix)
def test_nonrecursive_rendering(): # recursiverender(<object>, <callback>) obj = Property('foo') @defer.inlineCallbacks def callback(irenderable): return (yield irenderable) assert (yield recursiverender(obj, callback)) is obj
def MakeWinBuilder(): f = BuildFactory() f.addSteps(svn_co) f.addStep( ShellCommand( name='revision', command=['cmd', '/c', 'revision.cmd'], workdir='build/os/win32', env={'SCHAT_REVISION': Property('got_revision')}, haltOnFailure=True, )) f.addStep( ShellCommand( name='qmake', command=['qmake', '-r'], haltOnFailure=True, )) f.addStep(Compile( command=['jom', '-j3', '/NOLOGO'], haltOnFailure=True, )) f.addStep( ShellCommand( name='nsis', command=['cmd', '/c', 'nsis.cmd'], workdir='build/os/win32', env={ 'SCHAT_SIGN_FILE': schat_passwords.SIGN_FILE, 'SCHAT_SIGN_PASSWORD': schat_passwords.SIGN_PASSWORD, 'SCHAT_VERSION': SCHAT_VERSION, 'SCHAT_REVISION': Property('got_revision') }, haltOnFailure=True, logEnviron=False, )) f.addStep( FileUpload( mode=0644, slavesrc=WithProperties('os/win32/out/schat2-%(version)s.exe'), masterdest=UploadFileName('schat2-%(version)s%(suffix)s.exe'), url=WithProperties( 'https://download.schat.me/schat2/snapshots/%(version)s/r%(got_revision)s/schat2-%(version)s%(suffix)s.exe' ), ))