# =============================================================================
# 用途：本 Dockerfile 採「單階段建置（single-stage build）」產出 codex CLI 映像。
#       以 node-slim 為基底，透過 npm 全域安裝 @openai/codex CLI 套件，
#       並額外安裝 ca-certificates 以支援 HTTPS 連線，
#       最終映像預設執行 `codex --version`。
# 更新日期：2026/07/01 09:58:04
# =============================================================================

# syntax 指示詞：指定使用 dockerfile:1 前端語法，啟用 BuildKit 進階功能（必須置於檔首第一行有效指令）
# syntax=docker/dockerfile:1

# 1. 參數處理：映像檔版本與套件版本皆直接寫死，無可調參數需以 ARG 注入（略）

# ---- 單一建置階段：安裝 codex CLI 套件 ----
# FROM node:22-slim：以 node 22 slim 版為基底開啟唯一建置階段（slim 版較精簡）
FROM node:22-slim

# ENV DEBIAN_FRONTEND=noninteractive：設定 Debian 套件管理為非互動模式，避免 apt 安裝時跳出互動提示而卡住建置
ENV DEBIAN_FRONTEND=noninteractive

# 2. 安裝套件：先以 apt 安裝 codex 進行 HTTPS 連線所需的 ca-certificates，再以 npm 全域安裝 @openai/codex CLI
#    官方 node image 的全域安裝前綴為 /usr/local，套件與其相依落於 /usr/local/lib/node_modules，bin symlink 落於 /usr/local/bin
#    （單階段無跨階段 COPY，npm 建立的 /usr/local/bin/codex symlink 原地保留、指向正確，可正常解析平台原生相依）
# RUN：apt 安裝 ca-certificates（--no-install-recommends 不裝建議套件）→ npm 全域安裝 codex →
#     於同一層合併清理 apt 索引快取與 npm 快取，避免快取檔殘留而膨脹該層
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        ca-certificates \
    && npm install -g @openai/codex \
    && npm cache clean --force \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 3. 複製檔案：本映像為純 CLI 工具安裝，無專案原始碼需複製（略）
# 4. 執行程序：codex 為預編譯 npm 套件，無 build / compile / transpile 步驟（略）

# 5. 縮小映像檔：單階段下透過「slim 基底 + --no-install-recommends + 安裝與清理合併於同層（見步驟 2）」達成縮小，故此處無獨立清理指令
# 6. 設定入口：CMD 置於最後，語意與原檔一致
# CMD：容器啟動時的預設執行指令，預設執行 `codex --version` 顯示版本（exec form，不經 shell）；可於 docker run 時覆寫
CMD ["codex", "--version"]
