Skip to content

setup サブコマンド: 認証 config を対話生成 #30

Description

@polidog

要件

env-sync に新しいサブコマンド setup を追加し、認証 config ファイル(.env-sync.config.yaml / ~/.config/env-sync/config.yaml)を対話プロンプトで生成できるようにする。これは既存の init(env-sync.yaml = 変数定義ファイルの雛形生成)とは別概念で、未カバーだった「認証情報・ID の config」を担う。

対象ファイル

  • 新規: internal/config/setup.go(RunSetup / フラグ解析 / 対話プロンプト / YAML 生成)
  • 新規: internal/config/setup_test.go
  • 変更: cmd/env-sync/main.go — run() でサブコマンド setup を分岐(既存 initargs[0] == "init" 分岐と同じ書き方)、printUsage() のサブコマンド一覧とオプション説明に setup を追記
  • 参照: internal/config/appconfig.go(AppConfig / AppVercelConfig / AppGitHubConfig のスキーマ・globalAppConfigPath()・projectAppConfigFile・warnIfInsecurePermissions に整合させる)

振る舞い

  • 対話で以下を順に質問して config を組み立てる:
    • Vercel を設定するか(Y/n)→ project_id、team_id(任意)、token の入力方法
    • GitHub を設定するか(Y/n)→ repo(owner/repo)、token の入力方法
  • token はデフォルトで生 token をファイルに書かず ${VERCEL_TOKEN} / ${GITHUB_TOKEN} の環境変数参照形式で書き出す(appconfig.go の expandEnvRefs が ${VAR} / ${VAR:-default} を展開できることに合わせる)。生 token を直接書く選択をした場合のみ平文で書き出す。
  • 出力先フラグ: デフォルトは project の .env-sync.config.yaml。--global で ~/.config/env-sync/config.yaml(globalAppConfigPath() と同じ XDG_CONFIG_HOME 尊重ロジックを使う)。
  • 上書き保護: 既存ファイルがある場合は init と同様に --force なしでは拒否してエラー(O_CREATE|O_EXCL でアトミックに)。
  • 生 token を平文で書き出す場合、または --global 出力時は、ファイルを 0600 で作成し、書き込み後に「トークンが含まれます。パーミッションは 0600 です」と案内する(warnIfInsecurePermissions の方針に合わせる)。
  • 非対話環境(TTY なし)では対話できないためエラーで停止し、フラグでの指定方法または手書きを案内する。
  • projects[] / repos[](モノレポ向け複数ターゲット)は今回のスコープ外でよい(単一プロジェクト/単一リポジトリのスキーマを生成。必要なら手で追記する旨をコメントで案内)。

ドキュメント

  • README にも setup サブコマンドの説明を追記(init の隣、または config ファイルの章)。

完了条件

完了条件

  • env-sync setup で対話プロンプトが起動し、Vercel / GitHub の設定有無・project_id・repo・token 入力方法を質問できる
  • 生成される YAML が appconfig.go の AppConfig スキーマ(vercel.token/project_id/team_id, github.token/repo)として LoadAppConfig() で正しくパースできる
  • token はデフォルトで ${VERCEL_TOKEN} / ${GITHUB_TOKEN} 形式の環境変数参照で書き出される
  • デフォルトは .env-sync.config.yaml に出力し、--global で ~/.config/env-sync/config.yaml に出力される(XDG_CONFIG_HOME 尊重)
  • 既存ファイルがある場合 --force なしではエラーで停止し上書きしない
  • 生 token を平文で書く場合・--global 出力時はファイルが 0600 で作成される
  • 非対話環境(TTY なし)ではエラーで停止し案内を出す
  • printUsage() のサブコマンド一覧・オプション説明に setup が載っている
  • README に setup の説明が追記されている
  • 既存テストを含め go test ./... が通り、setup_test.go で YAML 生成・出力先解決・上書き保護・token 参照形式のテストが追加されている

確認手順

  • go build -o env-sync ./cmd/env-sync
  • go test ./... がすべて green
  • go vet ./... でエラーが出ない
  • 一時ディレクトリで ./env-sync setup を実行し、対話に答えて .env-sync.config.yaml が生成されることを確認(生成物に生 token が含まれず ${VERCEL_TOKEN} 参照になっていること、ファイル末尾に見直し案内が出ること)
  • 生成した .env-sync.config.yaml がある状態で再度 ./env-sync setup を実行し、--force なしでエラー終了することを確認
  • ./env-sync setup --global で ~/.config/env-sync/config.yaml(または $XDG_CONFIG_HOME/env-sync/config.yaml)に出力され、パーミッションが 0600 であることを確認
  • ./env-sync setup -h./env-sync -h の usage に setup が表示されることを確認
  • 生成した config を使い VERCEL_TOKEN=xxx ./env-sync --dry-run 等で config が読み込まれること(LoadAppConfig 経由で解決されること)を確認

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