• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / cli / 9232878869

25 May 2024 04:23AM UTC coverage: 60.283%. First build
9232878869

Pull #2306

github

web-flow
fix: timeout waiting for input from non-interactive prompt (#2318)
Pull Request #2306: Prod deploy

158 of 290 new or added lines in 45 files covered. (54.48%)

6862 of 11383 relevant lines covered (60.28%)

646.74 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

40.58
/cmd/projects.go
1
package cmd
2

3
import (
4
        "os"
5
        "sort"
6

7
        "github.com/spf13/afero"
8
        "github.com/spf13/cobra"
9
        "github.com/spf13/viper"
10
        "github.com/supabase/cli/internal/projects/apiKeys"
11
        "github.com/supabase/cli/internal/projects/create"
12
        "github.com/supabase/cli/internal/projects/delete"
13
        "github.com/supabase/cli/internal/projects/list"
14
        "github.com/supabase/cli/internal/utils"
15
        "github.com/supabase/cli/internal/utils/flags"
16
        "github.com/supabase/cli/pkg/api"
17
        "golang.org/x/term"
18
)
19

20
var (
21
        projectsCmd = &cobra.Command{
22
                GroupID: groupManagementAPI,
23
                Use:     "projects",
24
                Short:   "Manage Supabase projects",
25
        }
26

27
        interactive bool
28
        projectName string
29
        orgId       string
30
        dbPassword  string
31

32
        region = utils.EnumFlag{
33
                Allowed: make([]string, len(utils.RegionMap)),
34
        }
35
        plan = utils.EnumFlag{
36
                Allowed: []string{string(api.V1CreateProjectBodyPlanFree), string(api.V1CreateProjectBodyPlanPro)},
37
                Value:   string(api.V1CreateProjectBodyPlanFree),
38
        }
39

40
        projectsCreateCmd = &cobra.Command{
41
                Use:     "create [project name]",
42
                Short:   "Create a project on Supabase",
43
                Args:    cobra.MaximumNArgs(1),
44
                Example: `supabase projects create my-project --org-id cool-green-pqdr0qc --db-password ******** --region us-east-1`,
45
                PreRunE: func(cmd *cobra.Command, args []string) error {
×
46
                        if !term.IsTerminal(int(os.Stdin.Fd())) || !interactive {
×
47
                                cobra.CheckErr(cmd.MarkFlagRequired("org-id"))
×
48
                                cobra.CheckErr(cmd.MarkFlagRequired("db-password"))
×
49
                                cobra.CheckErr(cmd.MarkFlagRequired("region"))
×
50
                                return cobra.ExactArgs(1)(cmd, args)
×
51
                        }
×
52
                        return nil
×
53
                },
54
                RunE: func(cmd *cobra.Command, args []string) error {
×
55
                        if len(args) > 0 {
×
56
                                projectName = args[0]
×
57
                        }
×
58
                        return create.Run(cmd.Context(), api.V1CreateProjectBody{
×
59
                                Name:           projectName,
×
60
                                OrganizationId: orgId,
×
61
                                DbPass:         dbPassword,
×
62
                                Region:         api.V1CreateProjectBodyRegion(region.Value),
×
63
                        }, afero.NewOsFs())
×
64
                },
65
        }
66

67
        projectsListCmd = &cobra.Command{
68
                Use:   "list",
69
                Short: "List all Supabase projects",
70
                Long:  "List all Supabase projects the logged-in user can access.",
71
                RunE: func(cmd *cobra.Command, args []string) error {
×
72
                        return list.Run(cmd.Context(), afero.NewOsFs())
×
73
                },
×
74
        }
75

76
        projectsApiKeysCmd = &cobra.Command{
77
                Use:   "api-keys",
78
                Short: "List all API keys for a Supabase project",
79
                RunE: func(cmd *cobra.Command, args []string) error {
×
80
                        return apiKeys.Run(cmd.Context(), flags.ProjectRef, afero.NewOsFs())
×
81
                },
×
82
        }
83

84
        projectsDeleteCmd = &cobra.Command{
85
                Use:   "delete <ref>",
86
                Short: "Delete a Supabase project",
87
                Args:  cobra.MaximumNArgs(1),
88
                PreRunE: func(cmd *cobra.Command, args []string) error {
×
89
                        if !term.IsTerminal(int(os.Stdin.Fd())) {
×
90
                                return cobra.ExactArgs(1)(cmd, args)
×
91
                        }
×
92
                        return nil
×
93
                },
94
                RunE: func(cmd *cobra.Command, args []string) error {
×
NEW
95
                        ctx := cmd.Context()
×
96
                        if len(args) == 0 {
×
97
                                title := "Which project do you want to delete?"
×
NEW
98
                                cobra.CheckErr(flags.PromptProjectRef(ctx, title))
×
99
                        } else {
×
100
                                flags.ProjectRef = args[0]
×
101
                        }
×
NEW
102
                        if err := delete.PreRun(ctx, flags.ProjectRef); err != nil {
×
103
                                return err
×
104
                        }
×
NEW
105
                        return delete.Run(ctx, flags.ProjectRef, afero.NewOsFs())
×
106
                },
107
        }
108
)
109

110
func init() {
87✔
111
        // Setup enum flags
87✔
112
        i := 0
87✔
113
        for k := range utils.RegionMap {
1,305✔
114
                region.Allowed[i] = k
1,218✔
115
                i++
1,218✔
116
        }
1,218✔
117
        sort.Strings(region.Allowed)
87✔
118
        // Add flags to cobra command
87✔
119
        createFlags := projectsCreateCmd.Flags()
87✔
120
        createFlags.BoolVarP(&interactive, "interactive", "i", true, "Enables interactive mode.")
87✔
121
        cobra.CheckErr(createFlags.MarkHidden("interactive"))
87✔
122
        createFlags.StringVar(&orgId, "org-id", "", "Organization ID to create the project in.")
87✔
123
        createFlags.StringVar(&dbPassword, "db-password", "", "Database password of the project.")
87✔
124
        createFlags.Var(&region, "region", "Select a region close to you for the best performance.")
87✔
125
        createFlags.Var(&plan, "plan", "Select a plan that suits your needs.")
87✔
126
        cobra.CheckErr(createFlags.MarkHidden("plan"))
87✔
127
        cobra.CheckErr(viper.BindPFlag("DB_PASSWORD", createFlags.Lookup("db-password")))
87✔
128

87✔
129
        apiKeysFlags := projectsApiKeysCmd.Flags()
87✔
130
        apiKeysFlags.StringVar(&flags.ProjectRef, "project-ref", "", "Project ref of the Supabase project.")
87✔
131

87✔
132
        // Add commands to root
87✔
133
        projectsCmd.AddCommand(projectsCreateCmd)
87✔
134
        projectsCmd.AddCommand(projectsDeleteCmd)
87✔
135
        projectsCmd.AddCommand(projectsListCmd)
87✔
136
        projectsCmd.AddCommand(projectsApiKeysCmd)
87✔
137
        rootCmd.AddCommand(projectsCmd)
87✔
138
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc