docker-actions/template: CI / BUILD (pull_request) Successful in 5s
- 依建立時間將 release 分為正式版與 beta 版(tag 含 beta),各自保留最新指定筆數(keep_count 預設 5、keep_count_beta 預設 10),其餘舊 release 連同對應 git tag 一併刪除 - Node.js 主程式置於 src/(index.js 主流程、logger.js 統一訊息格式 [yyyy/MM/dd HH:mm:ss][階段][等級]: 訊息) - 多階段建置 dockerfile(NODE_VERSION=latest / NODE_RUNTIME=slim),entrypoint.sh 輸出啟動訊息後 exec 主程式 - 補齊全部 JSDoc 與指令檔逐行註解,重建 readme.md - 移除範本的 .gitea/scoped_workflows/ci.yaml Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
134 lines
5.6 KiB
Markdown
134 lines
5.6 KiB
Markdown
# Clean Old Release
|
||
|
||
依建立時間將 release 分為正式版與 beta 版,各自保留最新指定筆數,其餘舊 release 連同對應 git tag 一併刪除。
|
||
|
||
- 更新時間:2026/07/16 14:30:31
|
||
|
||
## 專案列表
|
||
|
||
### 專案描述
|
||
|
||
| 專案名稱 | 專案描述 |
|
||
| --- | --- |
|
||
| [clean-old-release](https://gitea.jsc.idv.tw/docker-actions/clean-old-release) | Gitea Docker 容器 action:以 Node.js 透過 Gitea API 逐頁取得 repo 全部 release,依 tag 名稱是否含 `beta` 分為正式版與 beta 版兩群,各自依建立時間保留最新指定筆數(`keep_count` 預設 5、`keep_count_beta` 預設 10),其餘舊 release 連同對應 git tag 一併刪除;並提供統一格式(`[yyyy/MM/dd HH:mm:ss][階段][等級]: 訊息`,Asia/Taipei 時區)的 logger 模組。 |
|
||
|
||
### 參考專案
|
||
|
||
| 專案名稱 | 參考專案列表 |
|
||
| --- | --- |
|
||
| [clean-old-release](https://gitea.jsc.idv.tw/docker-actions/clean-old-release) | 無 |
|
||
|
||
### NuGet 套件
|
||
|
||
| 專案名稱 | NuGet 套件列表 |
|
||
| --- | --- |
|
||
| [clean-old-release](https://gitea.jsc.idv.tw/docker-actions/clean-old-release) | 無(Node.js 專案,僅使用 Node 內建模組,無外部相依套件) |
|
||
|
||
## Action 使用方式
|
||
|
||
### 輸入參數(inputs)
|
||
|
||
| 參數 | 必填 | 預設值 | 說明 |
|
||
| --- | --- | --- | --- |
|
||
| `keep_count` | 否 | `5` | 正式版 release 要保留的最新筆數 |
|
||
| `keep_count_beta` | 否 | `10` | beta 版(tag 名稱含 `beta`)release 要保留的最新筆數 |
|
||
|
||
### 環境需求
|
||
|
||
執行時依賴 runner 注入的環境變數:`GITHUB_REPOSITORY`(目標 repo)、`GITHUB_API_URL`(或 `GITHUB_SERVER_URL`,用於組出 Gitea API 位址),以及 `GITHUB_TOKEN`/`GITEA_TOKEN`(須具刪除 release 與 tag 的權限)。若 runner 未自動注入 token,請在 workflow 以 `env` 傳入,機敏值不要寫死在檔案中。
|
||
|
||
### workflow 範例
|
||
|
||
```yaml
|
||
jobs:
|
||
clean:
|
||
runs-on: ubuntu
|
||
steps:
|
||
- name: 清除舊版 release
|
||
uses: https://gitea.jsc.idv.tw/docker-actions/clean-old-release@v1
|
||
env:
|
||
GITHUB_TOKEN: ${{ gitea.token }}
|
||
with:
|
||
keep_count: 5
|
||
keep_count_beta: 10
|
||
```
|
||
|
||
## 功能列表
|
||
|
||
### clean-old-release
|
||
|
||
| 功能名稱 | 功能描述 |
|
||
| --- | --- |
|
||
| [logger.inf](https://gitea.jsc.idv.tw/docker-actions/clean-old-release/src/branch/master/src/logger.js#L54) | [輸出 INF(一般資訊)等級訊息至 stdout](#loggerinf) |
|
||
| [logger.wrn](https://gitea.jsc.idv.tw/docker-actions/clean-old-release/src/branch/master/src/logger.js#L60) | [輸出 WRN(警告)等級訊息至 stdout](#loggerwrn) |
|
||
| [logger.err](https://gitea.jsc.idv.tw/docker-actions/clean-old-release/src/branch/master/src/logger.js#L66) | [輸出 ERR(錯誤)等級訊息至 stderr](#loggererr) |
|
||
| [logger.trc](https://gitea.jsc.idv.tw/docker-actions/clean-old-release/src/branch/master/src/logger.js#L72) | [輸出 TRC(細部追蹤)等級訊息至 stdout](#loggertrc) |
|
||
| [logger.dbg](https://gitea.jsc.idv.tw/docker-actions/clean-old-release/src/branch/master/src/logger.js#L78) | [輸出 DBG(除錯)等級訊息至 stdout](#loggerdbg) |
|
||
|
||
備註:`src/index.js` 的主流程函式(`main`、`fetchAllReleases`、`deleteRelease` 等)皆為模組私有、未匯出,依規範不列入功能列表。
|
||
|
||
## 使用範例
|
||
|
||
<a id="loggerinf"></a>
|
||
### logger.inf
|
||
|
||
輸出 INF(一般資訊)等級訊息至 stdout。訊息格式為 `[yyyy/MM/dd HH:mm:ss][階段][INF]: 訊息`(時間為 Asia/Taipei 時區);未提供 `stage` 時省略 `[階段]` 區塊。用於記錄流程正常進展,例如讀到的輸入、每個關鍵步驟的結果。
|
||
|
||
```js
|
||
const logger = require('./logger');
|
||
|
||
logger.inf('共取得 12 筆 release', '查詢 release');
|
||
// [2026/07/16 14:30:31][查詢 release][INF]: 共取得 12 筆 release
|
||
|
||
logger.inf('開始執行 Clean Old Release');
|
||
// [2026/07/16 14:30:31][INF]: 開始執行 Clean Old Release
|
||
```
|
||
|
||
<a id="loggerwrn"></a>
|
||
### logger.wrn
|
||
|
||
輸出 WRN(警告)等級訊息至 stdout,用於「可繼續執行但需要注意」的異常狀況,例如 tag 已不存在而略過刪除、環境變數改用備援來源推得。
|
||
|
||
```js
|
||
const logger = require('./logger');
|
||
|
||
logger.wrn('tag v1.0.0 不存在(可能已被刪除),略過', '刪除');
|
||
// [2026/07/16 14:30:31][刪除][WRN]: tag v1.0.0 不存在(可能已被刪除),略過
|
||
```
|
||
|
||
<a id="loggererr"></a>
|
||
### logger.err
|
||
|
||
輸出 ERR(錯誤)等級訊息至 stderr(`console.error`),用於記錄失敗狀況;訊息輸出後通常由呼叫端決定是否以非零 exit code 結束程序(logger 本身不會終止程序)。
|
||
|
||
```js
|
||
const logger = require('./logger');
|
||
|
||
logger.err('刪除 release v1.0.0 失敗:HTTP 403 Forbidden', '刪除');
|
||
// [2026/07/16 14:30:31][刪除][ERR]: 刪除 release v1.0.0 失敗:HTTP 403 Forbidden
|
||
```
|
||
|
||
<a id="loggertrc"></a>
|
||
### logger.trc
|
||
|
||
輸出 TRC(細部追蹤)等級訊息至 stdout,用於記錄執行細節(例如每一次 API 呼叫的方法與 URL),方便追蹤問題時還原完整過程。
|
||
|
||
```js
|
||
const logger = require('./logger');
|
||
|
||
logger.trc('GET https://gitea.example.com/api/v1/repos/owner/repo/releases?page=1&limit=50', '呼叫 API');
|
||
// [2026/07/16 14:30:31][呼叫 API][TRC]: GET https://gitea.example.com/api/v1/repos/owner/repo/releases?page=1&limit=50
|
||
```
|
||
|
||
<a id="loggerdbg"></a>
|
||
### logger.dbg
|
||
|
||
輸出 DBG(除錯)等級訊息至 stdout,用於開發階段的除錯資訊,例如列出各群組實際保留了哪些 release。
|
||
|
||
```js
|
||
const logger = require('./logger');
|
||
|
||
logger.dbg('正式版保留:v2.3.0(建立於 2026-07-01T10:00:00Z)', '分群');
|
||
// [2026/07/16 14:30:31][分群][DBG]: 正式版保留:v2.3.0(建立於 2026-07-01T10:00:00Z)
|
||
```
|