diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a74cc9445084d9e386f816a8c4ead1eef3f21bc7..f367cca0abb898f30e88f7742a805bc1e33c2366 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 e0a5fab4b9acafc339c182afd64077640c88fecd..fc23183a86463b2aa81e3b7570fad1f873c1e435 160000
--- a/perxis-proto
+++ b/perxis-proto
@@ -1 +1 @@
-Subproject commit e0a5fab4b9acafc339c182afd64077640c88fecd
+Subproject commit fc23183a86463b2aa81e3b7570fad1f873c1e435