Class: Dependabot::Swift::UpdateChecker::XcodeVersionResolver

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/swift/update_checker/xcode_version_resolver.rb

Overview

Resolves versions for Xcode-only SwiftPM projects (no Package.swift).

Unlike the classic VersionResolver which relies on swift package update, this resolver uses GitCommitChecker to find the latest available version from git tags, since we cannot run the Swift CLI without a manifest.

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, git_commit_checker:, security_advisories:) ⇒ XcodeVersionResolver

Returns a new instance of XcodeVersionResolver.



30
31
32
33
34
# File 'lib/dependabot/swift/update_checker/xcode_version_resolver.rb', line 30

def initialize(dependency:, git_commit_checker:, security_advisories:)
  @dependency = dependency
  @git_commit_checker = git_commit_checker
  @security_advisories = security_advisories
end

Instance Method Details

#latest_resolvable_versionObject



37
38
39
40
41
42
# File 'lib/dependabot/swift/update_checker/xcode_version_resolver.rb', line 37

def latest_resolvable_version
  tag = latest_resolvable_version_tag
  return nil unless tag

  Version.new(tag.fetch(:version))
end

#latest_resolvable_version_tagObject



47
48
49
50
51
52
# File 'lib/dependabot/swift/update_checker/xcode_version_resolver.rb', line 47

def latest_resolvable_version_tag
  @latest_resolvable_version_tag ||= T.let(
    compute_latest_resolvable_version_tag,
    T.nilable(T::Hash[Symbol, T.untyped])
  )
end

#lowest_security_fix_versionObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/dependabot/swift/update_checker/xcode_version_resolver.rb', line 55

def lowest_security_fix_version
  return nil unless version_pinned?

  tags = git_commit_checker.local_tags_for_allowed_versions
  relevant_tags = Dependabot::UpdateCheckers::VersionFilters.filter_vulnerable_versions(
    tags,
    security_advisories
  )
  relevant_tags = filter_lower_tags(relevant_tags)

  lowest_tag = relevant_tags.min_by { |tag| tag.fetch(:version) }
  return nil unless lowest_tag

  Version.new(lowest_tag.fetch(:version))
end

#version_pinned?Boolean

Returns:

  • (Boolean)


72
73
74
75
76
# File 'lib/dependabot/swift/update_checker/xcode_version_resolver.rb', line 72

def version_pinned?
  return false unless dependency.version

  Version.correct?(dependency.version)
end