90 lines
3.2 KiB
Markdown
90 lines
3.2 KiB
Markdown
# Codex CLI Composite Action
|
||
|
||
提供一個 Gitea/GitHub Actions composite action,用於安裝 Codex CLI、寫入 OAuth token、執行指定提示詞,並將 CLI 輸出寫入 action output;另提供透過 `codex app-server` 取得目前登入帳號 email 的 Node.js helper。
|
||
|
||
> 更新時間:2026/06/29 14:18:26
|
||
|
||
## 專案列表
|
||
|
||
### 專案描述
|
||
|
||
| 專案名稱 | 專案描述 |
|
||
| --- | --- |
|
||
| [codex](https://gitea.jsc.idv.tw/composite-actions/codex/src/branch/develop/) | 提供 Codex CLI composite action(安裝 `@openai/codex`、寫入 OAuth token、執行提示詞並輸出文字),並提供透過 `codex app-server` JSON-RPC `account/read` 取得目前登入帳號 email 的 Node.js helper。 |
|
||
|
||
### 參考專案
|
||
|
||
| 專案名稱 | 參考專案列表 |
|
||
| --- | --- |
|
||
| [codex](https://gitea.jsc.idv.tw/composite-actions/codex/src/branch/develop/) | 無 |
|
||
|
||
### NuGet 套件
|
||
|
||
| 專案名稱 | NuGet 套件列表 |
|
||
| --- | --- |
|
||
| [codex](https://gitea.jsc.idv.tw/composite-actions/codex/src/branch/develop/) | 無 |
|
||
|
||
## 功能列表
|
||
|
||
### codex
|
||
|
||
| 功能名稱 | 功能描述 |
|
||
| --- | --- |
|
||
| [app/codex_account.js](https://gitea.jsc.idv.tw/composite-actions/codex/src/branch/develop/app/codex_account.js#L1) | [透過 codex app-server 的 JSON-RPC `account/read` 取得目前登入帳號的 email,取不到或逾時輸出空字串。](#appcodex_accountjs) |
|
||
|
||
## 使用範例
|
||
|
||
<a id="appcodex_accountjs"></a>
|
||
### app/codex_account.js
|
||
|
||
透過 `codex app-server` 的 JSON-RPC `account/read` 取得目前登入帳號的 email。腳本會啟動 `codex app-server` 子行程,依序送出 `initialize` / `initialized` / `account/read` 三筆 JSON-RPC 訊息,使用 Node.js 標準函式庫讀取回應中 `result.account.email` 並輸出到 stdout;讀到 EOF、JSON 解析失敗或超過逾時都會停止,取不到時輸出空字串。
|
||
|
||
前置條件:
|
||
|
||
- `codex` CLI 已安裝(例如本 action 的安裝步驟已執行)。
|
||
- Node.js 已安裝。
|
||
- `$HOME/.codex/auth.json` 已寫入有效的 OAuth token。
|
||
|
||
典型呼叫方式:
|
||
|
||
```bash
|
||
# 取得目前登入帳號 email;預設等待 25 秒
|
||
node app/codex_account.js
|
||
|
||
# 自訂等待 app-server 回應的逾時秒數
|
||
node app/codex_account.js 10
|
||
```
|
||
|
||
預期結果:
|
||
|
||
- 成功時輸出登入帳號的 email 字串。
|
||
- 未登入、回應缺漏或逾時時輸出空字串。
|
||
|
||
此模組亦可直接以指令執行,會將 email 印到 stdout(取不到時印空字串):
|
||
|
||
```bash
|
||
node app/codex_account.js
|
||
```
|
||
|
||
## Docker
|
||
|
||
此專案提供以 `ubuntu:latest` 為基底的 Dockerfile,會安裝 Node.js/npm 與 `@openai/codex`:
|
||
|
||
```bash
|
||
DOCKER_BUILDKIT=1 docker build \
|
||
--secret id=codex_auth,src=/home/coder/jiantw83/Docker/gitea/codex/housefun.dev.01@gmail.com \
|
||
--build-arg EXPECTED_CODEX_EMAIL='temp@gmail.com' \
|
||
-t codex-account .
|
||
docker run --rm -v "$HOME/.codex:/root/.codex:ro" codex-account
|
||
```
|
||
|
||
建置階段會透過 BuildKit secret 暫時掛載 OAuth token,執行 `verify-codex-email` 檢查 `codex-account` 取得的 email 是否等於 `EXPECTED_CODEX_EMAIL`。預設值為 `temp@gmail.com`;不相符時 `docker build` 會失敗,且 token 不會保留在 image layer。
|
||
|
||
容器啟動後預設執行 `codex-account`:
|
||
|
||
```bash
|
||
docker run --rm \
|
||
-v "$HOME/.codex:/root/.codex:ro" \
|
||
codex-account
|
||
```
|