MockIdP CI/CD デプロイメントガイド
MockOpenIdProvider の Cloudflare Workers へのデプロイパイプライン。GitHub Actions で型チェック・ユニットテスト・E2E を回し、main への push で wrangler deploy する。
EcAuth.MockIdP の CI/CD パイプラインと Cloudflare Workers へのデプロイ設定について 説明します。
概要
MockIdP は単一の Worker(mock-openid-provider)として
workers.dev サブドメインに公開されています。カスタムドメインは使いません。
環境は Worker を分けるのではなく、1 つの Worker 内のテナントとして分離
します。リクエストの ?org= または X-Organization ヘッダーでテナントを
解決し、既定は dev です。
| 項目 | 構成 |
|---|---|
| ホスティング | Cloudflare Workers(workers_dev: true、カスタムドメインなし) |
| テナント | dev / staging / production
(?org= / X-Organization で解決、既定 dev) |
| 永続化 | なし。トークンは HS256 署名付きの自己完結型。KV
(USED_CODES)に使用済み認可コードのマーカーのみ記録する |
| ランタイム | TypeScript / Node.js 24 / pnpm |
ワークフロー
| ファイル | トリガー | 内容 |
|---|---|---|
ci.yml |
push / pull_request |
pnpm run typecheck と pnpm test |
e2e-tests.yml |
push / pull_request |
wrangler dev をローカル起動して Playwright E2E を実行 |
deploy.yml |
main への push / workflow_dispatch |
型チェック → ユニットテスト → wrangler deploy → ヘルスチェック |
claude-code-review.yml |
pull_request |
Claude によるレビュー |
デプロイフロー
main ブランチへの push
↓
Deploy to Cloudflare Workers (deploy.yml)
- pnpm install --frozen-lockfile
- pnpm run typecheck
- pnpm test
- pnpm exec wrangler deploy
→ 出力から https://<name>.workers.dev を抽出
- /healthz を最大 10 回リトライ(5 秒間隔)
concurrency.group: deploy-workers かつ
cancel-in-progress: false を指定しています。wrangler deploy は
最後に成功したものが有効になるため、並行実行すると意図しないリビジョンが
残る可能性があります。実行中のデプロイはキャンセルせず、順番に流します。
E2E テスト
E2E は外部環境へデプロイせず、ランナー上で wrangler dev を起動して
http://127.0.0.1:8787 に対して実行します。バインディングは
.dev.vars.example を .dev.vars にコピーして用意するため、
シークレットを必要としません。
GitHub Secrets
| Secret 名 | 用途 |
|---|---|
CLOUDFLARE_API_TOKEN |
wrangler deploy の認証 |
CLOUDFLARE_ACCOUNT_ID |
デプロイ先アカウントの指定 |
CLAUDE_CODE_OAUTH_TOKEN |
claude-code-review.yml(organization secret) |
Azure 認証も 1Password 連携も持ちません。WRANGLER_SEND_METRICS: 'false' を
指定してテレメトリを無効にしています。
Workers Secret の投入
テナント設定(MOCKIDP_{DEV,STAGING,PRODUCTION}_*)と署名鍵
(TOKEN_SIGNING_KEY)は Workers Secret として保持します。
wrangler deploy は Workers Secret を上書きしません。そのため
deploy.yml はシークレットを投入せず、値を変更するときだけローカルから
手動で流します。wrangler.jsonc にも書きません。このリポジトリは公開であり、
staging / production の redirect_uri は EcAuth のデプロイ先 URL を含むためです。
eval $(op signin)
op run --env-file=.env.workers.tpl -- node scripts/collect-secrets.mjs \
| pnpm exec wrangler secret bulk
op run は復号値をサブプロセスの環境変数にだけ渡し、パイプでそのまま
wrangler に流すため、平文がディスクに残りません。
KV Namespace
使用済み認可コードのマーカー(jti → "1")を記録するために
USED_CODES バインディングを使います。機密情報は保存しません。KV は結果整合の
ため、単回使用の完全な保証にはなりません。
pnpm exec wrangler kv namespace create USED_CODES
出力された id を wrangler.jsonc に記載してコミットします。KV namespace ID は
秘匿情報ではないため、公開リポジトリに含めて問題ありません。
ヘルスチェック
/healthz が 200 を返すことを、デプロイ直後に最大 10 回(5 秒間隔)確認します。
10 回失敗するとワークフローが失敗します。
EcAuth 側からの参照
EcAuth から MockIdP へ接続するための情報(エンドポイント、クライアント資格情報)は 1Password に置いてあり、参照するのは EcAuth 側のワークフローです。MockIdP 自身は 1Password を参照しません。
| 1Password アイテム | 用途 |
|---|---|
mockidp-dev |
ローカル Docker 開発と EcAuth の E2E |
mockidp-staging |
EcAuth ステージング環境からの連携 |
mockidp-production |
EcAuth 本番環境からの連携 |
mockidp-workers |
Workers Secret 投入用(.env.workers.tpl が参照) |
関連ドキュメント
- シークレット管理 - 1Password と GitHub Secrets の構成
- EcAuth.MockIdP README - セットアップとエンドポイント仕様
- ecauth-infrastructure CLAUDE.md - インフラ管理ガイド