From 110789b08f26efbb02f3ae2c7a7a99eebc7961d4 Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.anjos@idiap.ch> Date: Wed, 21 Sep 2016 13:56:41 +0200 Subject: [PATCH] Move snippets from bob into here --- templates/README.md | 221 +++++++++++++++++++++++ templates/bob-128x128.png | Bin 0 -> 6547 bytes templates/bsd-license.txt | 27 +++ templates/ci-for-cxx-extensions.yml | 271 ++++++++++++++++++++++++++++ templates/ci-for-python-only.yml | 250 +++++++++++++++++++++++++ templates/favicon.ico | Bin 0 -> 4286 bytes templates/logo.png | Bin 0 -> 6266 bytes templates/readme-template.rst | 46 +++++ templates/simple-buildout.cfg | 14 ++ templates/sphinx-conf.py | 240 ++++++++++++++++++++++++ 10 files changed, 1069 insertions(+) create mode 100644 templates/README.md create mode 100644 templates/bob-128x128.png create mode 100644 templates/bsd-license.txt create mode 100644 templates/ci-for-cxx-extensions.yml create mode 100644 templates/ci-for-python-only.yml create mode 100644 templates/favicon.ico create mode 100644 templates/logo.png create mode 100644 templates/readme-template.rst create mode 100644 templates/simple-buildout.cfg create mode 100644 templates/sphinx-conf.py diff --git a/templates/README.md b/templates/README.md new file mode 100644 index 0000000..7f50ff1 --- /dev/null +++ b/templates/README.md @@ -0,0 +1,221 @@ +# New Package Instructions + +These instructions describe how to migrate or setup your package to gitlab and +new licensing terms. At the same time, we profit to update and fix files +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. + +## 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: + +```sh +$ git remote set-url origin git@gitlab.idiap.ch:bob/`basename $(pwd)` +$ 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) + + +```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 +``` + +Add the file to git: + +```sh +$ git add .gitlab-ci.yml +``` + +The ci file should work out of the box. It is long-ish, but generic to any +package in the system. + +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 +4. Go into the "Variables" section of your package setup and **add three + variables** corresponding to the documentation server, username and password + for uploading wheels and latest documentation tar balls to our (web DAV) + server. The names of the variables and values are known. If you don't know + those, please ask one of us +5. Make sure to enable the service "Build e-mails" and check all optional + boxes. You don't need to put any special e-mail addresses +6. 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` + + +## 2. Licensing + +Verify if the license of your package satisfies what is written on our +spreadsheet: + +https://docs.google.com/spreadsheets/d/1jBDLg_VvhDrQYITTepZxn7K69iDIj_FcfRSLk_13AR8/edit#gid=1146180407 + +Two possible cases: + +1. If the package is supposed to be licensed under (a 3-clause) BSD license, + then copy and replace the author name in + [bsd-license.txt](templates/bsd-license.txt). The name of the file should be + `LICENSE` (no extension) and it should sit on the root of your package +2. If the package is supposed to be licensed under GPLv3 license, then copy + [this file](http://www.gnu.org/licenses/gpl.txt) on the root of your package + with the name `COPYING` instead + +Download commands: + +```sh +# for 3-clause BSD packages +$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/bsd-license.txt > LICENSE +$ sed -i "s/Your Name <your.email@idiap.ch>/Andre Anjos <andre.anjos@idiap.ch>/g;s/<YEAR>/`date +%Y`/g" LICENSE +$ git add LICENSE +$ git rm -f COPYING # if the package used to be GPLv3 + +# for GPLv3 packages +$ curl -k --silent http://www.gnu.org/licenses/gpl.txt > COPYING +$ git add COPYING +$ git rm -f LICENSE # if the package used to be 3-clause BSD +``` + +More info about Idiap's [open-source policy here](https://secure.idiap.ch/intranet/services/technology-transfer/idiap-open-source-policy). + + +#### Headers + +Sometimes people add headers with licensing terms to their files. You should +inspect your library to make sure you don't have those. The Idiap TTO says this +strategy is OK and simplifies our lives. Make the headers of each file you have +as simple as possible, so they don't get outdated in case things change. + +Here is a minimal example (adapt to the language comment style if needed): + +```text +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +``` + +It is OK to also have your author name on the file if you wish to do so. +**Don't repeat licensing terms** already explained on the root of your package +and on the `setup.py` file. If we need to change the license, it is painful to +go through all the headers. + + +#### Setup + +The `setup.py` should be changed to: + +1. Modify the URL of your package. Make sure it now points to the gitlab page + of the package. For example: `https://gitlab.idiap.ch/bob/bob.extension` +2. Make sure the license is OK. For BSD, it should say `license="BSD"`. For + GPLv3, it should say `license="GPLv3"`. +3. Make sure the license is reflected on the classifiers entry. For BSD, it + should be `'License :: OSI Approved :: BSD License'`. For GPLv3, it should + be: `'License :: OSI Approved :: GNU General Public License v3 (GPLv3)'`. + +```sh +$ sed -i "s;github.com/bioidiap;gitlab.idiap.ch/bob;g" setup.py +``` + + +## 3. Buildout + +The default buildout file `buildout.cfg` should buildout _from the installed +distribution_ and avoid mr.developer checkouts. If you have one of those, move +it to `develop.cfg` and create a new `buildout.cfg` which should be as +[simple as possible](templates/simple-buildout.cfg). + +```sh +$ git mv buildout.cfg develop.cfg +$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/simple-buildout.cfg > buildout.cfg +$ sed -i "s/<DATE>/`date`/g;s/<PACKAGE>/`basename $(pwd)`/g" buildout.cfg +$ sed -i "s/buildout.cfg/buildout.cfg develop.cfg/g" MANIFEST.in +$ sed -i "s;github.com/bioidiap;gitlab.idiap.ch/bob;g" develop.cfg +$ git add buildout.cfg +``` + +## 4. README + +Changes are supposed to make the README smaller and easier to maintain. As of +today, many packages contain outdated installation instructions or outdated +links. More information can always be found at the documentation, which is +automatically linked from the badges. + +Just copy the [template](templates/readme-template.rst) with: + +```sh +$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/readme-template.rst > README.rst +$ sed -i "s/<DATE>/`date`/g" README.rst +$ sed -i "s/<PACKAGE>/`basename $(pwd)`/g" README.rst +# example from bob.extension, don't copy verbatim! +$ sed -i "s%<TITLE>%Python/C++ Bob Extension Building Support%g" README.rst +$ sed -i s%<SHORTINTRO>%It provides a simple mechanism for extending Bob_ by building packages using either pure python or a mix of C++ and python.%g;" README.rst +``` + +Replace the following tags by hand if you don't like/trust the `sed` lines above: + +1. `<DATE>`: To today's date. E.g.: `Mon 08 Aug 2016 09:47:28 CEST` +2. `<PACKAGE>`: With the name of your package. E.g.: `bob.extension` +3. `<TITLE>`: Replace the title (and the size of the title delimiters). E.g.: + `Python/C++ Bob Extension Building Support` +3. `<SHORTINTRO>`: With a 1 or 2 lines description of your package (it is OK to + re-use what you have in `setup.py`). E.g.: `It provides a simple mechanism + for extending Bob_ by building packages using either pure python or a mix of + C++ and python.` + + +## 5. Bootstrap + +Make sure to update your bootstrap file. The latest version is here: + +https://bootstrap.pypa.io/bootstrap-buildout.py + +Just do a `curl` to update it: + +```sh +$ curl -k --silent https://bootstrap.pypa.io/bootstrap-buildout.py > bootstrap-buildout.py +``` + +## 6. doc/conf.py + +This file needs updating to support newer versions of Sphinx and to get it in +sync with the rest of the documentation. Do this: + +```sh +$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/sphinx-conf.py > doc/conf.py +$ mkdir -pv doc/img +$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/logo.png > doc/img/logo.png +$ curl -k --silent https://gitlab.idiap.ch/bob/bob.admin/raw/master/templates/favicon.ico > doc/img/favicon.ico +$ sed -i "s/<PROJECT>/`basename $(pwd)`/g" doc/conf.py +# the next line is **just** an example, change it accordingly to your project +# for example, pick the short_description field in setup.py +$ sed -i "s%<SHORT_DESCRIPTION>%Building of Python/C++ extensions for Bob%g" doc/conf.py +``` + +## 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). diff --git a/templates/bob-128x128.png b/templates/bob-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..787d77b3ec4f143f8dd66162227b5f385f5183f1 GIT binary patch literal 6547 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	I5paez= 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 FV1j@GAe{gJ literal 0 HcmV?d00001 diff --git a/templates/bsd-license.txt b/templates/bsd-license.txt new file mode 100644 index 0000000..b115a37 --- /dev/null +++ b/templates/bsd-license.txt @@ -0,0 +1,27 @@ +Copyright (c) <YEAR> Idiap Research Institute, http://www.idiap.ch/ +Written by Your Name <your.email@idiap.ch> + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors +may be used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/templates/ci-for-cxx-extensions.yml b/templates/ci-for-cxx-extensions.yml new file mode 100644 index 0000000..7679727 --- /dev/null +++ b/templates/ci-for-cxx-extensions.yml @@ -0,0 +1,271 @@ +# 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.admin/raw/master/bootstrap-conda.sh" > 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: + - 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 + 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" + + +# 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 and tests +build_linux_27: + <<: *linux_build_job + variables: &linux_27_build_variables + <<: *linux_build_variables + PYTHON_VER: "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 + 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" + tags: + - conda-linux + +test_linux_34: + <<: *test_job + variables: *linux_34_build_variables + dependencies: + - build_linux_34 + tags: + - conda-linux + +wheels_linux_34: + <<: *wheels_job + dependencies: + - build_linux_34 + tags: + - conda-linux + + +# Linux + Python 3.5: Builds and tests +build_linux_35: + <<: *linux_build_job + variables: &linux_35_build_variables + <<: *linux_build_variables + PYTHON_VER: "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 + 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, tests and uploads the wheel +build_macosx_27: + <<: *macosx_build_job + variables: &macosx_27_build_variables + <<: *macosx_build_variables + PYTHON_VER: "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 + 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" + tags: + - conda-macosx + +test_macosx_34: + <<: *test_job + variables: *macosx_34_build_variables + dependencies: + - build_macosx_34 + tags: + - conda-macosx + +wheels_macosx_34: + <<: *wheels_job + dependencies: + - build_macosx_34 + tags: + - conda-macosx + + +# Mac OSX + Python 3.5: Builds, tests, uploads the wheel and the latest docs +build_macosx_35: + <<: *macosx_build_job + variables: &macosx_35_build_variables + <<: *macosx_build_variables + PYTHON_VER: "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 + dependencies: + - build_macosx_35 + tags: + - conda-macosx \ No newline at end of file diff --git a/templates/ci-for-python-only.yml b/templates/ci-for-python-only.yml new file mode 100644 index 0000000..815a195 --- /dev/null +++ b/templates/ci-for-python-only.yml @@ -0,0 +1,250 @@ +# 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.admin/raw/master/bootstrap-conda.sh" > 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" + + +# 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 \ No newline at end of file diff --git a/templates/favicon.ico b/templates/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4cc3264302627d40868261add69eb755856611b6 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/templates/logo.png b/templates/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b60858a7068bf45c1ed8e3da12fe244ccdcfe85d GIT binary patch literal 6266 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 literal 0 HcmV?d00001 diff --git a/templates/readme-template.rst b/templates/readme-template.rst new file mode 100644 index 0000000..5987d80 --- /dev/null +++ b/templates/readme-template.rst @@ -0,0 +1,46 @@ +.. vim: set fileencoding=utf-8 : +.. <DATE> + +.. image:: http://img.shields.io/badge/docs-stable-yellow.png + :target: http://pythonhosted.org/<PACKAGE>/index.html +.. image:: http://img.shields.io/badge/docs-latest-orange.png + :target: https://www.idiap.ch/software/bob/docs/latest/bob/<PACKAGE>/master/index.html +.. image:: https://gitlab.idiap.ch/bob/<PACKAGE>/badges/master/build.svg + :target: https://gitlab.idiap.ch/bob/<PACKAGE>/commits/master +.. image:: https://img.shields.io/badge/gitlab-project-0000c0.svg + :target: https://gitlab.idiap.ch/bob/<PACKAGE> +.. image:: http://img.shields.io/pypi/v/<PACKAGE>.png + :target: https://pypi.python.org/pypi/<PACKAGE> +.. image:: http://img.shields.io/pypi/dm/<PACKAGE>.png + :target: https://pypi.python.org/pypi/<PACKAGE> + + +========= + <TITLE> +========= + +This package is part of the signal-processing and machine learning toolbox +Bob_. <SHORTINTRO> + + +Installation +------------ + +Follow our `installation`_ instructions. Then, using the Python interpreter +provided by the distribution, bootstrap and buildout this package:: + + $ python bootstrap-buildout.py + $ ./bin/buildout + + +Contact +------- + +For questions or reporting issues to this software package, contact our +development `mailing list`_. + + +.. Place your references here: +.. _bob: https://www.idiap.ch/software/bob +.. _installation: https://gitlab.idiap.ch/bob/bob/wikis/Installation +.. _mailing list: https://groups.google.com/forum/?fromgroups#!forum/bob-devel \ No newline at end of file diff --git a/templates/simple-buildout.cfg b/templates/simple-buildout.cfg new file mode 100644 index 0000000..ba79504 --- /dev/null +++ b/templates/simple-buildout.cfg @@ -0,0 +1,14 @@ +; vim: set fileencoding=utf-8 : +; <DATE> + +[buildout] +parts = scripts +develop = . +eggs = <PACKAGE> +extensions = bob.buildout +newest = false +verbose = true + +[scripts] +recipe = bob.buildout:scripts +dependent-scripts = true \ No newline at end of file diff --git a/templates/sphinx-conf.py b/templates/sphinx-conf.py new file mode 100644 index 0000000..31fa2eb --- /dev/null +++ b/templates/sphinx-conf.py @@ -0,0 +1,240 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : + +import os +import sys +import glob +import pkg_resources + + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +needs_sphinx = '1.3' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = [ + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.ifconfig', + 'sphinx.ext.autodoc', + 'sphinx.ext.autosummary', + 'sphinx.ext.doctest', + 'sphinx.ext.graphviz', + 'sphinx.ext.intersphinx', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', + ] + +import sphinx +if sphinx.__version__ >= "1.4.1": + extensions.append('sphinx.ext.imgmath') +else: + extensions.append('sphinx.ext.pngmath') + +# Always includes todos +todo_include_todos = True + +# Generates auto-summary automatically +autosummary_generate = True + +# Create numbers on figures with captions +numfig = True + +# If we are on OSX, the 'dvipng' path maybe different +dvipng_osx = '/opt/local/libexec/texlive/binaries/dvipng' +if os.path.exists(dvipng_osx): pngmath_dvipng = dvipng_osx + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'<PROJECT>' +import time +copyright = u'%s, Idiap Research Institute' % time.strftime('%Y') + +# Grab the setup entry +distribution = pkg_resources.require(project)[0] + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = distribution.version +# The full version, including alpha/beta/rc tags. +release = distribution.version + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['links.rst'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# Some variables which are useful for generated material +project_variable = project.replace('.', '_') +short_description = u'<SHORT_DESCRIPTION>' +owner = [u'Idiap Research Institute'] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +import sphinx_rtd_theme +html_theme = 'sphinx_rtd_theme' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] + +# The name for this set of Sphinx documents. If None, it defaults to +# "<project> v<release> documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = project_variable + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +html_logo = 'img/logo.png' + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +html_favicon = 'img/favicon.ico' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a <link> tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = project_variable + u'_doc' + + +# -- Post configuration -------------------------------------------------------- + +# Included after all input documents +rst_epilog = """ +.. |project| replace:: Bob +.. |version| replace:: %s +.. |current-year| date:: %%Y +""" % (version,) + +# Default processing flags for sphinx +autoclass_content = 'class' +autodoc_member_order = 'bysource' +autodoc_default_flags = [ + 'members', + 'undoc-members', + 'inherited-members', + 'show-inheritance', + ] + +# For inter-documentation mapping: +from bob.extension.utils import link_documentation +intersphinx_mapping = link_documentation() + +# We want to remove all private (i.e. _. or __.__) members +# that are not in the list of accepted functions +accepted_private_functions = ['__array__'] + +def member_function_test(app, what, name, obj, skip, options): + # test if we have a private function + if len(name) > 1 and name[0] == '_': + # test if this private function should be allowed + if name not in accepted_private_functions: + # omit privat functions that are not in the list of accepted private functions + return skip + else: + # test if the method is documented + if not hasattr(obj, '__doc__') or not obj.__doc__: + return skip + return False + +def setup(app): + app.connect('autodoc-skip-member', member_function_test) \ No newline at end of file -- GitLab