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:
co-authored by
Claude Opus 4.8
parent
cb943e49a7
commit
7ac64709b9
+46
-3
@@ -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. 執行程序:賦予啟動腳本執行權限
|
||||
# - 無 build/transpile 需求,故不執行建置
|
||||
# -----------------------------------------------------------------------------
|
||||
# 對 /entrypoint.sh 加上可執行權限,確保容器啟動時能直接執行該腳本
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# 5. 縮小映像檔:無相依、無 build 產物可裁剪,alpine 單階段即為最小映像,
|
||||
# 多階段建置在此無縮小效益,故不採用
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# 6. 設定入口:以 entrypoint.sh 啟動(其內 node 指向 /app/index.js)
|
||||
# -----------------------------------------------------------------------------
|
||||
# 設定容器進入點為 /entrypoint.sh(exec 形式);容器啟動即執行該腳本
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
||||
Reference in New Issue
Block a user