Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow configuring by file so that dependabot creates draft pull requests #9169

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 11 additions & 3 deletions common/lib/dependabot/pull_request_creator.rb
Expand Up @@ -168,7 +168,8 @@ def initialize(cause, pull_request)
),
dependency_group: T.nilable(Dependabot::DependencyGroup),
pr_message_max_length: T.nilable(Integer),
pr_message_encoding: T.nilable(Encoding)
pr_message_encoding: T.nilable(Encoding),
draft: T::Boolean
)
.void
end
Expand All @@ -183,7 +184,7 @@ def initialize(source:, base_commit:, dependencies:, files:, credentials:,
github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE,
custom_headers: nil, require_up_to_date_base: false,
provider_metadata: {}, message: nil, dependency_group: nil, pr_message_max_length: nil,
pr_message_encoding: nil)
pr_message_encoding: nil, draft: false)
@dependencies = dependencies
@source = source
@base_commit = base_commit
Expand Down Expand Up @@ -212,6 +213,7 @@ def initialize(source:, base_commit:, dependencies:, files:, credentials:,
@dependency_group = dependency_group
@pr_message_max_length = pr_message_max_length
@pr_message_encoding = pr_message_encoding
@draft = draft

check_dependencies_have_previous_version
end
Expand Down Expand Up @@ -257,6 +259,11 @@ def require_up_to_date_base?
@require_up_to_date_base
end

sig { returns(T::Boolean) }
def draft?
@draft
end

sig { returns(Dependabot::PullRequestCreator::Github) }
def github_creator
Github.new(
Expand All @@ -275,7 +282,8 @@ def github_creator
assignees: assignees,
milestone: milestone,
custom_headers: custom_headers,
require_up_to_date_base: require_up_to_date_base?
require_up_to_date_base: require_up_to_date_base?,
draft: draft?
)
end

Expand Down
10 changes: 7 additions & 3 deletions common/lib/dependabot/pull_request_creator/github.rb
Expand Up @@ -20,13 +20,13 @@ class Github
attr_reader :source, :branch_name, :base_commit, :credentials,
:files, :pr_description, :pr_name, :commit_message,
:author_details, :signature_key, :custom_headers,
:labeler, :reviewers, :assignees, :milestone
:labeler, :reviewers, :assignees, :milestone, :draft

def initialize(source:, branch_name:, base_commit:, credentials:,
files:, commit_message:, pr_description:, pr_name:,
author_details:, signature_key:, custom_headers:,
labeler:, reviewers:, assignees:, milestone:,
require_up_to_date_base:)
require_up_to_date_base:, draft:)
@source = source
@branch_name = branch_name
@base_commit = base_commit
Expand All @@ -43,6 +43,7 @@ def initialize(source:, branch_name:, base_commit:, credentials:,
@assignees = assignees
@milestone = milestone
@require_up_to_date_base = require_up_to_date_base
@draft = draft
end

def create
Expand Down Expand Up @@ -368,7 +369,10 @@ def create_pull_request
branch_name,
pr_name,
pr_description,
headers: custom_headers || {}
{
headers: custom_headers || {},
draft: draft
}
)
rescue Octokit::UnprocessableEntity
# Sometimes PR creation fails with no details (presumably because the
Expand Down
6 changes: 6 additions & 0 deletions common/spec/dependabot/config/file_spec.rb
Expand Up @@ -17,6 +17,12 @@
expect { Dependabot::Config::File.parse("version: 1\n") }
.to raise_error(Dependabot::Config::InvalidConfigError)
end

it "parses the config file with draft config" do
cfg = Dependabot::Config::File.parse(fixture("configfile", "bundler-weekly-draft.yml"))
expect(cfg.updates.size).to eq(1)
expect(cfg.updates.first[:draft]).to be_truthy
end
end

describe "File" do
Expand Down
55 changes: 46 additions & 9 deletions common/spec/dependabot/pull_request_creator/github_spec.rb
Expand Up @@ -24,7 +24,8 @@
reviewers: reviewers,
assignees: assignees,
milestone: milestone,
require_up_to_date_base: require_up_to_date_base
require_up_to_date_base: require_up_to_date_base,
draft: draft
)
end

