From 25d16c5c3b58f1737edf66a1c96790787010dda9 Mon Sep 17 00:00:00 2001 From: Capelo Date: Mon, 14 Jul 2025 15:04:59 +0100 Subject: [PATCH 1/3] chore: improve release script to support official releases --- scripts/release_v1.js | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/scripts/release_v1.js b/scripts/release_v1.js index 24723f6f5..82ee8a987 100644 --- a/scripts/release_v1.js +++ b/scripts/release_v1.js @@ -57,9 +57,15 @@ async function checkGitBranchAndStatus() { } async function getNewVersion() { + async function getVersionsFromGitTags() { + const result = await runExec(`git tag --list --sort=-version:refname`, { silent: true }); + const tags = result.stdout.toString().trim().split('\n').filter(tag => tag.startsWith(tagPrefix)); + return tags + } + const releaseType = process.argv[2]; - if (!['dev', 'beta'].includes(releaseType)) { - console.error('🟠 Invalid release type. Use dev or beta'); + if (!['dev', 'beta', 'official'].includes(releaseType)) { + console.error('🟠 Invalid release type. Use dev, beta or official'); process.exit(1); } @@ -71,17 +77,29 @@ async function getNewVersion() { return `1.0.0-dev.${timestamp}`; } - // For beta releases - console.log('Creating new beta version...'); - if (currentVersion.includes('-beta.')) { - return semver.inc(currentVersion, 'prerelease', 'beta'); + if (releaseType === 'beta') { + // For beta releases + console.log('Creating new beta version...'); + if (currentVersion.includes('-beta.')) { + return semver.inc(currentVersion, 'prerelease', 'beta'); + } else { + // get latest beta version from git tags + const tags = await getVersionsFromGitTags(); + const latestBetaTag = tags.find(tag => tag.includes('-beta.')); + // If no beta version found, use current version with -beta.0 as the starting point + const latestBetaVersion = latestBetaTag ? latestBetaTag.replace('v', '') : `${currentVersion}-beta.0`; + return semver.inc(latestBetaVersion, 'prerelease', 'beta'); + } } - console.error( - `🟠 Cannot create beta version: Current version "${currentVersion}" is not a beta version.\n` + - ' The package.json version should be in the format "1.0.0-beta.X"' - ); - process.exit(1); + if (releaseType === 'official') { + // get latest official version from git tags + const tags = await getVersionsFromGitTags(); + const latestOfficialTag = tags.find(tag => !tag.includes('-beta.') && !tag.includes('-dev.')); + // If no official version found, use v1.0.0 as the starting point + const latestOfficialVersion = latestOfficialTag ? latestOfficialTag.replace('v', '') : '1.0.0'; + return semver.inc(latestOfficialVersion, 'prerelease', 'beta'); + } } async function bumpVersion({ newVersion }) { From 47c677d6f58af061dccf6446ea049c7274e1c182 Mon Sep 17 00:00:00 2001 From: Capelo Date: Mon, 14 Jul 2025 15:05:08 +0100 Subject: [PATCH 2/3] chore: add new script to package.json --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 72c0233ae..eecb70fd9 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,8 @@ "check": "pnpm run lint && pnpm run typecheck", "check:pr-next-version": "node ../scripts/pr_next_dev_version", "release:dev": "node ./scripts/release_v1 dev", - "release:beta": "node ./scripts/release_v1 beta" + "release:beta": "node ./scripts/release_v1 beta", + "release": "node ./scripts/release_v1 official" }, "dependencies": { "json-logic-js": "^2.0.5" From 0735b4aa3c6adc436412363818e6dd12f47c6e25 Mon Sep 17 00:00:00 2001 From: Capelo Date: Mon, 14 Jul 2025 15:06:21 +0100 Subject: [PATCH 3/3] chore: rename release_v1 to release --- package.json | 6 +++--- scripts/{release_v1.js => release.js} | 0 2 files changed, 3 insertions(+), 3 deletions(-) rename scripts/{release_v1.js => release.js} (100%) diff --git a/package.json b/package.json index eecb70fd9..e2caaf1c5 100644 --- a/package.json +++ b/package.json @@ -40,9 +40,9 @@ "typecheck": "tsc --noEmit", "check": "pnpm run lint && pnpm run typecheck", "check:pr-next-version": "node ../scripts/pr_next_dev_version", - "release:dev": "node ./scripts/release_v1 dev", - "release:beta": "node ./scripts/release_v1 beta", - "release": "node ./scripts/release_v1 official" + "release:dev": "node ./scripts/release dev", + "release:beta": "node ./scripts/release beta", + "release": "node ./scripts/release official" }, "dependencies": { "json-logic-js": "^2.0.5" diff --git a/scripts/release_v1.js b/scripts/release.js similarity index 100% rename from scripts/release_v1.js rename to scripts/release.js