github.com/jfrog/jfrog-client-go@v1.40.2/distribution/services/update.go (about) 1 package services 2 3 import ( 4 "encoding/json" 5 artifactoryUtils "github.com/jfrog/jfrog-client-go/artifactory/services/utils" 6 "github.com/jfrog/jfrog-client-go/auth" 7 distributionServiceUtils "github.com/jfrog/jfrog-client-go/distribution/services/utils" 8 "github.com/jfrog/jfrog-client-go/http/jfroghttpclient" 9 "github.com/jfrog/jfrog-client-go/utils" 10 "github.com/jfrog/jfrog-client-go/utils/errorutils" 11 "github.com/jfrog/jfrog-client-go/utils/log" 12 "net/http" 13 ) 14 15 type UpdateReleaseBundleService struct { 16 client *jfroghttpclient.JfrogHttpClient 17 DistDetails auth.ServiceDetails 18 DryRun bool 19 } 20 21 func NewUpdateReleaseBundleService(client *jfroghttpclient.JfrogHttpClient) *UpdateReleaseBundleService { 22 return &UpdateReleaseBundleService{client: client} 23 } 24 25 func (ur *UpdateReleaseBundleService) GetDistDetails() auth.ServiceDetails { 26 return ur.DistDetails 27 } 28 29 func (ur *UpdateReleaseBundleService) UpdateReleaseBundle(createBundleParams UpdateReleaseBundleParams) (*utils.Sha256Summary, error) { 30 releaseBundleBody, err := distributionServiceUtils.CreateBundleBody(createBundleParams.ReleaseBundleParams, ur.DryRun) 31 if err != nil { 32 return nil, err 33 } 34 return ur.execUpdateReleaseBundle(createBundleParams.Name, createBundleParams.Version, createBundleParams.GpgPassphrase, releaseBundleBody) 35 } 36 37 // In case of an immediate sign- release bundle detailed summary (containing sha256) will be returned. 38 // In other cases summary will be nil. 39 func (ur *UpdateReleaseBundleService) execUpdateReleaseBundle(name, version, gpgPassphrase string, releaseBundle *distributionServiceUtils.ReleaseBundleBody) (*utils.Sha256Summary, error) { 40 var summary *utils.Sha256Summary = nil 41 if *releaseBundle.SignImmediately { 42 summary = utils.NewSha256Summary() 43 } 44 httpClientsDetails := ur.DistDetails.CreateHttpClientDetails() 45 content, err := json.Marshal(releaseBundle) 46 if err != nil { 47 return summary, errorutils.CheckError(err) 48 } 49 50 dryRunStr := "" 51 if releaseBundle.DryRun { 52 dryRunStr = "[Dry run] " 53 } 54 log.Info(dryRunStr + "Updating: " + name + "/" + version) 55 56 url := ur.DistDetails.GetUrl() + "api/v1/release_bundle/" + name + "/" + version 57 distributionServiceUtils.AddGpgPassphraseHeader(gpgPassphrase, &httpClientsDetails.Headers) 58 artifactoryUtils.SetContentType("application/json", &httpClientsDetails.Headers) 59 resp, body, err := ur.client.SendPut(url, content, &httpClientsDetails) 60 if err != nil { 61 return summary, err 62 } 63 if err = errorutils.CheckResponseStatusWithBody(resp, body, http.StatusOK); err != nil { 64 return summary, err 65 } 66 if summary != nil { 67 summary.SetSucceeded(true) 68 summary.SetSha256(resp.Header.Get("X-Checksum-Sha256")) 69 } 70 71 log.Debug("Distribution response:", resp.Status) 72 log.Debug(utils.IndentJson(body)) 73 return summary, nil 74 } 75 76 type UpdateReleaseBundleParams struct { 77 distributionServiceUtils.ReleaseBundleParams 78 } 79 80 func NewUpdateReleaseBundleParams(name, version string) UpdateReleaseBundleParams { 81 return UpdateReleaseBundleParams{ 82 distributionServiceUtils.ReleaseBundleParams{ 83 Name: name, 84 Version: version, 85 SignImmediately: true, 86 }, 87 } 88 }