package cmd import ( "fmt" "os" "git.franklin.lab/steve.cliff/pcli/client" "git.franklin.lab/steve.cliff/pcli/output" "github.com/spf13/cobra" ) var projectCmd = &cobra.Command{ Use: "project", Short: "Manage projects", Long: "Commands for managing Planka projects", } var projectListCmd = &cobra.Command{ Use: "list", Short: "List all projects", RunE: func(cmd *cobra.Command, args []string) error { projects, err := getClient().ListProjects(getContext()) if err != nil { return err } return output.Print(projects, getFormat(), os.Stdout) }, } var projectGetCmd = &cobra.Command{ Use: "get ", Short: "Get a project by ID", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { project, err := getClient().GetProject(getContext(), args[0]) if err != nil { return err } return output.Print(project, getFormat(), os.Stdout) }, } var projectCreateCmd = &cobra.Command{ Use: "create", Short: "Create a new project", RunE: func(cmd *cobra.Command, args []string) error { name, _ := cmd.Flags().GetString("name") projectType, _ := cmd.Flags().GetString("type") description, _ := cmd.Flags().GetString("description") // Validate required flags if name == "" { return cmd.Usage() } if projectType == "" { return cmd.Usage() } fields := client.ProjectCreateFields{ Type: projectType, Name: name, } if description != "" { fields.Description = &description } project, err := getClient().CreateProject(getContext(), fields) if err != nil { return friendlyAPIError(err, "create project", "") } return output.Print(project, getFormat(), os.Stdout) }, } var projectDeleteCmd = &cobra.Command{ Use: "delete ", Short: "Delete a project", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { err := getClient().DeleteProject(getContext(), args[0]) if err != nil { return friendlyAPIError(err, "delete project", "requires project manager role") } fmt.Println("Project deleted successfully") return nil }, } func init() { rootCmd.AddCommand(projectCmd) projectCmd.AddCommand(projectListCmd) projectCmd.AddCommand(projectGetCmd) projectCmd.AddCommand(projectCreateCmd) projectCmd.AddCommand(projectDeleteCmd) // Flags for project create projectCreateCmd.Flags().String("name", "", "Project name (required)") projectCreateCmd.Flags().String("type", "", "Project type (required, values: public/private)") projectCreateCmd.Flags().String("description", "", "Project description (optional)") projectCreateCmd.MarkFlagRequired("name") projectCreateCmd.MarkFlagRequired("type") }