Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions common/lib/dependabot/pull_request_creator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def initialize(cause, pull_request)
:commit_message_options, :vulnerabilities_fixed,
:reviewers, :assignees, :milestone, :branch_name_separator,
:branch_name_prefix, :github_redirection_service,
:custom_headers, :provider_metadata
:custom_headers, :provider_metadata, :target_project_id
Comment thread
andrcuns marked this conversation as resolved.
Outdated

def initialize(source:, base_commit:, dependencies:, files:, credentials:,
pr_message_header: nil, pr_message_footer: nil,
Expand All @@ -60,7 +60,7 @@ def initialize(source:, base_commit:, dependencies:, files:, credentials:,
label_language: false, automerge_candidate: false,
github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE,
custom_headers: nil, require_up_to_date_base: false,
provider_metadata: {}, message: nil)
provider_metadata: {}, message: nil, target_project_id: nil)
@dependencies = dependencies
@source = source
@base_commit = base_commit
Expand All @@ -85,6 +85,7 @@ def initialize(source:, base_commit:, dependencies:, files:, credentials:,
@require_up_to_date_base = require_up_to_date_base
@provider_metadata = provider_metadata
@message = message
@target_project_id = target_project_id

check_dependencies_have_previous_version
end
Expand Down Expand Up @@ -157,7 +158,8 @@ def gitlab_creator
labeler: labeler,
approvers: reviewers,
assignees: assignees,
milestone: milestone
milestone: milestone,
target_project_id: target_project_id
)
end

Expand Down
38 changes: 20 additions & 18 deletions common/lib/dependabot/pull_request_creator/gitlab.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,25 +10,26 @@ class Gitlab
attr_reader :source, :branch_name, :base_commit, :credentials,
:files, :pr_description, :pr_name, :commit_message,
:author_details, :labeler, :approvers, :assignees,
:milestone
:milestone, :target_project_id

def initialize(source:, branch_name:, base_commit:, credentials:,
files:, commit_message:, pr_description:, pr_name:,
author_details:, labeler:, approvers:, assignees:,
milestone:)
@source = source
@branch_name = branch_name
@base_commit = base_commit
@credentials = credentials
@files = files
@commit_message = commit_message
@pr_description = pr_description
@pr_name = pr_name
@author_details = author_details
@labeler = labeler
@approvers = approvers
@assignees = assignees
@milestone = milestone
milestone:, target_project_id:)
@source = source
@branch_name = branch_name
@base_commit = base_commit
@credentials = credentials
@files = files
@commit_message = commit_message
@pr_description = pr_description
@pr_name = pr_name
@author_details = author_details
@labeler = labeler
@approvers = approvers
@assignees = assignees
@milestone = milestone
@target_project_id = target_project_id
end

def create
Expand Down Expand Up @@ -76,7 +77,7 @@ def commit_exists?

def merge_request_exists?
gitlab_client_for_source.merge_requests(
source.repo,
target_project_id || source.repo,
source_branch: branch_name,
target_branch: source.branch || default_branch,
state: "all"
Expand Down Expand Up @@ -143,7 +144,8 @@ def create_merge_request
remove_source_branch: true,
assignee_ids: assignees,
labels: labeler.labels_for_pr.join(","),
milestone_id: milestone
milestone_id: milestone,
target_project_id: target_project_id
)
end

Expand All @@ -156,7 +158,7 @@ def add_approvers_to_merge_request(merge_request)
approvers.keys.map { |k| [k.to_sym, approvers[k]] }.to_h

gitlab_client_for_source.edit_merge_request_approvers(
source.repo,
target_project_id || source.repo,
merge_request.iid,
approver_ids: approvers_hash[:approvers],
approver_group_ids: approvers_hash[:group_approvers]
Expand Down
9 changes: 6 additions & 3 deletions common/lib/dependabot/pull_request_updater.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ class PullRequestUpdater
class BranchProtected < StandardError; end

attr_reader :source, :files, :base_commit, :old_commit, :credentials,
:pull_request_number, :author_details, :signature_key
:pull_request_number, :author_details, :signature_key, :target_project_id
Comment thread
andrcuns marked this conversation as resolved.
Outdated

def initialize(source:, base_commit:, old_commit:, files:,
credentials:, pull_request_number:,
author_details: nil, signature_key: nil)
author_details: nil, signature_key: nil,
target_project_id: nil)
@source = source
@base_commit = base_commit
@old_commit = old_commit
Expand All @@ -22,6 +23,7 @@ def initialize(source:, base_commit:, old_commit:, files:,
@pull_request_number = pull_request_number
@author_details = author_details
@signature_key = signature_key
@target_project_id = target_project_id
end

def update
Expand Down Expand Up @@ -55,7 +57,8 @@ def gitlab_updater
old_commit: old_commit,
files: files,
credentials: credentials,
pull_request_number: pull_request_number
pull_request_number: pull_request_number,
target_project_id: target_project_id
)
end

Expand Down
7 changes: 4 additions & 3 deletions common/lib/dependabot/pull_request_updater/gitlab.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,17 @@ module Dependabot
class PullRequestUpdater
class Gitlab
attr_reader :source, :files, :base_commit, :old_commit, :credentials,
:pull_request_number
:pull_request_number, :target_project_id

