要件
前提: #15(cmd/+internal/ へのパッケージ再編)完了後の構成を前提とする。
internal/provider/gcp/gcp.go に gcpProvider struct を実装し、internal/provider/ の Provider interface(Name() string, Sync(opts Options, entries []Entry) error)を満たす
init() 関数内で registerProvider("gcp", ...) を呼び出し自己登録する
cmd/env-sync/main.go で _ "github.com/ptyhard/env-sync/internal/provider/gcp" を blank import して registry に登録する
- 認証: Application Default Credentials(
GOOGLE_APPLICATION_CREDENTIALS 環境変数または ADC 自動解決)を使用
- 必須環境変数:
GCP_PROJECT_ID(Secret Manager の対象 GCP プロジェクト ID)
Entry.Secret == true の場合は Secret Manager に secret として作成・更新(projects/{project}/secrets/{key}/versions にバージョン追加)
Entry.Secret == false のエントリはスキップしてログ出力(Secret Manager は秘匿値専用のため)
Entry.Environments が指定された場合、labels {"environment": "<env>"} を secret に付与する
opts.DryRun == true の場合は API 呼び出しをスキップしてログのみ出力
- テストは
internal/provider/gcp/gcp_test.go に追加(他の provider と同じパッケージに配置)
go.mod / go.sum に cloud.google.com/go/secretmanager 依存を追加
env-sync.yaml サンプルに provider: gcp の使用例を追記
完了条件
env-sync.yaml で provider: gcp または provider: [vercel, gcp] と設定したとき、GCP Secret Manager に環境変数が同期される
GCP_PROJECT_ID が未設定の場合、明示的なエラーメッセージが表示される
Entry.Secret == false のエントリはスキップされ、警告ログが出力される
--dry-run フラグ使用時は API 呼び出しなしで対象キー一覧がログ出力される
go test ./... がすべてパスする(internal/provider/gcp/gcp_test.go を含む)
go build ./... がエラーなしで通る
確認手順
go build ./... を実行してビルドエラーがないことを確認
go test ./... を実行して全テストがパスすることを確認
- GCP プロジェクトと ADC が設定された環境で
GCP_PROJECT_ID=<project> env-sync run --provider gcp --dry-run を実行し、対象変数がログに出力されることを確認
- 実際の GCP 環境で dry-run なしに実行し、Secret Manager コンソールでシークレットが作成・更新されることを確認
GCP_PROJECT_ID 未設定で実行し、エラーメッセージが出ることを確認
要件
internal/provider/gcp/gcp.goにgcpProviderstruct を実装し、internal/provider/の Provider interface(Name() string,Sync(opts Options, entries []Entry) error)を満たすinit()関数内でregisterProvider("gcp", ...)を呼び出し自己登録するcmd/env-sync/main.goで_ "github.com/ptyhard/env-sync/internal/provider/gcp"を blank import して registry に登録するGOOGLE_APPLICATION_CREDENTIALS環境変数または ADC 自動解決)を使用GCP_PROJECT_ID(Secret Manager の対象 GCP プロジェクト ID)Entry.Secret == trueの場合は Secret Manager に secret として作成・更新(projects/{project}/secrets/{key}/versionsにバージョン追加)Entry.Secret == falseのエントリはスキップしてログ出力(Secret Manager は秘匿値専用のため)Entry.Environmentsが指定された場合、labels{"environment": "<env>"}を secret に付与するopts.DryRun == trueの場合は API 呼び出しをスキップしてログのみ出力internal/provider/gcp/gcp_test.goに追加(他の provider と同じパッケージに配置)go.mod/go.sumにcloud.google.com/go/secretmanager依存を追加env-sync.yamlサンプルにprovider: gcpの使用例を追記完了条件
env-sync.yamlでprovider: gcpまたはprovider: [vercel, gcp]と設定したとき、GCP Secret Manager に環境変数が同期されるGCP_PROJECT_IDが未設定の場合、明示的なエラーメッセージが表示されるEntry.Secret == falseのエントリはスキップされ、警告ログが出力される--dry-runフラグ使用時は API 呼び出しなしで対象キー一覧がログ出力されるgo test ./...がすべてパスする(internal/provider/gcp/gcp_test.goを含む)go build ./...がエラーなしで通る確認手順
go build ./...を実行してビルドエラーがないことを確認go test ./...を実行して全テストがパスすることを確認GCP_PROJECT_ID=<project> env-sync run --provider gcp --dry-runを実行し、対象変数がログに出力されることを確認GCP_PROJECT_ID未設定で実行し、エラーメッセージが出ることを確認