Skip to content
Snippets Groups Projects
Commit 7bd11772 authored by Alena Petraki's avatar Alena Petraki :nail_care_tone1: Committed by Pavel Antonov
Browse files

Доработки Multirepo Release

parent 80761c5a
No related branches found
No related tags found
No related merge requests found
...@@ -33,7 +33,7 @@ lint: ...@@ -33,7 +33,7 @@ lint:
# ----- prepare release ----- # ----- prepare release -----
# Расчет тега и формирование Changelog # Расчет тега и формирование Changelog
get_release_info: get_changelog:
stage: pre-release stage: pre-release
image: image:
name: orhunp/git-cliff:latest name: orhunp/git-cliff:latest
...@@ -46,7 +46,6 @@ get_release_info: ...@@ -46,7 +46,6 @@ get_release_info:
GIT_STRATEGY: clone GIT_STRATEGY: clone
GIT_DEPTH: 0 GIT_DEPTH: 0
script: 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 - echo "$(git-cliff --unreleased | sed '1,6d' | sed '$d')" > current_changelog.md # удалить "лишние" строки для Changelog
artifacts: artifacts:
reports: reports:
...@@ -54,49 +53,51 @@ get_release_info: ...@@ -54,49 +53,51 @@ get_release_info:
paths: paths:
- current_changelog.md - current_changelog.md
# Получаем последнюю версию релиза # Релиз и запись тега в артефакт для использования в perxis
get_current_version: prepare_release:
stage: pre-release stage: pre-release
image: bitnami/git:latest image: bitnami/git:latest
rules:
- if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"'
- if: $CI_PIPELINE_SOURCE == "web"
needs:
- job: get_release_info
variables: variables:
GIT_STRATEGY: clone
GIT_DEPTH: 0 GIT_DEPTH: 0
script: GIT_STRATEGY: clone
- 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
rules: rules:
- if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"' - if: '$CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE == "true"'
- if: $CI_PIPELINE_SOURCE == "web" - if: $CI_PIPELINE_SOURCE == "web"
needs: needs:
- job: get_release_info - job: get_changelog
artifacts: true
- job: get_current_version
artifacts: true artifacts: true
script: 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 NEEDS_RELEASE=false
if [ "$RELEASE_VERSION" != "$CURRENT_VERSION" ]; then if [ "$RELEASE_VERSION" != "$CURRENT_VERSION" ]; then
NEEDS_RELEASE=true NEEDS_RELEASE=true
fi 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 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: artifacts:
when: always when: always
paths: paths:
...@@ -106,6 +107,27 @@ prepare_release: ...@@ -106,6 +107,27 @@ prepare_release:
# ----- 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: release:
stage: release stage: release
image: registry.gitlab.com/gitlab-org/release-cli:latest image: registry.gitlab.com/gitlab-org/release-cli:latest
...@@ -113,6 +135,8 @@ release: ...@@ -113,6 +135,8 @@ release:
- if: $CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE != "true" - if: $CI_PIPELINE_SOURCE == "pipeline" && $PREPARE_RELEASE != "true"
- if: $CI_PIPELINE_SOURCE == "web" - if: $CI_PIPELINE_SOURCE == "web"
when: manual when: manual
needs:
- create_release_branch
script: script:
- echo "Start release $VERSION" - echo "Start release $VERSION"
- | - |
......
Subproject commit e0a5fab4b9acafc339c182afd64077640c88fecd Subproject commit fc23183a86463b2aa81e3b7570fad1f873c1e435
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment