統一日誌格式與文件化,新增容錯回退、sha 已標記檢查與 v 前綴支援 #4

Merged
admin merged 7 commits from develop into master 2026-07-16 05:35:59 +00:00
Showing only changes of commit 98a447beb1 - Show all commits
+8 -7
View File
@@ -2,7 +2,7 @@
從 git tag 取得最新版號,依 `is_beta` 計算下一個正式版或 beta 版號(各號碼滿 9 進位)並輸出為 `value` 的 Gitea/GitHub Docker container action。 從 git tag 取得最新版號,依 `is_beta` 計算下一個正式版或 beta 版號(各號碼滿 9 進位)並輸出為 `value` 的 Gitea/GitHub Docker container action。
- 更新時間:2026/07/16 11:18:57 - 更新時間:2026/07/16 11:26:21
## action 使用方式 ## action 使用方式
@@ -31,7 +31,7 @@ jobs:
版號規則: 版號規則:
- 已標記檢查:先以 `sha` 輸入(未提供則用 `GITHUB_SHA`)確認該 commit 是否已有符合格式的版號 tag;已有時直接輸出該 tag 內容(多個取最大、忽略 `is_beta`),不再計算下一版。檢查失敗(如 sha 不存在)輸出 WRN 後改走一般計算流程。 - 已標記檢查:先以 `sha` 輸入(未提供則用 `GITHUB_SHA`)確認該 commit 是否已有符合格式的版號 tag;已有時直接輸出該 tag 內容(多個取最大、忽略 `is_beta`),不再計算下一版。檢查失敗(如 sha 不存在)輸出 WRN 後改走一般計算流程。
- 版號來源為 repo 的 git tag(格式 `X.Y.Z``X.Y.Z-beta.N`不帶前綴),取最大版號;無任何版號 tag 時從 `0.0.1`beta 為 `0.0.1-beta.1`)起算。 - 版號來源為 repo 的 git tag(格式 `X.Y.Z``X.Y.Z-beta.N`可帶小寫 `v` 前綴如 `v1.2.3`,解析時只取 `v` 之後的版本號),取最大版號;無任何版號 tag 時從 `0.0.1`beta 為 `0.0.1-beta.1`)起算。輸出的 `value` 一律不帶前綴。
- git tag 讀取失敗(例如 workspace 不是 git repository、workflow 未先執行 `actions/checkout`)時不會中止:輸出 ERR 說明原因後,改以起始版號 `0.0.1`beta 為 `0.0.1-beta.1`)作為預設值繼續輸出。 - git tag 讀取失敗(例如 workspace 不是 git repository、workflow 未先執行 `actions/checkout`)時不會中止:輸出 ERR 說明原因後,改以起始版號 `0.0.1`beta 為 `0.0.1-beta.1`)作為預設值繼續輸出。
- `is_beta=false`:最新為正式版 → patch +1`1.2.3``1.2.4`);最新為 beta → 去掉 beta 尾碼轉正式(`1.2.4-beta.3``1.2.4`)。 - `is_beta=false`:最新為正式版 → patch +1`1.2.3``1.2.4`);最新為 beta → 去掉 beta 尾碼轉正式(`1.2.4-beta.3``1.2.4`)。
- `is_beta=true`:最新為正式版 → patch +1 加 `-beta.1`;最新為 beta → beta 號 +1`beta.9``beta.10`,無上限)。 - `is_beta=true`:最新為正式版 → patch +1 加 `-beta.1`;最新為 beta → beta 號 +1`beta.9``beta.10`,無上限)。
@@ -70,10 +70,10 @@ jobs:
| [logger.err](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/logger.js#L116) | [輸出 ERR(錯誤)等級的日誌訊息到 stderr](#loggererr) | | [logger.err](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/logger.js#L116) | [輸出 ERR(錯誤)等級的日誌訊息到 stderr](#loggererr) |
| [logger.trc](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/logger.js#L131) | [輸出 TRC(細部追蹤)等級的日誌訊息到 stdout](#loggertrc) | | [logger.trc](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/logger.js#L131) | [輸出 TRC(細部追蹤)等級的日誌訊息到 stdout](#loggertrc) |
| [logger.dbg](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/logger.js#L146) | [輸出 DBG(除錯)等級的日誌訊息到 stdout](#loggerdbg) | | [logger.dbg](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/logger.js#L146) | [輸出 DBG(除錯)等級的日誌訊息到 stdout](#loggerdbg) |
| [version.parse](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/version.js#L26) | [解析版號字串為版號物件,不符格式回傳 null](#versionparse) | | [version.parse](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/version.js#L28) | [解析版號字串為版號物件(可帶 v 前綴),不符格式回傳 null](#versionparse) |
| [version.stringify](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/version.js#L52) | [將版號物件轉換為版號字串](#versionstringify) | | [version.stringify](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/version.js#L54) | [將版號物件轉換為版號字串](#versionstringify) |
| [version.compare](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/version.js#L72) | [比較兩個版號物件的大小,正式版大於同號 beta](#versioncompare) | | [version.compare](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/version.js#L74) | [比較兩個版號物件的大小,正式版大於同號 beta](#versioncompare) |
| [version.next](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/version.js#L136) | [依最新版號與 is_beta 旗標計算下一版號](#versionnext) | | [version.next](https://gitea.jsc.idv.tw/docker-actions/calculate-next-version/src/branch/master/src/version.js#L138) | [依最新版號與 is_beta 旗標計算下一版號](#versionnext) |
## 使用範例 ## 使用範例
@@ -144,12 +144,13 @@ logger.dbg('略過不符合版號格式的 tagnot-a-version', '讀取版號')
<a id="versionparse"></a> <a id="versionparse"></a>
### version.parse ### version.parse
解析版號字串為版號物件 `{ major, minor, patch, beta }`;支援正式版(`X.Y.Z`)與 beta 版(`X.Y.Z-beta.N`)兩種格式,`beta``null` 表示正式版。不符合格式(含 `null`、非字串轉出的值)時回傳 `null`、不拋出例外,適合逐一解析 git tag 並過濾非版號 tag。 解析版號字串為版號物件 `{ major, minor, patch, beta }`;支援正式版(`X.Y.Z`)與 beta 版(`X.Y.Z-beta.N`)兩種格式,皆可帶小寫 `v` 前綴(解析時忽略前綴、只取 `v` 之後的版本號),`beta``null` 表示正式版。不符合格式(含 `null`、非字串轉出的值)時回傳 `null`、不拋出例外,適合逐一解析 git tag 並過濾非版號 tag。
```javascript ```javascript
const { parse } = require('./version'); const { parse } = require('./version');
parse('1.2.3'); // => { major: 1, minor: 2, patch: 3, beta: null } parse('1.2.3'); // => { major: 1, minor: 2, patch: 3, beta: null }
parse('v1.2.3'); // => { major: 1, minor: 2, patch: 3, beta: null }(忽略 v 前綴)
parse('1.2.3-beta.5'); // => { major: 1, minor: 2, patch: 3, beta: 5 } parse('1.2.3-beta.5'); // => { major: 1, minor: 2, patch: 3, beta: 5 }
parse('v1.2'); // => null(不符合格式) parse('v1.2'); // => null(不符合格式)
``` ```