docker-actions/template: CI / BUILD (pull_request) Successful in 4s
- logger.js format() 組字順序改為階段在前、等級居中、時間在後(Asia/Taipei) - entrypoint.sh 啟動訊息改用新格式並更新標頭時間 - action.yml 新增用途/更新時間標頭與逐行繁中註解,設定值不變 - dockerfile 檔名維持小寫並與 action.yml 的 image 引用一致 - 新增 src/logger.js、src/version.js 模組與完整 JSDoc;重建 README.md Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
60 lines
2.9 KiB
Docker
60 lines
2.9 KiB
Docker
# syntax=docker/dockerfile:1
|
||
|
||
# ============================================================================
|
||
# 用途:建置「Calculate Next Version」Gitea/GitHub Docker action 的執行映像;
|
||
# 採兩階段建置(build 整理產物、runtime 以 slim 基底縮小映像),
|
||
# runtime 額外安裝 git 供主程式讀取 repo tag,最終以 entrypoint.sh 啟動 node 主程式。
|
||
# 更新時間:2026/07/16 09:16:51
|
||
# ============================================================================
|
||
|
||
# 1. 參數處理:node 版本以 ARG 注入(預設最新版;--node-version 可覆寫)
|
||
# 置於第一個 FROM 之前的全域 ARG,兩個 FROM 皆可引用;
|
||
# NODE_VERSION 決定 build 階段基底、NODE_RUNTIME 決定 runtime 階段基底。
|
||
# 需人工確認:latest / slim 皆為浮動 tag,未鎖定版本,重建結果可能隨上游更新而改變(不可重現建置)。
|
||
ARG NODE_VERSION=latest
|
||
|
||
# runtime 基底 tag(slim 變體,體積較小);同屬全域 ARG,供第二個 FROM 引用。
|
||
ARG NODE_RUNTIME=slim
|
||
|
||
# ---- build 階段:整理產物 ----
|
||
# 以完整版 node 映像作為 build 階段基底,僅用來集中整理 action 產物,
|
||
# 不會進入最終映像,因此體積不影響結果。
|
||
FROM node:${NODE_VERSION} AS build
|
||
|
||
# 設定工作目錄為 /action,後續 COPY/RUN 皆以此為基準路徑。
|
||
WORKDIR /action
|
||
|
||
# 2. 安裝套件:無外部相依,僅使用 node 內建模組,故無 npm install
|
||
|
||
# 3. 複製檔案:帶入主程式與入口
|
||
# 複製 src/(index.js / logger.js / version.js 等主程式模組)到 /action/src/。
|
||
COPY src/ /action/src/
|
||
|
||
# 複製容器入口腳本,負責輸出啟動訊息並以 exec 啟動 node 主程式。
|
||
COPY entrypoint.sh /action/entrypoint.sh
|
||
|
||
# 4. 執行程序:賦予 entrypoint 執行權限
|
||
# 確保 entrypoint.sh 可被容器直接執行(避免來源檔案系統權限遺失時 ENTRYPOINT 失敗)。
|
||
RUN chmod +x /action/entrypoint.sh
|
||
|
||
# 5. 縮小映像檔:runtime 改用 slim 基底,只帶必要產物;主程式需呼叫 git 讀 tag
|
||
# 第二階段為最終映像,捨棄 build 階段中不必要的內容以縮小體積。
|
||
FROM node:${NODE_RUNTIME} AS runtime
|
||
|
||
# 安裝 git(slim 基底未內建),主程式需以 git 指令讀取 repo 的 tag 計算版號;
|
||
# --no-install-recommends 避免拉入非必要套件,安裝後清除 apt 快取以縮小 layer。
|
||
RUN apt-get update \
|
||
&& apt-get install -y --no-install-recommends git \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# 設定最終映像的工作目錄為 /action。
|
||
WORKDIR /action
|
||
|
||
# 自 build 階段複製整理好的產物(src/ 與 entrypoint.sh)到最終映像。
|
||
COPY --from=build /action /action
|
||
|
||
# 6. 設定入口:以 entrypoint.sh 啟動 node 主程式
|
||
# 使用 exec 形式的 ENTRYPOINT;entrypoint.sh 內以 exec node 取代 shell,
|
||
# 正確傳遞訊號與 exit code;與 action.yml 的 entrypoint 設定一致。
|
||
ENTRYPOINT ["/action/entrypoint.sh"]
|