# vim: ts=2

stages:
  - testing
  - release

run-tests:
  stage: testing
  script:
    - git clean -dfx
    - uv sync --all-extras --no-progress
    - source .venv/bin/activate
    - ./run-tests.sh -V
    - deactivate
  coverage: /TOTAL.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/
  artifacts:
    paths:
      - coverage.xml
    when: on_success
    access: developer
    expire_in: "10 mins"
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_COMMIT_TAG =~ /^v\d+/

sonarqube-check:
  stage: testing
  needs:
    - run-tests
  variables:
    SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache
    GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task
  cache:
    key: "${CI_JOB_NAME}"
    paths:
      - .sonar/cache
  script:
    - sonar-scanner
  allow_failure: true
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_COMMIT_TAG =~ /^v\d+/

pypi-release:
  stage: release
  needs:
    - run-tests
  rules:
    - if: $CI_COMMIT_TAG =~ /^v\d+/
  script:
    - rm -f dist/*
    - uv build
    - uvx twine check dist/*
    - TWINE_USERNAME=${PYPI_USER} TWINE_PASSWORD=${PYPI_PASSWORD} uvx twine upload --skip-existing --non-interactive dist/*