def initialize(source:, base_commit:, old_commit:, files:,
credentials:, pull_request_number:)
credentials:, pull_request_number:, target_project_id:)
@source = source
@base_commit = base_commit
@old_commit = old_commit
@files = files
@credentials = credentials
@pull_request_number = pull_request_number
@target_project_id = target_project_id
end

def update
Expand All @@ -39,7 +40,7 @@ def merge_request_exists?

def merge_request
@merge_request ||= gitlab_client_for_source.merge_request(
source.repo,
target_project_id || source.repo,
pull_request_number
)
end
Expand Down
37 changes: 34 additions & 3 deletions common/spec/dependabot/pull_request_creator/gitlab_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
labeler: labeler,
approvers: approvers,
assignees: assignees,
milestone: milestone
milestone: milestone,
target_project_id: target_project_id
)
end

Expand All @@ -45,6 +46,7 @@
let(:approvers) { nil }
let(:assignees) { nil }
let(:milestone) { nil }
let(:target_project_id) { nil }
let(:labeler) do
Dependabot::PullRequestCreator::Labeler.new(
source: source,
Expand Down Expand Up @@ -171,6 +173,20 @@
to have_requested(:post, "#{repo_api_url}/merge_requests")
end

context "with forked project" do
let(:target_project_id) { 1 }

it "pushes a commit to GitLab and creates a merge request in upstream project" do
creator.create

expect(WebMock).
to have_requested(:post, "#{repo_api_url}/merge_requests").
with(
body: a_string_including("target_project_id=#{target_project_id}")
)
end
end

context "with a submodule" do
let(:files) do
[
Expand Down Expand Up @@ -331,8 +347,12 @@

context "when a approvers has been requested" do
let(:approvers) { { "approvers" => [1_394_555] } }
let(:mr_api_url) do
"https://gitlab.com/api/v4/projects/#{target_project_id || CGI.escape(source.repo)}/merge_requests"
end

before do
stub_request(:put, "#{repo_api_url}/merge_requests/5/approvers").
stub_request(:put, "#{mr_api_url}/5/approvers").
to_return(
status: 200,
body: fixture("gitlab", "merge_request.json"),
Expand All @@ -344,7 +364,18 @@
creator.create

expect(WebMock).
to have_requested(:put, "#{repo_api_url}/merge_requests/5/approvers")
to have_requested(:put, "#{mr_api_url}/5/approvers")
end

context "with forked project" do
let(:target_project_id) { 1 }

it "adds the approvers to upstream project MR" do
creator.create

expect(WebMock).
to have_requested(:put, "#{mr_api_url}/5/approvers")
end
end
end
end
Expand Down
7 changes: 5 additions & 2 deletions common/spec/dependabot/pull_request_creator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
milestone: milestone,
author_details: author_details,
signature_key: signature_key,
provider_metadata: provider_metadata
provider_metadata: provider_metadata,
target_project_id: target_project_id
)
end

Expand All @@ -48,6 +49,7 @@
let(:files) { [gemfile] }
let(:base_commit) { "basecommitsha" }
let(:provider_metadata) { nil }
let(:target_project_id) { 1 }
let(:credentials) do
[{
"type" => "git_source",
Expand Down Expand Up @@ -228,7 +230,8 @@
labeler: instance_of(described_class::Labeler),
approvers: reviewers,
assignees: nil,
milestone: milestone
milestone: milestone,
target_project_id: target_project_id
).and_return(dummy_creator)
expect(dummy_creator).to receive(:create)
creator.create
Expand Down
18 changes: 17 additions & 1 deletion common/spec/dependabot/pull_request_updater/gitlab_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
old_commit: old_commit,
files: files,
credentials: credentials,
pull_request_number: merge_request_number
pull_request_number: merge_request_number,
target_project_id: target_project_id
)
end

Expand Down Expand Up @@ -77,6 +78,7 @@
repo_api_url + "/repository/branches/" + CGI.escape(branch_name)
end
let(:commit_url) { repo_api_url + "/repository/commits" }
let(:target_project_id) { nil }

before do
stub_request(:get, merge_request_url).
Expand All @@ -98,6 +100,20 @@
end

describe "#update" do
context "with forked project" do
let(:target_project_id) { 1 }
let(:merge_request_url) do
"https://gitlab.com/api/v4/projects/#{target_project_id}/merge_requests/#{merge_request_number}"
end

it "fetches mr from upstream project" do
updater.update

expect(WebMock).
to have_requested(:get, merge_request_url)
end
end

context "when the branch doesn't exist" do
before { stub_request(:get, branch_url).to_return(status: 404) }

Expand Down
7 changes: 5 additions & 2 deletions common/spec/dependabot/pull_request_updater_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
old_commit: old_commit,
files: files,
credentials: credentials,
pull_request_number: pull_request_number
pull_request_number: pull_request_number,
target_project_id: target_project_id
)
end

Expand All @@ -24,6 +25,7 @@
let(:old_commit) { "oldcommitsha" }
let(:pull_request_number) { 1 }
let(:credentials) { [] }
let(:target_project_id) { 1 }

describe "#update" do
context "with a GitHub source" do
Expand Down Expand Up @@ -61,7 +63,8 @@
old_commit: old_commit,
files: files,
credentials: credentials,
pull_request_number: pull_request_number
pull_request_number: pull_request_number,
target_project_id: target_project_id
).and_return(dummy_updater)
expect(dummy_updater).to receive(:update)
updater.update
Expand Down