Class: Dependabot::Swift::UpdateChecker::LatestVersionResolver
- Inherits:
-
Object
- Object
- Dependabot::Swift::UpdateChecker::LatestVersionResolver
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/swift/update_checker/latest_version_resolver.rb
Constant Summary collapse
- DAY_IN_SECONDS =
T.let(24 * 60 * 60, Integer)
Instance Attribute Summary collapse
-
#cooldown_options ⇒ Object
readonly
Returns the value of attribute cooldown_options.
-
#credentials ⇒ Object
readonly
Returns the value of attribute credentials.
-
#dependency ⇒ Object
readonly
Returns the value of attribute dependency.
-
#git_commit_checker ⇒ Object
readonly
Returns the value of attribute git_commit_checker.
Instance Method Summary collapse
- #check_if_version_in_cooldown_period?(tag_with_detail) ⇒ Boolean
- #cooldown_days_for(current_version, new_version) ⇒ Object
- #cooldown_enabled? ⇒ Boolean
-
#initialize(dependency:, credentials:, cooldown_options:, git_commit_checker:) ⇒ LatestVersionResolver
constructor
A new instance of LatestVersionResolver.
- #latest_version_tag ⇒ Object
- #package_details_fetcher ⇒ Object
- #release_date_to_seconds(release_date) ⇒ Object
- #select_version_tags_in_cooldown_period ⇒ Object
- #version_class ⇒ Object
Constructor Details
#initialize(dependency:, credentials:, cooldown_options:, git_commit_checker:) ⇒ LatestVersionResolver
Returns a new instance of LatestVersionResolver.
27 28 29 30 31 32 33 34 35 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 27 def initialize(dependency:, credentials:, cooldown_options:, git_commit_checker:) @dependency = dependency @credentials = credentials @cooldown_options = @git_commit_checker = T.let( git_commit_checker, Dependabot::GitCommitChecker ) end |
Instance Attribute Details
#cooldown_options ⇒ Object (readonly)
Returns the value of attribute cooldown_options.
44 45 46 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 44 def @cooldown_options end |
#credentials ⇒ Object (readonly)
Returns the value of attribute credentials.
41 42 43 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 41 def credentials @credentials end |
#dependency ⇒ Object (readonly)
Returns the value of attribute dependency.
38 39 40 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 38 def dependency @dependency end |
#git_commit_checker ⇒ Object (readonly)
Returns the value of attribute git_commit_checker.
47 48 49 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 47 def git_commit_checker @git_commit_checker end |
Instance Method Details
#check_if_version_in_cooldown_period?(tag_with_detail) ⇒ Boolean
88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 88 def check_if_version_in_cooldown_period?(tag_with_detail) return false unless tag_with_detail.release_date current_version = version_class.correct?(dependency.version) ? version_class.new(dependency.version) : nil days = cooldown_days_for(current_version, version_class.new(tag_with_detail.tag.delete("v"))) # Calculate the number of seconds passed since the release passed_seconds = Time.now.to_i - release_date_to_seconds(tag_with_detail.release_date) # Check if the release is within the cooldown period passed_seconds < days * DAY_IN_SECONDS end |
#cooldown_days_for(current_version, new_version) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 106 def cooldown_days_for(current_version, new_version) return 0 unless cooldown_enabled? cooldown = T.must() return 0 unless cooldown.included?(dependency.name) return cooldown.default_days if current_version.nil? current_version_semver = current_version.semver_parts new_version_semver = new_version.semver_parts # If semver_parts is nil for either, return default cooldown return cooldown.default_days if current_version_semver.nil? || new_version_semver.nil? # Ensure values are always integers current_major, current_minor, current_patch = current_version_semver new_major, new_minor, new_patch = new_version_semver # Determine cooldown based on version difference return cooldown.semver_major_days if new_major > current_major return cooldown.semver_minor_days if new_minor > current_minor return cooldown.semver_patch_days if new_patch > current_patch cooldown.default_days end |
#cooldown_enabled? ⇒ Boolean
159 160 161 162 163 164 165 166 167 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 159 def cooldown_enabled? return false if .nil? cooldown = T.must() cooldown.default_days.to_i.positive? || cooldown.semver_major_days.to_i.positive? || cooldown.semver_minor_days.to_i.positive? || cooldown.semver_patch_days.to_i.positive? end |
#latest_version_tag ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 54 def latest_version_tag # step one fetch allowed version tags and return git_commit_checker.local_tag_for_latest_version unless cooldown_enabled? = git_commit_checker. &.each do |tag_name| # filter out if name is in cooldown period .reject! do |gitref_filtered| gitref_filtered.name == tag_name end end git_commit_checker.max_local_tag() rescue StandardError => e Dependabot.logger.error("Error fetching latest version tag: #{e.}") git_commit_checker.local_tag_for_latest_version end |
#package_details_fetcher ⇒ Object
147 148 149 150 151 152 153 154 155 156 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 147 def package_details_fetcher @package_details_fetcher ||= T.let( Package::PackageDetailsFetcher.new( dependency: dependency, credentials: credentials, git_commit_checker: git_commit_checker ), T.nilable(Package::PackageDetailsFetcher) ) end |
#release_date_to_seconds(release_date) ⇒ Object
137 138 139 140 141 142 143 144 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 137 def release_date_to_seconds(release_date) return 0 unless release_date Time.parse(release_date).to_i rescue ArgumentError => e Dependabot.logger.error("Invalid release date format: #{release_date} and error: #{e.}") 0 # Default to 360 days in seconds if parsing fails, so that it will not be in cooldown end |
#select_version_tags_in_cooldown_period ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 73 def = T.let([], T::Array[String]) package_details_fetcher.fetch_tag_and_release_date.each do |git_tag_with_detail| if check_if_version_in_cooldown_period?(git_tag_with_detail) << git_tag_with_detail.tag end end rescue StandardError => e Dependabot.logger.error("Error checking if version is in cooldown: #{e.}") end |
#version_class ⇒ Object
132 133 134 |
# File 'lib/dependabot/swift/update_checker/latest_version_resolver.rb', line 132 def version_class dependency.version_class end |