Class: Dependabot::Terraform::Package::PackageDetailsFetcher
- Inherits:
-
Object
- Object
- Dependabot::Terraform::Package::PackageDetailsFetcher
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/terraform/package/package_details_fetcher.rb
Constant Summary collapse
- RELEASE_URL_FOR_PROVIDER =
"https://registry.terraform.io/v2/providers/"- RELEASE_URL_FOR_MODULE =
"https://registry.terraform.io/v2/modules/"- APPLICATION_JSON =
"JSON"- INCLUDE_FOR_PROVIDER =
"?include=provider-versions"- INCLUDE_FOR_MODULE =
"?include=module-versions"- ELIGIBLE_SOURCE_TYPES =
T.let( %w(git provider registry).freeze, T::Array[String] )
Instance Attribute Summary collapse
-
#credentials ⇒ Object
readonly
Returns the value of attribute credentials.
-
#git_commit_checker ⇒ Object
readonly
Returns the value of attribute git_commit_checker.
Instance Method Summary collapse
- #dependency_source_details ⇒ Object
- #fetch_tag_and_release_date_from_module ⇒ Object
-
#fetch_tag_and_release_date_from_provider ⇒ Object
rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity.
-
#initialize(dependency:, credentials:, git_commit_checker:) ⇒ PackageDetailsFetcher
constructor
A new instance of PackageDetailsFetcher.
Constructor Details
#initialize(dependency:, credentials:, git_commit_checker:) ⇒ PackageDetailsFetcher
Returns a new instance of PackageDetailsFetcher.
36 37 38 39 40 |
# File 'lib/dependabot/terraform/package/package_details_fetcher.rb', line 36 def initialize(dependency:, credentials:, git_commit_checker:) @dependency = dependency @credentials = credentials @git_commit_checker = git_commit_checker end |
Instance Attribute Details
#credentials ⇒ Object (readonly)
Returns the value of attribute credentials.
46 47 48 |
# File 'lib/dependabot/terraform/package/package_details_fetcher.rb', line 46 def credentials @credentials end |
#git_commit_checker ⇒ Object (readonly)
Returns the value of attribute git_commit_checker.
43 44 45 |
# File 'lib/dependabot/terraform/package/package_details_fetcher.rb', line 43 def git_commit_checker @git_commit_checker end |
Instance Method Details
#dependency_source_details ⇒ Object
110 111 112 113 114 |
# File 'lib/dependabot/terraform/package/package_details_fetcher.rb', line 110 def dependency_source_details return nil unless @dependency.source_details @dependency.source_details(allowed_types: ELIGIBLE_SOURCE_TYPES) end |
#fetch_tag_and_release_date_from_module ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/dependabot/terraform/package/package_details_fetcher.rb', line 81 def fetch_tag_and_release_date_from_module return [] unless dependency_source_details url = RELEASE_URL_FOR_MODULE + dependency_source_details&.fetch(:module_identifier) + INCLUDE_FOR_MODULE Dependabot.logger.info("Fetching provider release details from URL: #{url}") result_lines = T.let([], T::Array[GitTagWithDetail]) # Fetch the releases from the provider API response = Excon.get(url, headers: { "Accept" => "application/vnd.github.v3+json" }) Dependabot.logger.error("Failed call details: #{response.body}") unless response.status == 200 return result_lines unless response.status == 200 # Parse the JSON response releases = JSON.parse(response.body).fetch("included", []) .select { |item| item["type"] == "module-versions" } releases = releases.map { |release| release.fetch("attributes", {}) } # Extract version names and release dates into result_lines releases.each do |release| result_lines << GitTagWithDetail.new( tag: release["version"], release_date: release["published-at"] ) end # Sort the result lines by tag in descending order result_lines.sort_by(&:tag).reverse end |
#fetch_tag_and_release_date_from_provider ⇒ Object
rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/dependabot/terraform/package/package_details_fetcher.rb', line 49 def fetch_tag_and_release_date_from_provider # rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity return [] unless dependency_source_details url = RELEASE_URL_FOR_PROVIDER + dependency_source_details&.fetch(:module_identifier) + INCLUDE_FOR_PROVIDER Dependabot.logger.info("Fetching provider release details from URL: #{url}") result_lines = T.let([], T::Array[GitTagWithDetail]) # Fetch the releases from the provider API response = Excon.get(url, headers: { "Accept" => "application/vnd.github.v3+json" }) Dependabot.logger.error("Failed call details: #{response.body}") unless response.status == 200 return result_lines unless response.status == 200 # Parse the JSON response releases = JSON.parse(response.body).fetch("included", []) .select { |item| item["type"] == "provider-versions" } releases = releases.map { |release| release.fetch("attributes", {}) } # Check if releases is an array and not empty return result_lines unless releases.is_a?(Array) && !releases.empty? # Extract version names and release dates into result_lines releases.each do |release| result_lines << GitTagWithDetail.new( tag: release["version"], release_date: release["published-at"] ) end # Sort the result lines by tag in descending order result_lines.sort_by(&:tag).reverse end |