diff --git a/setup.py b/setup.py index f8292c78f116f2c93f5336175870b4c770422ead..30ff9f6860f8a36a2205242a201f22d42b300901 100755 --- a/setup.py +++ b/setup.py @@ -99,7 +99,6 @@ setup(name=name, 'dropbear.add_authorized_key = slapos.recipe.dropbear:AddAuthorizedKey', 'dropbear.client = slapos.recipe.dropbear:Client', 'duplicity = slapos.recipe.duplicity:Recipe', - 'egg_test = slapos.recipe.erp5_test:EggTestRecipe', 'equeue = slapos.recipe.equeue:Recipe', 'erp5.promise = slapos.recipe.erp5_promise:Recipe', 'erp5.test = slapos.recipe.erp5_test:Recipe', diff --git a/slapos/recipe/erp5_test/__init__.py b/slapos/recipe/erp5_test/__init__.py index 76cf4b0e647a562938acfe993f1eae28df3a5c95..a965ca774dbc6d2914e556a0f0854dd8b827c91c 100644 --- a/slapos/recipe/erp5_test/__init__.py +++ b/slapos/recipe/erp5_test/__init__.py @@ -113,26 +113,3 @@ class CloudoooRecipe(GenericBaseRecipe): return path_list -class EggTestRecipe(GenericBaseRecipe): - """ - Recipe used to create wrapper used to run test suite (python setup.py test) - off a list of Python eggs. - """ - def install(self): - test_list = self.options['test-list'].strip().replace('\n', ',') - - common_dict = {} - if self.options.get('environment'): - environment_part = self.buildout.get(self.options['environment']) - if environment_part: - common_dict['environment'] = dict(environment_part) - - if 'prepend-path' in self.options: - common_dict['prepend_path'] = self.options['prepend-path'] - - return self.createPythonScript( - self.options['run-test-suite'], __name__ + '.test.runTestSuite', - ((self.options['run-test-suite-binary'], - "--source_code_path_list", test_list), - common_dict) - ) diff --git a/slapos/test/recipe/test_free_port.py b/slapos/test/recipe/test_free_port.py index 7693d9e02cd3bbe10d4a20e6fd7e4c7b42979971..e2cea348bf548c5032c5c42cd6960279b9ff3703 100644 --- a/slapos/test/recipe/test_free_port.py +++ b/slapos/test/recipe/test_free_port.py @@ -4,8 +4,6 @@ import unittest from mock import patch -from slapos.recipe import free_port - class SocketMock(): def __init__(self, *args, **kw): self.args = args @@ -28,31 +26,16 @@ class FreePortTest(unittest.TestCase): SocketMock.bind = SocketMock.close = SocketMock.nothing_happen def new_recipe(self, **kw): - buildout = { - 'buildout': { - 'bin-directory': '', - 'find-links': '', - 'allow-hosts': '', - 'develop-eggs-directory': '', - 'eggs-directory': '', - 'python': 'testpython', - 'installed': '.installed.cfg', - }, - 'testpython': { - 'executable': sys.executable, - }, - 'slap-connection': { - 'computer-id': '', - 'partition-id': '', - 'server-url': '', - 'software-release-url': '', - } - } + from slapos.recipe import free_port + from slapos.test.utils import makeRecipe options = { 'ip': '127.0.0.1', } options.update(kw) - return free_port.Recipe(buildout=buildout, name='free_port', options=options) + return makeRecipe( + free_port.Recipe, + options=options, + name='free_port') @useMock def test_ifNoBusyPortThenMinPortIsAlwaysReturned(self): diff --git a/slapos/test/recipe/test_generic_cloudooo.py b/slapos/test/recipe/test_generic_cloudooo.py index d171efcb2d9b4493323b5825591758977a0239ae..29ddf64fdf3a8ff030df3a6e452bc3cc49b33072 100644 --- a/slapos/test/recipe/test_generic_cloudooo.py +++ b/slapos/test/recipe/test_generic_cloudooo.py @@ -4,30 +4,15 @@ import unittest from tempfile import mkdtemp from shutil import rmtree -from slapos.recipe import generic_cloudooo class TestGenericCloudooo(unittest.TestCase): def new_recipe(self, options): - buildout = { - 'buildout': { - 'bin-directory': '', - 'find-links': '', - 'allow-hosts': '', - 'develop-eggs-directory': '', - 'eggs-directory': '', - 'python': 'testpython', - }, - 'testpython': { - 'executable': sys.executable, - }, - 'slap-connection': { - 'computer-id': '', - 'partition-id': '', - 'server-url': '', - 'software-release-url': '', - } - } - return generic_cloudooo.Recipe(buildout=buildout, name='generic_cloudooo', options=options) + from slapos.recipe import generic_cloudooo + from slapos.test.utils import makeRecipe + return makeRecipe( + generic_cloudooo.Recipe, + options=options, + name='generic_cloudooo') def setUp(self): self.test_dir = mkdtemp() diff --git a/slapos/test/recipe/test_pbs.py b/slapos/test/recipe/test_pbs.py index ff7c04f28d97240912d21b3202b9f673967aac8c..08327f8272b7726231c2fcead1dbf8adbecc042e 100644 --- a/slapos/test/recipe/test_pbs.py +++ b/slapos/test/recipe/test_pbs.py @@ -5,37 +5,19 @@ import sys import tempfile import unittest -from slapos.recipe import pbs - class PBSTest(unittest.TestCase): def new_recipe(self): - buildout = { - 'buildout': { - 'bin-directory': '', - 'find-links': '', - 'allow-hosts': '', - 'develop-eggs-directory': '', - 'eggs-directory': '', - 'python': 'testpython', - }, - 'testpython': { - 'executable': sys.executable, - }, - 'slap-connection': { - 'computer-id': '', - 'partition-id': '', - 'server-url': '', - 'software-release-url': '', - } - } - + from slapos.recipe import pbs + from slapos.test.utils import makeRecipe options = { - 'rdiffbackup-binary': '' - } - - return pbs.Recipe(buildout=buildout, name='pbs', options=options) + 'rdiffbackup-binary': '' + } + return makeRecipe( + pbs.Recipe, + options=options, + name='pbs') def test_push(self): recipe = self.new_recipe() diff --git a/slapos/test/recipe/test_re6stnet.py b/slapos/test/recipe/test_re6stnet.py index ca2b5e635f0352742236242244db59284e618af7..0c3ac919b4f486f407b12ac033d5c53f0cff3be0 100644 --- a/slapos/test/recipe/test_re6stnet.py +++ b/slapos/test/recipe/test_re6stnet.py @@ -6,8 +6,6 @@ import tempfile import unittest from slapos.slap.slap import NotFoundError, ConnectionError -from slapos.recipe import re6stnet - class Re6stnetTest(unittest.TestCase): @@ -47,31 +45,21 @@ class Re6stnetTest(unittest.TestCase): shutil.rmtree(path) def new_recipe(self): - buildout = { - 'buildout': { - 'bin-directory': '', - 'find-links': '', - 'allow-hosts': '', - 'develop-eggs-directory': '', - 'eggs-directory': '', - 'python': 'testpython', - }, - 'testpython': { - 'executable': sys.executable, - }, - 'slap-connection': { + from slapos.recipe import re6stnet + from slapos.test.utils import makeRecipe + return makeRecipe( + re6stnet.Recipe, + options=self.options, + slap_connection={ 'computer-id': 'comp-test', 'partition-id': 'slappart0', 'server-url': 'http://server.com', 'software-release-url': 'http://software.com', 'key-file': '/path/to/key', 'cert-file': '/path/to/cert' - } - } - - options = self.options + }, + name='re6stnet') - return re6stnet.Recipe(buildout=buildout, name='re6stnet', options=options) def checkWrapper(self, path): self.assertTrue(os.path.exists(path)) diff --git a/slapos/test/utils.py b/slapos/test/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..d605bab9d326748881ef3858b81b1ed47c743b41 --- /dev/null +++ b/slapos/test/utils.py @@ -0,0 +1,62 @@ +"""Test helpers +""" +import sys +import os.path +from ConfigParser import ConfigParser + +import logging + +def makeRecipe(recipe_class, options, name='test', slap_connection=None): + """Instanciate a recipe of `recipe_class` with `options` with a buildout + mapping containing a python and an empty `slapos-connection` mapping, unless + provided as `slap_connection`. + + If running tests in a buildout folder, the test recipe will reuse the + `eggs-directory` and `develop-eggs-directory` from this buildout so that the + test recipe does not need to install eggs again when using working set. + To prevent test accidentally writing to the buildout's eggs repositories, we + set `newest` to false and `offline` to true in this case. + """ + buildout = { + 'buildout': { + 'bin-directory': '', + 'find-links': '', + 'allow-hosts': '', + 'develop-eggs-directory': '', + 'eggs-directory': '', + 'python': 'testpython', + }, + 'testpython': { + 'executable': sys.executable, + }, + 'slap-connection': { + 'computer-id': '', + 'partition-id': '', + 'server-url': '', + 'software-release-url': '', + } + } + if slap_connection is not None: + buildout['slap-connection'] = slap_connection + + # are we in buildout folder ? + # the usual layout is + # ${buildout:directory}/parts/slapos-repository/slapos/test/utils.py , so try + # to find a buildout relative to this file. + buildout_cfg = os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', 'buildout.cfg') + if os.path.exists(buildout_cfg): + parser = ConfigParser() + parser.readfp(open(buildout_cfg)) + eggs_directory = parser.get('buildout', 'eggs-directory') + develop_eggs_directory = parser.get('buildout', 'develop-eggs-directory') + logging.getLogger(__name__).info( + 'Using eggs-directory (%s) and develop-eggs-directory (%s) from buildout at %s', + eggs_directory, + develop_eggs_directory, + buildout_cfg) + buildout['buildout']['eggs-directory'] = eggs_directory + buildout['buildout']['develop-eggs-directory'] = develop_eggs_directory + buildout['buildout']['newest'] = False + buildout['buildout']['offline'] = True + return recipe_class(buildout=buildout, name=name, options=options) + diff --git a/software/slapos-testing/README.md b/software/slapos-testing/README.md new file mode 100644 index 0000000000000000000000000000000000000000..07216cff74692c4c740f854c2583b21f78f95219 --- /dev/null +++ b/software/slapos-testing/README.md @@ -0,0 +1,48 @@ +# Slapos egg tests + +This software release is used to run unit test of slapos eggs. + +The approach is to use setuptools' integrated test runner, `python setup.py test`, to run tests. + +The `python` used in this command will be a `zc.recipe.egg` interpreter with +all eggs pre-installed by this software release. + +Nexedi staff can see the results of this test from the test suite +`SLAPOS-EGG-TEST` in test result module. + + +Here's an example session of how a developer could use this software release in +slaprunner to develop a slapos egg, in the example `slapos.core`, to make +changes to the code, run tests and publish changes. + +```bash +# install this software release +SR=https://lab.nexedi.com/nexedi/slapos/raw/master/software/slapos-testing/software.cfg +COMP=slaprunner +INSTANCE_NAME=$COMP + +slapos supply $SR $COMP +slapos node software +slapos request --node=node=$COMP $INSTANCE_NAME $SR +slapos node instance + +# The source code is a git clone working copy on the instance +cd ~/srv/runner/instance/slappart0/parts/slapos.core/ + +# make some changes to the code +vim slapos/tests/client.py + +# run tests, using bundled python intepreter with pre-installed eggs dependencies +~/srv/runner/instance/slappart0/software_release/bin/python_for_test setup.py build + +# when satified, commit changes +git add -p && git commit + +# add developer's fork remote (this is only needed the first time) +git remote add my_remote https://lab.nexedi.com/your_username/slapos.core.git/ + +# push the changes +git push my_remote HEAD:feature_branch_name + +# then submit merge request +``` diff --git a/software/slapos-testing/buildout.hash.cfg b/software/slapos-testing/buildout.hash.cfg new file mode 100644 index 0000000000000000000000000000000000000000..95c5eb6dd28bcdd520d68086308bc59d3567704d --- /dev/null +++ b/software/slapos-testing/buildout.hash.cfg @@ -0,0 +1,20 @@ +# THIS IS NOT A BUILDOUT FILE, despite purposedly using a compatible syntax. +# The only allowed lines here are (regexes): +# - "^#" comments, copied verbatim +# - "^[" section beginings, copied verbatim +# - lines containing an "=" sign which must fit in the following categorie. +# - "^\s*filename\s*=\s*path\s*$" where "path" is relative to this file +# But avoid directories, they are not portable. +# Copied verbatim. +# - "^\s*hashtype\s*=.*" where "hashtype" is one of the values supported +# by the re-generation script. +# Re-generated. +# - other lines are copied verbatim +# Substitution (${...:...}), extension ([buildout] extends = ...) and +# section inheritance (< = ...) are NOT supported (but you should really +# not need these here). + +[template] +filename = instance.cfg +md5sum = 9dece9d12dc94bf5c35d307cc8aa4d6b + diff --git a/software/slapos-testing/instance.cfg b/software/slapos-testing/instance.cfg index 0a067e729e09c42b9548b76308ac913194b03327..5e50aff78e6a14af73dc93c0e12169969c25a8c4 100644 --- a/software/slapos-testing/instance.cfg +++ b/software/slapos-testing/instance.cfg @@ -1,10 +1,7 @@ [buildout] parts = - slapos.core-setup - erp5.util-setup phantomjs-wrapper slapos-test-runner - sh-environment eggs-directory = ${buildout:eggs-directory} develop-eggs-directory = ${buildout:develop-eggs-directory} @@ -24,33 +21,26 @@ bin = $${buildout:directory}/bin etc = $${buildout:directory}/etc services = $${:etc}/run srv = $${buildout:directory}/srv -source-code = $${:srv}/eggs-source-code [download-source] recipe = slapos.recipe.build:gitclone git-executable = ${git:location}/bin/git -# Local development -[slapos.core] -<= download-source -repository = ${slapos.core-repository:location} - -[slapos.core-setup] -recipe = plone.recipe.command -command = echo "Updating setup...";cd $${slapos.core:location}; export PATH="$${slapos-test-runner:prepend-path}:$PATH"; export CPPFLAGS="$${environment:CPPFLAGS}"; export LDFLAGS="$${environment:LDFLAGS}"; export PYTHONPATH="$${environment:PYTHONPATH}"; export LOCAL_IPV4="$${environment:LOCAL_IPV4}"; ${python2.7:location}/bin/python setup.py test -n; ${python2.7:location}/bin/python setup.py test -n; ${python2.7:location}/bin/python setup.py test -n; ${python2.7:location}/bin/python setup.py test -n -update-command = $${:command} - [caucase] <= download-source repository = ${caucase-repository:location} +[erp5.util] +<= download-source +repository = ${erp5.util-repository:location} + [slapos.cookbook] <= download-source repository = ${slapos.cookbook-repository:location} -[slapos.recipe.template] +[slapos.core] <= download-source -repository = ${slapos.recipe.template-repository:location} +repository = ${slapos.core-repository:location} [slapos.recipe.build] <= download-source @@ -60,57 +50,33 @@ repository = ${slapos.recipe.build-repository:location} <= download-source repository = ${slapos.recipe.cmmi-repository:location} -[slapos.toolbox] +[slapos.recipe.template] <= download-source -repository = ${slapos.toolbox-repository:location} +repository = ${slapos.recipe.template-repository:location} -[erp5-util] +[slapos.toolbox] <= download-source -repository = ${erp5-util-repository:location} +repository = ${slapos.toolbox-repository:location} -[erp5.util-setup] -recipe = plone.recipe.command -command = echo "Updating setup...";cd $${erp5-util:location}; export PATH="$${slapos-test-runner:prepend-path}:$PATH"; export CPPFLAGS="$${environment:CPPFLAGS}"; export LDFLAGS="$${environment:LDFLAGS}"; export PYTHONPATH="$${environment:PYTHONPATH}"; ${python2.7:location}/bin/python setup.py test -n; ${python2.7:location}/bin/python setup.py test -n; ${python2.7:location}/bin/python setup.py test -n; ${python2.7:location}/bin/python setup.py test -n; ${python2.7:location}/bin/python setup.py test -n -update-command = $${:command} [slapos-test-runner] -recipe = slapos.cookbook:egg_test -run-test-suite = $${create-directory:bin}/runTestSuite -run-test-suite-binary = ${buildout:bin-directory}/runTestSuite -# The list of executables should be defined here and a combination -# of tests should dynamically generated. -#python-list = $${} -test-list = - $${slapos.cookbook:location} - $${slapos.core:location} - $${slapos.recipe.template:location} - $${slapos.recipe.build:location} - $${slapos.recipe.cmmi:location} - $${slapos.toolbox:location} - $${erp5-util:location} - $${caucase:location} -prepend-path = ${curl:location}/bin:${openssl:location}/bin:${git:location}/bin:${libxslt:location}/bin:${python2.7:location}/bin -environment = environment - -[environment] -CPPFLAGS = -I${python2.7:location}/include/python2.7 -I${libxml2:location}/include -I${libxslt:location}/include -LDFLAGS = -L${python2.7:location}/lib -L${libxml2:location}/lib -L${libxslt:location}/lib -L${libxslt:location}/lib -L${zlib:location}/lib -Wl,-rpath=${zlib:location}/lib -Wl,-rpath=${python2.7:location}/lib -Wl,-rpath=${libxml2:location}/lib -Wl,-rpath=${libxslt:location}/lib -Wl,-rpath=${zlib:location}/lib -LD_LIBRARY_PATH = ${python2.7:location}/lib:${libxml2:location}/lib:${libxslt:location}/lib:${libxslt:location}/lib:${zlib:location}/lib -PYTHONPATH = ${python-setuptools:pythonpath}:${buildout:eggs-directory}:${buildout:develop-eggs-directory} -LOCAL_IPV4 = $${slap-configuration:ipv4-random} - -[sh-environment] -# Section exposes testing default environment as sh file. It is thus easy -# to directly develop and test the egg inside of this instance. -recipe = collective.recipe.template -input = inline: - export PATH="$${slapos-test-runner:prepend-path}:$PATH" - export CPPFLAGS="$${environment:CPPFLAGS}" - export LDFLAGS="$${environment:LDFLAGS}" - export PYTHONPATH="$${environment:PYTHONPATH}" - export PS1="[slapos-testing env Active] $PS1" -output = $${create-directory:bin}/environment.sh -mode = 755 +recipe = slapos.cookbook:wrapper +wrapper-path = $${create-directory:bin}/runTestSuite +command-line = + ${buildout:bin-directory}/runTestSuite + --python_interpreter=${buildout:bin-directory}/${eggs:interpreter} + --source_code_path_list=$${caucase:location},$${erp5.util:location},$${slapos.cookbook:location},$${slapos.core:location},$${slapos.recipe.build:location},$${slapos.recipe.cmmi:location},$${slapos.recipe.template:location},$${slapos.toolbox:location} + +# Notes about environment: +# * slapos.cookbook:wrapper does not seem to allow "extending" PATH. Tests +# needs ping, which is a setuid binary that cannot be installed via slapos +# way of building software without root access, so we keep "standard" +# /usr/bin and /bin in $PATH +# * LOCAL_IPV4 is needed for some slapos.core tests +environment = + PATH=${coreutils:location}/bin:${curl:location}/bin:${openssl:location}/bin:${git:location}/bin:${libxslt:location}/bin:/usr/bin/:/bin/ + LOCAL_IPV4=$${slap-configuration:ipv4-random} + [phantomjs-wrapper] recipe = slapos.cookbook:wrapper diff --git a/software/slapos-testing/software.cfg b/software/slapos-testing/software.cfg index a1d503a392d6653401ff49c9402fa089b90858b0..beb80b33e696d538f3f710c9c77426bc8b12075b 100644 --- a/software/slapos-testing/software.cfg +++ b/software/slapos-testing/software.cfg @@ -6,26 +6,78 @@ extends = ../../component/libxml2/buildout.cfg ../../component/libxslt/buildout.cfg ../../component/bcrypt/buildout.cfg - ../../component/python-2.7/buildout.cfg - ../../component/python-setuptools/buildout.cfg ../../component/zlib/buildout.cfg ../../component/phantomjs/buildout.cfg ../../component/pycurl/buildout.cfg + ../../component/coreutils/buildout.cfg ../../stack/slapos.cfg + ./buildout.hash.cfg parts = - caucase-repository - slapos.cookbook-repository - slapos.core-repository - slapos.recipe.template-repository - slapos.recipe.build-repository - slapos.recipe.cmmi-repository - slapos.toolbox-repository - erp5-util-repository + bootstrap-slapos.recipe.cmmi eggs phantomjs template +[bootstrap-slapos.recipe.cmmi] +# install our develop version of slapos.recipe.cmmi before anything else, +# otherwise it will be installed from pypi by dependencies. +recipe = zc.recipe.egg +eggs = ${slapos.recipe.cmmi-setup:egg} + +[setup-develop-egg] +recipe = zc.recipe.egg:develop + +[caucase-setup] +<= setup-develop-egg +egg = caucase +setup = ${caucase-repository:location} + +[erp5.util-setup] +<= setup-develop-egg +# XXX erp5.util does not have `test` extra require, but has a `testnode` extra require with same dependencies +egg = erp5.util[testnode] +setup = ${erp5.util-repository:location} +depends = ${slapos.core-setup:egg} + +[slapos.cookbook-setup] +<= setup-develop-egg +# XXX slapos.cookbook does not have `test` extra require, `mock` is only listed in `tests_require` and is listed explicitly +egg = slapos.cookbook +setup = ${slapos.cookbook-repository:location} +depends = ${slapos.core-setup:egg} + +[slapos.core-setup] +<= setup-develop-egg +# XXX slapos.cookbook does not have `test` extra require, `mock`, `pyflakes` and `httmock` are only listed in `tests_require` and are listed explicitly +egg = slapos.core +setup = ${slapos.core-repository:location} + +[slapos.recipe.build-setup] +<= setup-develop-egg +egg = slapos.recipe.build[test] +setup = ${slapos.recipe.build-repository:location} + +[slapos.recipe.cmmi-setup] +<= setup-develop-egg +egg = slapos.recipe.cmmi[test] +setup = ${slapos.recipe.cmmi-repository:location} +depends = ${slapos.recipe.build-setup:egg} + +[slapos.recipe.template-setup] +<= setup-develop-egg +# XXX slapos.recipe.template does not have `test` extra require, `zope.testing` is only listed in `tests_require` and is listed explicitly +egg = slapos.recipe.template +setup = ${slapos.recipe.template-repository:location} + +[slapos.toolbox-setup] +<= setup-develop-egg +# XXX slapos.toolbox does not have `test` extra require, `mock` and `pycurl` are only listed in `tests_require` and are listed explicitly +egg = slapos.toolbox +setup = ${slapos.toolbox-repository:location} +depends = ${slapos.core-setup:egg} + + [eggs] recipe = zc.recipe.egg eggs = @@ -35,18 +87,24 @@ eggs = ${bcrypt:egg} dnspython Jinja2 - caucase - erp5.util - slapos.cookbook - collective.recipe.template - plone.recipe.command - slapos.recipe.template - slapos.recipe.cmmi - slapos.toolbox + ${caucase-setup:egg} + ${erp5.util-setup:egg} + ${slapos.cookbook-setup:egg} + ${slapos.core-setup:egg} + ${slapos.recipe.build-setup:egg} + ${slapos.recipe.cmmi-setup:egg} + ${slapos.recipe.template-setup:egg} + ${slapos.toolbox-setup:egg} + mock + zope.testing + httmock + pyflakes entry-points = runTestSuite=erp5.util.testsuite:runTestSuite scripts = runTestSuite +interpreter= + python_for_test [git-clone-repository] recipe = slapos.recipe.build:gitclone @@ -58,6 +116,10 @@ branch = master <= git-clone-repository repository = https://lab.nexedi.com/nexedi/caucase.git +[erp5.util-repository] +<= git-clone-repository +repository = https://lab.nexedi.com/nexedi/erp5.git + [slapos.cookbook-repository] <= git-clone-repository repository = https://lab.nexedi.com/nexedi/slapos.git @@ -73,28 +135,38 @@ repository = https://lab.nexedi.com/nexedi/slapos.recipe.template.git [slapos.recipe.build-repository] <= git-clone-repository repository = https://lab.nexedi.com/nexedi/slapos.recipe.build.git +# We use the system git and not slapos provided one, because +# slapos.recipe.build is a dependency of slapos.recipe.cmmi +#git-executable = git [slapos.recipe.cmmi-repository] <= git-clone-repository repository = https://lab.nexedi.com/nexedi/slapos.recipe.cmmi.git +# We use the system git and not slapos provided one, because slapos git needs +# slapos.recipe.cmmi to be installed. This circular dependency cause parts to +# be reinstalled everytime buildout is run because signatures are not stable. +#git-executable = git [slapos.toolbox-repository] <= git-clone-repository repository = https://lab.nexedi.com/nexedi/slapos.toolbox.git -[erp5-util-repository] -<= git-clone-repository -repository = https://lab.nexedi.com/nexedi/erp5.git [template] recipe = slapos.recipe.template -url = ${:_profile_base_location_}/instance.cfg -md5sum = 6626794c9dbb2530bb8ba3d331e27542 -output = ${buildout:directory}/template.cfg +url = ${:_profile_base_location_}/${:filename} +output = ${buildout:directory}/template.cfg mode = 640 [versions] Pygments = 2.1.3 -collective.recipe.template = 1.10 -plone.recipe.command = 1.1 -slapos.recipe.template = 4.3 + +# clear the version of tested eggs, to make sure we installed the developped ones +caucase = +erp5.util = +slapos.cookbook = +slapos.core = +slapos.recipe.build = +slapos.recipe.cmmi = +slapos.recipe.template = +slapos.toolbox =