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  }