diff --git a/.gitignore b/.gitignore index b8afedd4fabe76662e1ef277c0a7b285fc0ff256..f25d410d48fd4cbeb448e9cb88d26881828d107e 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ src develop-eggs sphinx dist +record.txt diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6489c109f75951127ce5701f50389680dea3b440..5e9f6d843dc460d39c1437d2f344c5685d940d98 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,249 +1,142 @@ -# 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. +# 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 + +# Definition of our build pipeline order stages: - build - - test - - docs - - wheels - deploy + - pypi -# --------- -# Templates -# --------- - -# Template for the build stage -# Needs to run on all supported architectures, platforms and python versions +# Build targets .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 + - curl --silent "https://gitlab.idiap.ch/bob/bob.admin/raw/condapackage/gitlab/install.sh" > _ci/install.sh - chmod 755 _ci/install.sh - - ./_ci/install.sh _ci #updates + - ./_ci/install.sh _ci condapackage #installs ci support scripts - ./_ci/before_build.sh script: - ./_ci/build.sh - after_script: - - ./_ci/after_build.sh - artifacts: - expire_in: 1 week + cache: &build_caches 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 + - miniconda.sh + - ${CONDA_ROOT}/pkgs/*.tar.bz2 + - ${CONDA_ROOT}/pkgs/urls.txt -# ------------- -# Build Targets -# ------------- - -# Linux + Python 2.7: Builds, tests, uploads wheel and deploys (if needed) -build_linux_27: +.build_linux_template: &linux_build_job <<: *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 + - 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" -# Linux + Python 3.5: Builds, tests and uploads wheel -build_linux_35: +.build_macosx_template: &macosx_build_job <<: *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 + - macosx + artifacts: + expire_in: 1 week + paths: + - _ci/ + - ${CONDA_ROOT}/conda-bld/osx-64/*.tar.bz2 + cache: + <<: *build_caches + key: "macosx-cache" -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 +build_linux_27: + <<: *linux_build_job + variables: + PYTHON_VERSION: "2.7" -# Linux + Python 3.6: Builds and tests build_linux_36: - <<: *build_job - variables: &linux_36_build_variables + <<: *linux_build_job + 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 + BUILD_EGG: "true" + artifacts: + expire_in: 1 week + paths: + - _ci/ + - dist/*.zip + - sphinx + - ${CONDA_ROOT}/conda-bld/linux-64/*.tar.bz2 -# Mac OSX + Python 2.7: Builds and tests build_macosx_27: - <<: *build_job - variables: &macosx_27_build_variables + <<: *macosx_build_job + variables: PYTHON_VERSION: "2.7" - WHEEL_TAG: "py27" - tags: - - conda-macosx -test_macosx_27: - <<: *test_job - variables: *macosx_27_build_variables + +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 condapackage #updates ci support scripts + script: + - ./_ci/deploy.sh dependencies: + - build_linux_27 + - build_linux_36 - build_macosx_27 + - build_macosx_36 tags: - - conda-macosx + - deployer -# 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 +deploy_beta: + <<: *deploy_job + environment: beta + only: + - master + - condapackage -test_macosx_35: - <<: *test_job - variables: *macosx_35_build_variables - dependencies: - - build_macosx_35 - tags: - - conda-macosx +deploy_stable: + <<: *deploy_job + environment: stable + only: + - /^v\d+\.\d+\.\d+([abc]\d*)?$/ # PEP-440 compliant version (tags) + except: + - branches -# 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 +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 condapackage #updates ci support scripts + script: + - ./_ci/pypi.sh dependencies: - - build_macosx_36 + - build_linux_36 tags: - - conda-macosx + - deployer diff --git a/conda/meta.yaml b/conda/meta.yaml new file mode 100644 index 0000000000000000000000000000000000000000..891425011836472bf4ebff35bad8bbcd8e9050a2 --- /dev/null +++ b/conda/meta.yaml @@ -0,0 +1,68 @@ +{% set name = 'bob.pad.face' %} +{% set project_dir = environ.get('RECIPE_DIR') + '/..' %} + +package: + name: {{ name }} + version: {{ environ.get('BOB_PACKAGE_VERSION', '0.0.1') }} + +build: + entry_points: + - version.py = bob.pad.face.script.version:main + 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: + host: + - python {{ python }} + - setuptools {{ setuptools }} + - six {{ six }} + - sphinx {{ sphinx }} + - numpy {{ numpy }} + - bob.extension + - bob.bio.base + - bob.io.base + - bob.ip.base + - bob.pad.base + - bob.bio.face + - bob.bio.video + - bob.io.image + - bob.ip.color + - bob.ip.qualitymeasure + - bob.learn.libsvm + run: + - python + - setuptools + - six + - sphinx + - numpy + - bob.ip.qualitymeasure + +test: + imports: + - {{ name }} + commands: + - version.py --help + - 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 + +about: + home: https://www.idiap.ch/software/bob/ + license: GNU General Public License v3 (GPLv3) + summary: Implements tools for spoofing or presentation attack detection in face biometrics + license_family: GPL diff --git a/doc/conf.py b/doc/conf.py index ca1229378afd9da7a6b3f5b1cbb2d6f8ed10020a..52d43e50a5607a3cde58e4152ddfbaac08b38fd6 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -24,16 +24,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