diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..6489c109f75951127ce5701f50389680dea3b440 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,249 @@ +# 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