---
include:
  - local: .gitlab-ci/versioning/gitversion.yml
  - local: .gitlab-ci/git/create_tag.yml

stages:
  - build
  - release

gitversion:
  extends: .versioning:gitversion
  stage: .pre
  tags:
    - gitlab-org-docker
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch

build:
  stage: build
  image: python:3.9.21
  tags:
    - gitlab-org-docker
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch
  needs:
    - job: gitversion
      artifacts: true
  script:
    - sed -i "s/0.0.1/${GitVersion_MajorMinorPatch}/" src/OptimaLab35/__init__.py
    - cat src/OptimaLab35/__init__.py
    - python3 -m pip install build
    - python3 -m build --wheel --sdist -s src
  artifacts:
    paths:
      - src/dist/*
    expire_in: 1 day

publish:
  stage: release
  image: python:3.9.21
  tags:
    - gitlab-org-docker
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch
  variables:
    TWINE_USERNAME: "__token__"
    TWINE_PASSWORD: $TWINE_API
  needs:
    - job: build
      artifacts: true
  script:
    - python3 -m pip install twine
    - python3 -m twine upload src/dist/*

create_tag:
  extends: .git:create_tag
  stage: release
  tags:
    - gitlab-org-docker
  variables:
    VERSION: $GitVersion_SemVer
    TOKEN: $GITLAB_TOKEN
  needs:
    - job: gitversion
      artifacts: true
  rules:
    - if: $CI_COMMIT_TAG
      when: never # Do not run this job when a tag is created manually
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Run this job when commits are pushed or merged to the default branch