From 6899fa061b84be744350fbb0c6bd7e5651141f3e Mon Sep 17 00:00:00 2001 From: Inder Singh <85822513+singh-inder@users.noreply.github.com> Date: Wed, 7 Jan 2026 16:30:37 +0530 Subject: [PATCH 1/5] fix: load profile before initializing awsRegions --- cmd/branches.go | 10 ++++------ cmd/projects.go | 6 ++---- cmd/root.go | 30 ++++++++++++++++++++---------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/cmd/branches.go b/cmd/branches.go index 077d69cc37..cfc47b8d69 100644 --- a/cmd/branches.go +++ b/cmd/branches.go @@ -30,12 +30,10 @@ var ( Short: "Manage Supabase preview branches", } - branchRegion = utils.EnumFlag{ - Allowed: awsRegions(), - } - persistent bool - withData bool - notifyURL string + branchRegion utils.EnumFlag + persistent bool + withData bool + notifyURL string branchCreateCmd = &cobra.Command{ Use: "create [name]", diff --git a/cmd/projects.go b/cmd/projects.go index 2ab5d7d2de..0bc39f478d 100644 --- a/cmd/projects.go +++ b/cmd/projects.go @@ -29,10 +29,8 @@ var ( projectName string orgId string dbPassword string - region = utils.EnumFlag{ - Allowed: awsRegions(), - } - size = utils.EnumFlag{ + region utils.EnumFlag + size = utils.EnumFlag{ Allowed: []string{ string(api.V1CreateProjectBodyDesiredInstanceSizeLarge), string(api.V1CreateProjectBodyDesiredInstanceSizeMedium), diff --git a/cmd/root.go b/cmd/root.go index 5a1072284f..127a930fb4 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -71,6 +71,8 @@ func IsExperimental(cmd *cobra.Command) bool { } var ( + rootFsys afero.Fs + sentryOpts = sentry.ClientOptions{ Dsn: utils.SentryDsn, Release: utils.Version, @@ -92,28 +94,24 @@ var ( return errors.New("must set the --experimental flag to run this command") } cmd.SilenceUsage = true - // Load profile before changing workdir ctx := cmd.Context() - fsys := afero.NewOsFs() - if err := utils.LoadProfile(ctx, fsys); err != nil { - return err - } - if err := utils.ChangeWorkDir(fsys); err != nil { + // profile loaded in Execute(), can change workdir + if err := utils.ChangeWorkDir(rootFsys); err != nil { return err } // Add common flags if IsManagementAPI(cmd) { - if err := promptLogin(fsys); err != nil { + if err := promptLogin(rootFsys); err != nil { return err } ctx, _ = signal.NotifyContext(ctx, os.Interrupt) if cmd.Flags().Lookup("project-ref") != nil { - if err := flags.ParseProjectRef(ctx, fsys); err != nil { + if err := flags.ParseProjectRef(ctx, rootFsys); err != nil { return err } } } - if err := flags.ParseDatabaseConfig(ctx, cmd.Flags(), fsys); err != nil { + if err := flags.ParseDatabaseConfig(ctx, cmd.Flags(), rootFsys); err != nil { return err } // Prepare context @@ -137,7 +135,19 @@ var ( func Execute() { defer recoverAndExit() - if err := rootCmd.Execute(); err != nil { + rootFsys = afero.NewOsFs() + ctx := context.Background() + if err := utils.LoadProfile(ctx, rootFsys); err != nil { + panic(err) + } + allowedRegions := awsRegions() + region = utils.EnumFlag{ + Allowed: allowedRegions, + } + branchRegion = utils.EnumFlag{ + Allowed: allowedRegions, + } + if err := rootCmd.ExecuteContext(ctx); err != nil { panic(err) } // Check upgrade last because --version flag is initialised after execute From ab2bb47def6096f8c4b75086d980e2e115dc9682 Mon Sep 17 00:00:00 2001 From: Han Qiao Date: Wed, 7 Jan 2026 21:36:43 +0800 Subject: [PATCH 2/5] chore: minor refactor --- cmd/root.go | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 127a930fb4..529a4dd90e 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -8,6 +8,7 @@ import ( "net/url" "os" "os/signal" + "sort" "strings" "time" @@ -71,8 +72,6 @@ func IsExperimental(cmd *cobra.Command) bool { } var ( - rootFsys afero.Fs - sentryOpts = sentry.ClientOptions{ Dsn: utils.SentryDsn, Release: utils.Version, @@ -95,23 +94,23 @@ var ( } cmd.SilenceUsage = true ctx := cmd.Context() - // profile loaded in Execute(), can change workdir - if err := utils.ChangeWorkDir(rootFsys); err != nil { + fsys := afero.NewOsFs() + if err := utils.ChangeWorkDir(fsys); err != nil { return err } // Add common flags if IsManagementAPI(cmd) { - if err := promptLogin(rootFsys); err != nil { + if err := promptLogin(fsys); err != nil { return err } ctx, _ = signal.NotifyContext(ctx, os.Interrupt) if cmd.Flags().Lookup("project-ref") != nil { - if err := flags.ParseProjectRef(ctx, rootFsys); err != nil { + if err := flags.ParseProjectRef(ctx, fsys); err != nil { return err } } } - if err := flags.ParseDatabaseConfig(ctx, cmd.Flags(), rootFsys); err != nil { + if err := flags.ParseDatabaseConfig(ctx, cmd.Flags(), fsys); err != nil { return err } // Prepare context @@ -135,23 +134,22 @@ var ( func Execute() { defer recoverAndExit() - rootFsys = afero.NewOsFs() + fsys := afero.NewOsFs() ctx := context.Background() - if err := utils.LoadProfile(ctx, rootFsys); err != nil { + // Load profile before changing workdir + if err := utils.LoadProfile(ctx, fsys); err != nil { panic(err) } - allowedRegions := awsRegions() - region = utils.EnumFlag{ - Allowed: allowedRegions, - } - branchRegion = utils.EnumFlag{ - Allowed: allowedRegions, + region.Allowed = make([]string, len(utils.CurrentProfile.ProjectRegions)) + for i, r := range utils.CurrentProfile.ProjectRegions { + region.Allowed[i] = string(r) } + sort.Strings(region.Allowed) if err := rootCmd.ExecuteContext(ctx); err != nil { panic(err) } // Check upgrade last because --version flag is initialised after execute - version, err := checkUpgrade(rootCmd.Context(), afero.NewOsFs()) + version, err := checkUpgrade(ctx, fsys) if err != nil { fmt.Fprintln(utils.GetDebugLogger(), err) } From 4913a72f2093fc5671239c4cc267cb1eeed5878f Mon Sep 17 00:00:00 2001 From: Han Qiao Date: Wed, 7 Jan 2026 21:37:05 +0800 Subject: [PATCH 3/5] chore: reuse region flag --- cmd/branches.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/cmd/branches.go b/cmd/branches.go index cfc47b8d69..1f12f8727b 100644 --- a/cmd/branches.go +++ b/cmd/branches.go @@ -30,10 +30,9 @@ var ( Short: "Manage Supabase preview branches", } - branchRegion utils.EnumFlag - persistent bool - withData bool - notifyURL string + persistent bool + withData bool + notifyURL string branchCreateCmd = &cobra.Command{ Use: "create [name]", @@ -47,7 +46,7 @@ var ( } cmdFlags := cmd.Flags() if cmdFlags.Changed("region") { - body.Region = &branchRegion.Value + body.Region = ®ion.Value } if cmdFlags.Changed("size") { body.DesiredInstanceSize = (*api.CreateBranchBodyDesiredInstanceSize)(&size.Value) @@ -204,7 +203,7 @@ func init() { branchFlags := branchesCmd.PersistentFlags() branchFlags.StringVar(&flags.ProjectRef, "project-ref", "", "Project ref of the Supabase project.") createFlags := branchCreateCmd.Flags() - createFlags.Var(&branchRegion, "region", "Select a region to deploy the branch database.") + createFlags.Var(®ion, "region", "Select a region to deploy the branch database.") createFlags.Var(&size, "size", "Select a desired instance size for the branch database.") createFlags.BoolVar(&persistent, "persistent", false, "Whether to create a persistent branch.") createFlags.BoolVar(&withData, "with-data", false, "Whether to clone production data to the branch database.") From 62919143042dd868de3f8040e26c955434b82b08 Mon Sep 17 00:00:00 2001 From: Han Qiao Date: Wed, 7 Jan 2026 21:37:43 +0800 Subject: [PATCH 4/5] chore: remove unused region method --- cmd/projects.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/cmd/projects.go b/cmd/projects.go index 0bc39f478d..cbbd7c8a9e 100644 --- a/cmd/projects.go +++ b/cmd/projects.go @@ -2,7 +2,6 @@ package cmd import ( "os" - "sort" "github.com/spf13/afero" "github.com/spf13/cobra" @@ -151,12 +150,3 @@ func init() { projectsCmd.AddCommand(projectsApiKeysCmd) rootCmd.AddCommand(projectsCmd) } - -func awsRegions() []string { - result := make([]string, len(utils.CurrentProfile.ProjectRegions)) - for i, region := range utils.CurrentProfile.ProjectRegions { - result[i] = string(region) - } - sort.Strings(result) - return result -} From 4ef353a416cca0a8c391da68e381d72871ccb241 Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Wed, 7 Jan 2026 23:20:23 +0800 Subject: [PATCH 5/5] fix: set default profile without loading --- cmd/projects.go | 6 ++++-- cmd/root.go | 20 ++++++-------------- internal/utils/profile.go | 10 ++++++++++ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/cmd/projects.go b/cmd/projects.go index cbbd7c8a9e..93a75fb20b 100644 --- a/cmd/projects.go +++ b/cmd/projects.go @@ -28,8 +28,10 @@ var ( projectName string orgId string dbPassword string - region utils.EnumFlag - size = utils.EnumFlag{ + region = utils.EnumFlag{ + Allowed: utils.AwsRegions(), + } + size = utils.EnumFlag{ Allowed: []string{ string(api.V1CreateProjectBodyDesiredInstanceSizeLarge), string(api.V1CreateProjectBodyDesiredInstanceSizeMedium), diff --git a/cmd/root.go b/cmd/root.go index 529a4dd90e..5a1072284f 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -8,7 +8,6 @@ import ( "net/url" "os" "os/signal" - "sort" "strings" "time" @@ -93,8 +92,12 @@ var ( return errors.New("must set the --experimental flag to run this command") } cmd.SilenceUsage = true + // Load profile before changing workdir ctx := cmd.Context() fsys := afero.NewOsFs() + if err := utils.LoadProfile(ctx, fsys); err != nil { + return err + } if err := utils.ChangeWorkDir(fsys); err != nil { return err } @@ -134,22 +137,11 @@ var ( func Execute() { defer recoverAndExit() - fsys := afero.NewOsFs() - ctx := context.Background() - // Load profile before changing workdir - if err := utils.LoadProfile(ctx, fsys); err != nil { - panic(err) - } - region.Allowed = make([]string, len(utils.CurrentProfile.ProjectRegions)) - for i, r := range utils.CurrentProfile.ProjectRegions { - region.Allowed[i] = string(r) - } - sort.Strings(region.Allowed) - if err := rootCmd.ExecuteContext(ctx); err != nil { + if err := rootCmd.Execute(); err != nil { panic(err) } // Check upgrade last because --version flag is initialised after execute - version, err := checkUpgrade(ctx, fsys) + version, err := checkUpgrade(rootCmd.Context(), afero.NewOsFs()) if err != nil { fmt.Fprintln(utils.GetDebugLogger(), err) } diff --git a/internal/utils/profile.go b/internal/utils/profile.go index 1910f30b75..723b52fa87 100644 --- a/internal/utils/profile.go +++ b/internal/utils/profile.go @@ -3,6 +3,7 @@ package utils import ( "context" "fmt" + "sort" "strings" "github.com/go-errors/errors" @@ -128,3 +129,12 @@ func getProfileName(fsys afero.Fs) string { return prof } } + +func AwsRegions() []string { + result := make([]string, len(allProfiles[0].ProjectRegions)) + for i, region := range allProfiles[0].ProjectRegions { + result[i] = string(region) + } + sort.Strings(result) + return result +}