# [1] GitLab page: https://docs.gitlab.com/ee/ci/yaml/#pages
# [2] CI stages: https://docs.gitlab.com/ee/ci/yaml/#stages
# [3] Tags: https://docs.gitlab.com/ee/ci/yaml/#tags

.mr_or_topfarm_group_rules: &mr_or_topfarm_group_rules
  rules:
    - if: '$CI_PROJECT_NAMESPACE == "TOPFARM" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH'
      when: on_success
    - when: never

# ===== CHECK FORMATTING =====
test_topfarm_pep8: # name the job what we like
  image: ghcr.io/prefix-dev/pixi:latest
  stage: # build, test, deploy defined by default [2]
    test
  script:
    - pixi run -e default pycodestyle --ignore=E501,W504 --exclude="*Colonel*" topfarm
  tags: # only runners with this tag can do the job [3]
    - linux
  <<: *mr_or_topfarm_group_rules

# ===== TEST TOPFARM =====
test_topfarm:
  image: ghcr.io/prefix-dev/pixi:latest
  stage: # build, test, deploy defined by default [2]
    test
  script:
    - pixi run pixi run test-all
  tags: # only runners with this tag can do the job [3]
    - linux
  <<: *mr_or_topfarm_group_rules

# ===== TEST TOPFARM ON WINDOWS =====
test_topfarm_windows: # name the job what we like
  variables:
    GIT_SUBMODULE_STRATEGY: normal
  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
    - setx PIXI_CACHE_DIR D:\.pixi_cache
    - $env:PIXI_CACHE_DIR = [System.Environment]::GetEnvironmentVariable("PIXI_CACHE_DIR","User") # update PIXI_CACHE_DIR in current shell
    - C:\Users\ernim\.pixi\bin\pixi.exe run test-all
  tags: # tag for shared runner on windows machine
    - ANMH_old
  <<: *mr_or_topfarm_group_rules

# ===== TRIGGER TRIGGERHUB PIPELINE =====
trigger_hub_test:
  stage: test
  variables:
    TRIGGER_BRANCH: $CI_COMMIT_REF_NAME
  trigger:
    project: TOPFARMPrivate/triggerhub/topfarmtriggers
    strategy: depend
  only:
    - master

# ===== TEST TOPFARM DEPLOY =====
test_topfarm_deploy:
  image: ghcr.io/prefix-dev/pixi:latest
  stage: # build, test, deploy defined by default [2]
    deploy
  script:
    - pixi run -e default hatch build
    - pixi run -e default hatch publish -r test -u $HATCH_INDEX_USER -a $HATCH_INDEX_AUTH
  tags: # only runners with this tag can do the job [3]
    - linux
  <<: *mr_or_topfarm_group_rules

# ===== BUILD WHEELS AND UPLOAD TO PYPI =====
pypi_deploy:
  image: ghcr.io/prefix-dev/pixi:latest
  stage: deploy
  script:
    - pixi run -e default hatch build
    - pixi run -e default hatch publish -u $TWINE_USERNAME -a $TWINE_PASSWORD
  tags:
    - linux
  only:
    - tags

# ===== BUILD DOCS AND PUSH TO PUBLIC WEBSITE =====
pages: # "pages" is a job specifically for GitLab pages [1]
  image: ghcr.io/prefix-dev/pixi:latest
  stage: # build, test, deploy defined by default [2]
    deploy
  script: # use sphinx to build docs, move to public page
    - pixi run -e default "cd docs; make html"
    - mv docs/build/html public/
  artifacts: # required for GitLab pages [1]
    paths:
      - public
  only:
    - master
    - /^test_doc.*/
  tags: # only runners with this tag can do the job [3]
    - linux
