github.com/jfrog/jfrog-cli-platform-services@v1.2.0/commands/dry_run_cmd.go (about) 1 package commands 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 "github.com/jfrog/jfrog-client-go/utils/log" 8 9 plugins_common "github.com/jfrog/jfrog-cli-core/v2/plugins/common" 10 "github.com/jfrog/jfrog-cli-core/v2/plugins/components" 11 12 "github.com/jfrog/jfrog-cli-platform-services/model" 13 ) 14 15 type dryRunHandler struct { 16 ctx *components.Context 17 } 18 19 type dryRunRequest struct { 20 Code string `json:"code"` 21 Action string `json:"action"` 22 StagedSecrets []*model.Secret `json:"stagedSecrets,omitempty"` 23 Data map[string]any `json:"data"` 24 } 25 26 func GetDryRunCommand() components.Command { 27 return components.Command{ 28 Name: "dry-run", 29 Description: "Dry run a worker", 30 Aliases: []string{"dr"}, 31 Flags: []components.Flag{ 32 plugins_common.GetServerIdFlag(), 33 model.GetTimeoutFlag(), 34 model.GetNoSecretsFlag(), 35 }, 36 Arguments: []components.Argument{ 37 model.GetJsonPayloadArgument(), 38 }, 39 Action: func(c *components.Context) error { 40 h := &dryRunHandler{c} 41 42 manifest, err := model.ReadManifest() 43 if err != nil { 44 return err 45 } 46 47 if err = manifest.Validate(); err != nil { 48 return err 49 } 50 51 server, err := model.GetServerDetails(c) 52 if err != nil { 53 return err 54 } 55 56 inputReader := &cmdInputReader{c} 57 58 data, err := inputReader.readData() 59 if err != nil { 60 return err 61 } 62 63 if !c.GetBoolFlagValue(model.FlagNoSecrets) { 64 if err = manifest.DecryptSecrets(); err != nil { 65 return err 66 } 67 } 68 69 return h.run(manifest, server.GetUrl(), server.GetAccessToken(), data) 70 }, 71 } 72 } 73 74 func (c *dryRunHandler) run(manifest *model.Manifest, serverUrl string, token string, data map[string]any) error { 75 body, err := c.preparePayload(manifest, serverUrl, token, data) 76 if err != nil { 77 return err 78 } 79 return callWorkerApiWithOutput(c.ctx, serverUrl, token, http.MethodPost, body, http.StatusOK, "test", manifest.Name) 80 } 81 82 func (c *dryRunHandler) preparePayload(manifest *model.Manifest, serverUrl string, token string, data map[string]any) ([]byte, error) { 83 payload := &dryRunRequest{Action: manifest.Action, Data: data} 84 85 var err error 86 87 payload.Code, err = manifest.ReadSourceCode() 88 if err != nil { 89 return nil, err 90 } 91 payload.Code = cleanImports(payload.Code) 92 93 existingWorker, err := fetchWorkerDetails(c.ctx, serverUrl, token, manifest.Name) 94 if err != nil { 95 log.Warn(err.Error()) 96 } 97 98 if !c.ctx.GetBoolFlagValue(model.FlagNoSecrets) { 99 payload.StagedSecrets = prepareSecretsUpdate(manifest, existingWorker) 100 } 101 102 return json.Marshal(&payload) 103 }