diff --git a/README.md b/README.md index bb0df362b..7a4e37562 100644 --- a/README.md +++ b/README.md @@ -2472,7 +2472,7 @@ response, err := pipelinesManager.GetPipelineRunStatusByBranch(branch, pipeline) ```go branch := "master" pipeline := "pipeline_name" -status, err := pipelinesManager.TriggerPipelineRun(branch, pipeline) +triggerId, err := pipelinesManager.TriggerPipelineRun(branch, pipeline) ``` #### Trigger Pipeline Sync diff --git a/pipelines/manager.go b/pipelines/manager.go index bda816e76..8a679553e 100644 --- a/pipelines/manager.go +++ b/pipelines/manager.go @@ -118,7 +118,7 @@ func (sm *PipelinesServicesManager) GetPipelineRunStatusByBranch(branch, pipelin return runService.GetRunStatus(branch, pipeline, isMultiBranch) } -func (sm *PipelinesServicesManager) TriggerPipelineRun(branch, pipeline string, isMultiBranch bool) error { +func (sm *PipelinesServicesManager) TriggerPipelineRun(branch, pipeline string, isMultiBranch bool) (int, error) { runService := services.NewRunService(sm.client) runService.ServiceDetails = sm.config.GetServiceDetails() return runService.TriggerPipelineRun(branch, pipeline, isMultiBranch) diff --git a/pipelines/services/run.go b/pipelines/services/run.go index 15e69242b..71b203d1e 100644 --- a/pipelines/services/run.go +++ b/pipelines/services/run.go @@ -4,15 +4,16 @@ import ( "bytes" "encoding/json" "fmt" + "net/http" + "strconv" + "strings" + "github.com/jfrog/jfrog-client-go/artifactory/services/utils" "github.com/jfrog/jfrog-client-go/auth" "github.com/jfrog/jfrog-client-go/http/jfroghttpclient" "github.com/jfrog/jfrog-client-go/utils/errorutils" "github.com/jfrog/jfrog-client-go/utils/io/httputils" "github.com/jfrog/jfrog-client-go/utils/log" - "net/http" - "strconv" - "strings" ) type RunService struct { @@ -20,6 +21,10 @@ type RunService struct { auth.ServiceDetails } +type triggerRunResponse struct { + TriggerID int `json:"triggerID"` +} + func NewRunService(client *jfroghttpclient.JfrogHttpClient) *RunService { return &RunService{client: client} } @@ -70,7 +75,7 @@ func (rs *RunService) getHttpDetails() httputils.HttpClientDetails { return rs.ServiceDetails.CreateHttpClientDetails() } -func (rs *RunService) TriggerPipelineRun(branch, pipeline string, isMultiBranch bool) error { +func (rs *RunService) TriggerPipelineRun(branch, pipeline string, isMultiBranch bool) (int, error) { httpDetails := rs.getHttpDetails() queryParams := make(map[string]string, 0) @@ -89,29 +94,35 @@ func (rs *RunService) TriggerPipelineRun(branch, pipeline string, isMultiBranch buf := new(bytes.Buffer) _, err := buf.ReadFrom(payload) if err != nil { - return errorutils.CheckError(err) + return 0, errorutils.CheckError(err) } // URL Construction utils.AddHeader("Content-Type", "application/json", &httpDetails.Headers) uri, err := constructPipelinesURL(queryParams, rs.ServiceDetails.GetUrl(), triggerpipeline) if err != nil { - return err + return 0, err } // Prepare Request resp, body, err := rs.client.SendPost(uri, buf.Bytes(), &httpDetails) if err != nil { - return err + return 0, err } // Response Analysis if err := errorutils.CheckResponseStatusWithBody(resp, body, http.StatusOK); err != nil { - return err + return 0, err } log.Info(fmt.Sprintf("Triggered successfully\n%s %s \n%14s %s", "PipelineName :", pipeline, "Branch :", branch)) - return nil + var triggerID triggerRunResponse + + if err := json.Unmarshal(body, &triggerID); err != nil { + return 0, err + } + + return triggerID.TriggerID, nil } func (rs *RunService) CancelRun(runID int) error { diff --git a/tests/pipelinesrun_test.go b/tests/pipelinesrun_test.go index 59193e038..113426310 100644 --- a/tests/pipelinesrun_test.go +++ b/tests/pipelinesrun_test.go @@ -2,13 +2,14 @@ package tests import ( "fmt" + "strings" + "testing" + "time" + pipelinesServices "github.com/jfrog/jfrog-client-go/pipelines/services" "github.com/jfrog/jfrog-client-go/utils/io/httputils" "github.com/jfrog/jfrog-client-go/utils/log" "github.com/stretchr/testify/assert" - "strings" - "testing" - "time" ) func TestPipelinesRunService(t *testing.T) { @@ -94,7 +95,7 @@ func testGetRunStatus(t *testing.T) { assert.NoError(t, resourceErr) pipelineName := "pipelines_run_int_test" - trigErr := testPipelinesRunService.TriggerPipelineRun(*PipelinesVcsBranch, pipelineName, *res.IsMultiBranch) + _, trigErr := testPipelinesRunService.TriggerPipelineRun(*PipelinesVcsBranch, pipelineName, *res.IsMultiBranch) assert.NoError(t, trigErr) pollGetRunStatus(t, pipelineName)