diff options
author | Shinya Maeda <shinya@gitlab.com> | 2018-11-02 20:21:14 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2018-11-02 20:21:14 +0900 |
commit | 54824e5b8f36c2ab2c41511bdc5e363e4c771124 (patch) | |
tree | 1aef39487177c9c3d8d932343f2633acd3283184 | |
parent | 88224ccea67290e1bfa600379715ab278984ccdf (diff) | |
download | gitlab-ce-merge-request-pipeline.tar.gz |
Merge request pipelinemerge-request-pipeline
-rw-r--r-- | app/services/ci/create_merge_request_pipeline_service.rb | 30 | ||||
-rw-r--r-- | app/services/ci/create_pipeline_service.rb | 3 | ||||
-rw-r--r-- | db/migrate/20181102185559_add_merge_request_id_to_ci_pipelines.rb | 10 | ||||
-rw-r--r-- | db/schema.rb | 8 | ||||
-rw-r--r-- | lib/api/pipelines.rb | 4 | ||||
-rw-r--r-- | lib/gitlab/ci/pipeline/chain/command.rb | 2 |
6 files changed, 54 insertions, 3 deletions
diff --git a/app/services/ci/create_merge_request_pipeline_service.rb b/app/services/ci/create_merge_request_pipeline_service.rb new file mode 100644 index 00000000000..e16382c36c0 --- /dev/null +++ b/app/services/ci/create_merge_request_pipeline_service.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module Ci + class CreateMergeRequestPipelineService < BaseService + attr_reader :source_branch, :source_project + + def execute(pipeline) + return if pipeline.tag? + return unless pipeline.has_merge_request_option? + + @source_branch = pipeline.ref + @source_project = pipeline.project + + merge_requests.each do |merge_request| + Ci::CreatePipelineService + .new(merge_request.target_project, + pipeline.user, + ref: source_branch, + merge_request: merge_request) + .execute(pipeline.source) + end + end + + private + + def merge_requests + @merge_requests ||= MergeRequest.where(source_project: source_project, source_branch: source_branch) + end + end +end diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb index 92a8438ab2f..81cbc8fa99f 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( @@ -23,6 +23,7 @@ module Ci before_sha: params[:before], trigger_request: trigger_request, schedule: schedule, + merge_request: merge_request, ignore_skip_ci: ignore_skip_ci, save_incompleted: save_on_errors, seeds_block: block, diff --git a/db/migrate/20181102185559_add_merge_request_id_to_ci_pipelines.rb b/db/migrate/20181102185559_add_merge_request_id_to_ci_pipelines.rb new file mode 100644 index 00000000000..a108f847bf9 --- /dev/null +++ b/db/migrate/20181102185559_add_merge_request_id_to_ci_pipelines.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class AddMergeRequestIdToCiPipelines < ActiveRecord::Migration + DOWNTIME = false + + def change + add_reference :ci_pipelines, :merge_requests + add_reference :ci_pipelines, :merge_requests, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index 22474916034..25f2d0fbd9b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -824,13 +824,20 @@ ActiveRecord::Schema.define(version: 20181031190559) do t.datetime "created_at" t.datetime "updated_at" t.string "on_stop" + t.integer "status", limit: 2, default: 2, null: false + t.datetime_with_timezone "finished_at" + t.integer "action", limit: 2 end + add_index "deployments", ["action"], name: "index_deployments_on_action", using: :btree add_index "deployments", ["created_at"], name: "index_deployments_on_created_at", using: :btree add_index "deployments", ["deployable_type", "deployable_id"], name: "index_deployments_on_deployable_type_and_deployable_id", using: :btree add_index "deployments", ["environment_id", "id"], name: "index_deployments_on_environment_id_and_id", using: :btree add_index "deployments", ["environment_id", "iid", "project_id"], name: "index_deployments_on_environment_id_and_iid_and_project_id", using: :btree + add_index "deployments", ["environment_id", "status"], name: "index_deployments_on_environment_id_and_status", using: :btree + add_index "deployments", ["id"], name: "partial_index_deployments_for_legacy_successful_deployments", where: "((finished_at IS NULL) AND (status = 2))", using: :btree add_index "deployments", ["project_id", "iid"], name: "index_deployments_on_project_id_and_iid", unique: true, using: :btree + add_index "deployments", ["project_id", "status"], name: "index_deployments_on_project_id_and_status", using: :btree create_table "emails", force: :cascade do |t| t.integer "user_id", null: false @@ -1814,6 +1821,7 @@ ActiveRecord::Schema.define(version: 20181031190559) do end add_index "redirect_routes", ["path"], name: "index_redirect_routes_on_path", unique: true, using: :btree + add_index "redirect_routes", ["path"], name: "index_redirect_routes_on_path_text_pattern_ops", using: :btree, opclasses: {"path"=>"varchar_pattern_ops"} add_index "redirect_routes", ["source_type", "source_id"], name: "index_redirect_routes_on_source_type_and_source_id", using: :btree create_table "releases", force: :cascade do |t| diff --git a/lib/api/pipelines.rb b/lib/api/pipelines.rb index 1cfb982c04b..ec34be3b414 100644 --- a/lib/api/pipelines.rb +++ b/lib/api/pipelines.rb @@ -58,7 +58,9 @@ 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 |pipeline| + Ci::CreateMergeRequestPipelineService.new(pipeline).execute + end if new_pipeline.persisted? present new_pipeline, with: Entities::Pipeline diff --git a/lib/gitlab/ci/pipeline/chain/command.rb b/lib/gitlab/ci/pipeline/chain/command.rb index 05978804d92..100b9521412 100644 --- a/lib/gitlab/ci/pipeline/chain/command.rb +++ b/lib/gitlab/ci/pipeline/chain/command.rb @@ -8,7 +8,7 @@ module Gitlab Command = Struct.new( :source, :project, :current_user, :origin_ref, :checkout_sha, :after_sha, :before_sha, - :trigger_request, :schedule, + :trigger_request, :schedule, :merge_request, :ignore_skip_ci, :save_incompleted, :seeds_block, :variables_attributes ) do |