def __init__(self, source, buildpython=["python"], trialpython=[], trial=None, testpath=".", randomly=None, recurse=None, tests=None, useTestCaseNames=False, env=None): BuildFactory.__init__(self, [source]) assert tests or useTestCaseNames, "must use one or the other" if trial is not None: self.trial = trial if randomly is not None: self.randomly = randomly if recurse is not None: self.recurse = recurse from buildbot.steps.python_twisted import Trial buildcommand = buildpython + ["./setup.py", "build"] self.addStep(Compile(command=buildcommand, env=env)) self.addStep( Trial( python=trialpython, trial=self.trial, testpath=testpath, tests=tests, testChanges=useTestCaseNames, randomly=self.randomly, recurse=self.recurse, env=env, ))
def _flockerTests(kwargs, tests=None, env=None, trial=None): if env is None: env = {} env[b"PATH"] = [Interpolate(path.join(VIRTUALENV_DIR, "bin")), "${PATH}"] if tests is None: tests = [b"flocker"] if trial is None: trial = [virtualenvBinary('trial')] return [ ShellCommand(command=[b"mkdir", TMPDIR], description=["creating", "TMPDIR"], descriptionDone=["create", "TMPDIR"], name="create-TMPDIR"), Trial(trial=trial, tests=tests, testpath=None, workdir=TMPDIR, env=env, **kwargs), ShellCommand(command=[b"rm", b"-rf", TMPDIR], alwaysRun=True, description=["removing", "TMPDIR"], descriptionDone=["remove", "TMPDIR"], name="remove-TMPDIR"), ]
def mksimplefactory(test_master=True): f = factory.BuildFactory() f.addSteps([ gitStep, # use workdir instead of testpath because setuptools sticks its own eggs (including # the running version of buildbot) into sys.path *before* PYTHONPATH, but includes # "." in sys.path even before the eggs Trial(workdir="build/slave", testpath=".", tests='buildslave.test', usePTY=False, name='test slave'), ]) if test_master: f.addStep( Trial(workdir="build/master", testpath=".", tests='buildbot.test', usePTY=False, name='test master'), ) return f
def makeAdminFactory(): """ Make a new build factory which can do an admin build. """ factory = getFlockerFactory(python=b"python2.7") factory.addSteps(installDependencies()) factory.addStep( Trial( trial=[Interpolate(path.join(VIRTUALENV_DIR, "bin/trial"))], tests=[b'admin'], testpath=None, env={ b"PATH": [Interpolate(path.join(VIRTUALENV_DIR, "bin")), "${PATH}"], }, )) return factory
def mktestfactory(twisted_version='twisted', python_version='python', sqlalchemy_version='sqlalchemy', # latest sqlalchemy_migrate_version='sqlalchemy-migrate', # latest extra_packages=None, db=None, www=False, slave_only=False): if not extra_packages: extra_packages = [] subs = dict(twisted_version=twisted_version, python_version=python_version) ve = "../sandbox-%(python_version)s-%(twisted_version)s" % subs if sqlalchemy_version != 'sqlalchemy': ve += '-' + sqlalchemy_version if sqlalchemy_migrate_version != 'sqlalchemy-migrate': ve += sqlalchemy_migrate_version.replace('sqlalchemy-migrate==', 'samigr-') subs['ve'] = ve if www: extra_packages.append('--editable=pkg') extra_packages.append('--editable=www/base') extra_packages.append('--editable=www/console_view') extra_packages.append('--editable=www/waterfall_view') virtualenv_packages = [twisted_version, sqlalchemy_version, sqlalchemy_migrate_version, 'multiprocessing==2.6.2.1', 'mock==0.8.0', '--editable=slave'] + extra_packages if python_version > 'python2.5': # because some of the dependencies don't work on 2.5 virtualenv_packages.extend(['moto==0.3.1', 'boto==2.29.1']) if python_version in ('python2.4', 'python2.5'): # and, because the latest versions of these don't work on <2.5, and the version of # pip that works on 2.5 doesn't understand that '==' means 'I want this version' virtualenv_packages.insert(0, _PACKAGE_STASH + 'zope.interface-3.6.1.tar.gz') virtualenv_packages.insert(0, _PACKAGE_STASH + 'setuptools-1.4.2.tar.gz') else: virtualenv_packages.insert(0, _PACKAGE_STASH + 'zope.interface-4.1.1.tar.gz') if not slave_only: virtualenv_packages.append('--editable=master') f = factory.BuildFactory() f.addSteps([ gitStep, VirtualenvSetup(name='virtualenv setup', no_site_packages=True, virtualenv_python=python_version, virtualenv_packages=virtualenv_packages, virtualenv_dir=ve, haltOnFailure=True), ShellCommand(usePTY=False, command=textwrap.dedent(""" SANDBOX="%(ve)s"; PYTHON="$PWD/$SANDBOX/bin/python"; PIP="$PWD/$SANDBOX/bin/pip"; $PYTHON -c 'import sys; print "Python:", sys.version; import twisted; print "Twisted:", twisted.version' || exit 1; $PIP freeze """ % subs), description="versions", descriptionDone="versions", name="versions"), ]) # see note above about workdir vs. testpath if db: # for DB, just test the master (the slave doesn't use the db) f.addSteps([ DatabaseTrial(workdir="build/master", testpath='.', db=db, tests='buildbot.test', trial="../%(ve)s/bin/trial" % subs, usePTY=False, name='test master'), ]) elif www: # for www, run 'grunt ci'; this needs the virtualenv path in PATH f.addSteps([ ShellCommand(workdir="build/www", command=['./node_modules/.bin/grunt', 'ci'], usePTY=False, name='grunt ci', env={'PATH':'../%(ve)s/bin/:${PATH}' % subs}), ]) else: f.addSteps([ Trial(workdir="build/slave", testpath='.', tests='buildslave.test', trial="../%(ve)s/bin/trial" % subs, usePTY=False, name='test slave'), ]) if not slave_only and not db: f.addSteps([ Trial(workdir="build/master", testpath='.', tests='buildbot.test', trial="../%(ve)s/bin/trial" % subs, usePTY=False, name='test master'), ]) return f
def mktestfactory( twisted_version=None, python_version='python', sqlalchemy_version=None, # latest taken by master's setup.py sqlalchemy_migrate_version=None, # latest taken by master's setup.py extra_packages=None, db=None, www=False, slave_only=False): if not extra_packages: extra_packages = [] subs = dict(twisted_version=twisted_version, python_version=python_version) ve = "../sandbox-%(python_version)s-%(twisted_version)s" % subs if sqlalchemy_version is not None: ve += '-' + sqlalchemy_version if sqlalchemy_migrate_version is not None: ve += sqlalchemy_migrate_version.replace('sqlalchemy-migrate==', 'samigr-') subs['ve'] = ve virtualenv_packages = extra_packages def maybeAppend(*args): for v in args: if v is not None: virtualenv_packages.append(v) maybeAppend(twisted_version, sqlalchemy_version, sqlalchemy_migrate_version) if www: maybeAppend('--editable=pkg', '--editable=www/base', '--editable=www/console_view', '--editable=www/waterfall_view') if not slave_only: maybeAppend('--editable=master[test,tls]') # master[test] embeddeds all test deps, but not worker, which only needs mock else: maybeAppend('mock') maybeAppend('--editable=worker') f = factory.BuildFactory() f.addSteps([ gitStep, downloadStep, VirtualenvSetup(name='virtualenv setup', virtualenv_python=python_version, virtualenv_packages=virtualenv_packages, virtualenv_dir=ve, haltOnFailure=True), ShellCommand(usePTY=False, command=textwrap.dedent(""" SANDBOX="%(ve)s"; PYTHON="$PWD/$SANDBOX/bin/python"; PIP="$PWD/$SANDBOX/bin/pip"; $PYTHON -c 'import sys; print "Python:", sys.version; import twisted; print "Twisted:", twisted.version' || exit 1; $PIP freeze """ % subs), description="versions", descriptionDone="versions", name="versions"), ]) # see note above about workdir vs. testpath if db: # for DB, just test the master (the slave doesn't use the db) f.addSteps([ DatabaseTrial(workdir="build/master", testpath='.', db=db, tests='buildbot.test', trial="../%(ve)s/bin/trial" % subs, usePTY=False, name='test master'), ]) elif www: # for www, run 'grunt ci'; this needs the virtualenv path in PATH f.addSteps([ ShellCommand(workdir="build/www", command=['./node_modules/.bin/grunt', 'ci'], usePTY=False, name='grunt ci', env={'PATH': '../%(ve)s/bin/:${PATH}' % subs}), ]) else: f.addSteps([ Trial(workdir="build/worker", testpath='.', tests='buildbot_worker.test', trial="../%(ve)s/bin/trial" % subs, usePTY=False, name='test worker'), ]) if not slave_only and not db: f.addSteps([ Trial(workdir="build/master", testpath='.', tests='buildbot.test', trial="../%(ve)s/bin/trial" % subs, usePTY=False, name='test master'), ]) return f