refactor(版本計算流程): 將 main 拆成參數檢查、取得舊版本、計算版本號三階段並抽出 nextVersion

This commit is contained in:
Jeffery
2026-06-30 16:16:31 +08:00
parent 1ba092bbf4
commit 11e2808da6
2 changed files with 38 additions and 14 deletions
+22 -6
View File
@@ -115,6 +115,26 @@ function nextBetaNumber(releases, version) {
return max + 1;
}
/**
* 依「已知的最新穩定版」計算本次要使用的版本號;isBeta 為 true 時產生 beta 版本號。
*
* 此函式不負責「取得舊版本」(latest 由呼叫端傳入),僅負責「計算版本號」這一步,
* 讓取得舊版本與計算新版本兩個階段可各自獨立。
*
* @param {string} latest - 已知的最新穩定版版本號字串(如 "1.2.3";查無時為 "0.0.0")。
* @param {Array<{tag_name?: string}>} releases - release 物件清單;beta 流水號需據此比對。
* @param {boolean} isBeta - 是否產生 beta 版本號;true 時回傳形如 "<next>-beta.<n>"。
* @returns {string} 本次要使用的版本號字串;非 beta 為下一個發行版(如 "1.3.0"),
* beta 為 "<next>-beta.<n>"(如 "1.3.0-beta.1")。
*/
function nextVersion(latest, releases, isBeta) {
const next = nextReleaseVersion(latest);
return isBeta
? `${next}-beta.${nextBetaNumber(releases, next)}`
: next;
}
/**
* 計算最新穩定版與下一個版本號;isBeta 為 true 時產生 beta 版本號。
* @param {Array<{tag_name?: string}>} releases - release 物件清單。
@@ -125,13 +145,8 @@ function nextBetaNumber(releases, version) {
*/
function calculateVersion(releases, isBeta) {
const latest = latestStableVersion(releases);
const next = nextReleaseVersion(latest);
const version = isBeta
? `${next}-beta.${nextBetaNumber(releases, next)}`
: next;
return { latest, version };
return { latest, version: nextVersion(latest, releases, isBeta) };
}
module.exports = {
@@ -140,5 +155,6 @@ module.exports = {
latestStableVersion,
nextReleaseVersion,
nextBetaNumber,
nextVersion,
calculateVersion,
};