image: docker.km3net.de/base/python:3

# 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"

cache:
  paths:
    - .cache/pip
    - venv/
  key: "$CI_COMMIT_REF_SLUG"

stages:
  - test
  - coverage
  - doc
  - release

.virtualenv_template: &virtualenv_definition |
  python -V
  pip install virtualenv
  virtualenv venv
  source venv/bin/activate
  pip install -r requirements-dev.txt
  make install

.junit_template: &junit_definition
    artifacts:
      reports:
        junit: "reports/junit*.xml"

test-py3.5:
    image: docker.km3net.de/base/python:3.5
    stage: test
    script:
        - *virtualenv_definition
        - make test
    <<: *junit_definition
    allow_failure: true

test-py3.6:
    image: docker.km3net.de/base/python:3.6
    stage: test
    script:
        - *virtualenv_definition
        - make test
    <<: *junit_definition

test-py3.7:
    image: docker.km3net.de/base/python:3.7
    stage: test
    script:
        - *virtualenv_definition
        - make test
    <<: *junit_definition

test-py3.8:
    image: docker.km3net.de/base/python:3.8
    stage: test
    script:
        - *virtualenv_definition
        - make test
    <<: *junit_definition

test-py3.9:
    image: docker.km3net.de/base/python:3.9
    stage: test
    script:
        - *virtualenv_definition
        - make test
    <<: *junit_definition

test-py3.10:
    image: docker.km3net.de/base/python:3.10
    stage: test
    script:
        - *virtualenv_definition
        - make test
    <<: *junit_definition

test-julia-1.6:
    image: docker.km3net.de/base/julia:1.6
    stage: test
    script:
        - julia -e 'import Pkg; Pkg.develop(path=".")'

code-style:
    image: docker.km3net.de/base/python:3.7
    stage: test
    script:
        - *virtualenv_definition
        - make black-check
    allow_failure: true

coverage:
    image: docker.km3net.de/base/python:3.6
    stage: coverage
    script:
        - *virtualenv_definition
        - make install-dev
        - "make test-cov|grep TOTAL| awk '{printf \"COVERAGE: %.2f%%\", (1-$3/$2)*100 }'"
    coverage: '/COVERAGE:\s*([0-9]*\.[0-9]*%)/'
    #     - make test-cov
    # coverage: '/TOTAL.+ ([0-9]{1,3}%)/'
    artifacts:
        paths:
            - reports/coverage


build-docs:
    image: docker.km3net.de/base/python:3.6
    stage: doc
    script:
        - *virtualenv_definition
        - cd doc && make clean && make html
    cache: {}

pages:
    image: docker.km3net.de/base/python:3.6
    stage: doc
    script:
        - *virtualenv_definition
        - cd doc && make clean && make html
        - mv _build/html ../public/
        - cd .. && mv reports/coverage public/coverage
    artifacts:
        paths:
            - public
    cache: {}
    only:
        - tags
        - master


pypi:
    image: docker.km3net.de/base/python:3
    stage: release
    cache: {}
    script:
        - pip install -U twine wheel
        - python setup.py sdist
        - python setup.py bdist_wheel
        - twine upload dist/*
    only:
        - tags
        - master
