From a9d3159ea046f4da9a92b69be30a66b2ed4aef6c Mon Sep 17 00:00:00 2001 From: Robin Diddams Date: Mon, 26 May 2025 09:26:21 -0500 Subject: [PATCH 1/4] Add --org-id filter to project delete cmd --- cmd/project.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/cmd/project.go b/cmd/project.go index eac6105a..a43faa5d 100644 --- a/cmd/project.go +++ b/cmd/project.go @@ -730,13 +730,23 @@ Examples: logger := env.NewLogger(cmd) apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd) apiUrl, _, _ := util.GetURLs(logger) + orgId, _ := cmd.Flags().GetString("org-id") var projects []project.ProjectListData action := func() { var err error - projects, err = project.ListProjects(ctx, logger, apiUrl, apikey) + unfilteredProjects, err := project.ListProjects(ctx, logger, apiUrl, apikey) if err != nil { errsystem.New(errsystem.ErrApiRequest, err, errsystem.WithContextMessage("Failed to list projects")).ShowErrorAndExit() } + if orgId != "" { + for _, project := range unfilteredProjects { + if project.OrgId == orgId { + projects = append(projects, project) + } + } + } else { + projects = unfilteredProjects + } } tui.ShowSpinner("fetching projects ...", action) var options []tui.Option @@ -884,6 +894,8 @@ func init() { projectImportCmd.Flags().String("description", "", "The description of the project to import") projectImportCmd.Flags().Bool("force", false, "Force the processing of environment files") + projectDeleteCmd.Flags().String("org-id", "", "Only delete the projects in the specified organization") + projectImportCmd.Flags().MarkHidden("name") projectImportCmd.Flags().MarkHidden("description") projectImportCmd.Flags().MarkHidden("org-id") From 1425fcada078d5084fc5bb1718b09f2be1ef6432 Mon Sep 17 00:00:00 2001 From: Robin Diddams Date: Mon, 26 May 2025 09:32:17 -0500 Subject: [PATCH 2/4] EXPAND --- cmd/project.go | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/cmd/project.go b/cmd/project.go index a43faa5d..7d78fa22 100644 --- a/cmd/project.go +++ b/cmd/project.go @@ -610,6 +610,23 @@ Examples: }, } +func listProjects(ctx context.Context, logger logger.Logger, apiUrl string, apikey string, orgId string) []project.ProjectListData { + unfilteredProjects, err := project.ListProjects(ctx, logger, apiUrl, apikey) + if err != nil { + errsystem.New(errsystem.ErrApiRequest, err, errsystem.WithContextMessage("Failed to list projects")).ShowErrorAndExit() + } + if orgId == "" { + return unfilteredProjects + } + var projects []project.ProjectListData + for _, project := range unfilteredProjects { + if project.OrgId == orgId { + projects = append(projects, project) + } + } + return projects +} + func showNoProjects() { fmt.Println() tui.ShowWarning("no projects found") @@ -634,14 +651,11 @@ Examples: logger := env.NewLogger(cmd) apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd) apiUrl, _, _ := util.GetURLs(logger) + orgId, _ := cmd.Flags().GetString("org-id") var projects []project.ProjectListData action := func() { - var err error - projects, err = project.ListProjects(ctx, logger, apiUrl, apikey) - if err != nil { - errsystem.New(errsystem.ErrApiRequest, err, errsystem.WithContextMessage("Failed to list projects")).ShowErrorAndExit() - } + projects = listProjects(ctx, logger, apiUrl, apikey, orgId) } tui.ShowSpinner("fetching projects ...", action) format, _ := cmd.Flags().GetString("format") @@ -731,22 +745,10 @@ Examples: apikey, _ := util.EnsureLoggedIn(ctx, logger, cmd) apiUrl, _, _ := util.GetURLs(logger) orgId, _ := cmd.Flags().GetString("org-id") + var projects []project.ProjectListData action := func() { - var err error - unfilteredProjects, err := project.ListProjects(ctx, logger, apiUrl, apikey) - if err != nil { - errsystem.New(errsystem.ErrApiRequest, err, errsystem.WithContextMessage("Failed to list projects")).ShowErrorAndExit() - } - if orgId != "" { - for _, project := range unfilteredProjects { - if project.OrgId == orgId { - projects = append(projects, project) - } - } - } else { - projects = unfilteredProjects - } + projects = listProjects(ctx, logger, apiUrl, apikey, orgId) } tui.ShowSpinner("fetching projects ...", action) var options []tui.Option @@ -883,6 +885,8 @@ func init() { cmd.Flags().String("format", "text", "The format to use for the output. Can be either 'text' or 'json'") } + projectListCmd.Flags().String("org-id", "", "filter the projects by organization") + projectNewCmd.Flags().StringP("runtime", "r", "", "The runtime to use for the project") projectNewCmd.Flags().StringP("template", "t", "", "The template to use for the project") projectNewCmd.Flags().Bool("force", false, "Force the project to be created even if the directory already exists") @@ -894,9 +898,11 @@ func init() { projectImportCmd.Flags().String("description", "", "The description of the project to import") projectImportCmd.Flags().Bool("force", false, "Force the processing of environment files") - projectDeleteCmd.Flags().String("org-id", "", "Only delete the projects in the specified organization") - + // hidden because they must be all passed together and we havent documented that projectImportCmd.Flags().MarkHidden("name") projectImportCmd.Flags().MarkHidden("description") projectImportCmd.Flags().MarkHidden("org-id") + + projectDeleteCmd.Flags().String("org-id", "", "Only delete the projects in the specified organization") + } From fecfdd3c0387aaf05a3772c962a49e9262446011 Mon Sep 17 00:00:00 2001 From: Robin Diddams Date: Mon, 26 May 2025 09:33:18 -0500 Subject: [PATCH 3/4] consistency --- cmd/project.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/project.go b/cmd/project.go index 7d78fa22..edbd15f6 100644 --- a/cmd/project.go +++ b/cmd/project.go @@ -885,7 +885,7 @@ func init() { cmd.Flags().String("format", "text", "The format to use for the output. Can be either 'text' or 'json'") } - projectListCmd.Flags().String("org-id", "", "filter the projects by organization") + projectListCmd.Flags().String("org-id", "", "Filter the projects by organization") projectNewCmd.Flags().StringP("runtime", "r", "", "The runtime to use for the project") projectNewCmd.Flags().StringP("template", "t", "", "The template to use for the project") From b981732fc63c633e687990ad3651494ab74fe652 Mon Sep 17 00:00:00 2001 From: Robin Diddams Date: Mon, 26 May 2025 09:37:04 -0500 Subject: [PATCH 4/4] coderabbit --- cmd/project.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cmd/project.go b/cmd/project.go index edbd15f6..d9b27747 100644 --- a/cmd/project.go +++ b/cmd/project.go @@ -627,10 +627,14 @@ func listProjects(ctx context.Context, logger logger.Logger, apiUrl string, apik return projects } -func showNoProjects() { +func showNoProjects(orgId string) { fmt.Println() - tui.ShowWarning("no projects found") - tui.ShowBanner("Create a new project", tui.Text("Use the ")+tui.Command("new")+tui.Text(" command to create a new project"), false) + if orgId != "" { + tui.ShowWarning("no projects found in organization %s", orgId) + } else { + tui.ShowWarning("no projects found") + tui.ShowBanner("Create a new project", tui.Text("Use the ")+tui.Command("new")+tui.Text(" command to create a new project"), false) + } } var projectListCmd = &cobra.Command{ @@ -664,7 +668,7 @@ Examples: return } if len(projects) == 0 { - showNoProjects() + showNoProjects(orgId) return } @@ -764,7 +768,7 @@ Examples: } if len(options) == 0 { - showNoProjects() + showNoProjects(orgId) return }