From e36e50380b389787d791082ff72889f07efef54a Mon Sep 17 00:00:00 2001 From: Robi Nino Date: Mon, 26 Feb 2024 14:20:23 +0200 Subject: [PATCH 1/4] Support distribution by project --- distribution/manager.go | 2 +- distribution/services/distribute.go | 8 +++-- distribution/services/getstatus.go | 52 ++-------------------------- lifecycle/manager.go | 1 + lifecycle/services/delete.go | 2 +- lifecycle/services/distribute.go | 10 +++--- lifecycle/services/operation.go | 11 ++---- lifecycle/services/status.go | 30 ++++++++-------- tests/distribution_test.go | 10 +++--- utils/distribution/distribute.go | 53 +++++++++++++++++++++++++++-- utils/distribution/utils.go | 8 +++++ 11 files changed, 98 insertions(+), 89 deletions(-) diff --git a/distribution/manager.go b/distribution/manager.go index e0548429a..257d407c7 100644 --- a/distribution/manager.go +++ b/distribution/manager.go @@ -79,7 +79,7 @@ func (sm *DistributionServicesManager) DistributeReleaseBundleSync(params distri return distributeBundleService.Distribute() } -func (sm *DistributionServicesManager) GetDistributionStatus(params services.DistributionStatusParams) (*[]services.DistributionStatusResponse, error) { +func (sm *DistributionServicesManager) GetDistributionStatus(params services.DistributionStatusParams) (*[]distribution.DistributionStatusResponse, error) { distributeBundleService := services.NewDistributionStatusService(sm.client) distributeBundleService.DistDetails = sm.config.GetServiceDetails() return distributeBundleService.GetStatus(params) diff --git a/distribution/services/distribute.go b/distribution/services/distribute.go index db3db25b3..f80c34c44 100644 --- a/distribution/services/distribute.go +++ b/distribution/services/distribute.go @@ -57,6 +57,10 @@ func (dr *DistributeReleaseBundleV1Service) GetDistributionParams() distribution return dr.DistributeParams } +func (dr *DistributeReleaseBundleV1Service) GetProjectKey() string { + return "" +} + func NewDistributeReleaseBundleV1Service(client *jfroghttpclient.JfrogHttpClient) *DistributeReleaseBundleV1Service { return &DistributeReleaseBundleV1Service{client: client} } @@ -94,14 +98,14 @@ func (dr *DistributeReleaseBundleV1Service) waitForDistribution(distributeParams if err != nil { return false, errorutils.CheckError(err) } - if (*response)[0].Status == Failed { + if (*response)[0].Status == distribution.Failed { bytes, err := json.Marshal(response) if err != nil { return false, errorutils.CheckError(err) } return false, errorutils.CheckErrorf("Distribution failed: " + clientUtils.IndentJson(bytes)) } - if (*response)[0].Status == Completed { + if (*response)[0].Status == distribution.Completed { log.Info("Distribution Completed!") return false, nil } diff --git a/distribution/services/getstatus.go b/distribution/services/getstatus.go index 91350f55c..d4c87f134 100644 --- a/distribution/services/getstatus.go +++ b/distribution/services/getstatus.go @@ -27,7 +27,7 @@ func (ds *DistributionStatusService) GetDistDetails() auth.ServiceDetails { return ds.DistDetails } -func (ds *DistributionStatusService) GetStatus(distributionStatusParams DistributionStatusParams) (*[]DistributionStatusResponse, error) { +func (ds *DistributionStatusService) GetStatus(distributionStatusParams DistributionStatusParams) (*[]distribution.DistributionStatusResponse, error) { if err := ds.checkParameters(distributionStatusParams); err != nil { return nil, err } @@ -45,7 +45,7 @@ func (ds *DistributionStatusService) checkParameters(distributionStatusParams Di return errorutils.CheckError(err) } -func (ds *DistributionStatusService) execGetStatus(name, version, trackerId string) (*[]DistributionStatusResponse, error) { +func (ds *DistributionStatusService) execGetStatus(name, version, trackerId string) (*[]distribution.DistributionStatusResponse, error) { httpClientsDetails := ds.DistDetails.CreateHttpClientDetails() url := ds.BuildUrlForGetStatus(ds.DistDetails.GetUrl(), name, version, trackerId) @@ -58,7 +58,7 @@ func (ds *DistributionStatusService) execGetStatus(name, version, trackerId stri } log.Debug("Distribution response:", resp.Status) log.Debug(utils.IndentJson(body)) - var distributionStatusResponse []DistributionStatusResponse + var distributionStatusResponse []distribution.DistributionStatusResponse stringBody := string(body) if !strings.HasPrefix(stringBody, "[") { stringBody = "[" + stringBody + "]" @@ -92,49 +92,3 @@ type DistributionStatusParams struct { func NewDistributionStatusParams() DistributionStatusParams { return DistributionStatusParams{} } - -type DistributionType string - -const ( - Distribute DistributionType = "distribute" - DeleteReleaseBundleVersion DistributionType = "delete_release_bundle_version" -) - -type DistributionStatus string - -const ( - NotDistributed DistributionStatus = "Not distributed" - InProgress DistributionStatus = "In progress" - InQueue DistributionStatus = "In queue" - Completed DistributionStatus = "Completed" - Failed DistributionStatus = "Failed" -) - -type DistributionStatusResponse struct { - Id json.Number `json:"distribution_id"` - FriendlyId json.Number `json:"distribution_friendly_id,omitempty"` - Type DistributionType `json:"type,omitempty"` - Name string `json:"release_bundle_name,omitempty"` - Version string `json:"release_bundle_version,omitempty"` - Status DistributionStatus `json:"status,omitempty"` - DistributionRules []distribution.DistributionRulesBody `json:"distribution_rules,omitempty"` - Sites []DistributionSiteStatus `json:"sites,omitempty"` -} - -type DistributionSiteStatus struct { - Status string `json:"status,omitempty"` - Error string `json:"general_error,omitempty"` - TargetArtifactory TargetArtifactory `json:"target_artifactory,omitempty"` - TotalFiles json.Number `json:"total_files,omitempty"` - TotalBytes json.Number `json:"total_bytes,omitempty"` - DistributedBytes json.Number `json:"distributed_bytes,omitempty"` - DistributedFiles json.Number `json:"distributed_files,omitempty"` - FileErrors []string `json:"file_errors,omitempty"` - FilesInProgress []string `json:"files_in_progress,omitempty"` -} - -type TargetArtifactory struct { - ServiceId string `json:"service_id"` - Name string `json:"name"` - Type string `json:"type"` -} diff --git a/lifecycle/manager.go b/lifecycle/manager.go index 891e3bf81..d8724f12b 100644 --- a/lifecycle/manager.go +++ b/lifecycle/manager.go @@ -93,6 +93,7 @@ func (lcs *LifecycleServicesManager) DistributeReleaseBundle(rbDetails lifecycle distributeBundleService.AutoCreateRepo = distributeParams.AutoCreateRepo distributeBundleService.Sync = distributeParams.Sync distributeBundleService.MaxWaitMinutes = distributeParams.MaxWaitMinutes + distributeBundleService.ProjectKey = distributeParams.ProjectKey m := &distributeBundleService.Modifications.PathMappings *m = []utils.PathMapping{} diff --git a/lifecycle/services/delete.go b/lifecycle/services/delete.go index 9834be00f..6b8e7e693 100644 --- a/lifecycle/services/delete.go +++ b/lifecycle/services/delete.go @@ -16,7 +16,7 @@ const ( ) func (rbs *ReleaseBundlesService) DeleteReleaseBundle(rbDetails ReleaseBundleDetails, params CommonOptionalQueryParams) error { - queryParams := getProjectQueryParam(params.ProjectKey) + queryParams := distribution.GetProjectQueryParam(params.ProjectKey) queryParams[async] = strconv.FormatBool(params.Async) restApi := path.Join(releaseBundleBaseApi, records, rbDetails.ReleaseBundleName, rbDetails.ReleaseBundleVersion) requestFullUrl, err := utils.BuildUrl(rbs.GetLifecycleDetails().GetUrl(), restApi, queryParams) diff --git a/lifecycle/services/distribute.go b/lifecycle/services/distribute.go index f6aa40eb3..f92c25e66 100644 --- a/lifecycle/services/distribute.go +++ b/lifecycle/services/distribute.go @@ -22,6 +22,7 @@ type DistributeReleaseBundleService struct { MaxWaitMinutes int DistributeParams distribution.DistributionParams Modifications + ProjectKey string } type DistributeReleaseBundleParams struct { @@ -30,6 +31,7 @@ type DistributeReleaseBundleParams struct { MaxWaitMinutes int DistributionRules []*distribution.DistributionCommonParams PathMappings []PathMapping + ProjectKey string } func (dr *DistributeReleaseBundleService) GetHttpClient() *jfroghttpclient.JfrogHttpClient { @@ -52,10 +54,6 @@ func (dr *DistributeReleaseBundleService) GetMaxWaitMinutes() int { return dr.MaxWaitMinutes } -func (dr *DistributeReleaseBundleService) IsAutoCreateRepo() bool { - return dr.AutoCreateRepo -} - func (dr *DistributeReleaseBundleService) GetRestApi(name, version string) string { return path.Join(distributionBaseApi, distribute, name, version) } @@ -68,6 +66,10 @@ func (dr *DistributeReleaseBundleService) GetDistributionParams() distribution.D return dr.DistributeParams } +func (dr *DistributeReleaseBundleService) GetProjectKey() string { + return dr.ProjectKey +} + func NewDistributeReleaseBundleService(client *jfroghttpclient.JfrogHttpClient) *DistributeReleaseBundleService { return &DistributeReleaseBundleService{client: client} } diff --git a/lifecycle/services/operation.go b/lifecycle/services/operation.go index cb97ff35b..8bb095f23 100644 --- a/lifecycle/services/operation.go +++ b/lifecycle/services/operation.go @@ -6,6 +6,7 @@ import ( "github.com/jfrog/jfrog-client-go/auth" "github.com/jfrog/jfrog-client-go/http/jfroghttpclient" "github.com/jfrog/jfrog-client-go/utils" + "github.com/jfrog/jfrog-client-go/utils/distribution" "github.com/jfrog/jfrog-client-go/utils/errorutils" "github.com/jfrog/jfrog-client-go/utils/log" "net/http" @@ -36,7 +37,7 @@ type ReleaseBundleOperation interface { } func (rbs *ReleaseBundlesService) doOperation(operation ReleaseBundleOperation) ([]byte, error) { - queryParams := getProjectQueryParam(operation.getOperationParams().ProjectKey) + queryParams := distribution.GetProjectQueryParam(operation.getOperationParams().ProjectKey) queryParams[async] = strconv.FormatBool(operation.getOperationParams().Async) requestFullUrl, err := utils.BuildUrl(rbs.GetLifecycleDetails().GetUrl(), operation.getOperationRestApi(), queryParams) if err != nil { @@ -67,14 +68,6 @@ func (rbs *ReleaseBundlesService) doOperation(operation ReleaseBundleOperation) return body, errorutils.CheckResponseStatusWithBody(resp, body, http.StatusOK) } -func getProjectQueryParam(projectKey string) map[string]string { - queryParams := make(map[string]string) - if projectKey != "" { - queryParams["project"] = projectKey - } - return queryParams -} - type ReleaseBundleDetails struct { ReleaseBundleName string `json:"release_bundle_name,omitempty"` ReleaseBundleVersion string `json:"release_bundle_version,omitempty"` diff --git a/lifecycle/services/status.go b/lifecycle/services/status.go index 98d475706..f9a76e9fb 100644 --- a/lifecycle/services/status.go +++ b/lifecycle/services/status.go @@ -12,8 +12,6 @@ import ( "net/http" "path" "time" - - dsServices "github.com/jfrog/jfrog-client-go/distribution/services" ) const ( @@ -63,7 +61,7 @@ func (rbs *ReleaseBundlesService) getReleaseBundleOperationStatus(restApi string } func (rbs *ReleaseBundlesService) getReleaseBundleStatus(restApi string, projectKey string) (statusResp ReleaseBundleStatusResponse, body []byte, err error) { - requestFullUrl, err := utils.BuildUrl(rbs.GetLifecycleDetails().GetUrl(), restApi, getProjectQueryParam(projectKey)) + requestFullUrl, err := utils.BuildUrl(rbs.GetLifecycleDetails().GetUrl(), restApi, distribution.GetProjectQueryParam(projectKey)) if err != nil { return } @@ -97,14 +95,14 @@ func (rbs *ReleaseBundlesService) GetReleaseBundleSpecification(rbDetails Releas return } -func (dbs *DistributeReleaseBundleService) getReleaseBundleDistributionStatus(distributeParams *distribution.DistributionParams, trackerId json.Number) (statusResp *dsServices.DistributionStatusResponse, body []byte, err error) { +func (dr *DistributeReleaseBundleService) getReleaseBundleDistributionStatus(distributeParams *distribution.DistributionParams, trackerId json.Number) (statusResp *distribution.DistributionStatusResponse, body []byte, err error) { restApi := path.Join(distributionBaseApi, trackersApi, distributeParams.Name, distributeParams.Version, trackerId.String()) - requestFullUrl, err := utils.BuildUrl(dbs.LcDetails.GetUrl(), restApi, nil) + requestFullUrl, err := utils.BuildUrl(dr.LcDetails.GetUrl(), restApi, distribution.GetProjectQueryParam(dr.GetProjectKey())) if err != nil { return } - httpClientsDetails := dbs.LcDetails.CreateHttpClientDetails() - resp, body, _, err := dbs.client.SendGet(requestFullUrl, true, &httpClientsDetails) + httpClientsDetails := dr.LcDetails.CreateHttpClientDetails() + resp, body, _, err := dr.client.SendGet(requestFullUrl, true, &httpClientsDetails) if err != nil { return } @@ -150,22 +148,22 @@ func (rbs *ReleaseBundlesService) waitForRbOperationCompletion(restApi, projectK return getStatusResponse(finalRespBody) } -func (dbs *DistributeReleaseBundleService) waitForDistributionOperationCompletion(distributeParams *distribution.DistributionParams, trackerId json.Number) error { - maxWait := time.Duration(dbs.GetMaxWaitMinutes()) * time.Minute +func (dr *DistributeReleaseBundleService) waitForDistributionOperationCompletion(distributeParams *distribution.DistributionParams, trackerId json.Number) error { + maxWait := time.Duration(dr.GetMaxWaitMinutes()) * time.Minute if maxWait.Minutes() < 1 { maxWait = defaultMaxWait } pollingAction := func() (shouldStop bool, responseBody []byte, err error) { - statusResponse, responseBody, err := dbs.getReleaseBundleDistributionStatus(distributeParams, trackerId) + statusResponse, responseBody, err := dr.getReleaseBundleDistributionStatus(distributeParams, trackerId) if err != nil { return true, nil, err } switch statusResponse.Status { - case dsServices.NotDistributed, dsServices.InProgress, dsServices.InQueue: + case distribution.NotDistributed, distribution.InProgress, distribution.InQueue: return false, nil, nil - case dsServices.Failed, dsServices.Completed: + case distribution.Failed, distribution.Completed: return true, responseBody, nil default: return true, nil, errorutils.CheckErrorf("received unexpected status: '%s'", statusResponse.Status) @@ -182,14 +180,16 @@ func (dbs *DistributeReleaseBundleService) waitForDistributionOperationCompletio return err } - var dsStatusResponse dsServices.DistributionStatusResponse + var dsStatusResponse distribution.DistributionStatusResponse if err = json.Unmarshal(finalRespBody, &dsStatusResponse); err != nil { return errorutils.CheckError(err) } - if dsStatusResponse.Status != dsServices.Completed { + if dsStatusResponse.Status != distribution.Completed { for _, st := range dsStatusResponse.Sites { - err = errors.Join(err, fmt.Errorf("target %s name:%s error:%s", st.TargetArtifactory.Type, st.TargetArtifactory.Name, st.Error)) + if st.Status != distribution.Completed { + err = errors.Join(err, fmt.Errorf("target %s name:%s error:%s", st.TargetArtifactory.Type, st.TargetArtifactory.Name, st.Error)) + } } return errorutils.CheckError(err) } diff --git a/tests/distribution_test.go b/tests/distribution_test.go index e6c6144f0..f467eddfb 100644 --- a/tests/distribution_test.go +++ b/tests/distribution_test.go @@ -311,7 +311,7 @@ func createSignDistributeDelete(t *testing.T) { // Assert release bundle in "completed" status response, err = testsBundleDistributionStatusService.GetStatus(distributionStatusParams) if assert.NoError(t, err) && assert.NotEmpty(t, *response) { - assert.Equal(t, services.Completed, (*response)[0].Status) + assert.Equal(t, distribution.Completed, (*response)[0].Status) } } @@ -357,7 +357,7 @@ func createSignSyncDistributeDelete(t *testing.T) { } response, err := testsBundleDistributionStatusService.GetStatus(distributionStatusParams) if assert.NoError(t, err) && assert.NotEmpty(t, *response) { - assert.Equal(t, services.Completed, (*response)[0].Status) + assert.Equal(t, distribution.Completed, (*response)[0].Status) } } @@ -548,12 +548,12 @@ func waitForDistribution(t *testing.T, bundleName string) { assert.Len(t, *response, 1) switch (*response)[0].Status { - case services.Completed: + case distribution.Completed: return - case services.Failed: + case distribution.Failed: t.Error("Distribution failed for " + bundleName + "/" + bundleVersion) return - case services.InProgress, services.NotDistributed: + case distribution.InProgress, distribution.NotDistributed: // Wait } t.Log("Waiting for " + bundleName + "/" + bundleVersion + "...") diff --git a/utils/distribution/distribute.go b/utils/distribution/distribute.go index 47e80475f..0ac200c18 100644 --- a/utils/distribution/distribute.go +++ b/utils/distribution/distribute.go @@ -18,6 +18,7 @@ type DistributeReleaseBundleExecutor interface { GetRestApi(name, version string) string GetDistributeBody() any GetDistributionParams() DistributionParams + GetProjectKey() string } func CreateDistributeV1Body(distributeParams DistributionParams, dryRun, isAutoCreateRepo bool) ReleaseBundleDistributeV1Body { @@ -44,7 +45,6 @@ func DoDistribute(dr DistributeReleaseBundleExecutor) (trackerId json.Number, er } func execDistribute(dr DistributeReleaseBundleExecutor, name, version string) (json.Number, error) { - httpClientsDetails := dr.ServiceDetails().CreateHttpClientDetails() content, err := json.Marshal(dr.GetDistributeBody()) if err != nil { return "", errorutils.CheckError(err) @@ -56,9 +56,10 @@ func execDistribute(dr DistributeReleaseBundleExecutor, name, version string) (j } log.Info(dryRunStr + "Distributing: " + name + "/" + version) - url := dr.ServiceDetails().GetUrl() + dr.GetRestApi(name, version) + httpClientsDetails := dr.ServiceDetails().CreateHttpClientDetails() artifactoryUtils.SetContentType("application/json", &httpClientsDetails.Headers) - resp, body, err := dr.GetHttpClient().SendPost(url, content, &httpClientsDetails) + requestFullUrl, err := clientUtils.BuildUrl(dr.ServiceDetails().GetUrl(), dr.GetRestApi(name, version), GetProjectQueryParam(dr.GetProjectKey())) + resp, body, err := dr.GetHttpClient().SendPost(requestFullUrl, content, &httpClientsDetails) if err != nil { return "", err } @@ -104,3 +105,49 @@ type DistributionRulesBody struct { type DistributionResponseBody struct { TrackerId json.Number `json:"id"` } + +type DistributionStatus string + +const ( + NotDistributed DistributionStatus = "Not distributed" + InProgress DistributionStatus = "In progress" + InQueue DistributionStatus = "In queue" + Completed DistributionStatus = "Completed" + Failed DistributionStatus = "Failed" +) + +type DistributionStatusResponse struct { + Id json.Number `json:"distribution_id"` + FriendlyId json.Number `json:"distribution_friendly_id,omitempty"` + Type DistributionType `json:"type,omitempty"` + Name string `json:"release_bundle_name,omitempty"` + Version string `json:"release_bundle_version,omitempty"` + Status DistributionStatus `json:"status,omitempty"` + DistributionRules []DistributionRulesBody `json:"distribution_rules,omitempty"` + Sites []DistributionSiteStatus `json:"sites,omitempty"` +} + +type DistributionType string + +const ( + Distribute DistributionType = "distribute" + DeleteReleaseBundleVersion DistributionType = "delete_release_bundle_version" +) + +type DistributionSiteStatus struct { + Status DistributionStatus `json:"status,omitempty"` + Error string `json:"general_error,omitempty"` + TargetArtifactory TargetArtifactory `json:"target_artifactory,omitempty"` + TotalFiles json.Number `json:"total_files,omitempty"` + TotalBytes json.Number `json:"total_bytes,omitempty"` + DistributedBytes json.Number `json:"distributed_bytes,omitempty"` + DistributedFiles json.Number `json:"distributed_files,omitempty"` + FileErrors []string `json:"file_errors,omitempty"` + FilesInProgress []string `json:"files_in_progress,omitempty"` +} + +type TargetArtifactory struct { + ServiceId string `json:"service_id"` + Name string `json:"name"` + Type string `json:"type"` +} diff --git a/utils/distribution/utils.go b/utils/distribution/utils.go index 066cb7e45..858e28fa8 100644 --- a/utils/distribution/utils.go +++ b/utils/distribution/utils.go @@ -38,3 +38,11 @@ func CreatePathMappings(input, output string) []utils.PathMapping { Output: output, }} } + +func GetProjectQueryParam(projectKey string) map[string]string { + queryParams := make(map[string]string) + if projectKey != "" { + queryParams["project"] = projectKey + } + return queryParams +} From c346afc9e3d272780b28935f09cc593055bcf1d5 Mon Sep 17 00:00:00 2001 From: Robi Nino Date: Mon, 26 Feb 2024 14:30:47 +0200 Subject: [PATCH 2/4] handle err --- utils/distribution/distribute.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/utils/distribution/distribute.go b/utils/distribution/distribute.go index 0ac200c18..5c7acc5a5 100644 --- a/utils/distribution/distribute.go +++ b/utils/distribution/distribute.go @@ -56,9 +56,13 @@ func execDistribute(dr DistributeReleaseBundleExecutor, name, version string) (j } log.Info(dryRunStr + "Distributing: " + name + "/" + version) + requestFullUrl, err := clientUtils.BuildUrl(dr.ServiceDetails().GetUrl(), dr.GetRestApi(name, version), GetProjectQueryParam(dr.GetProjectKey())) + if err != nil { + return "", err + } + httpClientsDetails := dr.ServiceDetails().CreateHttpClientDetails() artifactoryUtils.SetContentType("application/json", &httpClientsDetails.Headers) - requestFullUrl, err := clientUtils.BuildUrl(dr.ServiceDetails().GetUrl(), dr.GetRestApi(name, version), GetProjectQueryParam(dr.GetProjectKey())) resp, body, err := dr.GetHttpClient().SendPost(requestFullUrl, content, &httpClientsDetails) if err != nil { return "", err From b6d8c52bc36a523dac97e33bc8397e607b3a55a1 Mon Sep 17 00:00:00 2001 From: Robi Nino Date: Thu, 14 Mar 2024 18:00:37 +0200 Subject: [PATCH 3/4] CR comments --- lifecycle/manager.go | 6 +++--- lifecycle/services/distribute.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lifecycle/manager.go b/lifecycle/manager.go index d8724f12b..94e287f1f 100644 --- a/lifecycle/manager.go +++ b/lifecycle/manager.go @@ -95,10 +95,10 @@ func (lcs *LifecycleServicesManager) DistributeReleaseBundle(rbDetails lifecycle distributeBundleService.MaxWaitMinutes = distributeParams.MaxWaitMinutes distributeBundleService.ProjectKey = distributeParams.ProjectKey - m := &distributeBundleService.Modifications.PathMappings - *m = []utils.PathMapping{} + mappings := &distributeBundleService.Modifications.PathMappings + *mappings = []utils.PathMapping{} for _, pathMapping := range distributeParams.PathMappings { - *m = append(*m, + *mappings = append(*mappings, distribution.CreatePathMappingsFromPatternAndTarget(pathMapping.Pattern, pathMapping.Target)...) } return distributeBundleService.Distribute() diff --git a/lifecycle/services/distribute.go b/lifecycle/services/distribute.go index f92c25e66..a70a4d5f4 100644 --- a/lifecycle/services/distribute.go +++ b/lifecycle/services/distribute.go @@ -21,8 +21,8 @@ type DistributeReleaseBundleService struct { Sync bool MaxWaitMinutes int DistributeParams distribution.DistributionParams + ProjectKey string Modifications - ProjectKey string } type DistributeReleaseBundleParams struct { From e3f338b51fae848030b5b88b4b0affe5fa9c455f Mon Sep 17 00:00:00 2001 From: Robi Nino Date: Mon, 18 Mar 2024 08:09:47 +0200 Subject: [PATCH 4/4] fix static --- lifecycle/services/distribute.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lifecycle/services/distribute.go b/lifecycle/services/distribute.go index 42688c5a9..8a97c4717 100644 --- a/lifecycle/services/distribute.go +++ b/lifecycle/services/distribute.go @@ -113,7 +113,7 @@ type PathMapping struct { func (rbs *ReleaseBundlesService) getReleaseBundleDistributions(rbDetails ReleaseBundleDetails, projectKey string) (distributionsResp GetDistributionsResponse, body []byte, err error) { restApi := GetReleaseBundleDistributionsApi(rbDetails) - requestFullUrl, err := clientUtils.BuildUrl(rbs.GetLifecycleDetails().GetUrl(), restApi, getProjectQueryParam(projectKey)) + requestFullUrl, err := clientUtils.BuildUrl(rbs.GetLifecycleDetails().GetUrl(), restApi, distribution.GetProjectQueryParam(projectKey)) if err != nil { return }