Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinya Maeda <shinya@gitlab.com>2018-11-12 10:11:56 +0300
committerShinya Maeda <shinya@gitlab.com>2018-11-16 08:30:45 +0300
commite336819b7a135d96c4b3061523de593b641d1f94 (patch)
treed699c5c9d80ee00f2af8322f458f2463dcf1a2ad
parentfad88129f4aacda44b011a2404b0a53049d6212d (diff)
Add Create MR pipelines service
-rw-r--r--app/controllers/projects/pipelines_controller.rb6
-rw-r--r--app/services/ci/create_merge_request_pipelines_service.rb20
-rw-r--r--app/services/ci/create_pipeline_service.rb2
-rw-r--r--app/services/ci/pipeline_trigger_service.rb7
-rw-r--r--app/services/git_push_service.rb6
-rw-r--r--app/services/git_tag_push_service.rb6
-rw-r--r--app/workers/create_pipeline_worker.rb6
-rw-r--r--app/workers/pipeline_schedule_worker.rb6
-rw-r--r--app/workers/run_pipeline_schedule_worker.rb6
-rw-r--r--lib/api/pipelines.rb6
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