homebrew-cask/developer/bin/find-appcast

84 lines
2.0 KiB
Ruby
Executable File

#!/usr/bin/env ruby
require 'open3'
require 'pathname'
require 'yaml'
require 'net/http'
require 'uri'
def verify_appcast(appcast_type, *urls)
print "Looking for #{appcast_type} appcast… "
urls.each do |url|
next unless url_exist?(url)
puts 'Found!'
puts " #{url}"
return true
end
puts 'Not found.'
false
end
def url_exist?(url)
return false unless url
system('curl', '--silent', '--location', '--fail', url, out: File::NULL)
end
def find_sparkle(app)
plist = app.join('Contents/Info.plist')
url = Open3.capture3('defaults', 'read', plist.to_path, 'SUFeedURL').first.strip
verify_appcast('Sparkle', url)
end
def find_electron_builder(app)
appcast_file = app.join('Contents/Resources/app-update.yml')
unless appcast_file.exist?
verify_appcast('electron-builder', false)
return false
end
data = YAML.load_file(appcast_file)
bucket = data['bucket']
channel = data['channel']
name = data['name']
owner = data['owner']
path = data['path'].sub(%r{^/(.*)/$}, '\1') rescue nil
region = data['region']
repo = data['repo']
url = data['url']
possible_appcasts = [
"#{url}/latest-mac.yml",
"https://github.com/#{owner}/#{repo}/releases.atom",
"https://#{bucket}.s3.amazon-aws.yml/#{channel}/latest-mac.yml",
"https://#{bucket}.s3.amazonaws.com/latest-mac.yml",
"https://#{bucket}.s3.amazonaws.com/#{path}/latest-mac.yml",
"https://s3-#{region}.amazonaws.com/#{bucket}/#{path}/latest-mac.yml",
"https://s3.amazonaws.com/#{bucket}/#{path}/latest-mac.yml",
"https://#{name}.#{region}.digitaloceanspaces.com/latest-mac.yml"
]
unless verify_appcast('electron-builder', *possible_appcasts)
warn <<~MESSAGE
An "app-update.yml" file was found, but we could not parse it.
Please report this on https://github.com/Homebrew/homebrew-cask/
Provide this info:
MESSAGE
puts appcast_file.read
end
end
App = Pathname(ARGV[0])
find_sparkle(App)
find_electron_builder(App)