From 7bd1177236392424abdaaa8ddff5b4030cda5012 Mon Sep 17 00:00:00 2001 From: Alena Petraki <a.petraki@perx.ru> Date: Mon, 22 Jul 2024 10:52:59 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20Multirepo=20Release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitlab-ci.yml | 78 +++++++++++++++++++++++++++++++++----------------- perxis-proto | 2 +- 2 files changed, 52 insertions(+), 28 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a74cc944..f367cca0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -33,7 +33,7 @@ lint: # ----- prepare release ----- # Расчет тега и формирование Changelog -get_release_info: +get_changelog: stage: pre-release image: name: orhunp/git-cliff:latest @@ -46,7 +46,6 @@ get_release_info: 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: @@ -54,49 +53,51 @@ get_release_info: paths: - current_changelog.md -# Получаем последнюю версию релиза -get_current_version: +# Релиз и запись тега в артефакт для использования в perxis +prepare_release: 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 - artifacts: - reports: - dotenv: vars.env - -# Релиз и запись тега в артефакт для использования в perxis -prepare_release: - stage: pre-release - image: registry.gitlab.com/gitlab-org/release-cli:latest + GIT_STRATEGY: clone rules: - if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"' - if: $CI_PIPELINE_SOURCE == "web" needs: - - job: get_release_info - artifacts: true - - job: get_current_version + - job: get_changelog artifacts: true script: - - echo "PERXIS_GO_RELEASE_VERSION=$RELEASE_VERSION" >> vars.env - - echo "PERXIS_GO_CURRENT_VERSION=$CURRENT_VERSION" >> vars.env - | + CURRENT_VERSION=$(git describe --tags --abbrev=0) + RELEASE_VERSION=$CURRENT_VERSION + + # Релиз выполняется только при наличии изменений + if [ $(git rev-list $CURRENT_VERSION..HEAD --count) -gt 0 ]; then + # Если релиз на мастере, то устанавливается версия равная версии в Perxis + RELEASE_VERSION=$PERXIS_RELEASE_VERSION + + # Если релиз хотфиксовый, то увеличиваем патчевую версию + if [ $HOTFIX_RELEASE == "true" ]; then + RELEASE_VERSION=$(echo $CURRENT_VERSION | awk -F . '{print $1"."$2"."$3+1}') + fi + fi + # Если новая версия совпадает со старой, значит изменений не было, и выпускать новый релиз не нужно NEEDS_RELEASE=false if [ "$RELEASE_VERSION" != "$CURRENT_VERSION" ]; then NEEDS_RELEASE=true fi - + + echo "PERXIS_GO_CURRENT_VERSION=$CURRENT_VERSION" >> vars.env + echo "PERXIS_GO_RELEASE_VERSION=$RELEASE_VERSION" >> vars.env echo "PERXIS_GO_NEEDS_RELEASE=$NEEDS_RELEASE" >> vars.env - cat current_changelog.md + printf '### Release perxis-go + PERXIS_RELEASE_VERSION: %s + HOTFIX_RELEASE: %s + CURRENT_VERSION: %s + RELEASE_VERSION: %s + NEEDS_RELEASE: %s' $PERXIS_RELEASE_VERSION $HOTFIX_RELEASE $CURRENT_VERSION $RELEASE_VERSION $NEEDS_RELEASE artifacts: when: always paths: @@ -106,6 +107,27 @@ prepare_release: # ----- release ----- +create_release_branch: + stage: release + image: bitnami/git:latest + variables: + GIT_DEPTH: 0 + GIT_STRATEGY: clone + rules: + - if: $CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE != "true" + - if: $CI_PIPELINE_SOURCE == "web" + script: + - | + if [ $NEEDS_RELEASE == "true" ] && [ $CI_COMMIT_BRANCH == "master" ]; then + git config user.email "gitlab@ci-cd.pipeline" + git config user.name "gitlab-ci" + git remote remove gitlab_origin || true + git remote add gitlab_origin https://release_gitlab_ci:$PERXIS_GO_REPO_ACCESS_TOKEN@git.perx.ru/perxis/perxis-go.git + RELEASE_BRANCH=${VERSION::-2} + git branch release/$RELEASE_BRANCH || true + git push gitlab_origin release/$RELEASE_BRANCH + fi + release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest @@ -113,6 +135,8 @@ release: - if: $CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE != "true" - if: $CI_PIPELINE_SOURCE == "web" when: manual + needs: + - create_release_branch script: - echo "Start release $VERSION" - | diff --git a/perxis-proto b/perxis-proto index e0a5fab4..fc23183a 160000 --- a/perxis-proto +++ b/perxis-proto @@ -1 +1 @@ -Subproject commit e0a5fab4b9acafc339c182afd64077640c88fecd +Subproject commit fc23183a86463b2aa81e3b7570fad1f873c1e435 -- GitLab