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



.before_script_template: &environment
 before_script:
    - apt-get update -y
    # graphics
    - apt-get install libgl1-mesa-glx xvfb -y
    # gmsh
    - apt-get install libglu1-mesa libxcursor1 libxinerama1 -y
    # repository
    - 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

cache:
    paths:
        - .cache/pip
        - venv/
        - /var/cache/apt/archives/

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

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

lint_test: # This job also runs in the test stage.
    stage: quality
    <<: *environment    # 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/'
    dependencies:
        - build

jupyter_test:
  stage: quality
  <<: *environment
  script:
    - apt-get install pandoc -y
    - apt-get install texlive-xetex texlive-fonts-recommended texlive-plain-generic -y
    - pip install nbconvert ipykernel
    - pip install . #todo: this should not be necessary
    - 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
  dependencies:
    - build

coverage_test:
  stage: quality
  <<: *environment
  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
  dependencies:
      - build


docs:
  stage: docs
  <<: *environment
  script:
    - pip install sphinx sphinx-rtd-theme
    - cd docs
    - make html
    - mv _build/html/ ../public/
  artifacts:
    paths:
      - public
  only:
    - tags

pages:
  stage: deploy
  <<: *environment
  script:
  - mkdir .public
  - cp -r * .public
  - mv .public public
  artifacts:
    paths:
    - public
  only:
    - tags
  dependencies:
      - docs

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
  <<: *environment
  script:
    - pip install twine
    - python setup.py sdist bdist_wheel
    - twine upload --username $PYPI_USERNAME --password $PYPI_PASSWORD --verbose dist/*
  only:
    - tags
