From 5c4f660d3039f176c6fa7eace0369093f86668b6 Mon Sep 17 00:00:00 2001 From: Alesya Volosach Date: Wed, 5 Aug 2026 17:10:10 +0300 Subject: [PATCH] =?UTF-8?q?ci:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B2=D1=8B=D0=BF=D1=83=D1=81=D0=BA=20beta-?= =?UTF-8?q?=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=20=D0=B8=D0=B7=20rel?= =?UTF-8?q?ease-=D0=B2=D0=B5=D1=82=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/auto-milestone.yml | 12 ++++++------ .github/workflows/npm-publish.yml | 23 ++++++++++++++++------- app.config.ts | 2 +- lefthook.yml | 8 ++++---- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/.github/workflows/auto-milestone.yml b/.github/workflows/auto-milestone.yml index fbc6fbad..2c106cfa 100644 --- a/.github/workflows/auto-milestone.yml +++ b/.github/workflows/auto-milestone.yml @@ -3,7 +3,7 @@ name: Auto Milestone & Label Management on: push: branches: - - 'release/v*' + - 'release/*' pull_request: types: [opened, synchronize, reopened, edited] release: @@ -31,7 +31,7 @@ jobs: const repo = context.repo.repo; function extractVersion(str) { - const match = str.match(/^v?(\d+\.\d+(\.\d+)?)$/); + const match = str.match(/^(\d+\.\d+(\.\d+)?)$/); return match ? match[1] : null; } @@ -46,10 +46,10 @@ jobs: return 0; } - // 1) Создание label при push в release/v* + // 1) Создание label при push в release/* if (context.eventName === 'push') { const ref = context.ref; - if (!ref.startsWith('refs/heads/release/v')) return; + if (!ref.startsWith('refs/heads/release/')) return; const version = extractVersion(ref.replace('refs/heads/release/', '')); if (!version) return; @@ -74,8 +74,8 @@ jobs: // 2) Присвоение label + назначение milestone для PR if (context.eventName === 'pull_request') { const pr = context.payload.pull_request; - const releaseMatch = pr.head.ref.match(/^release\/v(\d+\.\d+(\.\d+)?)$/) - || pr.base.ref.match(/^release\/v(\d+\.\d+(\.\d+)?)$/); + const releaseMatch = pr.head.ref.match(/^release\/(\d+\.\d+(\.\d+)?)$/) + || pr.base.ref.match(/^release\/(\d+\.\d+(\.\d+)?)$/); if (!releaseMatch) return; const version = releaseMatch[1]; diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 247bd237..a1be4b97 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -37,11 +37,20 @@ jobs: env: GH_TOKEN: ${{ secrets.ADD_TO_PROJECT_PAT }} steps: - - name: Check Main Branch - if: github.ref != 'refs/heads/main' + - name: Check Release Branch + env: + BRANCH_NAME: ${{ github.ref_name }} + IS_BETA: ${{ inputs.beta }} run: | - echo "❌ Этот workflow может быть запущен только на основной ветке (main)" - exit 1 + if [[ "$IS_BETA" == "true" ]]; then + if [[ ! "$BRANCH_NAME" =~ ^release/[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then + echo "❌ Beta-релиз может быть запущен только из ветки release/X.Y или release/X.Y.Z" + exit 1 + fi + elif [[ "$BRANCH_NAME" != "main" ]]; then + echo "❌ Стабильный релиз может быть запущен только из ветки main" + exit 1 + fi - name: Verify Release Team run: | @@ -108,7 +117,7 @@ jobs: if: inputs.noIncrement == false && inputs.bumpMode == 'auto' run: | if [ "${{ inputs.beta }}" == "true" ]; then - yarn release --preRelease=beta + yarn release --preRelease=beta --git.requireBranch="$GITHUB_REF_NAME" else yarn release fi @@ -117,7 +126,7 @@ jobs: if: inputs.noIncrement == false && inputs.bumpMode != 'auto' run: | if [ "${{ inputs.beta }}" == "true" ]; then - yarn release ${{ inputs.bumpMode }} --preRelease=beta + yarn release ${{ inputs.bumpMode }} --preRelease=beta --git.requireBranch="$GITHUB_REF_NAME" else yarn release ${{ inputs.bumpMode }} fi @@ -126,7 +135,7 @@ jobs: if: inputs.noIncrement == true run: | if [ "${{ inputs.beta }}" == "true" ]; then - yarn release --no-increment --no-npm.publish --preRelease=beta + yarn release --no-increment --no-npm.publish --preRelease=beta --git.requireBranch="$GITHUB_REF_NAME" else yarn release --no-increment --no-npm.publish fi diff --git a/app.config.ts b/app.config.ts index 5ed633c0..27c8ea6e 100644 --- a/app.config.ts +++ b/app.config.ts @@ -6,7 +6,7 @@ export default { expo: { name: 'CDEK UI', slug: 'cdek-uikit', - version, + version: version.replace(/[-+].*$/, ''), orientation: 'portrait', android: { package: 'ru.cdek.uikit.prime' }, ios: { diff --git a/lefthook.yml b/lefthook.yml index 536173ee..c0ea5595 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -25,10 +25,10 @@ prepare-commit-msg: if echo "$branch_name" | grep -Eq '^main$'; then echo "✅ Имя ветки корректно: $branch_name" - elif echo "$branch_name" | grep -Eq '^(feature|chore|fix)/[^/]+$'; then + elif echo "$branch_name" | grep -Eq '^((feature|chore|fix)/[^/]+|release/[0-9]+\.[0-9]+(\.[0-9]+)?)$'; then echo "✅ Имя ветки корректно: $branch_name" else - echo "❌ Ошибка!\nНекорректное имя ветки: $branch_name\nВетка может иметь следующие названия:\n - main\n - feature/название ветки\n - fix/название ветки\n - chore/название ветки" + echo "❌ Ошибка!\nНекорректное имя ветки: $branch_name\nВетка может иметь следующие названия:\n - main\n - feature/название ветки\n - fix/название ветки\n - chore/название ветки\n - release/X.Y\n - release/X.Y.Z" exit 1 fi commitizen: @@ -63,10 +63,10 @@ pre-push: if echo "$branch_name" | grep -Eq '^main$'; then echo "✅ Имя ветки корректно: $branch_name" - elif echo "$branch_name" | grep -Eq '^(feature|chore|fix)/[^/]+$'; then + elif echo "$branch_name" | grep -Eq '^((feature|chore|fix)/[^/]+|release/[0-9]+\.[0-9]+(\.[0-9]+)?)$'; then echo "✅ Имя ветки корректно: $branch_name" else - echo "❌ Ошибка!\nНекорректное имя ветки: $branch_name\nВетка может иметь следующие названия:\n - main\n - feature/название ветки\n - fix/название ветки\n - chore/название ветки" + echo "❌ Ошибка!\nНекорректное имя ветки: $branch_name\nВетка может иметь следующие названия:\n - main\n - feature/название ветки\n - fix/название ветки\n - chore/название ветки\n - release/X.Y\n - release/X.Y.Z" exit 1 fi eslint: