# 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. # 1) Generic instructions (only change if you know what you're doing) # ------------------------------------------------------------------- # Definition of our build pipeline stages: - build - test - docs - wheels # Global variables variables: CONDA_PREFIX: env # 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 - 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/" script: - ./bin/buildout - if [ -x ./bin/bob_dbmanage.py ]; then ./bin/bob_dbmanage.py all download --force; fi - ./bin/sphinx-build doc sphinx - ./bin/python setup.py bdist_wheel --python-tag ${WHEEL_TAG} after_script: - rm -rf ${CONDA_PREFIX} artifacts: expire_in: 1 day paths: - bootstrap-conda.sh - 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 # 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 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 after_script: - rm -rf ${CONDA_PREFIX} # 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) .wheels_template: &wheels_job stage: wheels only: - master - 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 script: - ./upload-wheel.sh # Template for (latest) documentation upload stage # Only one real job needs to do this .docs_template: &docs_job stage: docs 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 script: - ./upload-sphinx.sh # 2) Package specific instructions (you may tune this if needed) # -------------------------------------------------------------- # Linux + Python 2.7: Builds, tests, uploads wheel build_linux_27: <<: *linux_build_job variables: &linux_27_build_variables <<: *linux_build_variables PYTHON_VER: "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 dependencies: - build_linux_27 tags: - conda-linux # Linux + Python 3.4: Builds and tests build_linux_34: <<: *linux_build_job variables: &linux_34_build_variables <<: *linux_build_variables PYTHON_VER: "3.4" WHEEL_TAG: "py3" tags: - conda-linux test_linux_34: <<: *test_job variables: *linux_34_build_variables dependencies: - build_linux_34 tags: - conda-linux # Linux + Python 3.5: Builds, tests, uploads wheel build_linux_35: <<: *linux_build_job variables: &linux_35_build_variables <<: *linux_build_variables PYTHON_VER: "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 dependencies: - build_linux_35 tags: - conda-linux docs_linux_35: <<: *docs_job dependencies: - build_linux_35 tags: - conda-linux # Mac OSX + Python 2.7: Builds and tests build_macosx_27: <<: *macosx_build_job variables: &macosx_27_build_variables <<: *macosx_build_variables PYTHON_VER: "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.4: Builds and tests build_macosx_34: <<: *macosx_build_job variables: &macosx_34_build_variables <<: *macosx_build_variables PYTHON_VER: "3.4" WHEEL_TAG: "py3" tags: - conda-macosx test_macosx_34: <<: *test_job variables: *macosx_34_build_variables dependencies: - build_macosx_34 tags: - conda-macosx # Mac OSX + Python 3.5: Builds and tests build_macosx_35: <<: *macosx_build_job variables: &macosx_35_build_variables <<: *macosx_build_variables PYTHON_VER: "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