Files
calculate-version/README.md
T
jiantw83 fa4f7cd50b
CI / 1. BUILD (pull_request) Successful in 1s
CI / 2. TEST (pull_request) Successful in 3s
CI / 3. RESULT (pull_request) Successful in 2s
docs(calculate-version): 重整 action 與 workflow 文件
2026-07-11 13:15:21 +00:00

152 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# calculate-version
更新時間:2026/07/11 21:08:44Asia/Taipei
這個專案是一個以 Node.js 實作的 Gitea Docker action,負責從 release 清單計算下一個正式版或 beta 版本,並把結果輸出給後續工作流程使用。
## 專案列表
### 專案描述表
| 專案名稱 | 專案描述 |
| --- | --- |
| [calculate-version](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/) | 這是一個以 Node.js 實作的 Gitea Docker action,負責取得 release 資料、計算下一個版本號,並輸出給 workflow 或 action 使用。 |
### 參考專案表
| 專案名稱 | 參考專案列表 |
| --- | --- |
| [calculate-version](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/) | 無 |
### NuGet 套件表
| 專案名稱 | NuGet 套件列表 |
| --- | --- |
| [calculate-version](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/) | 無 |
## 功能列表
### calculate-version
| 功能名稱 | 功能描述 |
| --- | --- |
| [calculate-version.normalizeBetaFlag](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L95) | [將 beta 輸入正規化成字串 `false`](#calculateversionnormalizebetaflag) |
| [calculate-version.parseVersionParts](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L130) | [將版本字串拆成可比較的數字片段](#calculateversionparseversionparts) |
| [calculate-version.compareVersionParts](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L148) | [比較兩組版本片段的大小](#calculateversioncompareversionparts) |
| [calculate-version.stableVersionFromTag](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L171) | [從 tag 解析穩定版版本片段](#calculateversionstableversionfromtag) |
| [calculate-version.latestStableVersion](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L192) | [找出 release 清單中的最新穩定版](#calculateversionlateststableversion) |
| [calculate-version.nextReleaseVersion](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L218) | [推算下一個正式版版本號](#calculateversionnextreleaseversion) |
| [calculate-version.nextBetaNumber](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L247) | [推算下一個 beta 編號](#calculateversionnextbetanumber) |
| [calculate-version.calculateVersion](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L275) | [依 release 資料與 beta 旗標計算目前版本與下一版](#calculateversioncalculateversion) |
| [calculate-version.fetchReleases](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L357) | [分頁抓取 repository 的 release 清單](#calculateversionfetchreleases) |
| [calculate-version.main](https://gitea.jsc.idv.tw/actions/calculate-version/src/branch/develop/src/index.js#L396) | [執行 action 主流程並輸出版本結果](#calculateversionmain) |
## 使用範例
### <a id="calculateversionnormalizebetaflag"></a>calculate-version.normalizeBetaFlag
將 action 輸入或環境變數轉成固定的字串旗標,避免後續流程混用空值與字串。
```js
const { normalizeBetaFlag } = require('./src/index.js');
const isBeta = normalizeBetaFlag(process.env.IS_BETA);
```
### <a id="calculateversionparseversionparts"></a>calculate-version.parseVersionParts
將版本字串拆成數字陣列,適合後續比較或進位運算。
```js
const { parseVersionParts } = require('./src/index.js');
const parts = parseVersionParts('1.2.3');
```
### <a id="calculateversioncompareversionparts"></a>calculate-version.compareVersionParts
比較兩組版本片段,常用於排序 release 版本。
```js
const { compareVersionParts } = require('./src/index.js');
const sorted = [[1, 2, 10], [1, 2, 3]].sort(compareVersionParts);
```
### <a id="calculateversionstableversionfromtag"></a>calculate-version.stableVersionFromTag
從 tag 名稱過濾出穩定版版本,忽略 beta 與不合法格式。
```js
const { stableVersionFromTag } = require('./src/index.js');
const parts = stableVersionFromTag('v1.2.3');
```
### <a id="calculateversionlateststableversion"></a>calculate-version.latestStableVersion
從 release 清單中找出最新穩定版,若沒有可用資料就回傳 `0.0.0`
```js
const { latestStableVersion } = require('./src/index.js');
const latest = latestStableVersion([
{ tag_name: 'v1.2.2' },
{ tag_name: 'v1.2.3-beta.1' },
{ tag_name: 'v1.2.3' },
]);
```
### <a id="calculateversionnextreleaseversion"></a>calculate-version.nextReleaseVersion
將正式版版本號往下一版遞增,patch 會以 10 為進位界線。
```js
const { nextReleaseVersion } = require('./src/index.js');
const nextVersion = nextReleaseVersion('1.2.9');
```
### <a id="calculateversionnextbetanumber"></a>calculate-version.nextBetaNumber
推算下一個 beta 編號,會找出目前版本對應的最大 `beta.N` 再加一。
```js
const { nextBetaNumber } = require('./src/index.js');
const betaNumber = nextBetaNumber([
{ tag_name: 'v1.2.4-beta.1' },
{ tag_name: 'v1.2.4-beta.3' },
], '1.2.4');
```
### <a id="calculateversioncalculateversion"></a>calculate-version.calculateVersion
依 release 資料與 beta 狀態回傳 `[latestVersion, nextVersion]`
```js
const { calculateVersion } = require('./src/index.js');
const [latest, nextVersion] = calculateVersion([
{ tag_name: 'v1.2.3' },
{ tag_name: 'v1.2.4-beta.1' },
], 'false');
```
### <a id="calculateversionfetchreleases"></a>calculate-version.fetchReleases
分頁抓取 repository 的 release 清單,直到 API 沒有新資料為止。
```js
const { fetchReleases } = require('./src/index.js');
// 需人工確認:baseUrl 與 repository 必須對應實際 Gitea 環境。
(async () => {
const releases = await fetchReleases('https://gitea.example.com', 'owner/repo', 'token-value');
console.log(releases);
})();
```
### <a id="calculateversionmain"></a>calculate-version.main
執行 action 主流程,通常由 Gitea action runtime 觸發。
```js
const { main } = require('./src/index.js');
// 需人工確認:這個入口通常應由 Gitea action 啟動,且需要完整環境變數。
(async () => {
await main();
})();
```