Skip to content
Snippets Groups Projects

Add feature flag to allow maintainers to create MR pipelines async

Merged Dylan Griffith requested to merge 463355-async-pipeline-creation-for-merge-requests into master
All threads resolved!
Files
2
+ 21
5
@@ -588,13 +588,29 @@ def order_merge_requests(merge_requests)
]
tags %w[merge_requests]
end
params do
optional :async, type: Boolean, default: false,
desc: 'Flag indicating the merge request pipeline creation should be performed asynchronously. If set you will get an empty response with a 202 status code. The creation may still fail because of invalid configuration.'
end
post ':id/merge_requests/:merge_request_iid/pipelines', urgency: :low, feature_category: :pipeline_composition do
pipeline = ::MergeRequests::CreatePipelineService
.new(project: user_project, current_user: current_user, params: { allow_duplicate: true })
.execute(find_merge_request_with_access(params[:merge_request_iid]))
.payload
pipeline = nil
merge_request = find_merge_request_with_access(params[:merge_request_iid])
merge_request_params = { allow_duplicate: true }
if params[:async]
::MergeRequests::CreatePipelineWorker # rubocop:disable CodeReuse/Worker
.perform_async(user_project.id, current_user.id, merge_request.id, merge_request_params)
else
pipeline = ::MergeRequests::CreatePipelineService
.new(project: user_project, current_user: current_user, params: merge_request_params)
.execute(merge_request)
.payload
end
if pipeline.nil?
if params[:async]
status :accepted
elsif pipeline.nil?
not_allowed!
elsif pipeline.persisted?
status :ok
Loading