Class: Dependabot::Swift::Package::PackageDetailsFetcher

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/swift/package/package_details_fetcher.rb

Constant Summary collapse

RELEASES_URL =
"https://api.github.com/repos/"
APPLICATION_JSON =
"JSON"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, credentials:, git_commit_checker:) ⇒ PackageDetailsFetcher

Returns a new instance of PackageDetailsFetcher.



27
28
29
30
31
# File 'lib/dependabot/swift/package/package_details_fetcher.rb', line 27

def initialize(dependency:, credentials:, git_commit_checker:)
  @dependency = dependency
  @credentials = credentials
  @git_commit_checker = git_commit_checker
end

Instance Attribute Details

#credentialsObject (readonly)

Returns the value of attribute credentials.



37
38
39
# File 'lib/dependabot/swift/package/package_details_fetcher.rb', line 37

def credentials
  @credentials
end

#git_commit_checkerObject (readonly)

Returns the value of attribute git_commit_checker.



34
35
36
# File 'lib/dependabot/swift/package/package_details_fetcher.rb', line 34

def git_commit_checker
  @git_commit_checker
end

Instance Method Details

#fetch_tag_and_release_dateObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/dependabot/swift/package/package_details_fetcher.rb', line 40

def fetch_tag_and_release_date
  truncate_github_url = @dependency.name.gsub("github.com/", "")
  url = RELEASES_URL + "#{truncate_github_url}/releases"
  result_lines = T.let([], T::Array[GitTagWithDetail])
  # Fetch the releases from the GitHub 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)

  # Extract version names and release dates into a hash
  releases.map do |release|
    result_lines << GitTagWithDetail.new(
      tag: release["tag_name"],
      release_date: release["published_at"]
    )
  end

  # sort the result lines by tag in descending order
  result_lines = result_lines.sort_by(&:tag).reverse
  # Log the extracted details for debugging
  Dependabot.logger.info("Extracted release details: #{result_lines}")
  result_lines
end