diff options
Diffstat (limited to 'app/services/ci/pipeline_trigger_service.rb')
-rw-r--r-- | app/services/ci/pipeline_trigger_service.rb | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/app/services/ci/pipeline_trigger_service.rb b/app/services/ci/pipeline_trigger_service.rb index a5f70d62e13..62c4d6b4599 100644 --- a/app/services/ci/pipeline_trigger_service.rb +++ b/app/services/ci/pipeline_trigger_service.rb @@ -3,6 +3,7 @@ module Ci class PipelineTriggerService < BaseService include Gitlab::Utils::StrongMemoize + include Services::ReturnServiceResponses def execute if trigger_from_token @@ -20,7 +21,7 @@ module Ci private PAYLOAD_VARIABLE_KEY = 'TRIGGER_PAYLOAD' - PAYLOAD_VARIABLE_HIDDEN_PARAMS = %i(token).freeze + PAYLOAD_VARIABLE_HIDDEN_PARAMS = %i[token].freeze def create_pipeline_from_trigger(trigger) # this check is to not leak the presence of the project if user cannot read it @@ -32,10 +33,17 @@ module Ci pipeline.trigger_requests.build(trigger: trigger) end - if pipeline.persisted? + pipeline_service_response(pipeline) + end + + def pipeline_service_response(pipeline) + if pipeline.created_successfully? success(pipeline: pipeline) + elsif pipeline.persisted? + err = pipeline.errors.messages.presence || pipeline.failure_reason.presence || 'Could not create pipeline' + error(err, :unprocessable_entity) else - error(pipeline.errors.messages, 400) + error(pipeline.errors.messages, :bad_request) end end @@ -61,11 +69,7 @@ module Ci pipeline.source_pipeline = source end - if pipeline.persisted? - success(pipeline: pipeline) - else - error(pipeline.errors.messages, 400) - end + pipeline_service_response(pipeline) end def job_from_token |