Class: Dependabot::Terraform::UpdateChecker::LatestVersionResolver
- Inherits:
-
Object
- Object
- Dependabot::Terraform::UpdateChecker::LatestVersionResolver
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/terraform/update_checker/latest_version_resolver.rb
Constant Summary collapse
- DAY_IN_SECONDS =
T.let(24 * 60 * 60, Integer)
Instance Attribute Summary collapse
-
#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?(release_date) ⇒ Boolean
- #cooldown_enabled? ⇒ Boolean
- #filter_versions_in_cooldown_period_from_module(versions) ⇒ Object
- #filter_versions_in_cooldown_period_from_provider(versions) ⇒ Object
-
#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_tags_which_in_cooldown_from_module ⇒ Object
- #select_tags_which_in_cooldown_from_provider ⇒ Object
- #select_version_tags_in_cooldown_period ⇒ Object
Constructor Details
#initialize(dependency:, credentials:, cooldown_options:, git_commit_checker:) ⇒ LatestVersionResolver
Returns a new instance of LatestVersionResolver.
25 26 27 28 29 30 31 32 33 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 25 def initialize(dependency:, credentials:, cooldown_options:, git_commit_checker:) @dependency = dependency @credentials = credentials = @git_commit_checker = T.let( git_commit_checker, Dependabot::GitCommitChecker ) end |
Instance Attribute Details
#credentials ⇒ Object (readonly)
Returns the value of attribute credentials.
213 214 215 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 213 def credentials @credentials end |
#dependency ⇒ Object (readonly)
Returns the value of attribute dependency.
36 37 38 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 36 def dependency @dependency end |
#git_commit_checker ⇒ Object (readonly)
Returns the value of attribute git_commit_checker.
210 211 212 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 210 def git_commit_checker @git_commit_checker end |
Instance Method Details
#check_if_version_in_cooldown_period?(release_date) ⇒ Boolean
134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 134 def check_if_version_in_cooldown_period?(release_date) return false unless release_date.length.positive? cooldown = return false unless cooldown return false if cooldown.nil? # Calculate the number of seconds passed since the release passed_seconds = Time.now.to_i - release_date_to_seconds(release_date) # Check if the release is within the cooldown period passed_seconds < cooldown.default_days * DAY_IN_SECONDS end |
#cooldown_enabled? ⇒ Boolean
199 200 201 202 203 204 205 206 207 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 199 def cooldown_enabled? # This is a simple check to see if user has put cooldown days. # If not set, then we aassume user does not want cooldown. # Since Terraform does not support Semver versioning, So option left # for the user is to set cooldown default days. return false if .nil? .default_days.positive? end |
#filter_versions_in_cooldown_period_from_module(versions) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 97 def filter_versions_in_cooldown_period_from_module(versions) # to make call for registry to get the versions # step one fetch allowed version tags and # sort the allowed version tags by name in descending order &.each do |tag_name| # Iterate through versions and filter out those matching the tag_name versions.reject! do |version| version.to_s == tag_name end end Dependabot.logger.info( "filter_versions_in_cooldown_period_from_module:: Allowed version tags after filtering versions in cooldown:#{versions.map(&:to_s).join(', ')}" ) versions rescue StandardError => e Dependabot.logger.error("Error fetching latest version tag: #{e.message}") versions end |
#filter_versions_in_cooldown_period_from_provider(versions) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 71 def filter_versions_in_cooldown_period_from_provider(versions) # to make call for registry to get the versions # step one fetch allowed version tags and # sort the allowed version tags by name in descending order &.each do |tag_name| # Iterate through versions and filter out those matching the tag_name versions.reject! do |version| version.to_s == tag_name end end Dependabot.logger.info( "Allowed version tags after filtering versions in cooldown: #{versions.map(&:to_s).join(', ')}" ) versions rescue StandardError => e Dependabot.logger.error("Error filter_versions_in_cooldown_period_from_provider(versions): #{e.message}") versions end |
#latest_version_tag ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 42 def latest_version_tag # step one fetch allowed version tags and = git_commit_checker. begin if cooldown_enabled? # sort the allowed version tags by name in descending order &.each do |tag_name| # filter out if name is not in cooldown period .reject! do |gitref_filtered| true if gitref_filtered.name == tag_name end end end Dependabot.logger.info( "Allowed version tags after filtering versions in cooldown: #{allowed_version_tags.map(&:name).join(', ')}" ) git_commit_checker.max_local_tag() rescue StandardError => e Dependabot.logger.error("Error fetching latest version tag: #{e.message}") git_commit_checker.local_tag_for_latest_version end end |
#package_details_fetcher ⇒ Object
187 188 189 190 191 192 193 194 195 196 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 187 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
149 150 151 152 153 154 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 149 def release_date_to_seconds(release_date) Time.parse(release_date).to_i rescue ArgumentError => e Dependabot.logger.error("Invalid release date format: #{release_date} and error: #{e.message}") 0 # Default to 360 days in seconds if parsing fails, so that it will not be in cooldown end |
#select_tags_which_in_cooldown_from_module ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 172 def = T.let([], T::Array[String]) package_details_fetcher.fetch_tag_and_release_date_from_module.each do |git_tag_with_detail| if check_if_version_in_cooldown_period?(T.must(git_tag_with_detail.release_date)) << git_tag_with_detail.tag end end rescue StandardError => e Dependabot.logger.error("Error checking if version is in cooldown: #{e.message}") end |
#select_tags_which_in_cooldown_from_provider ⇒ Object
157 158 159 160 161 162 163 164 165 166 167 168 169 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 157 def = T.let([], T::Array[String]) package_details_fetcher.fetch_tag_and_release_date_from_provider.each do |git_tag_with_detail| if check_if_version_in_cooldown_period?(T.must(git_tag_with_detail.release_date)) << git_tag_with_detail.tag end end rescue StandardError => e Dependabot.logger.error("Error checking if version is in cooldown: #{e.message}") end |
#select_version_tags_in_cooldown_period ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/dependabot/terraform/update_checker/latest_version_resolver.rb', line 119 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?(T.must(git_tag_with_detail.release_date)) << git_tag_with_detail.tag end end rescue StandardError => e Dependabot.logger.error("Error checking if version is in cooldown: #{e.message}") end |