stages:
  - build
  - test
  - package
  - publish
  - release

.kotlin-job: &kotlin
  image: domaindrivenarchitecture/ddadevops-kotlin:4.10.7
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - .gradle/wrapper
      - .gradle/caches
  before_script:
    - echo "---------- Start CI ----------"
    - export GRADLE_USER_HOME=`pwd`/.gradle
    - chmod +x gradlew
    - export RELEASE_ARTIFACT_TOKEN=$MEISSA_REPO_BUERO_RW
    - echo "------ commit info ---------------"
    - echo $CI_COMMIT_TAG
    - echo $CI_COMMIT_REF_NAME
    - echo "----------------------------------"

.tag_only: &tag_only
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: never
    - if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'


build:
  <<: *kotlin
  stage: build
  script:
    - pyb build
  artifacts:
    paths:
      - build/libs/*.jar
    expire_in: 1 week


variables:
  DOCKER_TLS_CERTDIR: "/certs"


test:
  <<: *tag_only
  stage: test
  image: docker:24.0.5
  services:
    - docker:24.0.5-dind
  dependencies:
    - build
  before_script:
    - echo "---------- BEFORE -------------"
    - echo "$CI_REGISTRY_PASSWORD" | docker login $CI_REGISTRY --username $CI_REGISTRY_USER --password-stdin
  script:
    - echo "---------- TEST -------------"
    - apk update && apk add bash openjdk17 git
    - export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
    - docker build --pull -t "$CI_REGISTRY_IMAGE" .
    - docker run --privileged -dit --name provs_test -v /var/run/docker.sock:/var/run/docker.sock $CI_REGISTRY_IMAGE
    - docker inspect -f '{{.State.Running}}' provs_test
    - ./gradlew -x assemble test -Dtestdockerwithoutsudo=true -DexcludeTags=extensivecontainertest,nonci
  artifacts:
    when: on_failure
    paths:
      - build/reports/*
    reports:
      junit: build/test-results/test/TEST-*.xml


package:
  <<: *kotlin
  <<: *tag_only
  stage: package
  script:
    - pyb package
  artifacts:
    paths:
      - build/libs/*.jar
      - build/libs/*.lst


publish-maven-package-to-gitlab:
  <<: *kotlin
  <<: *tag_only
  stage: publish
  script:
    - ./gradlew -x assemble -x test publishLibraryPublicationToGitlabRepository


publish-maven-package-to-meissa:
  <<: *kotlin
  <<: *tag_only
  stage: publish
  allow_failure: true
  before_script:
    - export MEISSA_PUBLISH_PACKAGE_TOKEN=$MEISSA_REPO_BUERO_RW
  script:
    - ./gradlew -x assemble -x test publishLibraryPublicationToMeissaRepository


release-to-meissa:
  <<: *kotlin
  <<: *tag_only
  stage: release
  allow_failure: true
  script:
    - pyb publish_release

after_script:
  - echo "---------- End CI ----------"