fix(codex): 改以 codex exec 真實往返驗證登入,移除直接解析 OAuth token
不再解析 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 沙箱失敗。
This commit is contained in:
@@ -30,6 +30,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
oauth: ${{ secrets.CODEX_OAUTH }}
|
oauth: ${{ secrets.CODEX_OAUTH }}
|
||||||
prompt: "請自我介紹"
|
prompt: "請自我介紹"
|
||||||
- name: 檢查登入帳號
|
- name: 檢查登入
|
||||||
if: ${{ steps.codex.outputs.email != vars.CODEX_EMAIL }}
|
if: ${{ steps.codex.outputs.text == '' }}
|
||||||
run: exit 1
|
run: exit 1
|
||||||
|
|||||||
-15
@@ -13,9 +13,6 @@ outputs:
|
|||||||
text:
|
text:
|
||||||
description: '輸出的文字'
|
description: '輸出的文字'
|
||||||
value: ${{ steps.codex.outputs.text }}
|
value: ${{ steps.codex.outputs.text }}
|
||||||
email:
|
|
||||||
description: '目前登入帳號的電子郵件(取自 OAuth id_token)'
|
|
||||||
value: ${{ steps.codex.outputs.email }}
|
|
||||||
runs:
|
runs:
|
||||||
using: 'composite'
|
using: 'composite'
|
||||||
steps:
|
steps:
|
||||||
@@ -43,21 +40,9 @@ runs:
|
|||||||
|
|
||||||
text="$(codex exec --skip-git-repo-check -s danger-full-access --model "$MODEL" "$PROMPT")"
|
text="$(codex exec --skip-git-repo-check -s danger-full-access --model "$MODEL" "$PROMPT")"
|
||||||
printf '%s\n' "$text"
|
printf '%s\n' "$text"
|
||||||
|
|
||||||
# 從 OAuth id_token(JWT)解出目前登入帳號的 email;正規表示式對冒號後空白容錯
|
|
||||||
auth_file="$HOME/.codex/auth.json"
|
|
||||||
id_token="$(grep -oE -m1 '"id_token"[[:space:]]*:[[:space:]]*"[^"]*"' "$auth_file" | sed -E 's/.*:[[:space:]]*"//; s/"$//' || true)"
|
|
||||||
payload="$(printf '%s' "$id_token" | cut -d. -f2 | tr '_-' '/+')"
|
|
||||||
case $((${#payload} % 4)) in
|
|
||||||
2) payload="${payload}==" ;;
|
|
||||||
3) payload="${payload}=" ;;
|
|
||||||
esac
|
|
||||||
email="$(printf '%s' "$payload" | base64 -d 2>/dev/null | grep -oE -m1 '"email"[[:space:]]*:[[:space:]]*"[^"]*"' | sed -E 's/.*:[[:space:]]*"//; s/"$//' || true)"
|
|
||||||
|
|
||||||
{
|
{
|
||||||
echo 'text<<CODEX_OUTPUT'
|
echo 'text<<CODEX_OUTPUT'
|
||||||
printf '%s\n' "$text"
|
printf '%s\n' "$text"
|
||||||
echo 'CODEX_OUTPUT'
|
echo 'CODEX_OUTPUT'
|
||||||
echo "email=$email"
|
|
||||||
} >> "$GITHUB_OUTPUT"
|
} >> "$GITHUB_OUTPUT"
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|||||||
Reference in New Issue
Block a user