Skip to content

Commit

Permalink
Merge pull request #7115 from dependabot/brrygrdn/pr-message-builder-…
Browse files Browse the repository at this point in the history
…is-group-aware

Pull Request names are Dependency Group aware
  • Loading branch information
brrygrdn committed Apr 20, 2023
2 parents c446d86 + 12d8bda commit 5b34a58
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 24 deletions.
3 changes: 2 additions & 1 deletion common/lib/dependabot/pull_request_creator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,8 @@ def message
pr_message_header: pr_message_header,
pr_message_footer: pr_message_footer,
vulnerabilities_fixed: vulnerabilities_fixed,
github_redirection_service: github_redirection_service
github_redirection_service: github_redirection_service,
dependency_group: dependency_group
)
end

Expand Down
51 changes: 29 additions & 22 deletions common/lib/dependabot/pull_request_creator/message_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
require "pathname"
require "dependabot/clients/github_with_retries"
require "dependabot/clients/gitlab_with_retries"
require "dependabot/dependency_group"
require "dependabot/logger"
require "dependabot/metadata_finders"
require "dependabot/pull_request_creator"
Expand All @@ -21,12 +22,13 @@ class MessageBuilder
attr_reader :source, :dependencies, :files, :credentials,
:pr_message_header, :pr_message_footer,
:commit_message_options, :vulnerabilities_fixed,
:github_redirection_service
:github_redirection_service, :dependency_group

def initialize(source:, dependencies:, files:, credentials:,
pr_message_header: nil, pr_message_footer: nil,
commit_message_options: {}, vulnerabilities_fixed: {},
github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE)
github_redirection_service: DEFAULT_GITHUB_REDIRECTION_SERVICE,
dependency_group: nil)
@dependencies = dependencies
@files = files
@source = source
Expand All @@ -36,19 +38,13 @@ def initialize(source:, dependencies:, files:, credentials:,
@commit_message_options = commit_message_options
@vulnerabilities_fixed = vulnerabilities_fixed
@github_redirection_service = github_redirection_service
@dependency_group = dependency_group
end

def pr_name
begin
pr_name = pr_name_prefixer.pr_name_prefix
rescue StandardError => e
Dependabot.logger.error("Error while generating PR name: #{e.message}")
pr_name = ""
end
pr_name += library? ? library_pr_name : application_pr_name
return pr_name if files.first.directory == "/"

pr_name + " in #{files.first.directory}"
name = dependency_group ? group_pr_name : solo_pr_name
name[0] = name[0].capitalize if pr_name_prefixer.capitalize_first_word?
"#{pr_name_prefix}#{name}"
end

def pr_message
Expand Down Expand Up @@ -82,11 +78,13 @@ def message

private

def library_pr_name
pr_name = "update "
pr_name = pr_name.capitalize if pr_name_prefixer.capitalize_first_word?
def solo_pr_name
name = library? ? library_pr_name : application_pr_name
"#{name}#{pr_name_directory}"
end

pr_name +
def library_pr_name
"update " +
if dependencies.count == 1
"#{dependencies.first.display_name} requirement " \
"#{from_version_msg(old_library_requirement(dependencies.first))}" \
Expand All @@ -101,12 +99,8 @@ def library_pr_name
end
end

# rubocop:disable Metrics/AbcSize
def application_pr_name
pr_name = "bump "
pr_name = pr_name.capitalize if pr_name_prefixer.capitalize_first_word?

pr_name +
"bump " +
if dependencies.count == 1
dependency = dependencies.first
"#{dependency.display_name} " \
Expand All @@ -131,10 +125,23 @@ def application_pr_name
end
end
end
# rubocop:enable Metrics/AbcSize

def group_pr_name
updates = dependencies.map(&:name).uniq.count
"bump the #{dependency_group.name} group#{pr_name_directory} with #{updates} update#{'s' if updates > 1}"
end

def pr_name_prefix
pr_name_prefixer.pr_name_prefix
rescue StandardError => e
Dependabot.logger.error("Error while generating PR name: #{e.message}")
""
end

def pr_name_directory
return "" if files.first.directory == "/"

" in #{files.first.directory}"
end

def commit_subject
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
pr_message_footer: pr_message_footer,
commit_message_options: commit_message_options,
vulnerabilities_fixed: vulnerabilities_fixed,
github_redirection_service: github_redirection_service
github_redirection_service: github_redirection_service,
dependency_group: dependency_group
)
end

Expand Down Expand Up @@ -46,6 +47,7 @@
let(:trailers) { nil }
let(:vulnerabilities_fixed) { { "business" => [] } }
let(:github_redirection_service) { "redirect.github.com" }
let(:dependency_group) { nil }

let(:gemfile) do
Dependabot::DependencyFile.new(
Expand Down Expand Up @@ -817,6 +819,97 @@ def commits_details(base:, head:)
end
end
end

context "for a dependency group" do
let(:dependency_group) do
Dependabot::DependencyGroup.new(name: "all-the-things", rules: anything)
end

before do
stub_request(:get, watched_repo_url + "/commits?per_page=100").
to_return(
status: 200,
body: commits_response,
headers: json_header
)
end
let(:commits_response) { fixture("github", "commits.json") }

it { is_expected.to eq("Bump the all-the-things group with 1 update") }

context "with two dependencies" do
let(:dependency2) do
Dependabot::Dependency.new(
name: "business2",
version: "1.5.0",
previous_version: "1.4.0",
package_manager: "dummy",
requirements: [],
previous_requirements: []
)
end
let(:dependencies) { [dependency, dependency2] }

it { is_expected.to eq("Bump the all-the-things group with 2 updates") }
end

context "with two dependencies with the same name" do
let(:dependency2) do
Dependabot::Dependency.new(
name: "business",
version: "1.5.0",
previous_version: "1.4.0",
package_manager: "dummy",
requirements: [],
previous_requirements: []
)
end
let(:dependencies) { [dependency, dependency2] }

it { is_expected.to eq("Bump the all-the-things group with 1 update") }
end

context "with three dependencies" do
let(:dependency2) do
Dependabot::Dependency.new(
name: "business2",
version: "1.5.0",
previous_version: "1.4.0",
package_manager: "dummy",
requirements: [],
previous_requirements: []
)
end
let(:dependency3) do
Dependabot::Dependency.new(
name: "business3",
version: "1.5.0",
previous_version: "1.4.0",
package_manager: "dummy",
requirements: [],
previous_requirements: []
)
end
let(:dependencies) { [dependency, dependency2, dependency3] }

it { is_expected.to eq("Bump the all-the-things group with 3 updates") }
end

context "with a directory specified" do
let(:gemfile) do
Dependabot::DependencyFile.new(
name: "Gemfile",
content: fixture("ruby", "gemfiles", "Gemfile"),
directory: "directory"
)
end

it "includes the directory" do
expect(pr_name).
to eq("Bump the all-the-things group in /directory with 1 update")
end
end
end
end

describe "#pr_message" do
Expand Down
11 changes: 11 additions & 0 deletions common/spec/dependabot/pull_request_creator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,17 @@
expect(dummy_creator).to receive(:create)
creator_with_group.create
end

it "passes the dependency_group to the PullRequestCreator::MessageBuilder" do
allow(described_class::Github).to receive(:new).and_return(dummy_creator)
allow(dummy_creator).to receive(:create)

expect(described_class::MessageBuilder).
to receive(:new).
with(hash_including(dependency_group: dependency_group))

creator_with_group.create
end
end
end
end

0 comments on commit 5b34a58

Please sign in to comment.