github.com/jfrog/jfrog-cli-platform-services@v1.2.0/commands/deploy_cmd.go (about) 1 package commands 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 8 plugins_common "github.com/jfrog/jfrog-cli-core/v2/plugins/common" 9 "github.com/jfrog/jfrog-cli-core/v2/plugins/components" 10 "github.com/jfrog/jfrog-client-go/utils/log" 11 12 "github.com/jfrog/jfrog-cli-platform-services/model" 13 ) 14 15 type deployRequest struct { 16 Key string `json:"key"` 17 Description string `json:"description"` 18 Enabled bool `json:"enabled"` 19 SourceCode string `json:"sourceCode"` 20 Action string `json:"action"` 21 FilterCriteria model.FilterCriteria `json:"filterCriteria,omitempty"` 22 Secrets []*model.Secret `json:"secrets"` 23 } 24 25 func GetDeployCommand() components.Command { 26 return components.Command{ 27 Name: "deploy", 28 Description: "Deploy a worker", 29 Aliases: []string{"d"}, 30 Flags: []components.Flag{ 31 plugins_common.GetServerIdFlag(), 32 model.GetTimeoutFlag(), 33 model.GetNoSecretsFlag(), 34 }, 35 Action: func(c *components.Context) error { 36 manifest, err := model.ReadManifest() 37 if err != nil { 38 return err 39 } 40 41 if err = manifest.Validate(); err != nil { 42 return err 43 } 44 45 server, err := model.GetServerDetails(c) 46 if err != nil { 47 return err 48 } 49 50 if !c.GetBoolFlagValue(model.FlagNoSecrets) { 51 if err = manifest.DecryptSecrets(); err != nil { 52 return err 53 } 54 } 55 56 return runDeployCommand(c, manifest, server.GetUrl(), server.GetAccessToken()) 57 }, 58 } 59 } 60 61 func runDeployCommand(ctx *components.Context, manifest *model.Manifest, serverUrl string, token string) error { 62 existingWorker, err := fetchWorkerDetails(ctx, serverUrl, token, manifest.Name) 63 if err != nil { 64 return err 65 } 66 67 body, err := prepareDeployRequest(ctx, manifest, existingWorker) 68 if err != nil { 69 return err 70 } 71 72 bodyBytes, err := json.Marshal(body) 73 if err != nil { 74 return err 75 } 76 77 if existingWorker == nil { 78 log.Info(fmt.Sprintf("Deploying worker '%s'", manifest.Name)) 79 err = callWorkerApiWithOutput(ctx, serverUrl, token, http.MethodPost, bodyBytes, http.StatusCreated, "workers") 80 if err == nil { 81 log.Info(fmt.Sprintf("Worker '%s' deployed", manifest.Name)) 82 } 83 return err 84 } 85 86 log.Info(fmt.Sprintf("Updating worker '%s'", manifest.Name)) 87 err = callWorkerApiWithOutput(ctx, serverUrl, token, http.MethodPut, bodyBytes, http.StatusNoContent, "workers") 88 if err == nil { 89 log.Info(fmt.Sprintf("Worker '%s' updated", manifest.Name)) 90 } 91 92 return err 93 } 94 95 func prepareDeployRequest(ctx *components.Context, manifest *model.Manifest, existingWorker *model.WorkerDetails) (*deployRequest, error) { 96 sourceCode, err := manifest.ReadSourceCode() 97 if err != nil { 98 return nil, err 99 } 100 sourceCode = cleanImports(sourceCode) 101 102 var secrets []*model.Secret 103 104 if !ctx.GetBoolFlagValue(model.FlagNoSecrets) { 105 secrets = prepareSecretsUpdate(manifest, existingWorker) 106 } 107 108 payload := &deployRequest{ 109 Key: manifest.Name, 110 Action: manifest.Action, 111 Description: manifest.Description, 112 Enabled: manifest.Enabled, 113 FilterCriteria: manifest.FilterCriteria, 114 SourceCode: sourceCode, 115 Secrets: secrets, 116 } 117 118 return payload, nil 119 }