From 92b29e18ad637768259719bb7748fd56a618a574 Mon Sep 17 00:00:00 2001
From: "a.petraki" <a.petraki@perx.ru>
Date: Thu, 25 Jul 2024 11:39:04 +0300
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=BD=D0=BE=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?=
 =?UTF-8?q?=20=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D0=BD=D0=BE=D0=B9=20=D0=B2?=
 =?UTF-8?q?=D0=B5=D1=82=D0=BA=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitlab-ci.yml | 35 ++++++++++++++++++++++++++++++++---
 1 file changed, 32 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3ea37cd..3209b61 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -40,11 +40,17 @@ prepare_release:
       CURRENT_VERSION=$(git describe --tags --abbrev=0)
       RELEASE_VERSION=$CURRENT_VERSION
       
-      # Релиз perxis-proto - это всегда изменения апи и хотфиксом быть не может. Выполняется только при наличии изменений
-      if [ $HOTFIX_RELEASE != "true" ] && [ $(git rev-list $CURRENT_VERSION..HEAD --count) -gt 0 ]; then
+      # Релиз выполняется только при наличии изменений
+      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
@@ -70,6 +76,29 @@ 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_PROTO_REPO_ACCESS_TOKEN@git.perx.ru/perxis/perxis-go.git
+        RELEASE_BRANCH=${VERSION:1:-2}
+        git branch release/$RELEASE_BRANCH || true
+        git push gitlab_origin release/$RELEASE_BRANCH
+      fi
+
+# Релиз выполняется только при `$NEEDS_RELEASE:true`. Если релиз не нужен, джоба выйдет с
+# кодом 203, и это верное поведение
 release:
   stage: release
   image: registry.gitlab.com/gitlab-org/release-cli:latest
-- 
GitLab