ai-review-resolve/develop-20260629-115924
develop
將原本的「Composite Action 範本」改造為實際可用的 Codex CLI composite action,並調整 CI workflow 以驗證該 action,最後補上 README 使用說明。
action.yml
prompt
oauth
npm install -g @openai/codex
$HOME/.codex/auth.json
700
600
vars.CODEX_MODEL
codex exec --model "$MODEL" "$PROMPT"
steps.codex.outputs.text
.gitea/workflows/ci.yaml
release-tag-version
codex
vars.CODEX_EMAIL
README.md
text
secrets
@openai/codex
codex exec 加上 -s danger-full-access 避免 runner 容器內 bubblewrap 因 無法建立 user namespace 而失敗;action 新增 email output(解析 auth.json id_token 的 email claim),CI 改用 steps.codex.outputs.email 比對 vars.CODEX_EMAIL,不再依賴模型自行回報帳號。
不再解析 auth.json 的 id_token 來取得 email(只證明 secret 解得開、 無法確保工具真的登入成功)。改為透過 codex exec 實際呼叫模型:登入無效 或 token 過期時 codex exec 會直接失敗,CI 再以 steps.codex.outputs.text 是否為空做最終把關。action 移除 email output,保留 -s danger-full-access 以避免 runner 容器內 bubblewrap 沙箱失敗。
不解析本地 OAuth token,改透過 codex 自身的 app-server JSON-RPC account/read(即 TUI /status 的 Account 來源)取得登入帳號 email, 新增 email output;CI 以 steps.codex.outputs.email 比對 vars.CODEX_EMAIL 確認是正確帳號。codex exec 仍保留以確保 token 實際有效。
把原本內嵌在 action.yml heredoc 的 python 抽成獨立檔 app/codex_account.py, action 改以 $GITHUB_ACTION_PATH/app/codex_account.py 呼叫,便於閱讀與維護。
oauth 不再經由 inputs 傳入,action 直接讀 secrets.CODEX_OAUTH(與 vars.CODEX_MODEL 相同模式)。登入帳號驗證移入 action:讀 vars.CODEX_EMAIL 與 app-server 取得的 email 比對,不再輸出 email 到 outputs、不在 CI 端比對。
composite action 內無法解析 secrets context(Gitea 與 GitHub 皆然, vars 可、secrets 不可),導致 OAUTH 為空。改由呼叫端 workflow 在 job 層 以 env: CODEX_OAUTH: ${{ secrets.CODEX_OAUTH }} 注入,action 從繼承的 環境變數讀取並加空值把關;secret 仍源自 secrets、不經 inputs 傳遞。
composite action 讀不到 secrets context,改回由呼叫端以 with: oauth: ${{ secrets.CODEX_OAUTH }} 經 inputs.oauth 傳入;action 從 inputs.oauth 讀取並保留空值把關,移除 job 層 CODEX_OAUTH env。
No dependencies set.
The note is not visible to the blocked user.
變更摘要
將原本的「Composite Action 範本」改造為實際可用的 Codex CLI composite action,並調整 CI workflow 以驗證該 action,最後補上 README 使用說明。
重點檔案
action.yml:由通用範本改為 Codex CLI action。prompt(提示詞,選填)與oauth(base64 編碼的 OAuth token,必填)。npm install -g @openai/codex,將 OAuth token 解碼寫入$HOME/.codex/auth.json並設定權限700/600。vars.CODEX_MODEL,執行codex exec --model "$MODEL" "$PROMPT",並以 heredoc 方式將輸出寫入steps.codex.outputs.text。.gitea/workflows/ci.yaml:CI 由原本的 AI code review 改為兩個任務:release-tag-version:呼叫 release-tag-version action 以 beta 模式計算版本號。codex:依計算出的版本號呼叫本 action,並比對輸出是否符合vars.CODEX_EMAIL。README.md(新增):說明 action 用途、專案列表、使用範例與前置條件。影響範圍
text輸入,新增prompt、oauth;輸出維持text但來源改為 codex step。風險與注意事項
oauth為必填且屬機密,需由呼叫端以secrets提供;token 會寫入 runner 的$HOME/.codex/auth.json。vars.CODEX_MODEL,缺少時 action 會主動報錯並結束。@openai/codex。composite action 內無法解析 secrets context(Gitea 與 GitHub 皆然, vars 可、secrets 不可),導致 OAUTH 為空。改由呼叫端 workflow 在 job 層 以 env: CODEX_OAUTH: ${{ secrets.CODEX_OAUTH }} 注入,action 從繼承的 環境變數讀取並加空值把關;secret 仍源自 secrets、不經 inputs 傳遞。composite action 讀不到 secrets context,改回由呼叫端以 with: oauth: ${{ secrets.CODEX_OAUTH }} 經 inputs.oauth 傳入;action 從 inputs.oauth 讀取並保留空值把關,移除 job 層 CODEX_OAUTH env。