Skip to content

validate サブコマンドで設定・接続を診断 #34

Description

@polidog

背景

env-sync 実行時に以下の警告が出るが、原因(teamId 未設定 / token のスコープ違い / projectId 不一致 など)を切り分ける手段がない。

警告: 既存 key の取得に失敗したため新規/更新の分類をスキップします: 既存 key 取得失敗: HTTP 404: Project not found.

設定・認証・API 到達性を読み取り専用で診断する validate サブコマンドを用意し、何が原因か self-service で調べられるようにする。

requirements

  • env-syncvalidate サブコマンドを追加する(cmd/env-sync/main.goos.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 --helpvalidate の説明を追加する

参考実装ポイント

  • 既存の取得ロジック internal/provider/vercel/vercel.govercelFetchExistingKeysGET /v10/projects/{id}/env)が到達確認にそのまま使える
  • TeamID 解決順は internal/config/appconfig.goResolveVercelTeamID / 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 --helpvalidate の説明が追加されている

確認手順

  • go build ./... でビルドが通る
  • teamId を設定せずチーム配下プロジェクトを指定して env-sync validate を実行し、404 と「teamId 未設定の可能性」が表示されることを確認する
  • 正しい teamId を設定して env-sync validate を実行し、OK が表示されることを確認する
  • env-sync validate 実行後、Vercel ダッシュボードで環境変数が変更されていないことを確認する
  • go test ./... が通る

priority: medium

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions