Skip to content
Snippets Groups Projects
.gitlab-ci.yml 4.8 KiB
Newer Older
# Official language image. Look for the different tagged releases at:
# https://hub.docker.com/r/library/python/tags/
image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/python:latest

# Change pip's cache directory to be inside the project directory since we can
# only cache local items.
variables:
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"

# Pip's cache doesn't store the python packages
# https://pip.pypa.io/en/stable/reference/pip_install/#caching
#
# If you want to also cache the installed packages, you have to install
# them in a virtualenv and cache it as well.
cache:
  paths:
    - .cache/pip

before_script:
  - pip install virtualenv
  - make show-version # Print out python version for debugging
  - virtualenv venv
  - source venv/bin/activate
  - make deps

stages:          # List of stages for jobs, and their order of execution
  - test
  - check-warnings
  - build
  - deploy

unit-test-job:  
  stage: test
  script:
    - make test 2>&1 | tee errors.log
    paths:
      - errors.log
Rajmund Hruška's avatar
Rajmund Hruška committed
      junit: nose2-junit.xml
unit-test-2.7-job:
  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/python:2.7
  stage: test
  script:
    - make test

unit-test-3.7-job:
  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/python:3.7
  stage: test
  script:
    - make test 2>&1 | tee errors-3.7.log
  artifacts:
    when: always
    paths:
      - errors-3.7.log

unit-test-3.8-job:
  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/python:3.8
  stage: test
  script:
    - make test 2>&1 | tee errors-3.8.log
  artifacts:
    when: always
    paths:
      - errors-3.8.log

unit-test-3.9-job:
  image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/python:3.9
  stage: test
  script:
    - make test 2>&1 | tee errors-3.9.log
  artifacts:
    when: always
    paths:
      - errors-3.9.log

check-deprecation-warnings-3.7:
  before_script: []
  stage: check-warnings
  script:
    - "if [[ $(grep DeprecationWarning errors-3.7.log) ]]; then cat errors-3.7.log; exit 1; fi"
  allow_failure: true

check-deprecation-warnings-3.8:
  before_script: []
  stage: check-warnings
  script:
    - "if [[ $(grep DeprecationWarning errors-3.8.log) ]]; then cat errors-3.8.log; exit 1; fi"
  allow_failure: true

check-deprecation-warnings-3.9:
  before_script: []
  stage: check-warnings
  script:
    - "if [[ $(grep DeprecationWarning errors-3.9.log) ]]; then cat errors-3.9.log; exit 1; fi"
  allow_failure: true

pylint-test-job:
  stage: test
  script:
    - make pylint

pyflakes-test-job:
  stage: test
  script:
    - make pyflakes

check-deprecation-warnings:
  before_script: []
  stage: check-warnings
  script:
    - "if [[ $(grep DeprecationWarning errors.log) ]]; then cat errors.log; exit 1; fi"
  allow_failure: true

build-job:
  stage: build
  script:
    - make buildbot
    - git clone https://gitlab-ci-token:$SIGNER_TOKEN@$SIGNER_REPO
    - bash signer/init_keyring.sh
    - python signer/signer.py --verbose $GPG_KEY "$PWD/dist"
  artifacts:
    paths:
      - dist
  only:
    - devel
    - master

sphinx-metadata-job:
  stage: build
  script:
    - printf "{\n\"codename\":\"$CI_COMMIT_BRANCH\",\n" > metadata.json
    - printf "\"suite\":$(if [ "$CI_COMMIT_BRANCH" == "master" ]; then echo \"stable\"; else echo \"unstable\"; fi),\n" >> metadata.json
    - printf "\"bversion\":\"$(make show-version)\",\n" >> metadata.json
    - printf "\"revision\":\"$CI_COMMIT_SHA\",\n" >> metadata.json
    - printf "\"bnumber\":\"$CI_PIPELINE_ID\",\n" >> metadata.json
    - printf "\"bdate\":\"$(date '+%Y-%m-%d %T')\"\n}\n" >> metadata.json
  artifacts:
    paths:
      - metadata.json
  only:
    - master
    - devel

twine-job:
  stage: deploy
  script:
    - printf "[pypi]\nusername = __token__\npassword = $TWINE_TOKEN\n" > .pypirc
    - mkdir dist2
    - cp dist/*.whl dist/*.tar.gz dist2/.
    - twine upload 'dist2/*' --skip-existing --config-file .pypirc
  only:
    - master

pages:
  stage: deploy
  script:
    - make docs
    - curl -L --header "JOB-TOKEN:$CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/artifacts/devel/download?job=pages" -o devel.zip
    - curl -L --header "JOB-TOKEN:$CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/artifacts/master/download?job=pages" -o master.zip
    - unzip -n '*.zip' || true # Ignore not existing zipfiles
    - mkdir -p public/"$CI_COMMIT_BRANCH"
    - mkdir -p public/"$CI_COMMIT_BRANCH"/files
    - cp -rf doc/_build/html public/"$CI_COMMIT_BRANCH"
    - cp -rf dist/* public/"$CI_COMMIT_BRANCH"/files/.
    - cd public/"$CI_COMMIT_BRANCH"/files
    - echo "<html><body><h1>Directory listing:</h1>" > ./index.html
    - find -exec echo "<a href='{}'>{}</a><br/>" \; | sort >> ./index.html
    - echo "</body></html>" >> ./index.html
  artifacts:
    name: "$CI_COMMIT_BRANCH"
    paths:
      - public
  only:
    - master