From b3fc588533f8d05d2f3cdf4e0edd6bd41af6c6e2 Mon Sep 17 00:00:00 2001 From: michaelyuhe <2312744987@qq.com> Date: Tue, 2 Jan 2024 13:20:33 +0800 Subject: [PATCH] feat: deploy prebuilt services --- internal/cmd/service/deploy/deploy.go | 53 +++++++++++++-------------- pkg/api/interface.go | 4 +- pkg/api/service.go | 17 ++++----- pkg/model/service.go | 6 +++ 4 files changed, 42 insertions(+), 38 deletions(-) diff --git a/internal/cmd/service/deploy/deploy.go b/internal/cmd/service/deploy/deploy.go index 6dc5d63..b12bd52 100644 --- a/internal/cmd/service/deploy/deploy.go +++ b/internal/cmd/service/deploy/deploy.go @@ -11,13 +11,13 @@ import ( ) type Options struct { - projectID string - template string - itemCode string - branchName string - name string - keyword string - repoID int + projectID string + template string + marketplaceCode string + branchName string + name string + keyword string + repoID int } func NewCmdDeploy(f *cmdutil.Factory) *cobra.Command { @@ -39,7 +39,7 @@ func NewCmdDeploy(f *cmdutil.Factory) *cobra.Command { cmd.Flags().StringVar(&opts.name, "name", "", "Service Name") cmd.Flags().StringVar(&opts.template, "template", "", "Service template") - cmd.Flags().StringVar(&opts.itemCode, "item-code", "", "Marketplace item code") + cmd.Flags().StringVar(&opts.marketplaceCode, "marketplace-code", "", "Marketplace item code") cmd.Flags().IntVar(&opts.repoID, "repo-id", 0, "Git repository ID") cmd.Flags().StringVar(&opts.branchName, "branch-name", "", "Git branch name") cmd.Flags().StringVar(&opts.keyword, "keyword", "", "Git repository keyword") @@ -63,11 +63,11 @@ func runDeployNonInteractive(f *cmdutil.Factory, opts *Options) error { ctx := context.Background() - if opts.template == "MARKETPLACE" { - opts.name = opts.itemCode - service, err := f.ApiClient.CreateServiceFromMarketplace(ctx, opts.projectID, opts.name, opts.itemCode) + if opts.template == "PREBUILT" { + opts.name = opts.marketplaceCode + service, err := f.ApiClient.CreatePrebuiltService(ctx, opts.projectID, opts.marketplaceCode) if err != nil { - return fmt.Errorf("create service failed: %w", err) + return fmt.Errorf("create prebuilt service failed: %w", err) } f.Log.Infof("Service %s created", service.Name) @@ -82,7 +82,7 @@ func runDeployInteractive(f *cmdutil.Factory, opts *Options) error { return err } - serviceTemplate, err := f.Prompter.Select("Select service template", "MARKETPLACE", []string{"MARKETPLACE", "GIT"}) + serviceTemplate, err := f.Prompter.Select("Select service template", "PREBUILT", []string{"PREBUILT", "GIT"}) if err != nil { return err } @@ -92,28 +92,27 @@ func runDeployInteractive(f *cmdutil.Factory, opts *Options) error { if serviceTemplate == 0 { s := spinner.New(cmdutil.SpinnerCharSet, cmdutil.SpinnerInterval, spinner.WithColor(cmdutil.SpinnerColor), - spinner.WithSuffix(" Fetching marketplace items..."), - spinner.WithFinalMSG(cmdutil.SuccessIcon+" Marketplace fetched 🌇\n"), + spinner.WithSuffix(" Fetching prebuilt marketplae..."), + spinner.WithFinalMSG(cmdutil.SuccessIcon+" Prebuilt marketplace fetched 🌇\n"), ) s.Start() - marketplaceItems, err := f.ApiClient.GetMarketplaceItems(ctx) + prebuiltItems, err := f.ApiClient.GetPrebuiltItems(ctx) if err != nil { - return fmt.Errorf("get marketplace items failed: %w", err) + return fmt.Errorf("get prebuilt marketplace failed: %w", err) } s.Stop() - marketplaceItemsList := make([]string, len(marketplaceItems)) - for i, item := range marketplaceItems { - marketplaceItemsList[i] = item.Name + " (" + item.Description + ")" + prebuiltItemsList := make([]string, len(prebuiltItems)) + for i, item := range prebuiltItems { + prebuiltItemsList[i] = item.Name + " (" + item.Description + ")" } - index, err := f.Prompter.Select("Select marketplace item", "", marketplaceItemsList) + index, err := f.Prompter.Select("Select prebuilt item", "", prebuiltItemsList) if err != nil { - return fmt.Errorf("select marketplace item failed: %w", err) + return fmt.Errorf("select prebuilt item failed: %w", err) } - opts.itemCode = marketplaceItems[index].Code - opts.name = opts.itemCode + opts.marketplaceCode = prebuiltItems[index].ID // use a closure to get the service name after creation serviceName := "" @@ -131,9 +130,9 @@ func runDeployInteractive(f *cmdutil.Factory, opts *Options) error { } s.Start() - service, err := f.ApiClient.CreateServiceFromMarketplace(ctx, opts.projectID, opts.name, opts.itemCode) + service, err := f.ApiClient.CreatePrebuiltService(ctx, opts.projectID, opts.marketplaceCode) if err != nil { - return fmt.Errorf("create service failed: %w", err) + return fmt.Errorf("create prebuilt service failed: %w", err) } serviceName = service.Name @@ -208,7 +207,7 @@ func paramCheck(opts *Options) error { return fmt.Errorf("please specify service template with --template") } - if opts.template == "MARKETPLACE" && opts.itemCode == "" { + if opts.template == "PREBUILT" && opts.marketplaceCode == "" { return fmt.Errorf("please specify marketplace item code with --item-code") } diff --git a/pkg/api/interface.go b/pkg/api/interface.go index a12433c..2f880b2 100644 --- a/pkg/api/interface.go +++ b/pkg/api/interface.go @@ -47,14 +47,14 @@ type ( GetService(ctx context.Context, id, ownerName, projectName, name string) (*model.Service, error) GetServiceDetailByEnvironment(ctx context.Context, id, ownerName, projectName, name, environmentID string) (*model.ServiceDetail, error) ServiceMetric(ctx context.Context, id, environmentID, metricType string, startTime, endTime time.Time) (*model.ServiceMetric, error) - GetMarketplaceItems(ctx context.Context) ([]model.MarketplaceItem, error) + GetPrebuiltItems(ctx context.Context) ([]model.PrebuiltItem, error) SearchGitRepositories(ctx context.Context, keyword *string) ([]model.GitRepo, error) RestartService(ctx context.Context, id string, environmentID string) error RedeployService(ctx context.Context, id string, environmentID string) error SuspendService(ctx context.Context, id string, environmentID string) error ExposeService(ctx context.Context, id string, environmentID string, projectID string, name string) (*model.TempTCPPort, error) - CreateServiceFromMarketplace(ctx context.Context, projectID string, name string, itemCode string) (*model.Service, error) + CreatePrebuiltService(ctx context.Context, projectID string, marketplaceCode string) (*model.Service, error) CreateService(ctx context.Context, projectID string, name string, repoID int, branchName string) (*model.Service, error) CreateEmptyService(ctx context.Context, projectID string, name string) (*model.Service, error) UploadZipToService(ctx context.Context, projectID string, serviceID string, environmentID string, zipBytes []byte) (*model.Service, error) diff --git a/pkg/api/service.go b/pkg/api/service.go index 3a1ac29..8fc939e 100644 --- a/pkg/api/service.go +++ b/pkg/api/service.go @@ -243,9 +243,9 @@ func (c *client) ExposeService(ctx context.Context, id string, environmentID str return &mutation.ExposeService, nil } -func (c *client) GetMarketplaceItems(ctx context.Context) ([]model.MarketplaceItem, error) { +func (c *client) GetPrebuiltItems(ctx context.Context) ([]model.PrebuiltItem, error) { var query struct { - MarketplaceItems []model.MarketplaceItem `graphql:"marketplaceItems"` + PrebuiltItems []model.PrebuiltItem `graphql:"prebuiltMarketplaceItems"` } err := c.Query(ctx, &query, nil) @@ -254,25 +254,24 @@ func (c *client) GetMarketplaceItems(ctx context.Context) ([]model.MarketplaceIt return nil, err } - return query.MarketplaceItems, nil + return query.PrebuiltItems, nil } -func (c *client) CreateServiceFromMarketplace(ctx context.Context, projectID string, name string, itemCode string) (*model.Service, error) { +func (c *client) CreatePrebuiltService(ctx context.Context, projectID string, marketplaceCode string) (*model.Service, error) { var mutation struct { - CreateServiceFromMarketplace model.Service `graphql:"createServiceFromMarketplace(projectID: $projectID, name: $name, itemCode: $itemCode)"` + CreatePrebuiltService model.Service `graphql:"createGenericService(projectID: $projectID, marketplaceCode: $marketplaceCode)"` } err := c.Mutate(ctx, &mutation, V{ - "projectID": ObjectID(projectID), - "name": name, - "itemCode": itemCode, + "projectID": ObjectID(projectID), + "marketplaceCode": marketplaceCode, }) if err != nil { return nil, err } - return &mutation.CreateServiceFromMarketplace, nil + return &mutation.CreatePrebuiltService, nil } func (c *client) SearchGitRepositories(ctx context.Context, keyword *string) ([]model.GitRepo, error) { diff --git a/pkg/model/service.go b/pkg/model/service.go index 077ad53..a3ad853 100644 --- a/pkg/model/service.go +++ b/pkg/model/service.go @@ -200,6 +200,12 @@ type MarketplaceItem struct { NetworkType string `graphql:"networkType"` } +type PrebuiltItem struct { + ID string `graphql:"id"` + Name string `graphql:"name"` + Description string `graphql:"description"` +} + type GitRepo struct { Name string `graphql:"name"` Owner string `graphql:"owner"`