Skip to content
Snippets Groups Projects
Commit 13d4f247 authored by Elizabeth Tackett's avatar Elizabeth Tackett
Browse files

focus util module on repology API call

parent 9a94bb25
No related branches found
No related tags found
No related merge requests found
require 'net/http'
require 'json'
module Utils
module RepologyParser
def call_api(url)
puts "- Calling API #{url}"
uri = URI(url)
response = Net::HTTP.get(uri)
puts "- Parsing response"
JSON.parse(response)
end
def query_repology_api(last_package_in_response = '')
url = 'https://repology.org/api/v1/projects/' + last_package_in_response + '?inrepo=homebrew&outdated=1'
self.call_api(url)
end
def parse_repology_api()
puts "\n-------- Query outdated packages from Repology --------"
page_no = 1
puts "\n- Paginating repology api page: #{page_no}"
outdated_packages = self.query_repology_api('')
last_pacakge_index = outdated_packages.size - 1
response_size = outdated_packages.size
while response_size > 1 do
page_no += 1
puts "\n- Paginating repology api page: #{page_no}"
last_package_in_response = outdated_packages.keys[last_pacakge_index]
response = self.query_repology_api("#{last_package_in_response}/")
response_size = response.size
outdated_packages.merge!(response)
last_pacakge_index = outdated_packages.size - 1
end
puts "\n- #{outdated_packages.size} outdated pacakges identified by repology"
outdated_packages
end
end
end
require 'net/http'
require 'json'
module Utils
class ApiParser
def call_api(url)
puts "- Calling API #{url}"
uri = URI(url)
response = Net::HTTP.get(uri)
puts "- Parsing response"
JSON.parse(response)
end
def query_repology_api(last_package_in_response = '')
url = 'https://repology.org/api/v1/projects/' + last_package_in_response + '?inrepo=homebrew&outdated=1'
self.call_api(url)
end
def parse_repology_api()
puts "\n-------- Query outdated packages from Repology --------"
page_no = 1
puts "\n- Paginating repology api page: #{page_no}"
outdated_packages = self.query_repology_api('')
last_pacakge_index = outdated_packages.size - 1
response_size = outdated_packages.size
while response_size > 1 do
page_no += 1
puts "\n- Paginating repology api page: #{page_no}"
last_package_in_response = outdated_packages.keys[last_pacakge_index]
response = self.query_repology_api("#{last_package_in_response}/")
response_size = response.size
outdated_packages.merge!(response)
last_pacakge_index = outdated_packages.size - 1
end
puts "\n- #{outdated_packages.size} outdated pacakges identified by repology"
outdated_packages
end
end
def query_homebrew
puts "\n-------- Get Homebrew Formulas --------"
self.call_api('https://formulae.brew.sh/api/formula.json')
end
def parse_homebrew_formulas()
formulas = self.query_homebrew()
parsed_homebrew_formulas = {}
formulas.each do |formula|
parsed_homebrew_formulas[formula['name']] = {
"fullname" => formula["full_name"],
"oldname" => formula["oldname"],
"version" => formula["versions"]['stable'],
"download_url" => formula["urls"]['stable']['url'],
}
end
parsed_homebrew_formulas
end
def validate_packages(outdated_repology_packages, brew_formulas)
puts "\n-------- Verify Outdated Repology packages as Homebrew Formulas --------"
packages = {}
outdated_repology_packages.each do |package_name, repo_using_package|
# Identify homebrew repo
repology_homebrew_repo = repo_using_package.select { |repo| repo['repo'] == 'homebrew' }[0]
next if repology_homebrew_repo.empty?
latest_version = nil
# Identify latest version amongst repos
repo_using_package.each do |repo|
latest_version = repo['version'] if repo['status'] == 'newest'
end
repology_homebrew_repo['latest_version'] = latest_version if latest_version
homebrew_package_details = brew_formulas[repology_homebrew_repo['srcname']]
# Format package
packages[repology_homebrew_repo['srcname']] = format_package(homebrew_package_details, repology_homebrew_repo)
end
packages
end
def format_package(homebrew_details, repology_details)
puts "- Formatting package: #{repology_details['srcname']}"
homebrew_formula = HomebrewFormula.new
new_download_url = homebrew_formula.generate_new_download_url(homebrew_details['download_url'], homebrew_details['version'], repology_details['latest_version'])
brew_commands = BrewCommands.new
livecheck_response = brew_commands.livecheck_check_formula(repology_details['srcname'])
has_open_pr = brew_commands.check_for_open_pr(repology_details['srcname'], new_download_url)
formatted_package = {
'fullname'=> homebrew_details['fullname'],
'repology_version' => repology_details['latest_version'],
'homebrew_version' => homebrew_details['version'],
'livecheck_latest_version' => livecheck_response['livecheck_latest_version'],
'current_download_url' => homebrew_details['download_url'],
'latest_download_url' => new_download_url,
'repology_latest_version' => repology_details['latest_version'],
'has_open_pr' => has_open_pr
}
formatted_package
end
def display_version_data(outdated_packages)
puts "==============Formatted outdated packages============\n"
outdated_packages.each do |package_name, package_details|
puts "\nFormula: #{package_name}"
puts "Current formula version: #{package_details['homebrew_version']}"
puts "Repology latest version: #{package_details['repology_version']}"
puts "Livecheck latest version: #{package_details['livecheck_latest_version']}"
puts "Open pull request: #{package_details['has_open_pr']}"
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment