Files
JefferyandClaude Fable 5 597fa4119b
docker-actions/template: CI / BUILD (pull_request) Successful in 5s
feat: 實作 Clean Old Release action
- 依建立時間將 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>
2026-07-17 08:38:21 +08:00

5.6 KiB
Raw Permalink Blame History

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 名稱含 betarelease 要保留的最新筆數

環境需求

執行時依賴 runner 注入的環境變數:GITHUB_REPOSITORY(目標 repo)、GITHUB_API_URL(或 GITHUB_SERVER_URL,用於組出 Gitea API 位址),以及 GITHUB_TOKENGITEA_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 的主流程函式(mainfetchAllReleasesdeleteRelease 等)皆為模組私有、未匯出,依規範不列入功能列表。

使用範例

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