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
    - docs
    - 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: # 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/'

jupyter_test:
  stage: quality
  <<: *build_test
  script:
    - apt-get install pandoc -y
    - apt-get install texlive-xetex texlive-fonts-recommended texlive-plain-generic -y
    - pip install nbconvert
    - cd examples
    # Loop through .ipynb files in the examples directory
    - for file in *.ipynb; do echo "Converting $file to PDF..."; jupyter nbconvert --execute "$file" --to pdf; done

coverage_test:
  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

pages:
  stage: docs
  <<: *build_test
  script:
    - pip install sphinx sphinx-rtd-theme
    - cd docs
    - make html
    - mv _build/html/ ../public/
  artifacts:
    paths:
      - public
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

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

publish:
  stage: deploy
  <<: *build_test
  script:
    - pip install twine
    - python setup.py sdist bdist_wheel
    - twine upload --username $PYPI_USERNAME --password $PYPI_PASSWORD --verbose dist/*
  only:
    - tags