# syntax=docker/dockerfile:1
# ============================================================================
# 用途：建置 Gitea docker action「Clean Old Release」的容器映像；採多階段建置
#       （build 階段整理產物、runtime 階段改用 node:slim 縮小映像），
#       action 執行時由 /action/entrypoint.sh 啟動 Node.js 主程式清理舊 Release。
# 更新時間：2026/07/16 14:15:41
# ============================================================================

# 1. 參數處理：build 階段 Node 版本以 ARG 注入，預設 latest，可於建置時覆寫
ARG NODE_VERSION=latest

# runtime 階段基底標籤，預設 slim 以縮小最終映像體積
ARG NODE_RUNTIME=slim

# ---- build 階段：整理產物 ----
# 以 node:${NODE_VERSION} 作為 build 階段基底並命名為 build，供後續階段引用
FROM node:${NODE_VERSION} AS build

# 設定工作目錄為 /action，後續 COPY/RUN 皆以此為基準路徑
WORKDIR /action

# 2. 複製檔案：帶入 Node.js 主程式（僅用 Node 內建模組，無相依套件需安裝）
COPY src/ /action/src/

# 帶入容器入口腳本，負責啟動 node 主程式
COPY entrypoint.sh /action/entrypoint.sh

# 3. 執行程序：賦予 entrypoint 執行權限，否則 runtime 階段無法作為 ENTRYPOINT 執行
RUN chmod +x /action/entrypoint.sh

# 4. 縮小映像檔：runtime 改用 node:${NODE_RUNTIME}（slim）基底，只帶必要產物
FROM node:${NODE_RUNTIME} AS runtime

# 於 runtime 階段同樣以 /action 為工作目錄，維持與 build 階段一致的路徑
WORKDIR /action

# 從 build 階段複製整理好的產物（src/ 與已具執行權限的 entrypoint.sh）
COPY --from=build /action /action

# 5. 設定入口：容器啟動時以 entrypoint.sh 執行 node 主程式
ENTRYPOINT ["/action/entrypoint.sh"]
