image: python:3.10
default:
  tags:
    - docker

stages:
  - build
  - release
  - deploy

cache:
  paths:
    - .venv
    - dist

variables:
  PACKAGE_REGISTRY_URL: ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi
  WHEEL_NAME: 'updates_notifier-${CI_COMMIT_TAG}-py3-none-any.whl'

build-package:
  before_script:
    - pip install -U pip
    - pip install poetry
    - poetry --version
    # forces poetry to create the virtualenv inside project directory
    - poetry config virtualenvs.in-project true
    - poetry check
    - poetry install -vv
  stage: build
  script:
    - poetry build
  artifacts:
    paths:
      - dist/*.whl
    expire_in: 1 week

publish-package:
  before_script:
    - pip install -U pip
    - pip install poetry
    - poetry --version
    # forces poetry to create the virtualenv inside project directory
    - poetry config virtualenvs.in-project true
    - poetry config repositories.gitlab ${PACKAGE_REGISTRY_URL}
    - poetry check
    - poetry install -vv
  stage: release
  rules:
    - if: '$CI_COMMIT_TAG'
  script:
    - poetry publish -r gitlab -u gitlab-ci-token -p ${CI_JOB_TOKEN}

create-release:
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  stage: release
  rules:
    - if: '$CI_COMMIT_TAG'
  script:
    - echo "Creating releaseā€¦"
    - |
      release-cli create --name "updates-notifier $CI_COMMIT_TAG release" \
      --description "Auto-generated release." --tag-name "$CI_COMMIT_TAG" \
      --ref "$CI_COMMIT_TAG" \
      --assets-link "{\"url\":\"${PACKAGE_REGISTRY_URL}/files/$(sha256sum dist/${WHEEL_NAME})/${WHEEL_NAME}\",\"name\":\"${WHEEL_NAME}\", \"link_type\": \"package\"}"

build-publish-image:
  image: docker:19.03.12
  stage: deploy
  rules:
    - if: '$CI_COMMIT_TAG'
  services:
    - docker:19.03.10-dind
  variables:
    IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
    IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - |
      docker build -t $IMAGE_TAG \
      --build-arg UPDATES_NOTIFIER_VERSION=$CI_COMMIT_TAG \
      -f cmd/Dockerfile  .
    - docker push $IMAGE_TAG
    - docker tag $IMAGE_TAG $IMAGE_TAG_LATEST
    - docker push $IMAGE_TAG_LATEST