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

將 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>
This commit is contained in:
Jeffery
2026-06-30 12:41:10 +08:00
co-authored by Claude Opus 4.8
parent cb943e49a7
commit 7ac64709b9
5 changed files with 402 additions and 194 deletions
+46 -3
View File
@@ -1,10 +1,53 @@
FROM alpine:latest
# syntax=docker/dockerfile:1
# 安裝必要的工具
RUN apk add --no-cache --no-check-certificate bash curl jq
# =============================================================================
# 此 Dockerfile 的用途:
# 建置 Release Cleanup docker container action 的映像。
# 以 node alpine 為基底,複製 app/ 主程式與 entrypoint.sh,設定入口。
#
# 更新日期:2026/06/30 12:02:55(台灣時區)
# =============================================================================
# -----------------------------------------------------------------------------
# 1. 參數處理:node base image tag 以 ARG 注入
# - 預設 lts-alpine;建置時可用 --build-arg NODE_VERSION=... 覆寫
# - 主程式以原生 fetch 呼叫 Gitea API(需 Node 18+),alpine 為最小可用基底
# -----------------------------------------------------------------------------
# 宣告可覆寫的建置參數 NODE_VERSION,預設值 lts-alpine
ARG NODE_VERSION=lts-alpine
# 以 node:${NODE_VERSION} 作為基底映像;引用上方 ARG 決定實際 node 版本/變體
FROM node:${NODE_VERSION}
# -----------------------------------------------------------------------------
# 2. 安裝套件:主程式無第三方相依,亦未呼叫外部執行檔
# (不需 curl/jq/git 等 OS 套件),故略過此步驟
# -----------------------------------------------------------------------------
# 設定後續指令的工作目錄為 /app;不存在時會自動建立,COPY 的相對目的地以此為基準
WORKDIR /app
# -----------------------------------------------------------------------------
# 3. 複製檔案:主程式(app/)與啟動腳本
# -----------------------------------------------------------------------------
# 複製 app/ 目錄全部內容到映像內 /app/(主程式,含 index.js 進入點)
COPY app/ /app/
# 複製啟動腳本到映像根目錄 /entrypoint.sh(供 ENTRYPOINT 使用)
COPY entrypoint.sh /entrypoint.sh
# -----------------------------------------------------------------------------
# 4. 執行程序:賦予啟動腳本執行權限
# - 無 buildtranspile 需求,故不執行建置
# -----------------------------------------------------------------------------
# 對 /entrypoint.sh 加上可執行權限,確保容器啟動時能直接執行該腳本
RUN chmod +x /entrypoint.sh
# -----------------------------------------------------------------------------
# 5. 縮小映像檔:無相依、無 build 產物可裁剪,alpine 單階段即為最小映像,
# 多階段建置在此無縮小效益,故不採用
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# 6. 設定入口:以 entrypoint.sh 啟動(其內 node 指向 /app/index.js
# -----------------------------------------------------------------------------
# 設定容器進入點為 /entrypoint.sh(exec 形式);容器啟動即執行該腳本
ENTRYPOINT ["/entrypoint.sh"]