處理 AI review findings 並改寫 Node.js entrypoint #1

Merged
jiantw83 merged 58 commits from ai-review-resolve/20260624102518 into develop 2026-06-24 14:09:27 +00:00
2 changed files with 15 additions and 23 deletions
Showing only changes of commit 8e3166681c - Show all commits
+5 -5
View File
@@ -1,12 +1,13 @@
FROM alpine:latest
# 安裝必要的工具
RUN apk add --no-cache --no-check-certificate bash ca-certificates curl git jq
# 設定安裝用的環境變數
ENV CODEX_NON_INTERACTIVE=1
ENV CODEX_INSTALL_DIR=/usr/local/bin
ENV CODEX_HOME=/root/.codex
ENV CODEX_PLUGINS="jsc@doc jsc@code-review"
# 安裝必要的工具
RUN apk add --no-cache --no-check-certificate bash ca-certificates curl git jq util-linux
Ghost marked this conversation as resolved
Review

嚴重等級🟡 警告
審查員:Assassin
問題:Codex 外掛市集來源指向 gitea.jsc.idv.tw,未驗證來源的安全性。若該伺服器遭駭,將導致自動安裝惡意或篡改過的外掛,進而導致供應鏈攻擊。
建議:若可能,請將外掛來源固定在受信任的內部儲存庫或使用經簽署的外掛版本。確保來源伺服器具有嚴格的存取控管與安全性掃描。

**嚴重等級**:🟡 警告 **審查員**:Assassin **問題**:Codex 外掛市集來源指向 `gitea.jsc.idv.tw`,未驗證來源的安全性。若該伺服器遭駭,將導致自動安裝惡意或篡改過的外掛,進而導致供應鏈攻擊。 **建議**:若可能,請將外掛來源固定在受信任的內部儲存庫或使用經簽署的外掛版本。確保來源伺服器具有嚴格的存取控管與安全性掃描。
Review

嚴重等級🟡 警告
審查員:Leo
問題:環境變數使用以空格分隔的字串,若未來名稱中包含空格將導致 shell 展開錯誤,且難以維護。
建議:建議改用換行符號(
)分隔,並在安裝迴圈中使用 IFS=$' ' 處理,以提高 shell 指令的健壯性。

**嚴重等級**:🟡 警告 **審查員**:Leo **問題**:環境變數使用以空格分隔的字串,若未來名稱中包含空格將導致 shell 展開錯誤,且難以維護。 **建議**:建議改用換行符號( )分隔,並在安裝迴圈中使用 `IFS=$' '` 處理,以提高 shell 指令的健壯性。
# 安裝 Codex CLI 工具
RUN install_script="$(mktemp)" \
5
@@ -18,9 +19,8 @@ RUN install_script="$(mktemp)" \
# 安裝技能
RUN codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/doc.git \
&& codex plugin add jsc@doc \
&& codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/code-review.git \
&& codex plugin add jsc@code-review
&& for plugin in $CODEX_PLUGINS; do codex plugin add "$plugin"; done
Ghost marked this conversation as resolved
Review

嚴重等級🟡 警告
審查員:Leo
問題:插件 URL 與版本參照 (REF) 硬編碼在 Dockerfile 中,未來若需更新插件或更換來源,需重新編譯整個 Docker 映像檔,維護成本較高。
建議:建議將這些插件清單與版本資訊移至外部設定檔 (如 plugins.json),並在 Dockerfile 中讀取該檔案進行安裝,增加彈性。

**嚴重等級**:🟡 警告 **審查員**:Leo **問題**:插件 URL 與版本參照 (REF) 硬編碼在 Dockerfile 中,未來若需更新插件或更換來源,需重新編譯整個 Docker 映像檔,維護成本較高。 **建議**:建議將這些插件清單與版本資訊移至外部設定檔 (如 plugins.json),並在 Dockerfile 中讀取該檔案進行安裝,增加彈性。
COPY entrypoint.sh /entrypoint.sh
+10 -18
View File
@@ -8,8 +8,7 @@ die() {
}
cleanup() {
rm -f "${auth_file:-}" "${auth_path:-}" "${codex_output:-}"
rmdir "${auth_lock:-}" 2>/dev/null || true
rm -f "${auth_file:-}" "${auth_path:-}" "${auth_lock:-}" "${codex_output:-}"
}
trap cleanup EXIT
@@ -29,9 +28,10 @@ umask 077
auth_file="$(mktemp "$CODEX_HOME/auth.XXXXXX")"
auth_path="$CODEX_HOME/auth.json"
auth_lock="$CODEX_HOME/auth.lock"
auth_lock="$(mktemp "$CODEX_HOME/auth.lock.XXXXXX")"
mkdir "$auth_lock" || die "Unable to lock Codex auth.json."
exec 9>"$auth_lock"
flock -n 9 || die "Unable to lock Codex auth.json."
Ghost marked this conversation as resolved
Review

嚴重等級🟡 警告
審查員:Mage
問題:使用 mkdir 作為鎖定機制若容器意外崩潰可能殘留鎖檔。
建議:考慮使用更穩健的 flock 機制來管理檔案鎖並確保自動清理。

**嚴重等級**:🟡 警告 **審查員**:Mage **問題**:使用 `mkdir` 作為鎖定機制若容器意外崩潰可能殘留鎖檔。 **建議**:考慮使用更穩健的 `flock` 機制來管理檔案鎖並確保自動清理。
if ! printf '%s\n' "$OAUTH" | base64 -d > "$auth_file"; then
die "OAUTH must be valid base64 encoded Codex auth.json."
3
@@ -50,22 +50,14 @@ rm -f "$auth_file"
codex_output="$(mktemp)"
run_codex() {
set +e
codex exec \
--dangerously-bypass-approvals-and-sandbox \
--skip-git-repo-check \
--model "$MODEL" \
"$PROMPT" 2>&1 | tee "$codex_output"
local status="${PIPESTATUS[0]}"
set -e
return "$status"
}
if run_codex; then
if codex exec \
--dangerously-bypass-approvals-and-sandbox \
--skip-git-repo-check \
--model "$MODEL" \
"$PROMPT" 2>&1 | tee "$codex_output"; then
codex_status=0
Ghost marked this conversation as resolved
Review

嚴重等級🟡 警告
審查員:Mage
問題:在容器化環境(通常是 ephemeral 的)中,auth.json 寫入後立刻被刪除,這會導致 codex 在後續執行中因找不到驗證檔案而無法運作。另外,trap 的清理機制會導致該檔案在 codex 完成工作前被刪除,這對於長效執行或需要多次存取的應用場景是錯誤的設計。
建議:評估 codex 是否需要該檔案在執行期間持續存在。若需要,請調整清理時機,或考慮使用記憶體中的臨時檔案系統(tmpfs)來提升安全性,而非直接移除檔案。

**嚴重等級**:🟡 警告 **審查員**:Mage **問題**:在容器化環境(通常是 ephemeral 的)中,auth.json 寫入後立刻被刪除,這會導致 codex 在後續執行中因找不到驗證檔案而無法運作。另外,trap 的清理機制會導致該檔案在 codex 完成工作前被刪除,這對於長效執行或需要多次存取的應用場景是錯誤的設計。 **建議**:評估 codex 是否需要該檔案在執行期間持續存在。若需要,請調整清理時機,或考慮使用記憶體中的臨時檔案系統(tmpfs)來提升安全性,而非直接移除檔案。
else
codex_status="$?"
codex_status="${PIPESTATUS[0]}"
fi
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then