# 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:3.7

# 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
    - venv/

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
  - build
  - deploy

unit-test-job:  
  stage: test
  script:
    - make test

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

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

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/pyzenkit*.whl dist/pyzenkit*.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
    - devel