From 4c58691c60ce96af330d33f93cb20d57d2ad566a Mon Sep 17 00:00:00 2001 From: yangxiaolang <1810849666@qq.com> Date: Fri, 8 May 2026 15:17:43 +0800 Subject: [PATCH 1/2] chore: config v9 release workflow --- .changeset/config.json | 2 +- .github/workflows/release.yml | 10 +++--- package.json | 2 +- scripts/npm-tag.js | 4 ++- scripts/publish-version.js | 58 +++++++++++++++++++++++++++-------- 5 files changed, 55 insertions(+), 21 deletions(-) diff --git a/.changeset/config.json b/.changeset/config.json index db4f7cb2c..8870cfac4 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -9,7 +9,7 @@ "commit": false, "linked": [], "access": "restricted", - "baseBranch": "master", + "baseBranch": "release/v9", "updateInternalDependencies": "minor", "ignore": [] } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3dcb75b3c..35a7b95ad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,10 +3,10 @@ name: Release on: push: branches: - - master + - release/v9 pull_request: branches: - - master + - release/v9 workflow_dispatch: inputs: version: @@ -44,8 +44,8 @@ jobs: id: changesets uses: changesets/action@v1 with: - commit: 'chore: release @alauda/ui' - title: 'chore: release @alauda/ui' + commit: 'chore: release @alauda/ui v9' + title: 'chore: release @alauda/ui v9' # This expects you to have a script called release which does a build for your packages and calls changeset publish publish: yarn release env: @@ -55,7 +55,7 @@ jobs: if: github.event_name == 'pull_request' run: sh scripts/release.sh env: - PUBLISH_VERSION: beta + PUBLISH_VERSION: v9-beta - name: Set git info if: github.event_name == 'workflow_dispatch' diff --git a/package.json b/package.json index 4f844b923..cda7713d8 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "lint:tsc": "tsc -p . --noEmit", "prepare": "patch-package && simple-git-hooks && touch documentation.json && yarn-deduplicate --strategy fewer || exit 0", "prerelease": "yarn build", - "release": "changeset publish", + "release": "changeset publish --tag v9", "start": "yarn storybook", "storybook": "ng run storybook:storybook", "storybook:build": "ng run storybook:build-storybook", diff --git a/scripts/npm-tag.js b/scripts/npm-tag.js index 3fcc692e1..66f90d27a 100644 --- a/scripts/npm-tag.js +++ b/scripts/npm-tag.js @@ -2,7 +2,9 @@ const { getProdVersion } = require('./utils'); const version = process.env.PUBLISH_VERSION; -if (version.includes('-prod-')) { +if (version === 'v9-beta') { + process.stdout.write('v9-beta'); +} else if (version.includes('-prod-')) { process.stdout.write(getProdVersion(version)); } else if (version === 'beta' || /-beta[._-]?\d*$/.test(version)) { process.stdout.write('beta'); diff --git a/scripts/publish-version.js b/scripts/publish-version.js index 66bbe9277..bc39c7684 100644 --- a/scripts/publish-version.js +++ b/scripts/publish-version.js @@ -2,24 +2,56 @@ const { execSync } = require('node:child_process'); const semver = require('semver'); -let version = process.env.PUBLISH_VERSION || 'patch'; +const { version: packageVersion } = require('../package.json'); -if (version.startsWith('v')) { - version = version.slice(1); -} else if (version === 'beta') { - const distTags = JSON.parse( - execSync('yarn info @alauda/ui dist-tags --json').toString(), +const PACKAGE_NAME = '@alauda/ui'; + +function getNpmInfo(field) { + const info = JSON.parse( + execSync(`yarn info ${PACKAGE_NAME} ${field} --json`).toString(), ); - const { beta, latest } = distTags.data || distTags; + return info.data || info; +} + +function getNextBetaVersion(stable, versions) { + const nextBeta = semver.minVersion(`>${stable}`) + '-beta'; + const nextVersion = semver.parse(nextBeta); + const candidates = versions + .filter(Boolean) + .filter(candidate => { + const parsed = semver.parse(candidate); + + return ( + parsed && + parsed.major === nextVersion.major && + parsed.minor === nextVersion.minor && + parsed.patch === nextVersion.patch && + parsed.prerelease[0] === 'beta' + ); + }) + .sort(semver.rcompare); + + const latestBeta = candidates[0]; - if (semver.gt(beta, latest)) { - version = beta.endsWith('-beta') - ? beta + '.0' - : beta.replace(/(-beta\.)(\d+)$/, (_, $0, $1) => $0 + (+$1 + 1)); - } else { - version = semver.minVersion(`>${latest}`) + '-beta'; + if (!latestBeta) { + return nextBeta; } + + return latestBeta.endsWith('-beta') + ? latestBeta + '.0' + : latestBeta.replace(/(-beta\.)(\d+)$/, (_, $0, $1) => $0 + (+$1 + 1)); +} + +let version = process.env.PUBLISH_VERSION || 'patch'; + +if (version === 'beta' || version === 'v9-beta') { + const versions = getNpmInfo('versions'); + const stable = process.env.PUBLISH_BETA_BASE_VERSION || packageVersion; + + version = getNextBetaVersion(stable, versions); +} else if (version.startsWith('v')) { + version = version.slice(1); } process.stdout.write(version); From befd86614f30de1a08a9f90222dea0a235685974 Mon Sep 17 00:00:00 2001 From: yangxiaolang <1810849666@qq.com> Date: Fri, 8 May 2026 15:28:31 +0800 Subject: [PATCH 2/2] fix: error dist tag --- .changeset/clean-jobs-grab.md | 7 +++++++ scripts/release.sh | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 .changeset/clean-jobs-grab.md diff --git a/.changeset/clean-jobs-grab.md b/.changeset/clean-jobs-grab.md new file mode 100644 index 000000000..b78ad9659 --- /dev/null +++ b/.changeset/clean-jobs-grab.md @@ -0,0 +1,7 @@ +--- +"@alauda/ui": patch +--- + +fix: configure v9 release workflow + +Fix the `release/v9` release workflow so v9 stable releases publish with the `v9` tag and v9 pull request prereleases publish with the `v9-beta` tag. diff --git a/scripts/release.sh b/scripts/release.sh index ac46ab7d3..476e43bd4 100644 --- a/scripts/release.sh +++ b/scripts/release.sh @@ -2,9 +2,10 @@ set -e +REQUESTED_PUBLISH_VERSION=$PUBLISH_VERSION PUBLISH_VERSION=$(node scripts/publish-version) PUBLISH_BRANCH=$(node scripts/publish-branch) -NPM_TAG=$(node scripts/npm-tag) +NPM_TAG=$(PUBLISH_VERSION="$REQUESTED_PUBLISH_VERSION" node scripts/npm-tag) if [ "$NPM_TAG" = "latest" ]; then echo "Publish latest tag via this script is not permitted anymore."