背景
env-sync 実行時に以下の警告が出るが、原因(teamId 未設定 / token のスコープ違い / projectId 不一致 など)を切り分ける手段がない。
警告: 既存 key の取得に失敗したため新規/更新の分類をスキップします: 既存 key 取得失敗: HTTP 404: Project not found.
設定・認証・API 到達性を読み取り専用で診断する validate サブコマンドを用意し、何が原因か self-service で調べられるようにする。
requirements
env-sync に validate サブコマンドを追加する(cmd/env-sync/main.go の os.Args 分岐に setup と同様の形で追加)
- 認証 config(
.env-sync.config.yaml / ~/.config/env-sync/config.yaml)・env-sync.yaml・.env(.production) を読み込み、設定の解決結果を表示する
- Vercel ターゲットごとに
token / projectId / teamId の 解決値と取得元(環境変数 / config / .vercel/project.json の orgId)を表示する。token は値をマスクする
- 実際に Vercel API(
GET /v10/projects/{projectID}/env 等)を叩き、projectId + teamId + token の組み合わせが有効かを検証して HTTP ステータスを表示する
- 失敗時(404 / 403 等)に推定原因を提示する:
- 404 → teamId 未設定でチーム配下プロジェクトに到達できていない可能性 / projectId 不一致
- 401 / 403 → token のスコープ・権限違い
- GitHub プロバイダーが対象の場合は repo / token の有効性も検証する(余力があれば)
validate は 読み取り専用。環境変数の登録・更新・削除など書き込み API を一切呼ばない
env-sync --help に validate の説明を追加する
参考実装ポイント
- 既存の取得ロジック
internal/provider/vercel/vercel.go の vercelFetchExistingKeys(GET /v10/projects/{id}/env)が到達確認にそのまま使える
- TeamID 解決順は
internal/config/appconfig.go の ResolveVercelTeamID / resolveVercelTeamID(per-target > 環境変数 > config)、単一ターゲット時の .vercel/project.json orgId フォールバックは vercel.go:75-76
acceptanceCriteria
完了条件
env-sync validate を実行すると、解決された Vercel target(name / projectId / teamId / token 有無・取得元)が一覧表示される
token は値が表示されずマスクされる
- Vercel API への到達確認が行われ、成功時は OK、失敗時は HTTP ステータスと推定原因が表示される
- teamId 未設定でチーム配下プロジェクトにアクセスして 404 になるケースで「teamId が未設定の可能性」が原因候補として提示される
validate は環境変数を一切登録・変更しない(読み取り専用)
env-sync --help に validate の説明が追加されている
確認手順
go build ./... でビルドが通る
- teamId を設定せずチーム配下プロジェクトを指定して
env-sync validate を実行し、404 と「teamId 未設定の可能性」が表示されることを確認する
- 正しい teamId を設定して
env-sync validate を実行し、OK が表示されることを確認する
env-sync validate 実行後、Vercel ダッシュボードで環境変数が変更されていないことを確認する
go test ./... が通る
priority: medium
背景
env-sync実行時に以下の警告が出るが、原因(teamId 未設定 / token のスコープ違い / projectId 不一致 など)を切り分ける手段がない。設定・認証・API 到達性を読み取り専用で診断する
validateサブコマンドを用意し、何が原因か self-service で調べられるようにする。requirements
env-syncにvalidateサブコマンドを追加する(cmd/env-sync/main.goのos.Args分岐にsetupと同様の形で追加).env-sync.config.yaml/~/.config/env-sync/config.yaml)・env-sync.yaml・.env(.production)を読み込み、設定の解決結果を表示するtoken/projectId/teamIdの 解決値と取得元(環境変数 / config /.vercel/project.jsonの orgId)を表示する。tokenは値をマスクするGET /v10/projects/{projectID}/env等)を叩き、projectId + teamId + tokenの組み合わせが有効かを検証して HTTP ステータスを表示するvalidateは 読み取り専用。環境変数の登録・更新・削除など書き込み API を一切呼ばないenv-sync --helpにvalidateの説明を追加する参考実装ポイント
internal/provider/vercel/vercel.goのvercelFetchExistingKeys(GET /v10/projects/{id}/env)が到達確認にそのまま使えるinternal/config/appconfig.goのResolveVercelTeamID/resolveVercelTeamID(per-target > 環境変数 > config)、単一ターゲット時の.vercel/project.jsonorgId フォールバックはvercel.go:75-76acceptanceCriteria
完了条件
env-sync validateを実行すると、解決された Vercel target(name / projectId / teamId / token 有無・取得元)が一覧表示されるtokenは値が表示されずマスクされるvalidateは環境変数を一切登録・変更しない(読み取り専用)env-sync --helpにvalidateの説明が追加されている確認手順
go build ./...でビルドが通るenv-sync validateを実行し、404 と「teamId 未設定の可能性」が表示されることを確認するenv-sync validateを実行し、OK が表示されることを確認するenv-sync validate実行後、Vercel ダッシュボードで環境変数が変更されていないことを確認するgo test ./...が通るpriority: medium