feat(release-cleanup): 改為 Node 主程式並容器化 #8

Merged
admin merged 2 commits from develop into master 2026-06-30 05:33:30 +00:00
Member

變更摘要

將 Release Cleanup action 由原本的 bash(curl + jq)docker action,改寫為 Node 主程式 + 容器化,並補上完整文件。清理邏輯維持等價:

  • 依建立時間由新到舊排序 release,正式版與 beta 版(tag 名稱含 -beta.各自保留最新 KEEP_COUNT 筆,刪除其餘 release。
  • 重新取得 release 後,刪除所有未綁定任何 release 的孤兒 tag。
  • GITEA_TOKEN 為空時以匿名身分呼叫;參數不合法或分頁取得失敗則以 exit code 1 結束;單筆刪除失敗只記錄錯誤、不中斷。

影響範圍

  • action 對外契約(inputs.keep_count、環境變數 GITEA_SERVER_URL / GITEA_REPOSITORY / GITEA_TOKEN、清理行為)維持不變。
  • 執行底層由 alpine + curl/jq 改為 node:lts-alpine + 原生 fetch(需 Node 18+)。

重點檔案/模組

  • app/index.js(新增):Node 主程式,含參數檢查、分頁抓取、release/tag 清理流程,並補上繁中 JSDoc。
  • app/package.json(新增):專案 metadata,宣告 engines.node >=18,無第三方相依。
  • entrypoint.sh:改為輸出名稱/用途/更新時間橫幅後 exec node /app/index.js,逐行註解。
  • Dockerfile:改用 node alpine 六步結構(ARG NODE_VERSION),逐行註解。
  • action.yaml:補上 keep_count 輸入說明。
  • README.md(新增):行為總覽、輸入與環境變數、workflow 使用範例、專案列表與各 function 使用範例。

風險/注意事項

  • 排序採 sort(...).reverse(),與原 bash jq sort_by | reverse 行為對齊(保守保留,未改為單次降冪以避免相同建立時間的排序穩定性差異)。
  • 另有平行分支 refactor/nodejs-rewrite-20260626-103443 為更完整的 Node 改寫(含共用工具與測試);本 PR 為較精簡的容器化版本,合併前請評估兩者取捨。
  • 本環境未實際執行 docker builddocker run,僅做語法驗證;建議合併前於 CI 或本機驗證映像可正常建置與啟動。
## 變更摘要 將 Release Cleanup action 由原本的 bash(`curl` + `jq`)docker action,改寫為 **Node 主程式 + 容器化**,並補上完整文件。清理邏輯維持等價: - 依建立時間由新到舊排序 release,正式版與 beta 版(tag 名稱含 `-beta.`)**各自**保留最新 `KEEP_COUNT` 筆,刪除其餘 release。 - 重新取得 release 後,刪除所有未綁定任何 release 的孤兒 tag。 - `GITEA_TOKEN` 為空時以匿名身分呼叫;參數不合法或分頁取得失敗則以 exit code 1 結束;單筆刪除失敗只記錄錯誤、不中斷。 ## 影響範圍 - action 對外契約(`inputs.keep_count`、環境變數 `GITEA_SERVER_URL` / `GITEA_REPOSITORY` / `GITEA_TOKEN`、清理行為)維持不變。 - 執行底層由 `alpine` + `curl`/`jq` 改為 `node:lts-alpine` + 原生 `fetch`(需 Node 18+)。 ## 重點檔案/模組 - `app/index.js`(新增):Node 主程式,含參數檢查、分頁抓取、release/tag 清理流程,並補上繁中 JSDoc。 - `app/package.json`(新增):專案 metadata,宣告 `engines.node >=18`,無第三方相依。 - `entrypoint.sh`:改為輸出名稱/用途/更新時間橫幅後 `exec node /app/index.js`,逐行註解。 - `Dockerfile`:改用 `node` alpine 六步結構(`ARG NODE_VERSION`),逐行註解。 - `action.yaml`:補上 `keep_count` 輸入說明。 - `README.md`(新增):行為總覽、輸入與環境變數、workflow 使用範例、專案列表與各 function 使用範例。 ## 風險/注意事項 - 排序採 `sort(...).reverse()`,與原 bash `jq sort_by | reverse` 行為對齊(保守保留,未改為單次降冪以避免相同建立時間的排序穩定性差異)。 - 另有平行分支 `refactor/nodejs-rewrite-20260626-103443` 為更完整的 Node 改寫(含共用工具與測試);本 PR 為較精簡的容器化版本,合併前請評估兩者取捨。 - 本環境未實際執行 `docker build`/`docker run`,僅做語法驗證;建議合併前於 CI 或本機驗證映像可正常建置與啟動。
jiantw83 added 2 commits 2026-06-30 04:42:29 +00:00
將 action 由 bash(curl/jq) 改寫為 Node 主程式 app/index.js(沿用原清理邏輯:
正式版與 beta 版各自保留 KEEP_COUNT 筆、刪除多餘 release 與未綁定 release 的 tag),
entrypoint.sh 改為輸出橫幅後 exec node 主程式,Dockerfile 改用 node alpine 六步結構,
並補上 app/package.json 與 action.yaml 輸入說明。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
新增根目錄 README,含行為總覽、action 輸入與環境變數、workflow 使用範例、
專案列表與各 function 的功能列表與使用範例(連結至 Gitea 來源行)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
admin approved these changes 2026-06-30 05:33:27 +00:00
admin merged commit 65ab58bf8c into master 2026-06-30 05:33:30 +00:00
Sign in to join this conversation.
No Reviewers
No labels
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: old-docker-actions/release-cleanup#8