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