152 lines
6.3 KiB
Markdown
152 lines
6.3 KiB
Markdown
# calculate-version
|
||
|
||
更新時間:2026/07/11 21:08:44(Asia/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();
|
||
})();
|
||
```
|