Skip to content
Snippets Groups Projects
.gitlab-ci.yml 3.96 KiB
image: golang:1.22

stages:
  - test
  - pre-release
  - release

run_tests:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
  stage: test
  script:
    - go install gotest.tools/gotestsum@latest
    - gotestsum --format testname --junitfile report.xml
  artifacts:
    when: always
    reports:
      junit: report.xml

lint:
  image: golangci/golangci-lint:v1.56-alpine
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
  stage: test
  script:
    - golangci-lint run --issues-exit-code 1 --print-issued-lines=false --new-from-rev $CI_MERGE_REQUEST_DIFF_BASE_SHA --out-format code-climate:gl-code-quality-report.json,line-number
  artifacts:
    reports:
      codequality: gl-code-quality-report.json
    paths:
      - gl-code-quality-report.json

# ----- prepare release -----

# Расчет тега и формирование Changelog
get_release_info:
  stage: pre-release
  image:
    name: orhunp/git-cliff:latest
    entrypoint: [ "" ]
  rules:
    - if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"' # Запуск при инициации из perxis
    - if: $CI_PIPELINE_SOURCE == "web"                                      # или при ручном запуске из GUI
      when: manual                    
  variables:
    GIT_STRATEGY: clone
    GIT_DEPTH: 0
  script:
    - echo "RELEASE_VERSION=$(git-cliff --bumped-version)" >> vars.env                # Расчет новой версии релиза через git-cliff
    - echo "$(git-cliff --unreleased | sed '1,6d' | sed '$d')" > current_changelog.md # удалить "лишние" строки для Changelog
  artifacts:
    reports:
      dotenv: vars.env # Use artifacts:reports:dotenv to expose the variables to other jobs
    paths:
      - current_changelog.md

# Получаем последнюю версию релиза
get_current_version:
  stage: pre-release
  image: bitnami/git:latest
  rules:
    - if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"'
    - if: $CI_PIPELINE_SOURCE == "web"
  needs:
    - job: get_release_info
  variables:
    GIT_STRATEGY: clone
    GIT_DEPTH: 0
  script:
    - echo CURRENT_VERSION=$(git describe --tags --abbrev=0) >> vars.env