diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 293eb7bc13967f6f3529d47f00468345f5470d28..7c4594fe82f74e5de669515e4681c37281c9502a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,25 +1,20 @@
-# This build file is defined in two parts: 1) a generic set of instructions you
-# probably **don't** need to change and 2) a part you may have to tune to your
-# project. It heavily uses template features from YAML to help you in only
-# changing a minimal part of it and avoid code duplication to a maximum while
-# still providing a nice pipeline display on your package.
+# 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.
-# 1) Generic instructions (only change if you know what you're doing)
-# -------------------------------------------------------------------
-
# Definition of our build pipeline
stages:
- build
- test
- docs
- wheels
+ - deploy
-# Global variables
-variables:
- CONDA_PREFIX: env
-
+# ---------
+# Templates
+# ---------
# Template for the build stage
# Needs to run on all supported architectures, platforms and python versions
@@ -27,103 +22,98 @@ variables:
stage: build
before_script:
- git clean -ffdx
- - curl --silent https://gitlab.idiap.ch/bob/bob/snippets/7/raw | tr -d '\r' > bootstrap-conda.sh
- - chmod 755 ./bootstrap-conda.sh
- - ./bootstrap-conda.sh ${CONDA_FOLDER} ${PYTHON_VER} ${CONDA_PREFIX}
- variables: &build_variables
- BOB_DOCUMENTATION_SERVER: "http://www.idiap.ch/software/bob/docs/latest/bob/%s/master/"
+ - 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:
- - BOB_PREFIX_PATH=${CONDA_FOLDER}/envs/`cat ${CONDA_FOLDER}/envs/latest-devel-${PYTHON_VER}.txt` ./bin/buildout
- - ./bin/sphinx-build doc sphinx
- - ./bin/python setup.py bdist_wheel
+ - ./_ci/build.sh
after_script:
- - rm -rf ${CONDA_PREFIX}
+ - ./_ci/after_build.sh
artifacts:
- expire_in: 1 day
+ expire_in: 1 week
paths:
- - bootstrap-conda.sh
+ - _ci/
- dist/
- sphinx/
-# Template for building on a Linux machine
-.build_linux_template: &linux_build_job
- <<: *build_job
- variables: &linux_build_variables
- <<: *build_variables
- CONDA_FOLDER: "/local/conda"
- CFLAGS: "-D_GLIBCXX_USE_CXX11_ABI=0 -coverage"
- CXXFLAGS: "-D_GLIBCXX_USE_CXX11_ABI=0 -coverage"
-
-
-# Template for building on a Mac OSX machine
-.build_mac_template: &macosx_build_job
- <<: *build_job
- variables: &macosx_build_variables
- <<: *build_variables
- CONDA_FOLDER: "/opt/conda"
- MACOSX_DEPLOYMENT_TARGET: "10.9"
- CFLAGS: "-pthread -coverage"
- CXXFLAGS: "-pthread -coverage"
- LDFLAGS: "-lpthread"
-
-
-# Template for the test stage - re-install from uploaded wheels
+# 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:
- - ./bootstrap-conda.sh ${CONDA_FOLDER} ${PYTHON_VER} ${CONDA_PREFIX}
- - source ${CONDA_FOLDER}/bin/activate ${CONDA_PREFIX}
- - pip install --use-wheel --no-index --pre dist/*.whl
+ - ./_ci/install.sh _ci #updates
+ - ./_ci/before_test.sh
script:
- - cd ${CONDA_PREFIX}
- - python -c "from ${CI_PROJECT_NAME} import get_config; print(get_config())"
- - coverage run --source=${CI_PROJECT_NAME} ./bin/nosetests -sv ${CI_PROJECT_NAME}
- - coverage report
- - sphinx-build -b doctest ../doc ../sphinx
+ - ./_ci/test.sh
after_script:
- - rm -rf ${CONDA_PREFIX}
+ - ./_ci/after_test.sh
# Template for the wheel uploading stage
-# Needs to run against one combination of python 2.x and 3.x if it is a python
-# only package, otherwise, needs to run in both pythons to all supported
-# architectures (Linux and Mac OSX 64-bit)
+# Needs to run against all combinations of python and operating systems
.wheels_template: &wheels_job
stage: wheels
+ environment: intranet
only:
- master
- - tags
+ - /^v\d+\.\d+\.\d+([abc]\d*)?$/ # PEP-440 compliant version (tags)
before_script:
- - curl --silent https://gitlab.idiap.ch/bob/bob/snippets/8/raw | tr -d '\r' > upload-wheel.sh
- - chmod 755 upload-wheel.sh
+ - ./_ci/install.sh _ci #updates
+ - ./_ci/before_wheels.sh
script:
- - ./upload-wheel.sh
+ - ./_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:
- - curl --silent https://gitlab.idiap.ch/bob/bob/snippets/9/raw | tr -d '\r' > upload-sphinx.sh
- - chmod 755 upload-sphinx.sh
+ - ./_ci/install.sh _ci #updates
+ - ./_ci/before_docs.sh
script:
- - ./upload-sphinx.sh
+ - ./_ci/docs.sh
+ after_script:
+ - ./_ci/after_docs.sh
-# 2) Package specific instructions (you may tune this if needed)
-# --------------------------------------------------------------
+# 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
-# Linux + Python 2.7: Builds and tests
+
+# -------------
+# Build Targets
+# -------------
+
+# Linux + Python 2.7: Builds, tests, uploads wheel and deploys (if needed)
build_linux_27:
- <<: *linux_build_job
+ <<: *build_job
variables: &linux_27_build_variables
- <<: *linux_build_variables
- PYTHON_VER: "2.7"
+ PYTHON_VERSION: "2.7"
tags:
- conda-linux
@@ -137,6 +127,15 @@ test_linux_27:
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:
@@ -145,10 +144,9 @@ wheels_linux_27:
# Linux + Python 3.4: Builds and tests
build_linux_34:
- <<: *linux_build_job
+ <<: *build_job
variables: &linux_34_build_variables
- <<: *linux_build_variables
- PYTHON_VER: "3.4"
+ PYTHON_VERSION: "3.4"
tags:
- conda-linux
@@ -162,18 +160,18 @@ test_linux_34:
wheels_linux_34:
<<: *wheels_job
+ variables: *linux_34_build_variables
dependencies:
- build_linux_34
tags:
- conda-linux
-# Linux + Python 3.5: Builds and tests
+# Linux + Python 3.5: Builds, tests and uploads wheel
build_linux_35:
- <<: *linux_build_job
+ <<: *build_job
variables: &linux_35_build_variables
- <<: *linux_build_variables
- PYTHON_VER: "3.5"
+ PYTHON_VERSION: "3.5"
tags:
- conda-linux
@@ -187,6 +185,7 @@ test_linux_35:
wheels_linux_35:
<<: *wheels_job
+ variables: *linux_35_build_variables
dependencies:
- build_linux_35
tags:
@@ -194,18 +193,18 @@ wheels_linux_35:
docs_linux_35:
<<: *docs_job
+ variables: *linux_35_build_variables
dependencies:
- build_linux_35
tags:
- conda-linux
-# Mac OSX + Python 2.7: Builds, tests and uploads the wheel
+# Mac OSX + Python 2.7: Builds and tests
build_macosx_27:
- <<: *macosx_build_job
+ <<: *build_job
variables: &macosx_27_build_variables
- <<: *macosx_build_variables
- PYTHON_VER: "2.7"
+ PYTHON_VERSION: "2.7"
tags:
- conda-macosx
@@ -219,6 +218,7 @@ test_macosx_27:
wheels_macosx_27:
<<: *wheels_job
+ variables: *macosx_27_build_variables
dependencies:
- build_macosx_27
tags:
@@ -227,10 +227,9 @@ wheels_macosx_27:
# Mac OSX + Python 3.4: Builds and tests
build_macosx_34:
- <<: *macosx_build_job
+ <<: *build_job
variables: &macosx_34_build_variables
- <<: *macosx_build_variables
- PYTHON_VER: "3.4"
+ PYTHON_VERSION: "3.4"
tags:
- conda-macosx
@@ -244,18 +243,18 @@ test_macosx_34:
wheels_macosx_34:
<<: *wheels_job
+ variables: *macosx_34_build_variables
dependencies:
- build_macosx_34
tags:
- conda-macosx
-# Mac OSX + Python 3.5: Builds, tests, uploads the wheel and the latest docs
+# Mac OSX + Python 3.5: Builds and tests
build_macosx_35:
- <<: *macosx_build_job
+ <<: *build_job
variables: &macosx_35_build_variables
- <<: *macosx_build_variables
- PYTHON_VER: "3.5"
+ PYTHON_VERSION: "3.5"
tags:
- conda-macosx
@@ -269,7 +268,8 @@ test_macosx_35:
wheels_macosx_35:
<<: *wheels_job
+ variables: *macosx_35_build_variables
dependencies:
- build_macosx_35
tags:
- - conda-macosx
\ No newline at end of file
+ - conda-macosx
diff --git a/README.rst b/README.rst
index 82333cc4b6498d1284bf4d8e0e91212c03d97861..d3c846801b6012b9ae496097cec4baa66a4a4e63 100644
--- a/README.rst
+++ b/README.rst
@@ -4,7 +4,7 @@
.. image:: http://img.shields.io/badge/docs-stable-yellow.png
:target: http://pythonhosted.org/bob.learn.linear/index.html
.. image:: http://img.shields.io/badge/docs-latest-orange.png
- :target: https://www.idiap.ch/software/bob/docs/latest/bioidiap/bob.learn.linear/master/index.html
+ :target: https://www.idiap.ch/software/bob/docs/latest/bob/bob.learn.linear/master/index.html
.. image:: https://gitlab.idiap.ch/bob/bob.learn.linear/badges/master/build.svg
:target: https://gitlab.idiap.ch/bob/bob.learn.linear/commits/master
.. image:: https://img.shields.io/badge/gitlab-project-0000c0.svg