fix(Codex CLI): 改用 flock 管理 auth 鎖定

This commit is contained in:
2026-06-24 10:57:12 +00:00
parent 874ff3d571
commit 8e3166681c
2 changed files with 15 additions and 23 deletions
+5 -5
View File
@@ -1,12 +1,13 @@
FROM alpine:latest FROM alpine:latest
# 安裝必要的工具
RUN apk add --no-cache --no-check-certificate bash ca-certificates curl git jq
# 設定安裝用的環境變數 # 設定安裝用的環境變數
ENV CODEX_NON_INTERACTIVE=1 ENV CODEX_NON_INTERACTIVE=1
ENV CODEX_INSTALL_DIR=/usr/local/bin ENV CODEX_INSTALL_DIR=/usr/local/bin
ENV CODEX_HOME=/root/.codex 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
# 安裝 Codex CLI 工具 # 安裝 Codex CLI 工具
RUN install_script="$(mktemp)" \ RUN install_script="$(mktemp)" \
@@ -18,9 +19,8 @@ RUN install_script="$(mktemp)" \
# 安裝技能 # 安裝技能
RUN codex plugin marketplace add https://gitea.jsc.idv.tw/plugins/doc.git \ 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 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
COPY entrypoint.sh /entrypoint.sh COPY entrypoint.sh /entrypoint.sh
+7 -15
View File
@@ -8,8 +8,7 @@ die() {
} }
cleanup() { cleanup() {
rm -f "${auth_file:-}" "${auth_path:-}" "${codex_output:-}" rm -f "${auth_file:-}" "${auth_path:-}" "${auth_lock:-}" "${codex_output:-}"
rmdir "${auth_lock:-}" 2>/dev/null || true
} }
trap cleanup EXIT trap cleanup EXIT
@@ -29,9 +28,10 @@ umask 077
auth_file="$(mktemp "$CODEX_HOME/auth.XXXXXX")" auth_file="$(mktemp "$CODEX_HOME/auth.XXXXXX")"
auth_path="$CODEX_HOME/auth.json" 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."
if ! printf '%s\n' "$OAUTH" | base64 -d > "$auth_file"; then if ! printf '%s\n' "$OAUTH" | base64 -d > "$auth_file"; then
die "OAUTH must be valid base64 encoded Codex auth.json." die "OAUTH must be valid base64 encoded Codex auth.json."
@@ -50,22 +50,14 @@ rm -f "$auth_file"
codex_output="$(mktemp)" codex_output="$(mktemp)"
run_codex() { if codex exec \
set +e
codex exec \
--dangerously-bypass-approvals-and-sandbox \ --dangerously-bypass-approvals-and-sandbox \
--skip-git-repo-check \ --skip-git-repo-check \
--model "$MODEL" \ --model "$MODEL" \
"$PROMPT" 2>&1 | tee "$codex_output" "$PROMPT" 2>&1 | tee "$codex_output"; then
local status="${PIPESTATUS[0]}"
set -e
return "$status"
}
if run_codex; then
codex_status=0 codex_status=0
else else
codex_status="$?" codex_status="${PIPESTATUS[0]}"
fi fi
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then if [[ -n "${GITHUB_OUTPUT:-}" ]]; then