image: continuumio/anaconda3

stages:
  - test
  - test_plugins
  - build
  - deploy

# ===== TEST PyWake debian=====
test_PyWake:  # name the job what we like
  image: continuumio/anaconda3
  stage:  # build, test, deploy defined by default [2]
    test
  script:
  - pip install -e .[test] --timeout 3600 --default-timeout=3600
  - pytest
  tags:  # only runners with this tag can do the job [3]
  - ci-ubuntu
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"



# ===== Check code style =====
check_code_style:  # name the job what we like
  stage:  # build, test, deploy defined by default [2]
    test
  script:
  - pip install -e . --user
  - pycodestyle --ignore=E501,W504,E741 py_wake
  tags:  # only runners with this tag can do the job [3]
  - ci-ubuntu
  rules:
  - if: $CI_COMMIT_BRANCH == "master"
  - if: $CI_PIPELINE_SOURCE == "merge_request_event"

# ===== TEST PyWake on Windows =====
test_PyWake_windows:  # name the job what we like
  stage:  # build, test, deploy defined by default [2]
    test
  coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
  script:  # runs on windows machine due to tag below
  - conda init powershell
  - "if (test-path $PROFILE.CurrentUserAllHosts) { & $PROFILE.CurrentUserAllHosts}"
  - conda activate py38
  - pip install -e .[test] --no-deps
  - pytest --cov-report term-missing:skip-covered --cov=py_wake --cov-config .coveragerc
  tags:  # tag for shared runner on windows machine
  - ANMH_old
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

# ===== Trigger PyWakePark pipeline =====
trigger_pywake_park_test:
  stage: test_plugins
  variables:
    TRIGGER_BRANCH: $CI_COMMIT_REF_NAME
  trigger:
    project: TOPFARM/cuttingedge/pywake/pywake_park
    strategy: depend
  only:
    - schedules

# ===== Trigger PyWakeEllipSys pipeline =====
trigger_pywake_ellipsys_test:
  stage: test_plugins
  variables:
    TRIGGER_BRANCH: $CI_COMMIT_REF_NAME
  trigger:
    project: TOPFARM/cuttingedge/pywake/pywake_ellipsys
    strategy: depend
  only:
    - schedules

# ===== Trigger TriggerHub pipeline =====
trigger_hub_test:
  stage: test
  variables:
    TRIGGER_BRANCH: $CI_COMMIT_REF_NAME
  trigger:
    project: TOPFARMPrivate/triggerhub/pywaketriggers
    strategy: depend
  only:
    - master


# ===== build documentation =====
build_pages:  # "pages" is a job specifically for GitLab pages [1]
  stage:  # build, test, deploy defined by default [2]
    test
  script:  # use sphinx to build docs, move to public page
  - apt-get update
  - apt-get -y install make pandoc graphviz
  - pip install --upgrade pip
  - pip install pypandoc
  - pip install sphinx --upgrade
  - pip install nbsphinx --upgrade
  - pip install nbconvert --upgrade
  - pip install git+https://gitlab.windenergy.dtu.dk/TOPFARM/TopFarm2.git
  - pip install -e .[test]
  - cd docs/validation_report
  - python generate_validation_figures.py
  - cd report
  - apt-get install -y texlive-latex-extra
  - pdflatex validation_report.tex
  - bibtex validation_report.aux
  - pdflatex validation_report.tex
  - pdflatex validation_report.tex
  - cd ../../
  - pwd
  - make html
  #- make latexpdf
  - cd ../
  artifacts:  # required for GitLab pages [1]
    paths:
    - docs/build/html
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: manual
  tags:  # only runners with this tag can do the job [3]
  - ci-ubuntu


# ===== publish documentation =====
pages:  # "pages" is a job specifically for GitLab pages [1]
  stage:  # build, test, deploy defined by default [2]
    deploy
  dependencies: 
    - build_pages
  script:  # use sphinx to build docs, move to public page
  - mv docs/build/html public/
  artifacts:  # required for GitLab pages [1]
    paths:
    - public
  rules:
    - if: $CI_COMMIT_BRANCH == "master"
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: manual
  tags:  # only runners with this tag can do the job [3]
  - ci-ubuntu



pypi_linux:
  stage:
    deploy
  only:
    - tags
    - test_pypi
  script:
    - apt-get update
    - apt-get install -y pandoc
    - pip install --upgrade pip
    - pip install pypandoc
    - pip install -e .[test] --upgrade
    - python -c 'from git_utils import get_tag; get_tag(verbose=True)'
    - python -m pip install -U setuptools wheel
    - python setup.py sdist bdist_wheel
    - python -m pip install -U twine
    - python -c 'from git_utils import rename_dist_file; rename_dist_file()'
    - twine upload dist/* -u $TWINE_USERNAME -p $TWINE_PASSWORD
    #- twine upload --repository-url https://test.pypi.org/legacy/ dist/* -u $TWINE_USERNAME -p $TWINE_PASSWORD # for testing purposes
  tags:
  - ci-ubuntu

build_conda:
  stage: build
  image: condaforge/mambaforge:latest
  dependencies: []
  script:
    - export VERSION=`git describe --tags --always | sed 's/v//' | sed 's/-/.dev/' | sed 's/-/_/'`
    - mamba install -c conda-forge --override-channels -y boa conda-verify
    - conda mambabuild --no-anaconda-upload -c conda-forge --override-channels --output-folder ./conda_channel ./recipe
  artifacts:
    untracked: false
    expire_in: "3 days"
    paths: ["conda_channel/noarch/py_wake*.tar.bz2"]
  rules:
    - if: $CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED
    - if:  $CI_PIPELINE_SOURCE == "merge_request_event"
      when: manual
      allow_failure: true
      changes:
        - setup.py
        - recipe/meta.yaml
    - when: never
  tags:
    -  ci-ubuntu

deploy_conda:
  stage: deploy
  image: docker:latest
  dependencies: ["build_conda"]
  needs: ["build_conda"]
  script:
    - CONDA_PKG=`basename ./conda_channel/noarch/py_wake*.tar.bz2`
    - cp  -p ./conda_channel/noarch/$CONDA_PKG /conda_channel_open/noarch/${CONDA_PKG}.tmp
    - chown 1000:1000 /conda_channel_open/noarch/${CONDA_PKG}.tmp
    - mv /conda_channel_open/noarch/${CONDA_PKG}.tmp /conda_channel_open/noarch/${CONDA_PKG}
  rules:
    - if: $CI_COMMIT_TAG && $CI_COMMIT_REF_PROTECTED
  tags:
    -  conda_channel

# current
# pypi_windows:
#   stage:
#     deploy
#   only:
#     - tags
#     - test_pypi
#   script:
#     - c:/Anaconda3/envs/pyTopfarm/python.exe setup.py bdist_wheel
#     - twine upload dist/* -u %TWINE_USERNAME% -p %TWINE_PASSWORD%
#     #- twine upload --repository-url https://test.pypi.org/legacy/ dist/* -u %TWINE_USERNAME% -p %TWINE_PASSWORD% # for testing purposes
#   tags:
#     - CPAV_old_PC

