Files
calculate-next-version/dockerfile
T
JefferyandClaude Fable 5 1773c646d5
docker-actions/template: CI / BUILD (pull_request) Successful in 4s
refactor: 統一日誌格式為 [階段][等級][時間] 並補齊指令檔文件與 README
- 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>
2026-07-16 09:30:44 +08:00

60 lines
2.9 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 形式的 ENTRYPOINTentrypoint.sh 內以 exec node 取代 shell
# 正確傳遞訊號與 exit code;與 action.yml 的 entrypoint 設定一致。
ENTRYPOINT ["/action/entrypoint.sh"]