develop
master
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。
Reviewed-on: composite-actions/codex#1
Reviewed-on: composite-actions/codex#2
No dependencies set.
The note is not visible to the blocked user.
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。