diff --git a/bob/devtools/bootstrap.py b/bob/devtools/bootstrap.py
index 5e332f59f038d2b6f8d9bbe2478eb539e9ee989e..b6256c5f74a33e09d2869e39bf6faf294f5664da 100644
--- a/bob/devtools/bootstrap.py
+++ b/bob/devtools/bootstrap.py
@@ -348,17 +348,13 @@ if __name__ == '__main__':
 
   if sys.argv[1] == 'test':
     # sets up local variables for testing
-    set_environment('CI_PROJECT_DIR', os.path.realpath(os.curdir), verbose=True)
     set_environment('CI_PROJECT_NAME', 'bob.devtools', verbose=True)
-    set_environment('CONDA_ROOT', os.path.join(os.environ['CI_PROJECT_DIR'],
+    set_environment('CONDA_ROOT', os.path.join(os.path.realpath(os.curdir),
         'miniconda'), verbose=True)
 
   prefix = os.environ['CONDA_ROOT']
   logger.info('os.environ["%s"] = %s', 'CONDA_ROOT', prefix)
 
-  workdir = os.environ['CI_PROJECT_DIR']
-  logger.info('os.environ["%s"] = %s', 'CI_PROJECT_DIR', workdir)
-
   install_miniconda(prefix)
   conda_bin = os.path.join(prefix, 'bin', 'conda')
 
diff --git a/bob/devtools/build.py b/bob/devtools/build.py
index 9bc4b2505e88879b96ffa3b1bd03ca832ccaa11e..191a02277bf25c346fc3ac9c56577370ac47efda 100644
--- a/bob/devtools/build.py
+++ b/bob/devtools/build.py
@@ -436,6 +436,9 @@ if __name__ == '__main__':
       '\n  - '.join(channels + ['defaults']))
   condarc_options['channels'] = channels + ['defaults']
 
+  # dump packages at conda_root
+  condarc_options['croot'] = os.path.join(prefix, 'conda-bld')
+
   logger.info('Merging conda configuration files...')
   conda_config = make_conda_config(conda_build_config, pyver, recipe_append,
       condarc_options)
diff --git a/bob/devtools/scripts/build.py b/bob/devtools/scripts/build.py
index 79de7662e1ed192bbc65fd84d675391086d268d2..acf510236a83aa1a90f4a13f825b47c7aa06776a 100644
--- a/bob/devtools/scripts/build.py
+++ b/bob/devtools/scripts/build.py
@@ -15,7 +15,7 @@ from . import bdt
 from ..log import verbosity_option
 from ..build import next_build_number, conda_arch, should_skip_build, \
     get_rendered_metadata, get_parsed_recipe, make_conda_config, \
-    get_docserver_setup
+    get_docserver_setup, get_env_directory
 from ..constants import CONDA_BUILD_CONFIG, CONDA_RECIPE_APPEND, \
     SERVER, MATPLOTLIB_RCDIR, BASE_CONDARC
 from ..bootstrap import set_environment, get_channels
@@ -43,8 +43,7 @@ Examples:
 @click.argument('recipe-dir', required=False, type=click.Path(file_okay=False,
   dir_okay=True, exists=True), nargs=-1)
 @click.option('-p', '--python', default=('%d.%d' % sys.version_info[:2]),
-    show_default=True, help='Version of python to build the ' \
-        'environment for [default: %(default)s]')
+    show_default=True, help='Version of python to build the environment for')
 @click.option('-r', '--condarc',
     help='Use custom conda configuration file instead of our own',)
 @click.option('-m', '--config', '--variant-config-files', show_default=True,
@@ -106,6 +105,10 @@ def build(recipe_dir, python, condarc, config, no_test, append_file,
         '\n  - '.join(channels + ['defaults']))
     condarc_options['channels'] = channels + ['defaults']
 
+  # dump packages at base environment
+  prefix = get_env_directory(os.environ['CONDA_EXE'], 'base')
+  condarc_options['croot'] = os.path.join(prefix, 'conda-bld')
+
   conda_config = make_conda_config(config, python, append_file, condarc_options)
 
   set_environment('MATPLOTLIBRC', MATPLOTLIB_RCDIR, verbose=True)
diff --git a/bob/devtools/scripts/ci.py b/bob/devtools/scripts/ci.py
index aa98dbefddc33ff5fa8e1fe18f12dfb89f70d8cb..4bb7a5abbeb194b9b3ac1136131cd47f3289c701 100644
--- a/bob/devtools/scripts/ci.py
+++ b/bob/devtools/scripts/ci.py
@@ -243,9 +243,6 @@ def build(dry_run):
   workdir = os.environ['CI_PROJECT_DIR']
   logger.info('os.environ["%s"] = %s', 'CI_PROJECT_DIR', workdir)
 
-  name = os.environ['CI_PROJECT_NAME']
-  logger.info('os.environ["%s"] = %s', 'CI_PROJECT_NAME', name)
-
   pyver = os.environ['PYTHON_VERSION']
   logger.info('os.environ["%s"] = %s', 'PYTHON_VERSION', pyver)
 
@@ -277,21 +274,43 @@ def build(dry_run):
       '\n  - '.join(channels + ['defaults']))
   condarc_options['channels'] = channels + ['defaults']
 
+  # dump packages at conda_root
+  condarc_options['croot'] = os.path.join(prefix, 'conda-bld')
+
   # create the build configuration
   logger.info('Merging conda configuration files...')
   conda_config = make_conda_config(CONDA_BUILD_CONFIG, pyver,
       CONDA_RECIPE_APPEND, condarc_options)
 
+  recipe_dir = os.path.join(workdir, 'conda')
+  if not os.path.exists(recipe_dir):
+    raise RuntimeError("The directory %s does not exist" % recipe_dir)
+
+  # pre-renders the recipe - figures out package name and version
+  metadata = get_rendered_metadata(recipe_dir, conda_config)
+
+  arch = conda_arch()
+  if should_skip_build(metadata):
+    logger.warn('Skipping UNSUPPORTED build of "%s" for py%s on %s',
+        d, python.replace('.',''), arch)
+    return 0
+
+  # converts the metadata output into parsed yaml and continues the process
+  rendered_recipe = get_parsed_recipe(metadata)
+
   # retrieve the current build number for this build
-  build_number, _ = next_build_number(channels[0], name, version, pyver)
+  build_number, _ = next_build_number(channels[0],
+      rendered_recipe['package']['name'],
+      rendered_recipe['package']['version'], python)
   set_environment('BOB_BUILD_NUMBER', str(build_number), verbose=True)
 
   # runs the build using the conda-build API
-  arch = conda_arch()
   logger.info('Building %s-%s-py%s (build: %d) for %s',
-      name, version, pyver.replace('.',''), build_number, arch)
+      rendered_recipe['package']['name'],
+      rendered_recipe['package']['version'], python.replace('.',''),
+      build_number, arch)
 
   if not dry_run:
-    conda_build.api.build(os.path.join(workdir, 'conda'), config=conda_config)
+    conda_build.api.build(recipe_dir, config=conda_config)
 
   git_clean_build(run_cmdline, arch)