# ============================================================================= # 用途:PR(非 master 分支、opened/synchronize)觸發的 CI。 # 流程:先用 release-tag-version composite action 算出 beta 版本號,再用該版本號 # 叫 codex composite action 執行(未帶 prompt,走取登入 email 分支), # 最後以「檢查輸出」step 驗證輸出的登入帳號 email 是否等於 vars.CODEX_EMAIL。 # 更新日期:2026/06/29 14:18:26 # ============================================================================= # workflow 顯示名稱,於 Gitea Actions 列表中辨識此工作流程。 name: CI # 觸發條件設定區塊。 on: # 針對 pull_request 事件觸發。 pull_request: # 略過目標分支為 master 的 PR(亦即只在「非 master 分支」的 PR 上跑), # 避免對 master 的合併 PR 重複執行 CI。 branches-ignore: - master # 僅在 PR 被開啟(opened)或有新 commit 推入(synchronize)時觸發, # 其他事件(如 reopened、labeled)不觸發以節省資源。 types: [opened, synchronize] # 工作(jobs)定義區塊。 jobs: # 第一個 job:計算 beta 版本號,供後續 codex job 取用。 release-tag-version: # job 顯示名稱。 name: Release Tag Version # 指定執行的 runner 標籤(ubuntu)。 runs-on: ubuntu # 對外輸出值,讓相依此 job 的其他 job 可引用。 outputs: # 將 release-tag-version step 算出的 version 輸出,鍵名為 version。 version: ${{ steps.release-tag-version.outputs.version }} # 步驟清單。 steps: # 呼叫 release-tag-version composite action 計算版本號。 - name: 計算版本號 # 此 step 的 id,供 outputs 透過 steps.release-tag-version 引用其輸出。 id: release-tag-version # 使用外部 composite action;版本由 repo 變數 ACTION_RELEASE_TAG_VERSION 決定, # 便於集中管理所引用 action 的版本。 uses: https://gitea.jsc.idv.tw/composite-actions/release-tag-version@${{ vars.ACTION_RELEASE_TAG_VERSION }} with: # 指定產生 beta 版本號(而非正式版),用於 CI 測試情境。 is_beta: 'true' # 第二個 job:用前一 job 算出的版本號叫 codex action,再驗證其輸出。 codex: # job 顯示名稱。 name: Codex # 指定執行的 runner 標籤(ubuntu)。 runs-on: ubuntu # 相依 release-tag-version job,需等其成功後才執行, # 以取得其輸出的版本號。 needs: release-tag-version # 步驟清單。 steps: # 步驟一:呼叫 codex composite action(未帶 prompt,走「取登入 email」分支)。 - name: 測試工具 # 此 step 的 id,供後續「檢查輸出」step 引用其 outputs.text。 id: codex # 使用 codex composite action;版本標籤由前一 job 輸出的 version 組成 # (前綴 v),確保測試所用 codex action 與本次算出的 beta 版本一致。 uses: https://gitea.jsc.idv.tw/composite-actions/codex@v${{ needs.release-tag-version.outputs.version }} with: # 由 secrets 注入 codex 登入用 OAuth 憑證,避免明文外洩。 # 注意:未提供 prompt,codex action 會回傳目前登入帳號的 email。 oauth: ${{ secrets.CODEX_OAUTH }} # 步驟二:驗證登入身分。 - name: 檢查輸出 # 當 codex 輸出的登入 email 與 repo 變數 CODEX_EMAIL 不符時條件成立, # 代表登入帳號不是預期帳號。 if: ${{ steps.codex.outputs.text != vars.CODEX_EMAIL }} # 條件成立即以非零狀態碼退出,使 CI 失敗(擋下非預期登入帳號)。 run: exit 1