class DependabotGitlab::CoreFunctions

Constants

DEFAULT_API_ENDPOINT
DEFAULT_BRANCH
DEFAULT_HOST_NAME
DEFAULT_PROVIDER

Public Class Methods

new(credentials, settings) click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 9
def initialize(credentials, settings)
  @settings = settings
  @credentials = credentials
end

Public Instance Methods

dependencies_info(create_merge_request) click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 14
def dependencies_info(create_merge_request)
  messages = []

  init_source

  file_fetcher = fetcher
  files = file_fetcher.files

  dependencies = parser(files).parse

  commit = file_fetcher.commit

  dependencies.select(&:top_level?).each do |dep|
    checker = checker(files, dep)

    next if checker.up_to_date?

    requirements_to_unlock = unlock_requirements(checker)

    next if requirements_to_unlock == :update_not_possible

    updated_deps = checker.updated_dependencies(
        requirements_to_unlock: requirements_to_unlock
    )

    updater = file_updater(updated_deps, files)
    updated_files = updater.updated_dependency_files

    create_mr(updated_files, updated_deps, commit) if create_merge_request

    messages << {name: dep.name, old_version: dep.version, new_version: updater.dependencies.first.version}
  end

  messages.join
end

Private Instance Methods

checker(files, dep) click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 78
def checker(files, dep)
  Dependabot::UpdateCheckers.for_package_manager(@settings[:pkg_manager]).new(
      dependency: dep,
      dependency_files: files,
      credentials: @credentials,
  )
end
create_mr(updated_files, updated_deps, commit) click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 110
def create_mr(updated_files, updated_deps, commit)
  pr_creator = Dependabot::PullRequestCreator.new(
      source: @source,
      base_commit: commit,
      dependencies: updated_deps,
      files: updated_files,
      credentials: @credentials,
      assignees: @settings[:assignees],
      author_details: @settings[:author_details] || {name: "Dependabot", email: "no-reply@github.com"},
      label_language: true,
  )

  pr_creator.create
end
fetcher() click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 63
def fetcher
  Dependabot::FileFetchers.for_package_manager(@settings[:pkg_manager]).new(
      source: @source,
      credentials: @credentials,
  )
end
file_updater(updated_deps, files) click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 102
def file_updater(updated_deps, files)
  Dependabot::FileUpdaters.for_package_manager(@settings[:pkg_manager]).new(
      dependencies: updated_deps,
      dependency_files: files,
      credentials: @credentials,
  )
end
init_source() click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 52
def init_source
  @source = Dependabot::Source.new(
      provider: @settings[:provider] || DEFAULT_PROVIDER,
      hostname: @settings[:hostname] || DEFAULT_HOST_NAME,
      api_endpoint: @settings[:api_endpoint] || DEFAULT_API_ENDPOINT,
      repo: @settings[:repo],
      directory: @settings[:dir],
      branch: @settings[:branch] || DEFAULT_BRANCH
  )
end
parser(files) click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 70
def parser(files)
  Dependabot::FileParsers.for_package_manager(@settings[:pkg_manager]).new(
      dependency_files: files,
      source: @source,
      credentials: @credentials,
  )
end
unlock_requirements(checker) click to toggle source
# File lib/dependabot_gitlab/core_functions.rb, line 86
def unlock_requirements(checker)
  if !checker.requirements_unlocked_or_can_be?
    if checker.can_update?(requirements_to_unlock: :none) then
      :none
    else
      :update_not_possible
    end
  elsif checker.can_update?(requirements_to_unlock: :own) then
    :own
  elsif checker.can_update?(requirements_to_unlock: :all) then
    :all
  else
    :update_not_possible
  end
end