diff options
author | Shinya Maeda <shinya@gitlab.com> | 2018-11-12 10:11:56 +0300 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2018-11-16 08:30:45 +0300 |
commit | e336819b7a135d96c4b3061523de593b641d1f94 (patch) | |
tree | d699c5c9d80ee00f2af8322f458f2463dcf1a2ad | |
parent | fad88129f4aacda44b011a2404b0a53049d6212d (diff) |
Add Create MR pipelines service
-rw-r--r-- | app/controllers/projects/pipelines_controller.rb | 6 | ||||
-rw-r--r-- | app/services/ci/create_merge_request_pipelines_service.rb | 20 | ||||
-rw-r--r-- | app/services/ci/create_pipeline_service.rb | 2 | ||||
-rw-r--r-- | app/services/ci/pipeline_trigger_service.rb | 7 | ||||
-rw-r--r-- | app/services/git_push_service.rb | 6 | ||||
-rw-r--r-- | app/services/git_tag_push_service.rb | 6 | ||||
-rw-r--r-- | app/workers/create_pipeline_worker.rb | 6 | ||||
-rw-r--r-- | app/workers/pipeline_schedule_worker.rb | 6 | ||||
-rw-r--r-- | app/workers/run_pipeline_schedule_worker.rb | 6 | ||||
-rw-r--r-- | lib/api/pipelines.rb | 6 |
10 files changed, 63 insertions, 8 deletions
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index 53b29d4146e..1e995efac59 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -52,7 +52,11 @@ class Projects::PipelinesController < Projects::ApplicationController def create @pipeline = Ci::CreatePipelineService .new(project, current_user, create_params) - .execute(:web, ignore_skip_ci: true, save_on_errors: false) + .execute(:web, ignore_skip_ci: true, save_on_errors: false).tap do + Ci::CreateMergeRequestPipelinesService + .new(project, current_user, create_params) + .execute(:web, ignore_skip_ci: true, save_on_errors: false) + end if @pipeline.persisted? redirect_to project_pipeline_path(project, @pipeline) diff --git a/app/services/ci/create_merge_request_pipelines_service.rb b/app/services/ci/create_merge_request_pipelines_service.rb new file mode 100644 index 00000000000..3a3315eccd3 --- /dev/null +++ b/app/services/ci/create_merge_request_pipelines_service.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Ci + class CreateMergeRequestPipelinesService < BaseService + def execute(source, **args, &block) + find_merge_requests do |merge_request| + Ci::CreatePipelineService + .new(merge_request.target_project, current_user, params) + .execute(source, args, merge_request: merge_request, &block) + end + end + + private + + def find_merge_requests(&block) + MergeRequest.where(source_project: project, source_branch: params[:ref]) + .find_each(&block) + end + end +end diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb index 92a8438ab2f..d3392891864 100644 --- a/app/services/ci/create_pipeline_service.rb +++ b/app/services/ci/create_pipeline_service.rb @@ -12,7 +12,7 @@ module Ci Gitlab::Ci::Pipeline::Chain::Populate, Gitlab::Ci::Pipeline::Chain::Create].freeze - def execute(source, ignore_skip_ci: false, save_on_errors: true, trigger_request: nil, schedule: nil, &block) + def execute(source, ignore_skip_ci: false, save_on_errors: true, trigger_request: nil, schedule: nil, merge_request: nil, &block) @pipeline = Ci::Pipeline.new command = Gitlab::Ci::Pipeline::Chain::Command.new( diff --git a/app/services/ci/pipeline_trigger_service.rb b/app/services/ci/pipeline_trigger_service.rb index f54574b026b..b9dfcf6955c 100644 --- a/app/services/ci/pipeline_trigger_service.rb +++ b/app/services/ci/pipeline_trigger_service.rb @@ -20,6 +20,13 @@ module Ci .execute(:trigger, ignore_skip_ci: true) do |pipeline| pipeline.trigger_requests.build(trigger: trigger) pipeline.variables.build(variables) + end.tap do + Ci::CreateMergeRequestPipelinesService + .new(project, trigger.owner, ref: params[:ref]) + .execute(:trigger, ignore_skip_ci: true) do |mr_pipeline| + mr_pipeline.trigger_requests.build(trigger: trigger) + mr_pipeline.variables.build(variables) + end end if pipeline.persisted? diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb index f1883877d56..d55e44d963b 100644 --- a/app/services/git_push_service.rb +++ b/app/services/git_push_service.rb @@ -140,7 +140,11 @@ class GitPushService < BaseService .perform_async(project.id, current_user.id, params[:oldrev], params[:newrev], params[:ref]) EventCreateService.new.push(project, current_user, build_push_data) - Ci::CreatePipelineService.new(project, current_user, build_push_data).execute(:push) + Ci::CreatePipelineService.new(project, current_user, build_push_data).execute(:push).tap do + Ci::CreateMergeRequestPipelinesService + .new(project, current_user, build_push_data) + .execute(:push) + end project.execute_hooks(build_push_data.dup, :push_hooks) project.execute_services(build_push_data.dup, :push_hooks) diff --git a/app/services/git_tag_push_service.rb b/app/services/git_tag_push_service.rb index dbadafc0f52..ce5416a3b7b 100644 --- a/app/services/git_tag_push_service.rb +++ b/app/services/git_tag_push_service.rb @@ -10,7 +10,11 @@ class GitTagPushService < BaseService @push_data = build_push_data EventCreateService.new.push(project, current_user, push_data) - Ci::CreatePipelineService.new(project, current_user, push_data).execute(:push) + Ci::CreatePipelineService.new(project, current_user, push_data).execute(:push).tap do + Ci::CreateMergeRequestPipelinesService + .new(project, current_user, push_data) + .execute(:push) + end SystemHooksService.new.execute_hooks(build_system_push_data, :tag_push_hooks) project.execute_hooks(push_data.dup, :tag_push_hooks) diff --git a/app/workers/create_pipeline_worker.rb b/app/workers/create_pipeline_worker.rb index 037b4a57d4b..0120cd2ba08 100644 --- a/app/workers/create_pipeline_worker.rb +++ b/app/workers/create_pipeline_worker.rb @@ -13,6 +13,10 @@ class CreatePipelineWorker Ci::CreatePipelineService .new(project, user, ref: ref) - .execute(source, **params) + .execute(source, **params).tap do + Ci::CreateMergeRequestPipelinesService + .new(project, user, ref: ref) + .execute(source, **params) + end end end diff --git a/app/workers/pipeline_schedule_worker.rb b/app/workers/pipeline_schedule_worker.rb index 85d1ffe0fa9..79d4aced4f6 100644 --- a/app/workers/pipeline_schedule_worker.rb +++ b/app/workers/pipeline_schedule_worker.rb @@ -12,7 +12,11 @@ class PipelineScheduleWorker pipeline = Ci::CreatePipelineService.new(schedule.project, schedule.owner, ref: schedule.ref) - .execute(:schedule, ignore_skip_ci: true, save_on_errors: false, schedule: schedule) + .execute(:schedule, ignore_skip_ci: true, save_on_errors: false, schedule: schedule).tap do + Ci::CreateMergeRequestPipelinesService + .new(schedule.project, schedule.owner, ref: schedule.ref) + .execute(:schedule, ignore_skip_ci: true, save_on_errors: false, schedule: schedule) + end schedule.deactivate! unless pipeline.persisted? rescue => e diff --git a/app/workers/run_pipeline_schedule_worker.rb b/app/workers/run_pipeline_schedule_worker.rb index f72331c003a..077c651e84f 100644 --- a/app/workers/run_pipeline_schedule_worker.rb +++ b/app/workers/run_pipeline_schedule_worker.rb @@ -21,6 +21,10 @@ class RunPipelineScheduleWorker Ci::CreatePipelineService.new(schedule.project, user, ref: schedule.ref) - .execute(:schedule, ignore_skip_ci: true, save_on_errors: false, schedule: schedule) + .execute(:schedule, ignore_skip_ci: true, save_on_errors: false, schedule: schedule).tap do + Ci::CreateMergeRequestPipelinesService + .new(schedule.project, user, ref: schedule.ref) + .execute(:schedule, ignore_skip_ci: true, save_on_errors: false, schedule: schedule) + end end end diff --git a/lib/api/pipelines.rb b/lib/api/pipelines.rb index 1cfb982c04b..983f746ae73 100644 --- a/lib/api/pipelines.rb +++ b/lib/api/pipelines.rb @@ -58,7 +58,11 @@ module API new_pipeline = Ci::CreatePipelineService.new(user_project, current_user, pipeline_params) - .execute(:api, ignore_skip_ci: true, save_on_errors: false) + .execute(:api, ignore_skip_ci: true, save_on_errors: false).tap do + Ci::CreateMergeRequestPipelinesService + .new(user_project, current_user, pipeline_params) + .execute(:api, ignore_skip_ci: true, save_on_errors: false) + end if new_pipeline.persisted? present new_pipeline, with: Entities::Pipeline |