Class: Dependabot::Devcontainers::Package::PackageDetailsFetcher
- Inherits:
-
Object
- Object
- Dependabot::Devcontainers::Package::PackageDetailsFetcher
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/devcontainers/package/package_details_fetcher.rb
Instance Attribute Summary collapse
-
#dependency ⇒ Object
readonly
Returns the value of attribute dependency.
Instance Method Summary collapse
- #fetch_package_releases ⇒ Object
- #fetch_release_metadata(release:) ⇒ Object
-
#initialize(dependency:) ⇒ PackageDetailsFetcher
constructor
A new instance of PackageDetailsFetcher.
Constructor Details
#initialize(dependency:) ⇒ PackageDetailsFetcher
Returns a new instance of PackageDetailsFetcher.
27 28 29 |
# File 'lib/dependabot/devcontainers/package/package_details_fetcher.rb', line 27 def initialize(dependency:) @dependency = dependency end |
Instance Attribute Details
#dependency ⇒ Object (readonly)
Returns the value of attribute dependency.
32 33 34 |
# File 'lib/dependabot/devcontainers/package/package_details_fetcher.rb', line 32 def dependency @dependency end |
Instance Method Details
#fetch_package_releases ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/dependabot/devcontainers/package/package_details_fetcher.rb', line 35 def fetch_package_releases releases = T.let([], T::Array[Dependabot::Package::PackageRelease]) begin Dependabot.logger.info("Fetching package info (Dev Containers) for #{dependency.name}") cmd = "devcontainer features info tags #{dependency.name} --output-format json" Dependabot.logger.info("Running command: `#{cmd}`") output = SharedHelpers.run_shell_command(cmd, stderr_to_stdout: false) = JSON.parse(output).fetch("publishedTags") .each do |release| next unless version_class.correct?(release) && T.cast(version_class.new(release), Dependabot::Devcontainers::Version) releases << Dependabot::Package::PackageRelease.new( version: Devcontainers::Version.new(release), released_at: nil ) end releases.sort_by!(&:version) rescue StandardError => e Dependabot.logger.error("Error while fetching package info for dev container packages: #{e.}") releases end end |
#fetch_release_metadata(release:) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/dependabot/devcontainers/package/package_details_fetcher.rb', line 67 def (release:) Dependabot.logger.info("Fetching release metadata (Dev Containers) for #{dependency.name}:#{release.version}") response = fetch_response(release: release) return release unless response.status == 200 = JSON.parse(response.body)["layers"][0] released_at = ["annotations"]["org.opencontainers.image.created"] release.instance_variable_set(:@tag, ["digest"]) # Annotations properties are optional, So getting a release date is not guaranteed. # https://specs.opencontainers.org/image-spec/annotations/#annotations release.instance_variable_set( :@released_at, released_at ? Time.parse(released_at) : nil ) release rescue StandardError => e Dependabot.logger.error( "Error while fetching metadata (Dev Container) " \ "for #{dependency.name}: #{e.}" ) release end |