diff --git a/conda/build-condarc b/conda/build-condarc
new file mode 100644
index 0000000000000000000000000000000000000000..7a7b8c91c0e5bca7d2154790f362ecae8a4132c0
--- /dev/null
+++ b/conda/build-condarc
@@ -0,0 +1,14 @@
+default_channels:
+  - https://repo.continuum.io/pkgs/main
+  - https://repo.continuum.io/pkgs/free
+  - https://repo.continuum.io/pkgs/r
+  - https://repo.continuum.io/pkgs/pro
+add_pip_as_python_dependency: false
+show_channel_urls: true
+anaconda_upload: false
+ssl_verify: false
+quiet: true
+channels:
+  - http://beatubulatest.lab.idiap.ch/private/conda
+  - https://www.idiap.ch/software/bob/conda/label/main
+  - defaults
diff --git a/conda/build_all.sh b/conda/build_all.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cf42755ed0ed902694e49a8cec30a1b413347dd1
--- /dev/null
+++ b/conda/build_all.sh
@@ -0,0 +1,95 @@
+#!/usr/bin/env bash
+
+set -ex
+
+# bob.buildout \
+# bob.extension \
+# bob.blitz \
+# bob.core \
+# bob.io.base \
+# bob.math \
+for pkg in \
+bob.measure \
+bob.io.image \
+bob.db.base \
+bob.io.video \
+bob.io.matlab \
+bob.io.audio \
+bob.sp \
+bob.ap \
+bob.ip.base \
+bob.ip.color \
+bob.ip.draw \
+bob.ip.gabor \
+bob.learn.activation \
+bob.learn.libsvm \
+bob.learn.linear \
+bob.learn.mlp \
+bob.learn.boosting \
+bob.db.iris \
+bob.learn.em \
+bob.db.wine \
+bob.db.mnist \
+bob.db.atnt \
+bob.ip.facedetect \
+bob.ip.optflow.hornschunck \
+bob.ip.optflow.liu \
+bob.ip.flandmark \
+bob \
+gridtk \
+bob.ip.qualitymeasure \
+bob.ip.skincolorfilter \
+bob.ip.facelandmarks \
+bob.ip.dlib \
+bob.db.arface \
+bob.db.asvspoof \
+bob.db.asvspoof2017 \
+bob.db.atvskeystroke \
+bob.db.avspoof \
+bob.db.banca \
+bob.db.biosecure \
+bob.db.biosecurid.face \
+bob.db.casme2 \
+bob.db.caspeal \
+bob.db.cohface \
+bob.db.frgc \
+bob.db.gbu \
+bob.db.hci_tagging \
+bob.db.ijba \
+bob.db.kboc16 \
+bob.db.lfw \
+bob.db.livdet2013 \
+bob.db.mobio \
+bob.db.msu_mfsd_mod \
+bob.db.multipie \
+bob.db.nist_sre12 \
+bob.db.putvein \
+bob.db.replay \
+bob.db.replaymobile \
+bob.db.scface \
+bob.db.utfvp \
+bob.db.verafinger \
+bob.db.fv3d \
+bob.db.hkpu \
+bob.db.thufvdt \
+bob.db.mmcbnu6k \
+bob.db.hmtvein \
+bob.db.voicepa \
+bob.db.xm2vts \
+bob.db.youtube \
+bob.db.pericrosseye \
+bob.db.cuhk_cufs \
+bob.bio.base \
+bob.bio.gmm \
+bob.bio.face \
+bob.bio.spear \
+bob.bio.video \
+bob.bio.vein \
+bob.db.voxforge \
+bob.pad.base \
+bob.pad.face \
+bob.db.oulunpu \
+bob.db.uvad \
+; do
+    ./conda-build.sh 2.7 $pkg/conda
+done
diff --git a/conda/conda-build.sh b/conda/conda-build.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2e528695f94da90d8e5c389cb6ed1f00f6aa796b
--- /dev/null
+++ b/conda/conda-build.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+if [ $# = 0 ]; then
+  echo "Script wrapping conda-build to build Bob packages with defaults"
+  echo "usage: $0 <recipe-dir> [<python-version>]"
+  echo "example: $0 conda 3.6"
+  echo "example: $0 dependencies/libblitz"
+  exit 1
+fi
+
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+export CONDARC=${DIR}/build-condarc
+echo "Using CONDARC from \`${CONDARC}'..."
+
+BUILD_OPTIONS="--no-anaconda-upload --skip-existing --variant-config-files ${DIR}/../gitlab/conda_build_config.yaml"
+
+if [ $# = 2 ]; then
+  BUILD_OPTIONS="${BUILD_OPTIONS} --python=${2}";
+fi
+
+# Exclusively for Bob packages, we also set the package version
+if [ -e ${1}/../version.txt ]; then
+  export BOB_PACKAGE_VERSION=$(cat ${1}/../version.txt)
+  echo "Setting package version to \`${BOB_PACKAGE_VERSION}'..."
+fi
+
+conda build ${BUILD_OPTIONS} ${1}
diff --git a/conda/condarc_idiap.txt b/conda/condarc_idiap.txt
deleted file mode 100644
index 460b35f22aa2adfa984f2aec8dfc52ad652905e6..0000000000000000000000000000000000000000
--- a/conda/condarc_idiap.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-allow_other_channels : true
-show_channel_urls: True
-
-channels:
-  - file://idiap/group/torch5spro/conda_idiap
-  - defaults
-  - conda-forge
diff --git a/conda/migrate.py b/conda/migrate.py
new file mode 100755
index 0000000000000000000000000000000000000000..3bbe7ceafe2ddacd94328d8f2620c8f73c577a8c
--- /dev/null
+++ b/conda/migrate.py
@@ -0,0 +1,339 @@
+#!/usr/bin/env python
+'''Migrates a Bob package recipe from bob.conda into its own repository
+
+Usage: {prog} <template_recipe> <old_recipe> <conda_build_variant> <package_folder>
+'''
+
+from __future__ import absolute_import, division, print_function
+import re
+from conda_build.api import render, Config
+from conda_build.variants import parse_config_file
+from conda_build.conda_interface import PY3
+import os
+
+RUN_EXPORTS = [
+    '    - bzip2\n',
+    '    - dbus\n',
+    '    - expat\n',
+    '    - ffmpeg\n',
+    '    - fontconfig\n',
+    '    - freetype\n',
+    '    - giflib\n',
+    '    - glib\n',
+    '    - gmp\n',
+    '    - gst-plugins-base\n',
+    '    - gstreamer\n',
+    '    - hdf5\n',
+    '    - icu\n',
+    '    - jpeg\n',
+    '    - kaldi\n',
+    '    - libblitz\n',
+    '    - libboost\n',
+    '    - libffi\n',
+    '    - libmatio\n',
+    '    - libogg\n',
+    '    - libopus\n',
+    '    - libpng\n',
+    '    - libsvm\n',
+    '    - libtiff\n',
+    '    - libvpx\n',
+    '    - libxcb\n',
+    '    - libxml2\n',
+    '    - menpo\n',
+    '    - mkl-devel\n',
+    '    - mkl\n',
+    '    - ncurses\n',
+    '    - openfst\n',
+    '    - openssl\n',
+    '    - readline\n',
+    '    - sox\n',
+    '    - speex\n',
+    '    - speexdsp\n',
+    '    - sqlite\n',
+    '    - tk\n',
+    '    - vlfeat\n',
+    '    - xz\n',
+    '    - yaml\n',
+    '    - zlib\n',
+]
+
+RUN_EXPORTS += [
+    '    - bob.buildout\n',
+    '    - bob.extension\n',
+    '    - bob.blitz\n',
+    '    - bob.core\n',
+    '    - bob.io.base\n',
+    '    - bob.sp\n',
+    '    - bob.ap\n',
+    '    - bob.math\n',
+    '    - bob.measure\n',
+    '    - bob.db.base\n',
+    '    - bob.io.audio\n',
+    '    - bob.io.image\n',
+    '    - bob.io.video\n',
+    '    - bob.io.matlab\n',
+    '    - bob.ip.base\n',
+    '    - bob.ip.color\n',
+    '    - bob.ip.draw\n',
+    '    - bob.ip.gabor\n',
+    '    - bob.learn.activation\n',
+    '    - bob.learn.libsvm\n',
+    '    - bob.learn.linear\n',
+    '    - bob.learn.mlp\n',
+    '    - bob.learn.em\n',
+    '    - bob.learn.boosting\n',
+    '    - bob.db.iris\n',
+    '    - bob.db.wine\n',
+    '    - bob.db.mnist\n',
+    '    - bob.db.atnt\n',
+    '    - bob.ip.facedetect\n',
+    '    - bob.ip.optflow.hornschunck\n',
+    '    - bob.ip.optflow.liu\n',
+    '    - bob.ip.flandmark\n',
+    '    - bob.bio.base\n',
+    '    - bob.bio.caffe_face\n',
+    '    - bob.bio.face\n',
+    '    - bob.bio.gmm\n',
+    '    - bob.bio.spear\n',
+    '    - bob.bio.video\n',
+    '    - bob.db.arface\n',
+    '    - bob.db.asvspoof\n',
+    '    - bob.db.asvspoof2017\n',
+    '    - bob.db.atvskeystroke\n',
+    '    - bob.db.avspoof\n',
+    '    - bob.db.banca\n',
+    '    - bob.db.biosecure\n',
+    '    - bob.db.biosecurid.face\n',
+    '    - bob.db.casme2\n',
+    '    - bob.db.caspeal\n',
+    '    - bob.db.cohface\n',
+    '    - bob.db.cuhk_cufs\n',
+    '    - bob.db.frgc\n',
+    '    - bob.db.fv3d\n',
+    '    - bob.db.gbu\n',
+    '    - bob.db.hci_tagging\n',
+    '    - bob.db.ijba\n',
+    '    - bob.db.kboc16\n',
+    '    - bob.db.lfw\n',
+    '    - bob.db.livdet2013\n',
+    '    - bob.db.mobio\n',
+    '    - bob.db.msu_mfsd_mod\n',
+    '    - bob.db.multipie\n',
+    '    - bob.db.nist_sre12\n',
+    '    - bob.db.pericrosseye\n',
+    '    - bob.db.putvein\n',
+    '    - bob.db.replay\n',
+    '    - bob.db.replaymobile\n',
+    '    - bob.db.scface\n',
+    '    - bob.db.utfvp\n',
+    '    - bob.db.verafinger\n',
+    '    - bob.db.voicepa\n',
+    '    - bob.db.voxforge\n',
+    '    - bob.db.xm2vts\n',
+    '    - bob.db.youtube\n',
+    '    - bob.ip.caffe_extractor\n',
+    '    - bob.ip.facelandmarks\n',
+    '    - bob.ip.skincolorfilter\n',
+    '    - bob.kaldi\n',
+    '    - bob.pad.base\n',
+    '    - bob.pad.face\n',
+    '    - bob.pad.voice\n',
+    '    - bob.rppg.base\n',
+    '    - gridtk\n',
+]
+
+BUILD_ONLY_DEPS = [
+    '    - pkg-config {{ pkg_config }}\n',
+    '    - cmake {{ cmake }}\n',
+]
+
+
+def extract_requirements_text(path):
+  text = ""
+  if path:
+    with open(path) as f:
+      recipe_text = f.read()
+    if PY3 and hasattr(recipe_text, 'decode'):
+      recipe_text = recipe_text.decode()
+    match = re.search(
+        r'(^requirements:.*?)(^test:|^extra:|^about:|^outputs:|\Z)',
+        recipe_text, flags=re.MULTILINE | re.DOTALL)
+    text = match.group(1) if match else ""
+  return text
+
+
+def extract_test_text(path):
+  text = ""
+  if path:
+    with open(path) as f:
+      recipe_text = f.read()
+    if PY3 and hasattr(recipe_text, 'decode'):
+      recipe_text = recipe_text.decode()
+    match = re.search(
+        r'(^test:.*?)(^extra:|^about:|^outputs:|\Z)',
+        recipe_text, flags=re.MULTILINE | re.DOTALL)
+    text = match.group(1) if match else ""
+  i1 = text.find('requires:\n') + 10
+  i2 = text.find('imports:', i1)
+  i3 = text.find('commands:', i1)
+  i2 = i2 if i2 > -1 else len(text)
+  i3 = i3 if i3 > -1 else len(text)
+  i2 = min(i2, i3)
+  return text[i1:i2]
+
+
+def add_variant(doc, star=True):
+  lines = doc.split('\n')
+  for i, line in enumerate(lines):
+    if line.find('{{') == -1:
+      if line.find(' - ') == -1:
+        continue
+      variant = line.split('-', 1)[1].strip()
+      if variant.startswith('bob.') or variant == 'bob':
+        continue
+      variant = variant.replace('-', '_').replace('.', '_')
+      variant = ' {{ ' + variant.split('#')[0].strip() + ' }}'
+      line = line.split('#')
+      line = [line[0] + variant] + line[1:]
+      lines[i] = '#'.join(line)
+  doc = '\n'.join(lines)
+  if star:
+    doc = doc.replace('}}.*', '}}').replace('}}', '}}.*')
+    doc = doc.replace("compiler('c') }}.*", "compiler('c') }}")
+    doc = doc.replace("compiler('cxx') }}.*", "compiler('cxx') }}")
+  return doc
+
+
+def extract_section(text, first, last):
+  i1 = text.find(first)
+  i2 = text.find(last, i1)
+  if i1 == -1 or i2 == -1:
+    return -1, -1, ''
+  return i1, i2, text[i1 + len(first):i2]
+
+
+def migrate(template_recipe_path, old_recipe_path, build_variant_path,
+            output_folder):
+  config = Config()
+  variants = parse_config_file(build_variant_path, config)
+  recipe = render(old_recipe_path, variants=variants)[0][0]
+  with open(template_recipe_path) as f:
+    final_recipe = f.read()
+  final_recipe = final_recipe.replace('<PACKAGE>', recipe.name())
+  entry_points, entry_points_test = '', ''
+  if 'entry_points' in recipe.meta['build']:
+    entry_points = '  entry_points:\n    - ' + \
+        '\n    - '.join(recipe.meta['build']['entry_points']) + '\n'
+    entry_points_test = '    - ' + '\n    - '.join(
+        l.split('=')[0].strip() + ' --help' for l in
+        recipe.meta['build']['entry_points']) + '\n'
+  final_recipe = final_recipe.replace('  <ENTRY_POINTS>\n', entry_points)
+  final_recipe = final_recipe.replace(
+      '    <ENTRY_POINTS_TEST>\n', entry_points_test)
+  requirements_text = extract_requirements_text(old_recipe_path)
+  i1, i2, build_text = extract_section(
+      requirements_text, 'build:\n', 'host:\n')
+  i1, i2, host_text = extract_section(requirements_text, 'host:\n', 'run:\n')
+  already_host = [
+      '- python\n',
+      '- setuptools\n',
+      '- python {{ python }}\n',
+      '- setuptools {{ setuptools }}\n',
+      '- toolchain {{ toolchain }}\n',
+      "- {{ compiler('c') }}\n",
+      "- {{ compiler('cxx') }}\n",
+  ]
+  for line in already_host:
+    host_text = host_text.replace(line, '')
+  host_text = host_text.strip()
+  if host_text:
+    host_text = '    ' + host_text + '\n'
+    host_text = add_variant(host_text, star=False)
+  # normalize build_text
+  build_text = build_text.rstrip()
+  if build_text:
+    build_text = '  build:\n' + build_text + '\n'
+  # remove BUILD_ONLY_DEPS from host and put it in build_text
+  for p in BUILD_ONLY_DEPS:
+    if p in host_text:
+      host_text = host_text.replace(p, '')
+      build_text += p
+  final_recipe = final_recipe.replace('    <HOST_DEPS>\n', host_text)
+  final_recipe = final_recipe.replace('  <BUILD_DEPS>\n', build_text)
+
+  run_text = requirements_text[i2 + 5:]
+  for line in already_host[:2] + RUN_EXPORTS:
+    run_text = run_text.replace(line, '')
+  run_text = run_text.strip()
+  run_text = '    ' + run_text + '\n' if run_text else run_text
+  final_recipe = final_recipe.replace('    <RUN_DEPS>\n', run_text)
+
+  already_test = ['nose', 'coverage', 'sphinx', 'sphinx_rtd_theme']
+  already_test += [l + ' {{ ' + l + ' }}' for l in already_test]
+  already_test = ['    - ' + l + '\n' for l in already_test]
+  test_requires = extract_test_text(old_recipe_path)
+  for line in already_test:
+    test_requires = test_requires.replace(line, '')
+  test_requires = test_requires.strip()
+  if test_requires:
+    test_requires = '    ' + test_requires + '\n'
+    if recipe.name() == 'bob.buildout':
+      test_requires = add_variant(test_requires)
+  if recipe.name() == 'bob.buildout':
+    final_recipe = final_recipe.replace(
+        '    - bob-devel {{ bob_devel }}.*\n', '')
+  final_recipe = final_recipe.replace(
+      '    <TEST_DEPS>\n', test_requires)
+  final_recipe = final_recipe.replace(
+      '<LICENSE>', recipe.meta['about']['license'])
+  final_recipe = final_recipe.replace(
+      '<SHORT_DESCRIPTION>', recipe.meta['about']['summary'])
+  license_family = recipe.meta['about']['license']
+  license_family = 'BSD' if 'BSD' in license_family else 'GPL'
+  final_recipe = final_recipe.replace('<LICENSE_FAMILY>', license_family)
+
+  output_folder = os.path.join(output_folder, 'conda')
+  os.makedirs(output_folder, exist_ok=True)
+  out_path = os.path.join(output_folder, 'meta.yaml')
+
+  # custom modifications:
+  if recipe.name() == 'bob.extension':
+    final_recipe = final_recipe.replace(
+        '-sv {{ name }}', '-sv {{ name }} --exclude=test_extensions')
+
+  if recipe.name() in ('bob.ip.gabor', 'bob.learn.em'):
+    final_recipe = final_recipe.replace(
+        '{{ sphinx_rtd_theme }}\n', '{{ sphinx_rtd_theme }}\n' +
+        '    - matplotlib {{ matplotlib }}\n')
+
+  with open(out_path, 'w') as f:
+    f.write(final_recipe)
+
+  # fix the doc/conf.py
+  latex_conf = '''import sphinx
+if sphinx.__version__ >= "1.4.1":
+    extensions.append('sphinx.ext.imgmath')
+    imgmath_image_format = 'svg'
+else:
+    extensions.append('sphinx.ext.pngmath')
+
+'''
+  place_to_insert = '''    'sphinx.ext.viewcode',
+'''
+  replace = place_to_insert + place_to_insert.replace('viewcode', 'mathjax')
+  conf = os.path.join(output_folder, '..', 'doc', 'conf.py')
+  with open(conf) as f:
+    lines = f.read()
+  lines = lines.replace(latex_conf, '')
+  lines = lines.replace(place_to_insert, replace)
+  with open(conf, 'w') as f:
+    f.write(lines)
+
+
+def main(argv=None):
+  import sys
+  migrate(*sys.argv[1:])
+
+
+if __name__ == '__main__':
+  main()
diff --git a/conda/migrate.sh b/conda/migrate.sh
new file mode 100755
index 0000000000000000000000000000000000000000..bdf4b2643b5bf1bf15d4b803c4bdf4c07f132634
--- /dev/null
+++ b/conda/migrate.sh
@@ -0,0 +1,90 @@
+#!/usr/bin/bash
+
+set -ex
+
+# bob.buildout \
+# bob.extension \
+# bob.blitz \
+# bob.core \
+# bob.io.base \
+# bob.sp \
+# bob.ap \
+# bob.bio.base \
+# bob.bio.caffe_face \
+# bob.bio.face \
+# bob.bio.gmm \
+# bob.bio.spear \
+# bob.bio.video \
+# bob.db.arface \
+# bob.db.asvspoof \
+# bob.db.asvspoof2017 \
+# bob.db.atvskeystroke \
+# bob.db.avspoof \
+# bob.db.banca \
+# bob.db.biosecure \
+# bob.db.biosecurid.face \
+# bob.db.casme2 \
+# bob.db.caspeal \
+# bob.db.cohface \
+# bob.db.cuhk_cufs \
+# bob.db.frgc \
+# bob.db.fv3d \
+# bob.db.gbu \
+# bob.db.hci_tagging \
+# bob.db.ijba \
+# bob.db.kboc16 \
+# bob.db.lfw \
+# bob.db.livdet2013 \
+# bob.db.mobio \
+# bob.db.msu_mfsd_mod \
+# bob.db.multipie \
+# bob.db.nist_sre12 \
+# bob.db.pericrosseye \
+# bob.db.putvein \
+# bob.db.replay \
+# bob.db.replaymobile \
+# bob.db.scface \
+# bob.db.utfvp \
+# bob.db.verafinger \
+# bob.db.voicepa \
+# bob.db.voxforge \
+# bob.db.xm2vts \
+# bob.db.youtube \
+# bob.ip.caffe_extractor \
+# bob.ip.facelandmarks \
+# bob.ip.skincolorfilter \
+# bob.kaldi \
+# bob.pad.base \
+# bob.pad.face \
+# bob.rppg.base \
+# gridtk \
+for pkg in \
+bob.pad.voice \
+; do
+    git clone git@gitlab.idiap.ch:bob/$pkg || true
+    cd $pkg
+    git co -b condapackage || git co -- . && git clean -ffdx && git co master && git pull --ff-only && git branch -D condapackage && git co -b condapackage
+
+    ../migrate.py ../../templates/meta.yaml ../../../bob.conda/new/$pkg/meta.yaml \
+        ../../gitlab/conda_build_config.yaml .
+    cp ../../templates/gitlab-ci.yml .gitlab-ci.yml
+    echo "record.txt" >> .gitignore
+
+    # subl conda/meta.yaml
+    export BOB_PACKAGE_VERSION=`cat version.txt | tr -d '\n'`
+    # conda build -m ../../gitlab/conda_build_config.yaml conda
+
+    git add -A
+    git commit -m "Migrate to conda based CI"
+
+    # while true; do
+    #     read -p "Do you wish to continue?" yn
+    #     case $yn in
+    #         [Yy]* ) break;;
+    #         [Nn]* ) exit;;
+    #         * ) echo "Please answer yes or no.";;
+    #     esac
+    # done
+    git push -u --force origin condapackage
+    cd ..
+done
diff --git a/gitlab/README.md b/gitlab/README.md
index 59ea50aaabf1f09bcc282716b5fa65ae332af00e..612791a1e77d516e27368c314052d57611100238 100644
--- a/gitlab/README.md
+++ b/gitlab/README.md
@@ -7,7 +7,7 @@ This directory contains scripts that are used by our continuous integration
 * `<stage>.sh`
 * `after_<stage>.sh`
 
-Each of these sets correpond to one of the build stages inside the CI builds.
+Each of these sets correspond to one of the build stages inside the CI builds.
 
 The script `install.sh` contains a basic set of routines to install and update
 the scripts on the target host. If you add more scripts, it is sensible to
diff --git a/gitlab/after_build.sh b/gitlab/after_build.sh
deleted file mode 100755
index ad30ed8ac054c4f85a1d60ad341c033298380534..0000000000000000000000000000000000000000
--- a/gitlab/after_build.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Tue 13 Jun 2017 17:32:07 CEST
-
-source $(dirname ${0})/functions.sh
-
-run_cmd rm -rf ${PREFIX}
diff --git a/gitlab/after_deploy.sh b/gitlab/after_deploy.sh
deleted file mode 100755
index 445b812c564edded72c2d153a262ed03853fe111..0000000000000000000000000000000000000000
--- a/gitlab/after_deploy.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Tue 13 Jun 2017 17:32:29 CEST
-
-source $(dirname ${0})/functions.sh
-
-run_cmd rm -rf ${PREFIX}
diff --git a/gitlab/after_docs.sh b/gitlab/after_docs.sh
deleted file mode 100755
index 73a037624bb88e0aed6b9d09f5c6aa0291b38784..0000000000000000000000000000000000000000
--- a/gitlab/after_docs.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 18:23:57 CEST
diff --git a/gitlab/after_test.sh b/gitlab/after_test.sh
deleted file mode 100755
index 61999878fd4ced404d8912a06dc05f867bbbc814..0000000000000000000000000000000000000000
--- a/gitlab/after_test.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env bash
-# Tue 13 Jun 2017 17:32:16 CEST
-
-source $(dirname ${0})/functions.sh
-
-run_cmd rm -rf ${PREFIX}
diff --git a/gitlab/after_wheels.sh b/gitlab/after_wheels.sh
deleted file mode 100755
index 73a037624bb88e0aed6b9d09f5c6aa0291b38784..0000000000000000000000000000000000000000
--- a/gitlab/after_wheels.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 18:23:57 CEST
diff --git a/gitlab/before_build.sh b/gitlab/before_build.sh
index 54520c3fb433df5795af0773e33e10af6d34903f..a9e674ab2b00ab720d3523fdb9438915020ea564 100755
--- a/gitlab/before_build.sh
+++ b/gitlab/before_build.sh
@@ -1,55 +1,48 @@
 #!/usr/bin/env bash
-# Mon  8 Aug 17:40:24 2016 CEST
+# Tue 16 Jan 11:15:32 2018 CET
 
 source $(dirname ${0})/functions.sh
 
-if [ -z "${WHEELS_REPOSITORY}" ]; then
-  WHEELS_REPOSITORY="${DOCSERVER}/private/wheels/gitlab/"
-  WHEELS_SERVER=`echo ${DOCSERVER} | sed 's;http.*://;;'`
-  check_env WHEELS_SERVER
+# checks if a conda installation exists. Otherwise, install one
+if [ ! -e ${CONDA_ROOT}/bin/conda ]; then
+  install_miniconda ${CONDA_ROOT}
 fi
-check_env WHEELS_REPOSITORY
 
-prepare_build_env ${CONDA_FOLDER} ${PREFIX} ${CONDA_ENV}
+mkdir -p ${CONDA_ROOT}/pkgs
+touch ${CONDA_ROOT}/pkgs/urls
+touch ${CONDA_ROOT}/pkgs/urls.txt
+
+cat <<EOF > ${CONDARC}
+default_channels: #!final
+  - https://repo.continuum.io/pkgs/main
+  - https://repo.continuum.io/pkgs/free
+  - https://repo.continuum.io/pkgs/r
+  - https://repo.continuum.io/pkgs/pro
+add_pip_as_python_dependency: false #!final
+changeps1: false #!final
+always_yes: true #!final
+quiet: true #!final
+show_channel_urls: true #!final
+anaconda_upload: false #!final
+ssl_verify: false #!final
+channels: #!final
+EOF
 
-# Verify where pip is installed
-use_pip=`which pip`
-if [ -z "${use_pip}" ]; then
-  log_error "Cannot find pip, aborting..."
-  exit 1
-else
-  log_info "Using pip: ${use_pip}"
-fi
-
-use_python=`which python`
-if [ -z "${use_python}" ]; then
-  log_error "Cannot find python, aborting..."
-  exit 1
-else
-  log_info "Using python: ${use_python}"
+if [ -z "${CI_COMMIT_TAG}" ]; then
+  echo "  - ${CONDA_BETA_CHANNEL}" >> ${CONDARC}
 fi
+echo "  - ${CONDA_CHANNEL}" >> ${CONDARC}
+echo "  - defaults" >> ${CONDARC}
 
-# Install this package's build dependencies
-PIPOPTS="--find-links ${WHEELS_REPOSITORY}"
-if [ ! -z "${WHEELS_SERVER}" ]; then
-  PIPOPTS="${PIPOPTS} --trusted-host ${WHEELS_SERVER}"
-fi
+# displays contents of our configuration
+echo "Contents of \`${CONDARC}':"
+cat ${CONDARC}
 
-# When building a tag, do not use beta wheels
-PIPOPTS="${PIPOPTS} --use-wheel --no-index"
-if [ -z "${CI_COMMIT_TAG}" ]; then
-  PIPOPTS="${PIPOPTS} --pre"
-fi
+# updates conda installation
+run_cmd ${CONDA_ROOT}/bin/conda install python conda=4.4 curl conda-build=3
 
-if [ -e requirements.txt ]; then
-  run_cmd ${use_pip} install ${PIPOPTS} --requirement requirements.txt
-else
-  log_info "No requirements.txt file found, skipping 'pip install <build-deps>'..."
-fi
+# cleans up
+run_cmd ${CONDA_ROOT}/bin/conda clean --lock
 
-# Install this package's test dependencies
-if [ -e test-requirements.txt ]; then
-  run_cmd ${use_pip} install ${PIPOPTS} --requirement test-requirements.txt
-else
-  log_info "No test-requirements.txt file found, skipping 'pip install <test-deps>'..."
-fi
+# print conda information for debugging purposes
+run_cmd ${CONDA_ROOT}/bin/conda info
diff --git a/gitlab/before_deploy.sh b/gitlab/before_deploy.sh
deleted file mode 100755
index 9c68a4f2b0157fbd6e01c34ac61b45c3b75794fc..0000000000000000000000000000000000000000
--- a/gitlab/before_deploy.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-run_cmd $(dirname ${0})/before_test.sh
-
-prepare_build_env ${CONDA_FOLDER} ${PREFIX} ${CONDA_ENV}
-
-# setup database locally and run `bob_dbmanage.py all download`
-# if this is a database package - need auxiliary file for package
-if [[ ${CI_PROJECT_NAME} == bob.db.* ]]; then
-  use_buildout=`which buildout`
-  if [ -z "${use_buildout}" ]; then
-    log_error "Cannot find buildout, aborting..."
-    exit 1
-  else
-    log_info "Using buildout: ${use_buildout}"
-  fi
-  run_cmd ${use_buildout}
-  if [ -x ./bin/bob_dbmanage.py ]; then
-    run_cmd ./bin/bob_dbmanage.py all download --force;
-  fi
-fi
diff --git a/gitlab/before_docs.sh b/gitlab/before_docs.sh
deleted file mode 100755
index 71679c5abad81486fdafb2d008f047444bfb42d4..0000000000000000000000000000000000000000
--- a/gitlab/before_docs.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 18:23:57 CEST
-
-source $(dirname ${0})/functions.sh
-
-# if the docs will be uploaded to at least one place,
-# make sure that the project folder will be available
-if [[ ${#DOC_UPLOADS[@]} -gt 0 ]]; then
-  dav_recursive_mkdir "${DOC_SERVER_PREFIX}"
-fi
-
-# Deletes all existing dav folders that will be overwritten
-for k in "${DOC_UPLOADS[@]}"; do
-  dav_delete "${k}"
-done
diff --git a/gitlab/before_test.sh b/gitlab/before_test.sh
deleted file mode 100755
index b588c13da438799818672c514bc4cf903abf1249..0000000000000000000000000000000000000000
--- a/gitlab/before_test.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-run_cmd $(dirname ${0})/before_build.sh
-
-prepare_build_env ${CONDA_FOLDER} ${PREFIX} ${CONDA_ENV}
-
-# Verify where pip is installed
-use_pip=`which pip`
-if [ -z "${use_pip}" ]; then
-  log_error "Cannot find pip, aborting..."
-  exit 1
-else
-  log_info "Using pip: ${use_pip}"
-fi
-
-# zc.recipe.egg needs some special installation instructions
-if [ "${CI_PROJECT_NAME}" == "bob.buildout" ]; then
-  run_cmd ${use_pip} install --no-binary ":all:" zc.recipe.egg
-fi
-
-run_cmd ${use_pip} install --use-wheel --no-index --pre dist/*.whl
-
-# Downloads databases that may be missing (not shipped with python pkg)
-if [ -x ${PREFIX}/bin/bob_dbmanage.py ]; then
-  run_cmd ${PREFIX}/bin/bob_dbmanage.py all download --missing;
-fi
diff --git a/gitlab/before_wheels.sh b/gitlab/before_wheels.sh
deleted file mode 100755
index 73a037624bb88e0aed6b9d09f5c6aa0291b38784..0000000000000000000000000000000000000000
--- a/gitlab/before_wheels.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 18:23:57 CEST
diff --git a/gitlab/build.sh b/gitlab/build.sh
index 398ab3c1f17207f0bb827b705264ac959e8586ec..f92bc0540473ee7c8ad0b5d3ed979ffac6d23ec5 100755
--- a/gitlab/build.sh
+++ b/gitlab/build.sh
@@ -3,30 +3,21 @@
 
 source $(dirname ${0})/functions.sh
 
-prepare_build_env ${CONDA_FOLDER} ${PREFIX}
+# Makes sure we activate the base environment if available
+run_cmd source ${CONDA_ROOT}/etc/profile.d/conda.sh
+run_cmd conda activate base
+export_env PATH
 
-use_buildout=`which buildout`
-if [ -z "${use_buildout}" ]; then
-  log_error "Cannot find buildout, aborting..."
-  exit 1
-else
-  log_info "Using buildout: ${use_buildout}"
-fi
+run_cmd mkdir -p ./_ci/${OS_SLUG}/${PYTHON_VERSION}
 
-run_cmd ${use_buildout}
+if [ -z "${CI_COMMIT_TAG}" ]; then
+  run_cmd ${CONDA_ROOT}/bin/python _ci/channel_support.py ${CONDA_BETA_CHANNEL} ${CI_PROJECT_NAME} ${BOB_PACKAGE_VERSION} ${PYTHON_VERSION} -u --log ./_ci/${OS_SLUG}/${PYTHON_VERSION}/build_number.txt
+else
+  run_cmd ${CONDA_ROOT}/bin/python _ci/channel_support.py ${CONDA_CHANNEL} ${CI_PROJECT_NAME} ${BOB_PACKAGE_VERSION} ${PYTHON_VERSION} -u --log ./_ci/${OS_SLUG}/${PYTHON_VERSION}/build_number.txt
 
-if [ -x ./bin/bob_dbmanage.py ]; then
-  run_cmd ./bin/bob_dbmanage.py all download --missing;
 fi
 
-if [ -d ./doc ] && [ "${STABLE}" != "true" ]; then
-  run_cmd ./bin/sphinx-build -W doc sphinx
-fi
+BOB_BUILD_NUMBER=`head -n 1 ./_ci/${OS_SLUG}/${PYTHON_VERSION}/build_number.txt | tr -d '\n'`
+export_env BOB_BUILD_NUMBER
 
-if [ -z "${WHEEL_TAG}" ]; then
-  # C/C++ extensions
-  run_cmd ./bin/python setup.py bdist_wheel
-else
-  # Python-only packages
-  run_cmd ./bin/python setup.py bdist_wheel --python-tag ${WHEEL_TAG}
-fi
+run_cmd ${CONDA_ROOT}/bin/conda build --no-anaconda-upload --variant-config-files _ci/conda_build_config.yaml --python=${PYTHON_VERSION} conda
diff --git a/gitlab/cacert.pem b/gitlab/cacert.pem
index 8849e024f394c40a0ec04ac03fe0da9532887d91..39ba33683c57f4edfc507b1d3dff0a894660d536 100644
--- a/gitlab/cacert.pem
+++ b/gitlab/cacert.pem
@@ -1,7 +1,7 @@
 ##
 ## Bundle of CA Root Certificates
 ##
-## Certificate data from Mozilla as of: Wed Jan 18 04:12:05 2017 GMT
+## Certificate data from Mozilla as of: Wed Sep 20 03:12:05 2017 GMT
 ##
 ## This is a bundle of X.509 certificates of public Certificate Authorities
 ## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
 ## Just configure this file as the SSLCACertificateFile.
 ##
 ## Conversion done with mk-ca-bundle.pl version 1.27.
-## SHA256: dffa79e6aa993f558e82884abf7bb54bf440ab66ee91d82a27a627f6f2a4ace4
+## SHA256: 2b2dbe5244e0047e088c597998883a913f6c5fffd1cb5c0fe5a368c8466cb2ec
 ##
 
 
@@ -130,30 +130,6 @@ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
 RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
 -----END CERTIFICATE-----
 
-AddTrust Low-Value Services Root
-================================
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
-cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
-ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
-54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
-oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
-Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
-GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
-HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
-AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
-HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
-ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
-mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
-ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
-
 AddTrust External Root
 ======================
 -----BEGIN CERTIFICATE-----
@@ -178,54 +154,6 @@ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
 G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
 -----END CERTIFICATE-----
 
-AddTrust Public Services Root
-=============================
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
-cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
-BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
-dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
-nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
-d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
-Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
-HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
-A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
-A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
-JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
-Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
-EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
-
-AddTrust Qualified Certificates Root
-====================================
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
-cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
-CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
-64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
-KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
-L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
-wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
-MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
-BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
-azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
-RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
-iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
-
 Entrust Root Certification Authority
 ====================================
 -----BEGIN CERTIFICATE-----
@@ -273,27 +201,6 @@ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
 Mw==
 -----END CERTIFICATE-----
 
-GeoTrust Global CA 2
-====================
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
-R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
-MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
-LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
-NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
-LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
-Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
-HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
-K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
-srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
-ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
-OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
-x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
-
 GeoTrust Universal CA
 =====================
 -----BEGIN CERTIFICATE-----
@@ -419,56 +326,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
 -----END CERTIFICATE-----
 
-Comodo Secure Services root
-===========================
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
-MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
-BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
-9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
-rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
-oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
-p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
-FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
-YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
-aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
-DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
-pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
-RR3B7Hzs/Sk=
------END CERTIFICATE-----
-
-Comodo Trusted Services root
-============================
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
-MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
-bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
-IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
-3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
-/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
-juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
-ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
-DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
-ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
-cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
-BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
-R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
-9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
-
 QuoVadis Root CA
 ================
 -----BEGIN CERTIFICATE-----
@@ -608,32 +465,6 @@ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
 llpwrN9M
 -----END CERTIFICATE-----
 
-UTN USERFirst Hardware Root CA
-==============================
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
-BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
-IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
-BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
-OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
-eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
-ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
-wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
-tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
-i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
-Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
-gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
-lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
-UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
-XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
-lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
-iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
-nfhmqA==
------END CERTIFICATE-----
-
 Camerfirma Chambers of Commerce Root
 ====================================
 -----BEGIN CERTIFICATE-----
@@ -831,38 +662,6 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
 +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
 -----END CERTIFICATE-----
 
-Swisscom Root CA 1
-==================
------BEGIN CERTIFICATE-----
-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
-NY6E0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
-
 DigiCert Assured ID Root CA
 ===========================
 -----BEGIN CERTIFICATE-----
@@ -1220,33 +1019,6 @@ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
 ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
 -----END CERTIFICATE-----
 
-WellsSecure Public Root Certificate Authority
-=============================================
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
-F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
-NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
-MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
-bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
-VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
-iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
-i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
-bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
-K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
-AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
-cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
-lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
-i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
-GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
-K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
-bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
-qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
-E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
-tylv2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
-
 COMODO ECC Certification Authority
 ==================================
 -----BEGIN CERTIFICATE-----
@@ -1308,46 +1080,6 @@ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
 okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
 -----END CERTIFICATE-----
 
-Microsec e-Szigno Root CA
-=========================
------BEGIN CERTIFICATE-----
-MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
-BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
-EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
-MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
-dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
-GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
-d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
-oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
-QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
-PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
-MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
-IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
-VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
-LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
-dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
-AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
-4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
-AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
-egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
-Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
-PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
-c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
-cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
-IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
-WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
-MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
-MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
-Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
-HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
-nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
-aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
-86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
-yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
-S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
------END CERTIFICATE-----
-
 Certigna
 ========
 -----BEGIN CERTIFICATE-----
@@ -1493,49 +1225,6 @@ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
 TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
 -----END CERTIFICATE-----
 
-CNNIC ROOT
-==========
------BEGIN CERTIFICATE-----
-MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
-ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
-OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
-o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
-VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
-VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
-czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
-y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
-wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
-lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
-Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
-O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
-BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
-G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
-mxE=
------END CERTIFICATE-----
-
-ApplicationCA - Japanese Government
-===================================
------BEGIN CERTIFICATE-----
-MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
-SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
-MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
-cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
-fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
-wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
-jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
-nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
-WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
-BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
-vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
-o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
-/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
-io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
-dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
-rosot4LKGAfmt1t06SAZf7IbiVQ=
------END CERTIFICATE-----
-
 GeoTrust Primary Certification Authority - G3
 =============================================
 -----BEGIN CERTIFICATE-----
@@ -2630,93 +2319,6 @@ poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
 eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
 -----END CERTIFICATE-----
 
-China Internet Network Information Center EV Certificates Root
-==============================================================
------BEGIN CERTIFICATE-----
-MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV
-BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D
-aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg
-Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG
-A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM
-PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl
-cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y
-jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV
-98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H
-klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23
-KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC
-7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV
-HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD
-glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5
-0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM
-7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws
-ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0
-5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8=
------END CERTIFICATE-----
-
-Swisscom Root CA 2
-==================
------BEGIN CERTIFICATE-----
-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
-5OfNeOI5wSsSnqaeG8XmDtkx2Q==
------END CERTIFICATE-----
-
-Swisscom Root EV CA 2
-=====================
------BEGIN CERTIFICATE-----
-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
-l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc=
------END CERTIFICATE-----
-
 CA Disig Root R1
 ================
 -----BEGIN CERTIFICATE-----
@@ -3538,30 +3140,6 @@ lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
 B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
 -----END CERTIFICATE-----
 
-TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6
-====================================================
------BEGIN CERTIFICATE-----
-MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G
-A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
-acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF
-bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5
-MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL
-BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf
-aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm
-aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a
-2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED
-wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb
-HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV
-+DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT
-9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R
-fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy
-o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW
-hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1
-O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw==
------END CERTIFICATE-----
-
 Certinomis - Root CA
 ====================
 -----BEGIN CERTIFICATE-----
@@ -4041,3 +3619,28 @@ TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt
 7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I
 iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr
 -----END CERTIFICATE-----
+
+TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
+=============================================
+-----BEGIN CERTIFICATE-----
+MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
+D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
+IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
+TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
+ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
+VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
+c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
+bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
+IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
+6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
+wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
+3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
+WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
+ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
+AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
+lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
+e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
+q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
+-----END CERTIFICATE-----
diff --git a/gitlab/channel_support.py b/gitlab/channel_support.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69ec211c8aef6305a60983d536a0c7009c796a7
--- /dev/null
+++ b/gitlab/channel_support.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+
+import re
+from conda.exports import get_index
+
+
+def main(channel_url, name, version, py_ver, get_urls=False):
+    # no dot in py_ver
+    py_ver = py_ver.replace('.', '')
+    # get the channel index
+    index = get_index(channel_urls=[channel_url], prepend=False)
+    # search if package with the same version exists
+    build_number = 0
+    urls = []
+    for dist in index:
+        if dist.name == name and dist.version == version:
+            match = re.match('py[2-9][0-9]+', dist.build_string)
+            if match and match.group() == 'py{}'.format(py_ver):
+                build_number = max(build_number, dist.build_number + 1)
+                urls.append(index[dist].url)
+    urls = [url.replace(channel_url, '') for url in urls]
+    return build_number, urls
+
+
+if __name__ == '__main__':
+    import sys
+    import argparse
+    parser = argparse.ArgumentParser(
+        description='Return the next build number for a package. Or get a list'
+        ' of urls to the existing package.')
+    parser.add_argument(
+        'channel_url', help='The url or name of the channel.')
+    parser.add_argument(
+        'package_name', help='Name of the package.')
+    parser.add_argument(
+        'package_version', help='Version of the package.')
+    parser.add_argument(
+        'python_version', help='Version of the python.')
+    parser.add_argument(
+        '-u', '--package-urls', action='store_true',
+        help='Optionally output a list of existing packages after the build'
+        ' number.')
+    parser.add_argument(
+        '--log', default=sys.stdout, type=argparse.FileType('w'),
+        help='the file where the build number should be written.')
+    args = parser.parse_args()
+    build_number, urls = main(args.channel_url,
+                              args.package_name, args.package_version,
+                              args.python_version, args.package_urls)
+    args.log.write('{}\n'.format(build_number))
+    if args.package_urls:
+        args.log.write('\n'.join(urls))
+    args.log.close()
diff --git a/gitlab/conda_build_config.yaml b/gitlab/conda_build_config.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..7eea56dee1df866634da090ecadc5e2183521517
--- /dev/null
+++ b/gitlab/conda_build_config.yaml
@@ -0,0 +1,187 @@
+macos_min_version:
+  - 10.9
+macos_machine:
+  - x86_64-apple-darwin13.4.0
+MACOSX_DEPLOYMENT_TARGET:
+  - 10.9
+CONDA_BUILD_SYSROOT:            # [osx]
+  - /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk          # [osx]
+# makes autotools verbose
+VERBOSE_AT:
+  - V=1
+# makes cmake verbose
+VERBOSE_CM:
+  - VERBOSE=1
+
+# the blas implementations that we build against
+blas_impl:
+  - mkl
+
+pin_run_as_build:
+  libboost:
+    max_pin: x.x.x
+  py-boost:
+    max_pin: x.x.x
+  boost:
+    max_pin: x.x.x
+
+## the dependencies that we build against multiple versions
+python:
+  - 2.7
+  - 3.6
+
+zip_keys:
+  -                             # [win]
+    - vc                        # [win]
+    - c_compiler                # [win]
+    - cxx_compiler              # [win]
+    - fortran_compiler_version  # [win]
+    - python                    # [win]
+
+# Here we list the **minimum** version of our dependencies that we support.
+# We keep a list of **all of them** here to make sure everything goes as
+# expected in our conda build process.
+# Ideally we want to build and test against older versions of dependencies.
+# Most of the pin numbers come from the anaconda package.
+bob_devel:
+  - 2018.01.22
+
+## The build time only dependencies.
+## Updaing these to the latest version all the time is OK.
+cmake:
+  - 3.9.4
+coverage:
+  - 4.4.2
+pkg_config:
+  - 0.29.2
+
+## The dependencies that we link against
+# anaconda
+# we build for an old version of numpy for forward compatibility
+# 1.11 seems to be the oldest on win that works with scipy 0.19.
+numpy:
+  - 1.9                # [unix]
+  - 1.11               # [win]
+hdf5:
+  - 1.10               # [not ppc64le]
+freetype:
+  - 2.8
+jpeg:
+  - 9b
+libpng:
+  - 1.6.32
+libtiff:
+  - 4.0.8
+mkl:
+  - 2018.0.0
+sqlite:
+  - 3.20.1
+xz:
+  - 5.2.3
+zlib:
+  - 1.2.11
+# non-anaconda
+boost:
+  - 1.65.1
+cyvlfeat:
+  - 0.4.6
+ffmpeg:
+  - 3.4
+fftw:
+  - 3.3.7
+giflib:
+  - 5.1.4
+libblitz:
+  - 1.0.1
+libmatio:
+  - 1.5.11
+libogg:
+  - 1.3.2
+libsvm:
+  - 3.22
+openfst:
+  - 1.6.1
+speexdsp:
+  - 1.2rc3
+speex:
+  - 1.2.0
+sox:
+  - 14.4.2
+vlfeat:
+  - 0.9.21
+
+## The dependencies that are needed for runtime only
+# anaconda
+click:
+  - 6.7
+curl:
+  - 7.55.1
+cython:
+  - 0.26.1
+matplotlib:
+  - 2.1.0
+nose:
+  - 1.3.7
+pillow:
+  - 4.2.1
+scipy:
+  - 0.19
+setuptools:
+  - 36.5.0
+six:
+  - 1.11.0
+sphinx:
+  - 1.6.3
+sqlalchemy:
+  - 1.1.13
+# non-anaconda
+bob_buildout:
+  - 2.1.5
+caffe:
+  - 1.0
+click_plugins:
+  - 1.0.3
+dlib:
+  - 19.0
+docopt:
+  - 0.6.2
+ipdb:
+  - 0.10.2
+jinja2:
+  - 2.10
+kaldi:
+  - r7271.1a4dbf6
+keras:
+  - 2.1.2
+madmom:
+  - 0.15.1
+menpo:
+  - 0.8.1
+menpofit:
+  - 0.5.0
+menpowidgets:
+  - 0.3.0p6
+mne:
+  - 0.15.2
+mr_developer:
+  - 1.38
+opencv:
+  - 3.3.1
+pkgtools:
+  - 0.7.3
+pyedflib:
+  - 0.1.11
+pyyaml:
+  - 3.12
+schema:
+  - 0.6.7
+sphinx_rtd_theme:
+  - 0.2.4
+tensorflow:
+  - 1.3.0
+virtualenv:
+  - 15.1.0
+zc_buildout:
+  - 2.10.0
+zc_recipe_egg:
+  - 2.0.5
diff --git a/gitlab/deploy.sh b/gitlab/deploy.sh
index 56c784c6d4b76f2ef5e2c6db9db10adbabc63f26..7dcd9c918028a8cce81157382d4975d49a1fe61d 100755
--- a/gitlab/deploy.sh
+++ b/gitlab/deploy.sh
@@ -1,65 +1,23 @@
 #!/usr/bin/env bash
-# Wed 11 Oct 2017 15:00:21 CEST
+# Wed 21 Sep 2016 13:08:05 CEST
 
 source $(dirname ${0})/functions.sh
 
-# upload documentation on our internal server
-run_cmd $(dirname ${0})/before_docs.sh
-run_cmd $(dirname ${0})/docs.sh
-run_cmd $(dirname ${0})/after_docs.sh
+# Uploads all the built packages
+for os in "osx-64" "noarch" "linux-64"; do
+  for f in ${CONDA_ROOT}/conda-bld/${os}/*.tar.bz2; do
+    if [[ -f $f ]]; then
+      if [ -z "${CI_COMMIT_TAG}" ]; then #beta
+        dav_upload "${f}" "private-upload/conda/${os}/"
+      else
+        dav_upload "${f}" "public-upload/conda/label/main/${os}/"
+      fi
+    fi
+  done
+done
 
-if [ "${VISIBILITY}" != "public" ]; then
-  log_warn "WARNING: You cannot publish a PRIVATE to PyPI"
-  log_warn "WARNING: Make this package public if you wish to do so next time"
-  log_warn "WARNING: Stopping deployment procedure before PyPI/Conda pushes"
-  exit 0
-fi
-
-log_info "Creating source distribution..."
-run_cmd ${PREFIX}/bin/python setup.py check sdist --formats zip
-
-log_info "Uploading package to ${PYPISERVER} on behalf of ${PYPIUSER}..."
-twine upload --username ${PYPIUSER} --password ${PYPIPASS} dist/*.zip
-
-condaforge_packages=("bob" \
-"bob.buildout" \
-"bob.extension" \
-"bob.blitz" \
-"bob.core" \
-"bob.ip.draw" \
-"bob.io.base" \
-"bob.sp" \
-"bob.math" \
-"bob.ap" \
-"bob.measure" \
-"bob.db.base" \
-"bob.io.image" \
-"bob.io.video" \
-"bob.io.matlab" \
-"bob.ip.base" \
-"bob.ip.color" \
-"bob.ip.gabor" \
-"bob.learn.activation" \
-"bob.learn.libsvm" \
-"bob.learn.boosting" \
-"bob.io.audio" \
-"bob.learn.linear" \
-"bob.learn.mlp" \
-"bob.db.wine" \
-"bob.db.mnist" \
-"bob.db.atnt" \
-"bob.ip.flandmark" \
-"bob.ip.facedetect" \
-"bob.ip.optflow.hornschunck" \
-"bob.ip.optflow.liu" \
-"bob.learn.em" \
-"bob.db.iris" \
-"bob.ip.qualitymeasure" \
-"bob.ip.tensorflow_extractor" \
-"bob.bio.vein")
-
-if contains_element ${CI_PROJECT_NAME}  "${condaforge_packages[@]}"; then
-  run_cmd ${CONDA_FOLDER}/bin/python _ci/update_feedstock.py ${CI_PROJECT_NAME} recipes
-else
-  run_cmd ${CONDA_FOLDER}/bin/python _ci/update_feedstock.py ${CI_PROJECT_NAME} skeleton
-fi
+# upload the docs from the sphinx folder (usually an artifact of Linux Python
+# 3.6 builds)
+for folder in "${DOC_UPLOADS[@]}"; do
+  dav_upload_folder sphinx "${folder}"
+done
diff --git a/gitlab/docs.sh b/gitlab/docs.sh
deleted file mode 100755
index d7b915b6a94778f680a5e96c530ded97b89f48dc..0000000000000000000000000000000000000000
--- a/gitlab/docs.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-# Deletes all existing dav folders that will be overwritten
-for k in "${DOC_UPLOADS[@]}"; do
-  dav_upload_folder sphinx "${k}"
-done
diff --git a/gitlab/functions.sh b/gitlab/functions.sh
index 3fb8a039ab3ece58a8d811af6c767bedbcfd6b9f..bfeb4e860d6d91ddda03de92238fbcca4f6bf08c 100644
--- a/gitlab/functions.sh
+++ b/gitlab/functions.sh
@@ -6,7 +6,7 @@ SCRIPTS_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
 
 # Determines the operating system we're using
 osname() {
-  [[ "$(uname -s)" == "Darwin" ]] && echo "macosx" || echo "linux"
+  [[ "$(uname -s)" == "Darwin" ]] && echo "osx" || echo "linux"
 }
 
 # Determines the visibility of the current package
@@ -147,11 +147,12 @@ dav_mkdir() {
 
   if [[ ${code} == *204 || ${code} == *201 ]]; then
     log_info "curl: mkdir ${DOCSERVER}/${1}"
-  # if the return code was not a success, the function should usually treat it as an error.
-  # however, sometimes the codes must be treated more flexibly, e.g.:
-  # dav_recursive_mkdir wants the directory created *or* already existing,
-  # which means that a 405 (directory already exists) should not be treated as an error.
-  # other codes may also have similar consideration in the future.
+  # if the return code was not a success, the function should usually treat it
+  # as an error.  however, sometimes the codes must be treated more flexibly,
+  # e.g.: dav_recursive_mkdir wants the directory created *or* already
+  # existing, which means that a 405 (directory already exists) should not be
+  # treated as an error.  other codes may also have similar consideration in
+  # the future.
   elif [[ "${code}" == "$2" ]]; then
     return "${code}"
   else
@@ -221,6 +222,8 @@ dav_upload_folder() {
     exit 1
   fi
 
+  dav_delete "${2}"
+
   find "$1" | while read -r fname; do
     # replace the local path prefix ('../folder1/folder2/folder-to-upload/')
     # with the server path prefix ('private-upload/docs/test/')
@@ -241,46 +244,6 @@ dav_upload_folder() {
 }
 
 
-# Creates (clones), Activates environment and sets up compilation
-# $1: root of the conda installation
-# $2: your current build prefix
-# $3: the name of the conda environment to clone
-prepare_build_env() {
-
-  # Readies a conda environment to use for installation
-  if [ ! -d $2 ]; then
-    log_info "Creating conda installation at $2..."
-    run_cmd $1/bin/conda create --clone $3 --prefix $2 --yes
-  else
-    log_info "Prefix directory $2 exists, not re-installing..."
-  fi
-
-  # Activates conda environment for the build
-  log_info "$ source $1/bin/activate $2"
-  source $1/bin/activate $2
-
-  # Configures CCACHE
-  # use_ccache=`which ccache`
-  # if [ -z "${use_ccache}" ]; then
-  #   log_warn "Cannot find ccache, compiling from scratch..."
-  # else
-  #   local ccache_bin=$2/lib/ccache
-  #   if [ ! -d ${ccache_bin} ]; then
-  #     run_cmd mkdir -pv ${ccache_bin}
-  #     ln -sf ${use_ccache} ${ccache_bin}/gcc
-  #     ln -sf ${use_ccache} ${ccache_bin}/g++
-  #     ln -sf ${use_ccache} ${ccache_bin}/cc
-  #     ln -sf ${use_ccache} ${ccache_bin}/c++
-  #   fi
-  #   use_gcc=`which gcc`
-  #   PATH=${ccache_bin}:${PATH}
-  #   export_env PATH
-  #   log_info "ccache installed at ${use_ccache}, caching compilations..."
-  #   log_info "gcc installed at ${use_gcc}..."
-  # fi
-}
-
-
 # Checks if an array contains a value
 # taken from here: https://stackoverflow.com/questions/3685970/check-if-an-array-contains-a-value
 # Parameters: <value-to-check> <array-variable>
@@ -292,12 +255,80 @@ contains_element () {
 }
 
 
+if [ -z "${BOB_PACKAGE_VERSION}" ]; then
+  if [ ! -r "version.txt" ]; then
+    log_error "./version.txt does not exist - cannot figure out version number"
+    exit 1
+  fi
+  BOB_PACKAGE_VERSION=`cat version.txt | tr -d '\n'`;
+fi
+
+
+# merges conda cache folders
+# $1: Path to the main cache to keep. The directory must exist.
+# $2: Path to the extra cache to be merged into main cache
+merge_conda_cache() {
+  if [ -e ${1} ]; then
+    _cached_urlstxt="${2}/urls.txt"
+    _urlstxt="${1}/urls.txt"
+    if [ -e ${2} ]; then
+      log_info "Merging urls.txt and packages with cached files..."
+      mv ${2}/*.tar.bz2 ${1}/
+      cat ${_urlstxt} ${_cached_urlstxt} | sort | uniq > ${_urlstxt}
+    fi
+  fi
+}
+
+
+# installs a miniconda installation.
+# $1: Path to where to install miniconda.
+install_miniconda() {
+  log_info "Installing miniconda in ${1} ..."
+
+  # downloads the latest conda installation script
+  if [ "${OSNAME}" == "linux" ]; then
+    object=https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
+  else
+    object=https://repo.continuum.io/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
+  fi
+
+  # checks if miniconda.sh exists
+  if [ ! -e miniconda.sh ]; then
+    log_info "Downloading latest miniconda3 installer..."
+    run_cmd curl --silent --output miniconda.sh ${object}
+  else
+    log_info "Re-using cached miniconda3 installer..."
+    ls -l miniconda.sh
+  fi
+
+  # move cache to a different folder if it exists
+  if [ -e ${1} ]; then
+    run_cmd mv ${1} ${1}.cached
+  fi
+
+  # install miniconda
+  bash miniconda.sh -b -p ${1}
+
+  # Put back cache and merge urls.txt
+  merge_conda_cache ${1}/pkgs ${1}.cached/pkgs
+  # remove the backup cache folder
+  rm -rf ${1}.cached
+
+  # List currently available packages on cache
+  # run_cmd ls -l ${1}/pkgs/
+  # run_cmd cat ${1}/pkgs/urls.txt
+
+  hash -r
+}
+
+
 check_env PYTHON_VERSION
 check_env CI_PROJECT_URL
 check_env CI_PROJECT_DIR
 check_env CI_PROJECT_PATH
 check_env CI_PROJECT_NAME
 check_env CI_COMMIT_REF_NAME
+export_env BOB_PACKAGE_VERSION
 check_pass PYPIUSER
 check_pass PYPIPASS
 check_pass DOCUSER
@@ -308,39 +339,43 @@ OSNAME=`osname`
 VISIBILITY=`visibility`
 IS_MASTER=`is_master`
 
-if [ -z "${CONDA_FOLDER}" ]; then
-  CONDA_FOLDER=/opt/conda
-fi
+check_env OSNAME
+check_env VISIBILITY
+check_env IS_MASTER
 
 PYVER=py$(echo ${PYTHON_VERSION} | tr -d '.')
-if [ -z "${CONDA_ENV}" ]; then
-  if [ -d "${CONDA_FOLDER}/envs/bob-devel-${PYVER}-${CI_COMMIT_REF_NAME}" ]; then
-    CONDA_ENV=bob-devel-${PYVER}-${CI_COMMIT_REF_NAME}
-  else
-    CONDA_ENV=bob-devel-${PYVER}
-  fi
-fi
-BOB_PREFIX_PATH=${CONDA_FOLDER}/envs/${CONDA_ENV}
 
 if [ -z "${DOCSERVER}" ]; then
   DOCSERVER=http://www.idiap.ch
   export_env DOCSERVER
 fi
 
-if [ -z "${PREFIX}" ]; then
-  PREFIX=${CI_PROJECT_DIR}/build-prefix
+CONDA_CHANNEL="${DOCSERVER}/public/conda/label/main"
+CONDA_BETA_CHANNEL="${DOCSERVER}/private/conda"
+
+# Sets up the location of our rc file for conda
+CONDARC=${CONDA_ROOT}/condarc
+
+if [ -z "${OS_SLUG}" ]; then
+  OS_SLUG="${OSNAME}-64"
 fi
 
-check_env OSNAME
-check_env VISIBILITY
-check_env IS_MASTER
+TESTSERVER=https://testpypi.python.org/legacy/
+
+export_env OS_SLUG
 check_env PYVER
 check_env PREFIX
 export_env PREFIX
 check_env DOCSERVER
-check_env CONDA_FOLDER
-check_env CONDA_ENV
-export_env BOB_PREFIX_PATH
+check_env TESTSERVER
+check_env CONDA_ROOT
+check_env CONDA_CHANNEL
+check_env CONDA_BETA_CHANNEL
+export_env CONDARC
+
+# Setup default database server
+BOB_DATABASE_SERVER="${DOCSERVER}/public/databases/latest"
+export_env BOB_DATABASE_SERVER
 
 # Setup default documentation server
 if [ -z "${CI_COMMIT_TAG}" ]; then
@@ -383,14 +418,16 @@ fi
 
 DOC_UPLOADS=()
 
-if [[ "${IS_MASTER}" == "true" ]]; then
-  DOC_UPLOADS+=("${DOC_SERVER_PREFIX}/master/")
-fi
+# always upload documentation for all branches. Ideally this is only called
+# when in master.
+DOC_UPLOADS+=("${DOC_SERVER_PREFIX}/${CI_COMMIT_REF_NAME}/")
 
 if [[ -n "${CI_COMMIT_TAG}" ]]; then
   DOC_UPLOADS+=("${DOC_SERVER_PREFIX}/${CI_COMMIT_TAG}/")
 fi
 
+# upload documentation to a "stable" url if that is the latest tagged on the
+# master branch
 if [[ -n "${CI_COMMIT_TAG}" && "${IS_MASTER}" == "true" ]]; then
   DOC_UPLOADS+=("${DOC_SERVER_PREFIX}/stable/")
 fi
diff --git a/gitlab/install.sh b/gitlab/install.sh
index 6217441888739055e34e3b053f05f664b08bef6f..e74e8c069a6c29aff020ab67c5295b1ac894241b 100755
--- a/gitlab/install.sh
+++ b/gitlab/install.sh
@@ -59,10 +59,9 @@ get_exec() {
 run_cmd mkdir -pv ${1}
 get_script ${1} cacert.pem
 get_script ${1} functions.sh
-get_exec ${1} install.sh
-for stage in "build" "test" "docs" "wheels" "deploy"; do
-  get_exec ${1} before_${stage}.sh
+get_script ${1} conda_build_config.yaml
+get_exec ${1} before_build.sh
+for stage in "build" "deploy" "pypi"; do
   get_exec ${1} ${stage}.sh
-  get_exec ${1} after_${stage}.sh
 done
-get_exec ${1} update_feedstock.py
+get_exec ${1} channel_support.py
diff --git a/gitlab/pypi.sh b/gitlab/pypi.sh
new file mode 100755
index 0000000000000000000000000000000000000000..700a5a77788d6cc7c6e218a48a8a6c33c7dd7eb7
--- /dev/null
+++ b/gitlab/pypi.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+# Thu 22 Sep 2016 13:59:03 CEST
+
+source $(dirname ${0})/functions.sh
+
+if [ "${VISIBILITY}" != "public" ]; then
+  log_warn "WARNING: You cannot publish a PRIVATE to PyPI"
+  log_warn "WARNING: Make this package public if you wish to do so next time"
+  log_warn "WARNING: Stopping deployment procedure before PyPI/Conda pushes"
+  exit 0
+fi
+
+log_info "Uploading package to PyPI on behalf of user ${PYPIUSER}..."
+twine upload --skip-existing --username ${PYPIUSER} --password ${PYPIPASS} dist/*.zip
diff --git a/gitlab/test.sh b/gitlab/test.sh
deleted file mode 100755
index 4a76151d483f3d59f19945ac802d55b65ed2a990..0000000000000000000000000000000000000000
--- a/gitlab/test.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env bash
-# Wed 21 Sep 2016 13:08:05 CEST
-
-source $(dirname ${0})/functions.sh
-
-prepare_build_env ${CONDA_FOLDER} ${PREFIX}
-
-run_cmd cd ${PREFIX}
-
-# Checks some programs
-
-use_python=`which python`
-check_env use_python
-
-use_coverage=`which coverage`
-check_env use_coverage
-
-use_nosetests=`which nosetests`
-check_env use_nosetests
-
-use_sphinx=`which sphinx-build`
-check_env use_sphinx
-
-# The tests:
-
-run_cmd ${use_coverage} run --source=${CI_PROJECT_NAME} ${use_nosetests} -sv ${CI_PROJECT_NAME}
-run_cmd ${use_coverage} report
-run_cmd ${use_sphinx} -b doctest ${CI_PROJECT_DIR}/doc ${CI_PROJECT_NAME}/sphinx
-
-run_cmd cd ${CI_PROJECT_DIR}
diff --git a/gitlab/wheels.sh b/gitlab/wheels.sh
deleted file mode 100755
index 25b13d242a43cac50e8b261d65320afc025aacc0..0000000000000000000000000000000000000000
--- a/gitlab/wheels.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-# Thu 22 Sep 2016 13:58:56 CEST
-
-source $(dirname ${0})/functions.sh
-
-for file in dist/*.whl; do
-  dav_upload ${file} private-upload/wheels/gitlab/
-done
diff --git a/templates/README.md b/templates/README.md
index d7c8221419a928f51af88025f36354483ca35484..06f437d092d6e27ab77b32dd47ccbd5f12b5f9b4 100644
--- a/templates/README.md
+++ b/templates/README.md
@@ -6,11 +6,14 @@ touched by this procedure. You **don't** have to do all these steps at once. If
 you choose to only do some, prioritise by the order in this text (first do the
 continuous integration changes, then the licensing checks, etc).
 
-> **Notice**: This text may change as we get more experience in what needs to be changed. We may also automatise some of the actions below. We'll keep you posted in this case and update these instructions.
+> **Notice**: This text may change as we get more experience in what needs to
+> be changed. We may also automatise some of the actions below. We'll keep you
+> posted in this case and update these instructions.
 
 ## 0. Set the right origin
 
-If you haven't checked your repository from gitlab yet, you don't have to remove it and re-clone it, you can just set its origin to point to gitlab:
+If you haven't checked your repository from gitlab yet, you don't have to
+remove it and re-clone it, you can just set its origin to point to gitlab:
 
 ```sh
 $ git remote set-url origin git@gitlab.idiap.ch:bob/`basename $(pwd)`
@@ -20,25 +23,11 @@ $ git pull
 
 ## 1. Continuous Integration
 
-Remove the `.travis.yml` file from your package:
-
-```sh
-$ git rm -f .travis.yml
-```
-
-Copy the appropriate yml template for the CI builds:
-
-* For python-only packages, it should be
-  [ci-for-python-only.yml](templates/ci-for-python-only.yml)
-* For C/C++ extensions, it should be
-  [ci-for-cxx-extensions.yml](templates/ci-for-cxx-extensions.yml)
+Copy the stock yml template for the CI builds:
 
 
 ```sh
-# for pure python
-$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/ci-for-python-only.yml > .gitlab-ci.yml
-# for c/c++ extensions
-$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/ci-for-cxx-extensions.yml | tr -d '\r' > .gitlab-ci.yml
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/gitlab-ci.yml > .gitlab-ci.yml
 ```
 
 Add the file to git:
@@ -54,15 +43,224 @@ You also need to enable the following options on your project:
 
 1. In the project "Settings" page, make sure builds are enabled
 2. If you have a private project, check the package settings and make sure that
-   the "Deploy Keys" for our builders (all `conda-*` related servers) are
-   enabled
-3. Visit the "Runners" section of your package settings and enable all conda
-   runners, for linux and macosx variants
+   the "Deploy Keys" for our builders (`runner/beat-macosx ` and `bpr-
+   facedemo`) are enabled.
+3. Visit the "Runners" section of your package settings and enable all runners
+   with the `docker` and `macosx` tags.
 4. Setup the coverage regular expression under "CI/CD pipelines" to have the
    value `^TOTAL.*\s+(\d+\%)$`, which is adequate for figuring out the output
    of `coverage report`
 
 
+## 1.5 Conda recipe
+
+The CI system is based on conda recipes to build the package. The recipes must
+be located in the `conda` folder of each package. You can start modifying the
+recipe of each package by copying the template recipe:
+
+```sh
+$ mkdir -p conda
+$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/meta.yaml > conda/meta.yaml
+$ sed -i "s/<PACKAGE>/`basename $(pwd)`/g" conda/meta.yaml
+```
+
+You should refrain from modifying the recipe except for the places that you are
+asked to modify. We want to keep recipes as similar as possible so that
+updating all of them in future would be possible by a script.
+
+Each recipe is unique to the package and need to be further modified by the
+package maintainer to work. The reference definition of the `meta.yaml` file
+is here:
+https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html
+The `meta.yaml` file (referred to as the recipe) will contain
+duplicate information that is already documented in `setup.py`,
+`requirements.txt`, and `test-requirements.txt`. For the time being you have to
+maintain both the `meta.yaml` file and the other
+files. We have plans to remove this duplication in future:
+https://gitlab.idiap.ch/bob/bob.extension/issues/38
+You are welcome to contribute to that.
+
+Let's walk through the `meta.yaml` file (the recipe) that you just have
+downloaded and further customize it to our package. You need to carry out all
+the steps below otherwise the template `meta.yaml` is not usable as it is.
+
+### ENTRY_POINTS
+
+You need to check if your package has any `console_scripts`. These are
+documented in `setup.py` of each package. You need to list the
+`console_scripts` entry points (only `console_scripts`; other entry points
+**should not** be listed in `meta.yaml`.) in the build section of the
+recipe.
+
+* If there are no `console_scripts`, remove the line (line 9) that says:
+  `<ENTRY_POINTS>`.
+* If there are some, list them in the `meta.yaml` file as well:
+  https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#python-entry-points
+  For example, if the `setup.py` file contains:
+
+    ```python
+        entry_points={
+          'console_scripts': [
+            'jman = gridtk.script.jman:main',
+            'jgen = gridtk.script.jgen:main',
+          ]
+    ```
+  You would replace `<ENTRY_POINTS>` with:
+
+    ```yaml
+    build: # this line is already in the recipe. Do not add. Tabbing (two sapces) is important.
+      entry_points:
+        - jman = gridtk.script.jman:main
+        - jgen = gridtk.script.jgen:main
+    ```
+
+### BUILD_DEPS and HOST_DEPS in requirements.
+
+This part of the recipe lists the packages that are required during build time:
+https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#requirements-section
+Having build and host requirements separately enables cross-compiling of the recipes.
+
+* If the packages does not contain C/C++ code, remove the line that says (line 21) `<BUILD_DEPS>`
+* Otherwise, you need to replace `<BUILD_DEPS>` with:
+    ```yaml
+    requirements: # this line is already in the recipe. Do not add. Tabbing (two sapces) is important.
+      build:
+        - {{ compiler('c') }}
+        - {{ compiler('cxx') }}
+        - pkg-config {{ pkg_config }}
+        - cmake {{ cmake }}
+    ```
+    The pkg-config and cmake lines are optional. If the package uses them, you need to list them.
+
+* List all the packages that are in `requirements.txt` in the
+  `requirements:host` section by removing `<HOST_DEPS>` and adding a new line
+  per dependency. For example, here is what `bob.measure` has in its host:
+    ```yaml
+    host: # this line is already in the recipe. Do not add. Tabbing (two sapces) is important.
+      - python {{ python }} # this line is already in the recipe. Do not add.
+      - setuptools {{ setuptools }} # this line is already in the recipe. Do not add.
+      - bob.extension
+      - bob.blitz
+      - bob.core
+      - bob.math
+      - bob.io.base
+      - matplotlib {{ matplotlib }}
+      - libblitz {{ libblitz }}
+      - boost {{ boost }}
+      - numpy {{ numpy }}
+      - docopt {{ docopt }}
+    ```
+  You need to add a jinja variable like `{{ dependency }}` in front of the
+  dependencies that we *do not* develop. The jinja variable name should not
+  contain `.` or `-`; replace those with `_`. The bob packages (and gridtk)
+  should be listed as is.
+
+* Unlike `pip`, `conda` is not limited to Python programs. If the package
+  depends on some non-python package (like `boost`), you need to list it in the
+  `host` section.
+
+### RUN_DEPS
+
+In the `requirements:run` section, you will list dependencies that are needed
+when a package is used (run-time) dependencies. Usually, for pure-Python
+packages you list the same packages as in the host section also in the run
+section. This is simple **BUT** conda build 3 introduced a new concept named
+`run_exports`
+https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#pin-downstream
+which makes this complicated. In summary, you put
+all the run-time dependencies in the `requirements:run` section **UNLESS** this
+dependency was listed in the host section **and** the dependency has a
+`run_exports`. The problem is that you cannot easily find which packages
+actually do have `run_exports` unless you look at their conda recipe. Usually,
+all the C/C++ libraries like `jpeg`, `hdf5` have `run_exports` (`boost` does
+not have one for example). All `bob` packages have this too. For example, here
+is what is inside the `requirements:run` section of `bob.measure`:
+```yaml
+  run: # this line is already in the recipe. Do not add.
+    - python # this line is already in the recipe. Do not add.
+    - setuptools # this line is already in the recipe. Do not add.
+    - matplotlib
+    - boost
+    - {{ pin_compatible('numpy') }}
+    - docopt
+```
+The `pin_compatible` jinja function is explained in
+https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#pin-downstream
+You need to use it on `numpy` if and only if you use `numpy` in C level.
+Otherwise, just list numpy normally. We do not know of any other package
+besides numpy used in C level that needs to use the `pin_compatible` jinja
+function.
+
+Here is a list of packages that we know that they have `run_exports`:
+```
+- bzip2
+- dbus
+- expat
+- ffmpeg
+- fontconfig
+- freetype
+- giflib
+- glib
+- gmp
+- gst-plugins-base
+- gstreamer
+- hdf5
+- icu
+- jpeg
+- kaldi
+- libblitz
+- libboost
+- libffi
+- libmatio
+- libogg
+- libopus
+- libpng
+- libsvm
+- libtiff
+- libvpx
+- libxcb
+- libxml2
+- menpo
+- mkl # not this one but mkl-devel has so no need to list mkl if you use mkl-devel in host
+- mkl-devel
+- ncurses
+- openfst
+- openssl
+- readline
+- sox
+- speex
+- speexdsp
+- sqlite
+- tk
+- vlfeat
+- xz
+- yaml
+- zlib
+```
+
+### ENTRY_POINTS_TEST
+
+If you listed some console_sripts in the `build:entry_points` section, you will
+test them here. Otherwise, remove the line that says `<ENTRY_POINTS_TEST>`. For
+example, if you had the examples entry points above, you would test them like:
+```yaml
+test:
+  imports:
+    - {{ name }}
+  commands:
+    - jman --help
+    - jgen --help
+```
+
+### TEST_DEPS
+
+https://conda.io/docs/user-guide/tasks/build-packages/define-metadata.html#test-requirements
+You need to list the packages here that are reuired during test-time only. By
+default, we have `bob-devel`, `nose`, `coverage`, `sphinx`, ... do not remove
+them. The test-time dependencies are listed in `test-requirements.txt`. If this
+file does not exist, just remove the line that says `<TEST_DEPS>`.
+
+
 ## 2. Licensing
 
 Verify if the license of your package satisfies what is written on our
@@ -235,7 +433,3 @@ text files to be placed along `conf.py` (on the same directory):
 ## 7. Update the logo on your project
 
 Please update the logo of your project (on the Settings), just set it to [this one](templates/bob-128x128.png).
-
-## 8. Create a conda recipe for the package
-
-Please create a conda build recipte for the new package and put it in bob.conda.
diff --git a/templates/ci-for-cxx-extensions.yml b/templates/ci-for-cxx-extensions.yml
deleted file mode 100644
index b0fba4df69a69e9a48722c5e27d9192f452f815c..0000000000000000000000000000000000000000
--- a/templates/ci-for-cxx-extensions.yml
+++ /dev/null
@@ -1,275 +0,0 @@
-# This build file heavily uses template features from YAML so it is generic
-# enough for any Bob project. Don't modify it unless you know what you're
-# doing.
-
-
-# Definition of our build pipeline
-stages:
-  - build
-  - test
-  - docs
-  - wheels
-  - deploy
-
-
-# ---------
-# Templates
-# ---------
-
-# Template for the build stage
-# Needs to run on all supported architectures, platforms and python versions
-.build_template: &build_job
-  stage: build
-  before_script:
-    - git clean -ffdx
-    - mkdir _ci
-    - curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/master/gitlab/install.sh" > _ci/install.sh
-    - chmod 755 _ci/install.sh
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_build.sh
-  script:
-    - ./_ci/build.sh
-  after_script:
-    - ./_ci/after_build.sh
-  artifacts:
-    expire_in: 1 week
-    paths:
-      - _ci/
-      - dist/
-      - sphinx/
-
-
-# Template for the test stage - re-installs from uploaded wheels
-# Needs to run on all supported architectures, platforms and python versions
-.test_template: &test_job
-  stage: test
-  before_script:
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_test.sh
-  script:
-    - ./_ci/test.sh
-  after_script:
-    - ./_ci/after_test.sh
-
-
-# Template for the wheel uploading stage
-# Needs to run against all combinations of python and operating systems
-.wheels_template: &wheels_job
-  stage: wheels
-  environment: intranet
-  only:
-    - master
-    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
-  before_script:
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_wheels.sh
-  script:
-    - ./_ci/wheels.sh
-  after_script:
-    - ./_ci/after_wheels.sh
-
-
-# Template for (latest) documentation upload stage
-# Only one real job needs to do this
-.docs_template: &docs_job
-  stage: docs
-  environment: intranet
-  only:
-    - master
-  before_script:
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_docs.sh
-  script:
-    - ./_ci/docs.sh
-  after_script:
-    - ./_ci/after_docs.sh
-
-
-# Template for the deployment stage - re-installs from uploaded wheels
-# Needs to run on a single architecture only
-# Will deploy your package to PyPI and other required services
-# Only runs for tags
-.deploy_template: &deploy_job
-  stage: deploy
-  environment: internet
-  only:
-    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
-  except:
-    - branches
-  before_script:
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_deploy.sh
-  script:
-    - ./_ci/deploy.sh
-  after_script:
-    - ./_ci/after_deploy.sh
-
-
-# -------------
-# Build Targets
-# -------------
-
-# Linux + Python 2.7: Builds, tests, uploads wheel and deploys (if needed)
-build_linux_27:
-  <<: *build_job
-  variables: &linux_27_build_variables
-    PYTHON_VERSION: "2.7"
-  tags:
-    - conda-linux
-
-test_linux_27:
-  <<: *test_job
-  variables: *linux_27_build_variables
-  dependencies:
-    - build_linux_27
-  tags:
-    - conda-linux
-
-wheels_linux_27:
-  <<: *wheels_job
-  variables: *linux_27_build_variables
-  dependencies:
-    - build_linux_27
-  tags:
-    - conda-linux
-
-deploy_linux_27:
-  <<: *deploy_job
-  variables: *linux_27_build_variables
-  dependencies:
-    - build_linux_27
-  tags:
-    - conda-linux
-
-
-# Linux + Python 3.5: Builds, tests and uploads wheel
-build_linux_35:
-  <<: *build_job
-  variables: &linux_35_build_variables
-    PYTHON_VERSION: "3.5"
-  tags:
-    - conda-linux
-
-test_linux_35:
-  <<: *test_job
-  variables: *linux_35_build_variables
-  dependencies:
-    - build_linux_35
-  tags:
-    - conda-linux
-
-wheels_linux_35:
-  <<: *wheels_job
-  variables: *linux_35_build_variables
-  dependencies:
-    - build_linux_35
-  tags:
-    - conda-linux
-
-docs_linux_35:
-  <<: *docs_job
-  variables: *linux_35_build_variables
-  dependencies:
-    - build_linux_35
-  tags:
-    - conda-linux
-
-
-# Linux + Python 3.6: Builds and tests
-build_linux_36:
-  <<: *build_job
-  variables: &linux_36_build_variables
-    PYTHON_VERSION: "3.6"
-  tags:
-    - conda-linux
-
-test_linux_36:
-  <<: *test_job
-  variables: *linux_36_build_variables
-  dependencies:
-    - build_linux_36
-  tags:
-    - conda-linux
-
-wheels_linux_36:
-  <<: *wheels_job
-  variables: *linux_36_build_variables
-  dependencies:
-    - build_linux_36
-  tags:
-    - conda-linux
-
-
-# Mac OSX + Python 2.7: Builds and tests
-build_macosx_27:
-  <<: *build_job
-  variables: &macosx_27_build_variables
-    PYTHON_VERSION: "2.7"
-  tags:
-    - conda-macosx
-
-test_macosx_27:
-  <<: *test_job
-  variables: *macosx_27_build_variables
-  dependencies:
-    - build_macosx_27
-  tags:
-    - conda-macosx
-
-wheels_macosx_27:
-  <<: *wheels_job
-  variables: *macosx_27_build_variables
-  dependencies:
-    - build_macosx_27
-  tags:
-    - conda-macosx
-
-
-# Mac OSX + Python 3.5: Builds and tests
-build_macosx_35:
-  <<: *build_job
-  variables: &macosx_35_build_variables
-    PYTHON_VERSION: "3.5"
-  tags:
-    - conda-macosx
-
-test_macosx_35:
-  <<: *test_job
-  variables: *macosx_35_build_variables
-  dependencies:
-    - build_macosx_35
-  tags:
-    - conda-macosx
-
-wheels_macosx_35:
-  <<: *wheels_job
-  variables: *macosx_35_build_variables
-  dependencies:
-    - build_macosx_35
-  tags:
-    - conda-macosx
-
-
-# Mac OSX + Python 3.6: Builds and tests
-build_macosx_36:
-  <<: *build_job
-  variables: &macosx_36_build_variables
-    PYTHON_VERSION: "3.6"
-  tags:
-    - conda-macosx
-
-test_macosx_36:
-  <<: *test_job
-  variables: *macosx_36_build_variables
-  dependencies:
-    - build_macosx_36
-  tags:
-    - conda-macosx
-
-wheels_macosx_36:
-  <<: *wheels_job
-  variables: *macosx_36_build_variables
-  dependencies:
-    - build_macosx_36
-  tags:
-    - conda-macosx
diff --git a/templates/ci-for-python-only.yml b/templates/ci-for-python-only.yml
deleted file mode 100644
index 6489c109f75951127ce5701f50389680dea3b440..0000000000000000000000000000000000000000
--- a/templates/ci-for-python-only.yml
+++ /dev/null
@@ -1,249 +0,0 @@
-# This build file heavily uses template features from YAML so it is generic
-# enough for any Bob project. Don't modify it unless you know what you're
-# doing.
-
-
-# Definition of our build pipeline
-stages:
-  - build
-  - test
-  - docs
-  - wheels
-  - deploy
-
-
-# ---------
-# Templates
-# ---------
-
-# Template for the build stage
-# Needs to run on all supported architectures, platforms and python versions
-.build_template: &build_job
-  stage: build
-  before_script:
-    - git clean -ffdx
-    - mkdir _ci
-    - curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/master/gitlab/install.sh" > _ci/install.sh
-    - chmod 755 _ci/install.sh
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_build.sh
-  script:
-    - ./_ci/build.sh
-  after_script:
-    - ./_ci/after_build.sh
-  artifacts:
-    expire_in: 1 week
-    paths:
-      - _ci/
-      - dist/
-      - sphinx/
-
-
-# Template for the test stage - re-installs from uploaded wheels
-# Needs to run on all supported architectures, platforms and python versions
-.test_template: &test_job
-  stage: test
-  before_script:
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_test.sh
-  script:
-    - ./_ci/test.sh
-  after_script:
-    - ./_ci/after_test.sh
-
-
-# Template for the wheel uploading stage
-# Needs to run against one supported architecture, platform and python version
-.wheels_template: &wheels_job
-  stage: wheels
-  environment: intranet
-  only:
-    - master
-    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
-  before_script:
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_wheels.sh
-  script:
-    - ./_ci/wheels.sh
-  after_script:
-    - ./_ci/after_wheels.sh
-
-
-# Template for (latest) documentation upload stage
-# Only one real job needs to do this
-.docs_template: &docs_job
-  stage: docs
-  environment: intranet
-  only:
-    - master
-  before_script:
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_docs.sh
-  script:
-    - ./_ci/docs.sh
-  after_script:
-    - ./_ci/after_docs.sh
-
-
-# Template for the deployment stage - re-installs from uploaded wheels
-# Needs to run on a single architecture only
-# Will deploy your package to PyPI and other required services
-# Only runs for tags
-.deploy_template: &deploy_job
-  stage: deploy
-  environment: internet
-  only:
-    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
-  except:
-    - branches
-  before_script:
-    - ./_ci/install.sh _ci #updates
-    - ./_ci/before_deploy.sh
-  script:
-    - ./_ci/deploy.sh
-  after_script:
-    - ./_ci/after_deploy.sh
-
-
-# -------------
-# Build Targets
-# -------------
-
-# Linux + Python 2.7: Builds, tests, uploads wheel and deploys (if needed)
-build_linux_27:
-  <<: *build_job
-  variables: &linux_27_build_variables
-    PYTHON_VERSION: "2.7"
-    WHEEL_TAG: "py27"
-  tags:
-    - conda-linux
-
-test_linux_27:
-  <<: *test_job
-  variables: *linux_27_build_variables
-  dependencies:
-    - build_linux_27
-  tags:
-    - conda-linux
-
-wheels_linux_27:
-  <<: *wheels_job
-  variables: *linux_27_build_variables
-  dependencies:
-    - build_linux_27
-  tags:
-    - conda-linux
-
-deploy_linux_27:
-  <<: *deploy_job
-  variables: *linux_27_build_variables
-  dependencies:
-    - build_linux_27
-  tags:
-    - conda-linux
-
-
-# Linux + Python 3.5: Builds, tests and uploads wheel
-build_linux_35:
-  <<: *build_job
-  variables: &linux_35_build_variables
-    PYTHON_VERSION: "3.5"
-    WHEEL_TAG: "py3"
-  tags:
-    - conda-linux
-
-test_linux_35:
-  <<: *test_job
-  variables: *linux_35_build_variables
-  dependencies:
-    - build_linux_35
-  tags:
-    - conda-linux
-
-wheels_linux_35:
-  <<: *wheels_job
-  variables: *linux_35_build_variables
-  dependencies:
-    - build_linux_35
-  tags:
-    - conda-linux
-
-docs_linux_35:
-  <<: *docs_job
-  variables: *linux_35_build_variables
-  dependencies:
-    - build_linux_35
-  tags:
-    - conda-linux
-
-
-# Linux + Python 3.6: Builds and tests
-build_linux_36:
-  <<: *build_job
-  variables: &linux_36_build_variables
-    PYTHON_VERSION: "3.6"
-    WHEEL_TAG: "py3"
-  tags:
-    - conda-linux
-
-test_linux_36:
-  <<: *test_job
-  variables: *linux_36_build_variables
-  dependencies:
-    - build_linux_36
-  tags:
-    - conda-linux
-
-
-# Mac OSX + Python 2.7: Builds and tests
-build_macosx_27:
-  <<: *build_job
-  variables: &macosx_27_build_variables
-    PYTHON_VERSION: "2.7"
-    WHEEL_TAG: "py27"
-  tags:
-    - conda-macosx
-
-test_macosx_27:
-  <<: *test_job
-  variables: *macosx_27_build_variables
-  dependencies:
-    - build_macosx_27
-  tags:
-    - conda-macosx
-
-
-# Mac OSX + Python 3.5: Builds and tests
-build_macosx_35:
-  <<: *build_job
-  variables: &macosx_35_build_variables
-    PYTHON_VERSION: "3.5"
-    WHEEL_TAG: "py3"
-  tags:
-    - conda-macosx
-
-test_macosx_35:
-  <<: *test_job
-  variables: *macosx_35_build_variables
-  dependencies:
-    - build_macosx_35
-  tags:
-    - conda-macosx
-
-
-# Mac OSX + Python 3.6: Builds and tests
-build_macosx_36:
-  <<: *build_job
-  variables: &macosx_36_build_variables
-    PYTHON_VERSION: "3.6"
-    WHEEL_TAG: "py3"
-  tags:
-    - conda-macosx
-
-test_macosx_36:
-  <<: *test_job
-  variables: *macosx_36_build_variables
-  dependencies:
-    - build_macosx_36
-  tags:
-    - conda-macosx
diff --git a/templates/gitlab-ci.yml b/templates/gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..26f091cbfc1aa1595557fbc51fd39d0dda5f026c
--- /dev/null
+++ b/templates/gitlab-ci.yml
@@ -0,0 +1,141 @@
+# This build file uses template features from YAML so it is generic enough for
+# any Bob project. Don't modify it unless you know what you're doing.
+
+# Definition of global variables (all stages)
+variables:
+  CONDA_ROOT: "${CI_PROJECT_DIR}/miniconda"
+
+
+# Definition of our build pipeline order
+stages:
+  - build
+  - deploy
+  - pypi
+
+
+# Build targets
+.build_template: &build_job
+  stage: build
+  before_script:
+    - mkdir _ci
+    - curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/master/gitlab/install.sh" > _ci/install.sh
+    - chmod 755 _ci/install.sh
+    - ./_ci/install.sh _ci master #installs ci support scripts
+    - ./_ci/before_build.sh
+  script:
+    - ./_ci/build.sh
+  cache: &build_caches
+    paths:
+      - miniconda.sh
+      - ${CONDA_ROOT}/pkgs/*.tar.bz2
+      - ${CONDA_ROOT}/pkgs/urls.txt
+
+
+.build_linux_template: &linux_build_job
+  <<: *build_job
+  tags:
+    - docker
+  image: continuumio/conda-concourse-ci
+  artifacts:
+    expire_in: 1 week
+    paths:
+      - _ci/
+      - ${CONDA_ROOT}/conda-bld/linux-64/*.tar.bz2
+  cache:
+    <<: *build_caches
+    key: "linux-cache"
+
+
+.build_macosx_template: &macosx_build_job
+  <<: *build_job
+  tags:
+    - macosx
+  artifacts:
+    expire_in: 1 week
+    paths:
+      - _ci/
+      - ${CONDA_ROOT}/conda-bld/osx-64/*.tar.bz2
+  cache:
+    <<: *build_caches
+    key: "macosx-cache"
+
+
+build_linux_27:
+  <<: *linux_build_job
+  variables:
+    PYTHON_VERSION: "2.7"
+
+
+build_linux_36:
+  <<: *linux_build_job
+  variables:
+    PYTHON_VERSION: "3.6"
+    BUILD_EGG: "true"
+  artifacts:
+    expire_in: 1 week
+    paths:
+      - _ci/
+      - dist/*.zip
+      - sphinx
+      - ${CONDA_ROOT}/conda-bld/linux-64/*.tar.bz2
+
+
+build_macosx_27:
+  <<: *macosx_build_job
+  variables:
+    PYTHON_VERSION: "2.7"
+
+
+build_macosx_36:
+  <<: *macosx_build_job
+  variables:
+    PYTHON_VERSION: "3.6"
+
+
+# Deploy targets
+.deploy_template: &deploy_job
+  stage: deploy
+  before_script:
+    - ./_ci/install.sh _ci master #updates ci support scripts
+  script:
+    - ./_ci/deploy.sh
+  dependencies:
+    - build_linux_27
+    - build_linux_36
+    - build_macosx_27
+    - build_macosx_36
+  tags:
+    - deployer
+
+
+deploy_beta:
+  <<: *deploy_job
+  environment: beta
+  only:
+    - master
+
+
+deploy_stable:
+  <<: *deploy_job
+  environment: stable
+  only:
+    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
+  except:
+    - branches
+
+
+pypi:
+  stage: pypi
+  environment: pypi
+  only:
+    - /^v\d+\.\d+\.\d+([abc]\d*)?$/  # PEP-440 compliant version (tags)
+  except:
+    - branches
+  before_script:
+    - ./_ci/install.sh _ci master #updates ci support scripts
+  script:
+    - ./_ci/pypi.sh
+  dependencies:
+    - build_linux_36
+  tags:
+    - deployer
diff --git a/templates/meta.yaml b/templates/meta.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6bbd7792b93aaff648bd5980a98943fa245ef090
--- /dev/null
+++ b/templates/meta.yaml
@@ -0,0 +1,53 @@
+{% set name = '<PACKAGE>' %}
+{% set project_dir = environ.get('RECIPE_DIR') + '/..' %}
+
+package:
+  name: {{ name }}
+  version: {{ environ.get('BOB_PACKAGE_VERSION', '0.0.1') }}
+
+build:
+  <ENTRY_POINTS>
+  number: {{ environ.get('BOB_BUILD_NUMBER', 0) }}
+  run_exports:
+    - {{ pin_subpackage(name) }}
+  script:
+    - cd {{ project_dir }}
+    {% if environ.get('BUILD_EGG') %}
+    - python setup.py sdist --formats=zip
+    {% endif %}
+    - python setup.py install --single-version-externally-managed --record record.txt
+
+requirements:
+  <BUILD_DEPS>
+  host:
+    - python {{ python }}
+    - setuptools {{ setuptools }}
+    <HOST_DEPS>
+  run:
+    - python
+    - setuptools
+    <RUN_DEPS>
+
+test:
+  imports:
+    - {{ name }}
+  commands:
+    <ENTRY_POINTS_TEST>
+    - nosetests --with-coverage --cover-package={{ name }} -sv {{ name }}
+    - sphinx-build -aEW {{ project_dir }}/doc {{ project_dir }}/sphinx
+    - sphinx-build -aEb doctest {{ project_dir }}/doc sphinx
+    - conda inspect linkages -p $PREFIX {{ name }}  # [not win]
+    - conda inspect objects -p $PREFIX {{ name }}  # [osx]
+  requires:
+    - bob-devel {{ bob_devel }}.*
+    - nose
+    - coverage
+    - sphinx
+    - sphinx_rtd_theme
+    <TEST_DEPS>
+
+about:
+  home: https://www.idiap.ch/software/bob/
+  license: <LICENSE>
+  summary: <SHORT_DESCRIPTION>
+  license_family: <LICENSE_FAMILY>
diff --git a/templates/sphinx-conf.py b/templates/sphinx-conf.py
index 10146fd89ea8169793143477b9f598c5deb60b7e..c72c1a9c434d0c178342f89d49502405a666e669 100644
--- a/templates/sphinx-conf.py
+++ b/templates/sphinx-conf.py
@@ -25,16 +25,10 @@ extensions = [
     'sphinx.ext.intersphinx',
     'sphinx.ext.napoleon',
     'sphinx.ext.viewcode',
+    'sphinx.ext.mathjax',
     #'matplotlib.sphinxext.plot_directive'
     ]
 
-import sphinx
-if sphinx.__version__ >= "1.4.1":
-    extensions.append('sphinx.ext.imgmath')
-    imgmath_image_format = 'svg'
-else:
-    extensions.append('sphinx.ext.pngmath')
-
 # Be picky about warnings
 nitpicky = True