# 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` 等)皆為模組私有、未匯出,依規範不列入功能列表。 ## 使用範例 ### 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 ``` ### 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 不存在(可能已被刪除),略過 ``` ### 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 ``` ### 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 ``` ### 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) ```