Skip to content

env-sync: Vercel Custom Environment(staging 等)対応 #39

Description

@polidog

要件

背景

env-sync の Vercel provider は環境変数の送信先環境として production / preview / development の 3 種のみ対応しており、Vercel の Custom Environment(例: staging)を environments に指定するとエラーになる。Custom Environment にも変数を同期できるようにする。

実装方針

  • 対象ファイル: internal/provider/vercel/vercel.go(および必要に応じて config / i18n)
  • entriesToVercelItems の validTargets バリデーションを見直し、production/preview/development 以外の値を「Custom Environment slug」として許容する。
  • Vercel REST API では Custom Environment は target 配列ではなく customEnvironmentIds(env_* 形式の ID)で指定する必要がある。
    • GET /v9/projects/{idOrName}/custom-environments で slug → ID の対応を解決する(teamId 対応込み)。
    • item 構造体に customEnvironmentIds(json: "customEnvironmentIds", omitempty)を追加し、標準環境は従来どおり target に、Custom Environment は customEnvironmentIds に振り分けて送信本文へ含める。
  • 指定された Custom Environment slug がプロジェクトに存在しない場合は分かりやすいエラーメッセージ(i18n 対応、en/ja 両カタログ)を返す。
  • 標準環境(production/preview/development)と Custom Environment を同一エントリの environments に混在指定できること。
  • 一覧表示(environments=... の表示)でも Custom Environment 名が確認できるようにする。
  • README.md / README.ja.md および env-sync.yaml のコメントに Custom Environment 対応を追記する。

備考

  • ターゲット解決は provider.Options / config.ResolveVercelTargets 経由(Token/ProjectID/TeamID)。既存の複数プロジェクト・vercel_project フィルタと整合させること。
  • Custom Environment ID 解決は API 呼び出しを追加するため、既存の vercelFetchExistingKeys と同様に httptest でモックできる形にする。

完了条件

完了条件

  • env-sync.yaml の environments に Custom Environment slug(例: [staging])を指定した変数が、エラーにならず Vercel の該当 Custom Environment に同期される。
  • 標準環境(production/preview/development)のみ指定した既存挙動が変わらない(後方互換)。
  • production/preview/development と Custom Environment を混在指定(例: [production, staging])した場合、標準環境は target、Custom Environment は customEnvironmentIds で正しく送信される。
  • 存在しない Custom Environment slug を指定した場合、en/ja それぞれで分かりやすいエラーメッセージが出る。
  • Custom Environment slug 解決の単体テスト、および混在指定の送信本文を検証するテストが追加され、go test ./... が通る。
  • README.md / README.ja.md / env-sync.yaml のコメントに Custom Environment の指定方法が記載されている。

確認手順

  • go build ./... && go test ./... が成功すること。
  • internal/provider/vercel/vercel_test.go に httptest でモックした Custom Environment 解決・送信のテストが含まれ、パスすること。
  • 手元検証(可能なら): Custom Environment (staging) を持つ Vercel プロジェクトに対し
    1. env-sync.yaml に MY_KEY: { secret: true, environments: [staging] } を定義
    2. env-sync --env .env.production --dry-run で environments=[staging] が表示されること
    3. dry-run を外して実行し、Vercel ダッシュボードの staging 環境に MY_KEY が登録されることを確認
  • 混在指定 [production, staging] でも production と staging 双方に登録されることを確認。

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