Reviewed-on: #3
Clean Old Release
依建立時間將 release 分為正式版與 beta 版,各自保留最新指定筆數,其餘舊 release 連同對應 git tag 一併刪除。
- 更新時間:2026/07/16 14:30:31
專案列表
專案描述
| 專案名稱 | 專案描述 |
|---|---|
| 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 | 無 |
NuGet 套件
| 專案名稱 | NuGet 套件列表 |
|---|---|
| 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 範例
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 | 輸出 INF(一般資訊)等級訊息至 stdout |
| logger.wrn | 輸出 WRN(警告)等級訊息至 stdout |
| logger.err | 輸出 ERR(錯誤)等級訊息至 stderr |
| logger.trc | 輸出 TRC(細部追蹤)等級訊息至 stdout |
| logger.dbg | 輸出 DBG(除錯)等級訊息至 stdout |
備註:src/index.js 的主流程函式(main、fetchAllReleases、deleteRelease 等)皆為模組私有、未匯出,依規範不列入功能列表。
使用範例
logger.inf
輸出 INF(一般資訊)等級訊息至 stdout。訊息格式為 [yyyy/MM/dd HH:mm:ss][階段][INF]: 訊息(時間為 Asia/Taipei 時區);未提供 stage 時省略 [階段] 區塊。用於記錄流程正常進展,例如讀到的輸入、每個關鍵步驟的結果。
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 已不存在而略過刪除、環境變數改用備援來源推得。
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 本身不會終止程序)。
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),方便追蹤問題時還原完整過程。
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。
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)