class Dependabot::PullRequestCreator
Constants
- DEFAULT_GITHUB_REDIRECTION_SERVICE
Dependabot
programmatically creates PRs which often include a large number of links to objects on `github.com`. GitHub hydrates these into rich links that leave a 'mention' on target Issues/Pull Requests.Due to the volume and nature of
Dependabot
PRs, these mentions are not useful and can overwhelm maintainers, so we use a redirection service to avoid enrichment.If you wish to disable this behaviour when using
Dependabot
Core directly, pass a nil value when initialising this class.
Attributes
assignees[R]
base_commit[R]
branch_name_prefix[R]
branch_name_separator[R]
commit_message_options[R]
credentials[R]
custom_headers[R]
custom_labels[R]
dependencies[R]
files[R]
github_redirection_service[R]
milestone[R]
pr_message_header[R]
provider_metadata[R]
reviewers[R]
signature_key[R]
source[R]
vulnerabilities_fixed[R]
Public Class Methods
new(source:, base_commit:, dependencies:, files:, credentials:, pr_message_header: nil, pr_message_footer: nil, custom_labels: nil, author_details: nil, signature_key: nil, commit_message_options: {}, vulnerabilities_fixed: {}, reviewers: nil, assignees: nil, milestone: nil, branch_name_separator: "/", branch_name_prefix: "dependabot", 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)
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 54 def initialize(source:, base_commit:, dependencies:, files:, credentials:, pr_message_header: nil, pr_message_footer: nil, custom_labels: nil, author_details: nil, signature_key: nil, commit_message_options: {}, vulnerabilities_fixed: {}, reviewers: nil, assignees: nil, milestone: nil, branch_name_separator: "/", branch_name_prefix: "dependabot", 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) @dependencies = dependencies @source = source @base_commit = base_commit @files = files @credentials = credentials @pr_message_header = pr_message_header @pr_message_footer = pr_message_footer @author_details = author_details @signature_key = signature_key @commit_message_options = commit_message_options @custom_labels = custom_labels @reviewers = reviewers @assignees = assignees @milestone = milestone @vulnerabilities_fixed = vulnerabilities_fixed @branch_name_separator = branch_name_separator @branch_name_prefix = branch_name_prefix @label_language = label_language @automerge_candidate = automerge_candidate @github_redirection_service = github_redirection_service @custom_headers = custom_headers @require_up_to_date_base = require_up_to_date_base @provider_metadata = provider_metadata @message = message check_dependencies_have_previous_version end
Public Instance Methods
check_dependencies_have_previous_version()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 92 def check_dependencies_have_previous_version return if dependencies.all? { |d| requirements_changed?(d) } return if dependencies.all?(&:previous_version) raise "Dependencies must have a previous version or changed " \ "requirement to have a pull request created for them!" end
create()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 100 def create case source.provider when "github" then github_creator.create when "gitlab" then gitlab_creator.create when "azure" then azure_creator.create when "bitbucket" then bitbucket_creator.create when "codecommit" then codecommit_creator.create else raise "Unsupported provider #{source.provider}" end end
Private Instance Methods
automerge_candidate?()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 117 def automerge_candidate? @automerge_candidate end
azure_creator()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 164 def azure_creator Azure.new( source: source, branch_name: branch_namer.new_branch_name, base_commit: base_commit, credentials: credentials, files: files, commit_message: message.commit_message, pr_description: message.pr_message, pr_name: message.pr_name, author_details: author_details, labeler: labeler, work_item: provider_metadata&.fetch(:work_item, nil) ) end
bitbucket_creator()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 180 def bitbucket_creator Bitbucket.new( source: source, branch_name: branch_namer.new_branch_name, base_commit: base_commit, credentials: credentials, files: files, commit_message: message.commit_message, pr_description: message.pr_message, pr_name: message.pr_name, author_details: author_details, labeler: labeler, work_item: provider_metadata&.fetch(:work_item, nil) ) end
branch_namer()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 227 def branch_namer @branch_namer ||= BranchNamer.new( dependencies: dependencies, files: files, target_branch: source.branch, separator: branch_name_separator, prefix: branch_name_prefix ) end
codecommit_creator()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 196 def codecommit_creator Codecommit.new( source: source, branch_name: branch_namer.new_branch_name, base_commit: base_commit, credentials: credentials, files: files, commit_message: message.commit_message, pr_description: message.pr_message, pr_name: message.pr_name, author_details: author_details, labeler: labeler, require_up_to_date_base: require_up_to_date_base? ) end
github_creator()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 125 def github_creator Github.new( source: source, branch_name: branch_namer.new_branch_name, base_commit: base_commit, credentials: credentials, files: files, commit_message: message.commit_message, pr_description: message.pr_message, pr_name: message.pr_name, author_details: author_details, signature_key: signature_key, labeler: labeler, reviewers: reviewers, assignees: assignees, milestone: milestone, custom_headers: custom_headers, require_up_to_date_base: require_up_to_date_base? ) end
gitlab_creator()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 146 def gitlab_creator Gitlab.new( source: source, branch_name: branch_namer.new_branch_name, base_commit: base_commit, credentials: credentials, files: files, commit_message: message.commit_message, pr_description: message.pr_message, pr_name: message.pr_name, author_details: author_details, labeler: labeler, approvers: reviewers, assignees: assignees, milestone: milestone ) end
includes_security_fixes?()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 251 def includes_security_fixes? vulnerabilities_fixed.values.flatten.any? end
label_language?()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 113 def label_language? @label_language end
labeler()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 238 def labeler @labeler ||= Labeler.new( source: source, custom_labels: custom_labels, credentials: credentials, includes_security_fixes: includes_security_fixes?, dependencies: dependencies, label_language: label_language?, automerge_candidate: automerge_candidate? ) end
message()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 212 def message @message ||= MessageBuilder.new( source: source, dependencies: dependencies, files: files, credentials: credentials, commit_message_options: commit_message_options, pr_message_header: pr_message_header, pr_message_footer: pr_message_footer, vulnerabilities_fixed: vulnerabilities_fixed, github_redirection_service: github_redirection_service ) end
require_up_to_date_base?()
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 121 def require_up_to_date_base? @require_up_to_date_base end
requirements_changed?(dependency)
click to toggle source
# File lib/dependabot/pull_request_creator.rb, line 255 def requirements_changed?(dependency) (dependency.requirements - dependency.previous_requirements).any? end