Files
clean-old-release/readme.md
T
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

134 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```