image: python:3.10

# 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"
    LIBGL_ALWAYS_INDIRECT : 0
    SREGISTRY_URL : "https://cloud.sylabs.io/"
    SREGISTRY_USERNAME : nyhuma

# Pip's cache doesn't store the python packages
# https://pip.pypa.io/en/stable/topics/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_template: &build_test
 before_script:
    - apt-get update -y && apt-get install libgl1-mesa-glx xvfb -y
    - python -m pip install --upgrade pip
    - python --version  # For debugging
    - pip install virtualenv
    - virtualenv venv
    - source venv/bin/activate

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

build:
    stage: build  
    <<: *build_test
    script:
        - pip install .


test: # This job runs in the build stage, which runs first.
    stage: test
    <<: *build_test
    script:
        - pip install .
        - pip install -r requirements_dev.txt
        - pytest tests/.

lint-test-job: # This job also runs in the test stage.
    stage: quality
    <<: *build_test    # It can run at the same time as unit-test-job (in parallel).
    script:
        - pip install flake8
        - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude='venv/'
        - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics   --exclude='venv/'

coverage:
  stage: quality
  <<: *build_test
  script:
        - pip install .
        - pip install -r requirements_dev.txt
        - python -m  pytest --cov=ntrfc tests
        - coverage xml
  coverage: '/TOTAL.*\s+(\d+\%)/'
  artifacts:
    paths:
      - coverage.xml
    when: always


build-singularity:
  image: 
    name: quay.io/singularity/singularity:v3.7.0
    entrypoint: [""]
  stage: deploy 
  only:
    - tags
    - master
  script:
    - echo $sylabstoken  > SYLABS_TOKEN_FILE
    - singularity remote login --username $SREGISTRY_USERNAME --tokenfile SYLABS_TOKEN_FILE
    - singularity build --remote library://nyhuma/ntrflows/ntr.sif:latest singularitybuild/ntrfc_container.def
  interruptible: true