diff --git a/Library/Homebrew/bottle_specification.rb b/Library/Homebrew/bottle_specification.rb index 1984a3c64e..eab4311ac2 100644 --- a/Library/Homebrew/bottle_specification.rb +++ b/Library/Homebrew/bottle_specification.rb @@ -118,11 +118,12 @@ class BottleSpecification tags = collector.tags.sort_by do |tag| version = tag.to_macos_version # Give `arm64` bottles a higher priority so they are first. - priority = (tag.arch == :arm64) ? 2 : 1 + priority = (tag.arch == :arm64) ? 3 : 2 "#{priority}.#{version}_#{tag}" rescue MacOSVersion::Error - # Sort non-macOS tags below macOS tags. - "0.#{tag}" + # Sort non-macOS tags below macOS tags, and arm64 tags before other tags. + priority = (tag.arch == :arm64) ? 1 : 0 + "#{priority}.#{tag}" end tags.reverse.map do |tag| spec = collector.specification_for(tag) diff --git a/Library/Homebrew/rubocops/bottle.rb b/Library/Homebrew/rubocops/bottle.rb index e6de4adc11..866decd520 100644 --- a/Library/Homebrew/rubocops/bottle.rb +++ b/Library/Homebrew/rubocops/bottle.rb @@ -149,26 +149,35 @@ module RuboCop end end - arm64_nodes = [] - intel_nodes = [] + arm64_macos_nodes = [] + intel_macos_nodes = [] + arm64_linux_nodes = [] + intel_linux_nodes = [] sha256_nodes.each do |node| version = sha256_bottle_tag node - if version.to_s.start_with? "arm64" - arm64_nodes << node + if version == :arm64_linux + arm64_linux_nodes << node + elsif version.to_s.start_with?("arm64") + arm64_macos_nodes << node + elsif version.to_s.end_with?("_linux") + intel_linux_nodes << node else - intel_nodes << node + intel_macos_nodes << node end end - return if sha256_order(sha256_nodes) == sha256_order(arm64_nodes + intel_nodes) + sorted_nodes = arm64_macos_nodes + intel_macos_nodes + arm64_linux_nodes + intel_linux_nodes + return if sha256_order(sha256_nodes) == sha256_order(sorted_nodes) offending_node(bottle_node) problem "ARM bottles should be listed before Intel bottles" do |corrector| lines = ["bottle do"] lines += non_sha256_nodes.map { |node| " #{node.source}" } - lines += arm64_nodes.map { |node| " #{node.source}" } - lines += intel_nodes.map { |node| " #{node.source}" } + lines += arm64_macos_nodes.map { |node| " #{node.source}" } + lines += intel_macos_nodes.map { |node| " #{node.source}" } + lines += arm64_linux_nodes.map { |node| " #{node.source}" } + lines += intel_linux_nodes.map { |node| " #{node.source}" } lines << " end" corrector.replace(bottle_node.source_range, lines.join("\n")) end