diff --git a/Library/Homebrew/cask/audit.rb b/Library/Homebrew/cask/audit.rb index 840cfff921..6b0e4e1858 100644 --- a/Library/Homebrew/cask/audit.rb +++ b/Library/Homebrew/cask/audit.rb @@ -545,6 +545,37 @@ module Cask false end + def check_livecheck_min_os + return unless cask.livecheckable? + return unless cask.livecheck.strategy == :sparkle + + out, _, status = curl_output(cask.livecheck.url) + return unless status.success? + + require "rexml/document" + + xml = begin + REXML::Document.new(out) + rescue + nil + end + + return if xml.blank? + + item = xml.get_elements("//rss//channel//item").first + return if item.blank? + + min_os = item.elements["sparkle:minimumSystemVersion"].text + return if min_os.blank? + + min_os_string = OS::Mac::Version.new(min_os).strip_patch + cask_min_os = cask.depends_on.macos.version + + return if cask_min_os == min_os_string + + add_error "Upstream defined #{min_os_string} as minimal OS version and the cask defined #{cask_min_os}" + end + sig { void } def check_appcast_contains_version return unless appcast?