diff --git a/cmd/fresh.go b/cmd/fresh.go index b363dcd..29e2cbb 100644 --- a/cmd/fresh.go +++ b/cmd/fresh.go @@ -9,6 +9,7 @@ import ( ) var freshConfigPath, freshOrganization, onboardConfigPath, onboardFrom string +var onboardAppName, onboardAppRepoURL, onboardImageRepository string var freshCreateOrganization, freshEnableDelivery, freshYes bool var freshMode string @@ -50,6 +51,9 @@ func init() { appCmd.AddCommand(appOnboardCmd) appOnboardCmd.Flags().StringVar(&onboardConfigPath, "config", "", "Path to private bootstrap config YAML") appOnboardCmd.Flags().StringVar(&onboardFrom, "from", "", "Clean application checkout to scaffold") + appOnboardCmd.Flags().StringVar(&onboardAppName, "app-name", "", "Application name override") + appOnboardCmd.Flags().StringVar(&onboardAppRepoURL, "app-repo-url", "", "Application repository URL override") + appOnboardCmd.Flags().StringVar(&onboardImageRepository, "image-repository", "", "OCI image repository override") _ = appOnboardCmd.MarkFlagRequired("config") _ = appOnboardCmd.MarkFlagRequired("from") } @@ -74,6 +78,15 @@ func runAppOnboard(_ *cobra.Command, _ []string) error { if err != nil { return err } + if onboardAppName != "" { + cfg.Delivery.AppName = onboardAppName + } + if onboardAppRepoURL != "" { + cfg.Delivery.AppRepoURL = onboardAppRepoURL + } + if onboardImageRepository != "" { + cfg.Delivery.ImageRepository = onboardImageRepository + } cfg, err = resolveAppOnboarding(cfg) if err != nil { return err diff --git a/cmd/fresh_test.go b/cmd/fresh_test.go index efa979b..19523d1 100644 --- a/cmd/fresh_test.go +++ b/cmd/fresh_test.go @@ -65,9 +65,11 @@ func TestBootstrapInitAppliesFluxDefaultsBeforeFreshValidation(t *testing.T) { func TestAppOnboardValidatesConfigBeforeExternalWork(t *testing.T) { originalConfig, originalResolve, originalOnboard := loadAppOnboardConfig, resolveAppOnboarding, onboardApp originalConfigPath, originalFrom := onboardConfigPath, onboardFrom + originalName, originalRepo, originalImage := onboardAppName, onboardAppRepoURL, onboardImageRepository t.Cleanup(func() { loadAppOnboardConfig, resolveAppOnboarding, onboardApp = originalConfig, originalResolve, originalOnboard onboardConfigPath, onboardFrom = originalConfigPath, originalFrom + onboardAppName, onboardAppRepoURL, onboardImageRepository = originalName, originalRepo, originalImage }) loadAppOnboardConfig = func(string) (config.Config, error) { return config.Config{}, nil } resolveAppOnboarding = func(config.Config) (config.Config, error) { return config.Config{}, errors.New("incomplete delivery") } @@ -76,6 +78,7 @@ func TestAppOnboardValidatesConfigBeforeExternalWork(t *testing.T) { return nil } onboardConfigPath, onboardFrom = "private.yaml", "app-checkout" + onboardAppName, onboardAppRepoURL, onboardImageRepository = "", "", "" if err := runAppOnboard(nil, nil); err == nil { t.Fatal("onboarding accepted invalid configuration") } @@ -84,22 +87,25 @@ func TestAppOnboardValidatesConfigBeforeExternalWork(t *testing.T) { func TestAppOnboardPassesOnlyValidatedConfigAndCheckout(t *testing.T) { originalConfig, originalResolve, originalOnboard := loadAppOnboardConfig, resolveAppOnboarding, onboardApp originalConfigPath, originalFrom := onboardConfigPath, onboardFrom + originalName, originalRepo, originalImage := onboardAppName, onboardAppRepoURL, onboardImageRepository t.Cleanup(func() { loadAppOnboardConfig, resolveAppOnboarding, onboardApp = originalConfig, originalResolve, originalOnboard onboardConfigPath, onboardFrom = originalConfigPath, originalFrom + onboardAppName, onboardAppRepoURL, onboardImageRepository = originalName, originalRepo, originalImage }) cfg := config.Config{Delivery: config.DeliveryConfig{AppRepoURL: "https://git.example.test/new-org/app.git", AppRepoRef: "main"}} loadAppOnboardConfig = func(string) (config.Config, error) { return cfg, nil } - resolveAppOnboarding = func(config.Config) (config.Config, error) { return cfg, nil } + resolveAppOnboarding = func(got config.Config) (config.Config, error) { return got, nil } calls := 0 onboardApp = func(got config.Config, checkout string) error { - if checkout != "app-checkout" || got.Delivery.AppRepoURL != cfg.Delivery.AppRepoURL { + if checkout != "app-checkout" || got.Delivery.AppName != "fixture" || got.Delivery.AppRepoURL != "https://git.example.test/new-org/fixture.git" || got.Delivery.ImageRepository != "registry.example.test/new-org/fixture" { t.Fatal("onboarding used the wrong checkout or config") } calls++ return nil } onboardConfigPath, onboardFrom = "private.yaml", "app-checkout" + onboardAppName, onboardAppRepoURL, onboardImageRepository = "fixture", "https://git.example.test/new-org/fixture.git", "registry.example.test/new-org/fixture" if err := runAppOnboard(nil, nil); err != nil || calls != 1 { t.Fatalf("runAppOnboard() = %v, calls = %d", err, calls) }