Expand Down Expand Up @@ -52,6 +53,7 @@
let(:assignees) { nil }
let(:milestone) { nil }
let(:require_up_to_date_base) { false }
let(:draft) { false }
let(:labeler) do
Dependabot::PullRequestCreator::Labeler.new(
source: source,
Expand Down Expand Up @@ -437,7 +439,8 @@
base: "master",
head: "randdependabot/bundler/business-1.5.0",
title: "PR name",
body: "PR msg"
body: "PR msg",
draft: false
}
)
end
Expand All @@ -455,7 +458,8 @@
base: "master",
head: "randdependabot/bundler/business-1.5.0",
title: "PR name",
body: "PR msg"
body: "PR msg",
draft: false
},
headers: { "Accept" => "some-preview-header" }
)
Expand Down Expand Up @@ -495,7 +499,8 @@
base: "master",
head: "dependabot/bundler/business-1.5.0",
title: "PR name",
body: "PR msg"
body: "PR msg",
draft: false
}
)
end
Expand Down Expand Up @@ -573,7 +578,8 @@
base: "master",
head: "dependabot/bundler/business-1.5.0",
title: "PR name",
body: "PR msg"
body: "PR msg",
draft: false
}
)
end
Expand Down Expand Up @@ -601,12 +607,40 @@
base: "master",
head: "dependabot/bundler/business-1.5.0",
title: "PR name",
body: "PR msg"
body: "PR msg",
draft: false
}
)
end
end
end

context "when `draft` is true" do
let(:draft) { true }

before do
stub_request(:post, "#{repo_api_url}/pulls")
.to_return(status: 200,
body: fixture("github", "create_draft_pr.json"),
headers: json_header)
end

it "creates a PR" do
creator.create

expect(WebMock)
.to have_requested(:post, "#{repo_api_url}/pulls")
.with(
body: {
base: "master",
head: "dependabot/bundler/business-1.5.0",
title: "PR name",
body: "PR msg",
draft: true
}
)
end
end
end
end
end
Expand Down Expand Up @@ -640,7 +674,8 @@
base: "master",
head: "dependabot/bundler/business-1.5.0",
title: "PR name",
body: "PR msg"
body: "PR msg",
draft: false
}
)
end
Expand Down Expand Up @@ -747,7 +782,8 @@
base: "master",
head: "dependabot/bundler/business-1.5.0",
title: "PR name",
body: "PR msg"
body: "PR msg",
draft: false
}
)
end
Expand Down Expand Up @@ -785,7 +821,8 @@
base: "my_branch",
head: "dependabot/bundler/my_branch/business-1.5.0",
title: "PR name",
body: "PR msg"
body: "PR msg",
draft: false
}
)
end
Expand Down
59 changes: 56 additions & 3 deletions common/spec/dependabot/pull_request_creator_spec.rb
Expand Up @@ -203,7 +203,8 @@
reviewers: reviewers,
assignees: assignees,
milestone: milestone,
require_up_to_date_base: false
require_up_to_date_base: false,
draft: false
).and_return(dummy_creator)
expect(dummy_creator).to receive(:create)
creator.create
Expand Down Expand Up @@ -365,7 +366,58 @@
require_up_to_date_base: false,
pr_name: pr_name,
pr_description: pr_message,
commit_message: commit_message
commit_message: commit_message,
draft: false
).and_return(dummy_creator)
expect(dummy_creator).to receive(:create)
creator.create
end
end

context "with a draft parameter" do
subject(:creator) do
described_class.new(
source: source,
base_commit: base_commit,
dependencies: dependencies,
files: files,
credentials: credentials,
custom_labels: custom_labels,
reviewers: reviewers,
assignees: assignees,
milestone: milestone,
author_details: author_details,
signature_key: signature_key,
provider_metadata: provider_metadata,
draft: draft
)
end

let(:draft) { true }
let(:source) { Dependabot::Source.new(provider: "github", repo: "gc/bp", branch: "main") }
let(:dummy_creator) { instance_double(described_class::Github) }

it "delegates to PullRequestCreator::Github with correct params" do
expect(described_class::Github)
.to receive(:new)
.with(
source: source,
branch_name: "dependabot/bundler/main/business-1.5.0",
base_commit: base_commit,
credentials: credentials,
files: files,
commit_message: "Commit msg",
pr_description: "PR msg",
pr_name: "PR name",
author_details: author_details,
signature_key: signature_key,
custom_headers: nil,
labeler: instance_of(described_class::Labeler),
reviewers: reviewers,
assignees: assignees,
milestone: milestone,
require_up_to_date_base: false,
draft: true
).and_return(dummy_creator)
expect(dummy_creator).to receive(:create)
creator.create
Expand Down Expand Up @@ -414,7 +466,8 @@
reviewers: reviewers,
assignees: assignees,
milestone: milestone,
require_up_to_date_base: false
require_up_to_date_base: false,
draft: false
).and_return(dummy_creator)
expect(dummy_creator).to receive(:create)
creator_with_group.create
Expand Down
7 changes: 7 additions & 0 deletions common/spec/fixtures/configfile/bundler-weekly-draft.yml
@@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: "bundler"
directory: "/"
draft: true
schedule:
interval: "daily"