Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add determine-cask-runners command #18594

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
351 changes: 351 additions & 0 deletions Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,351 @@
# typed: strict
# frozen_string_literal: true

require "abstract_command"
require "tap"
require "utils/github/api"
require "cli/parser"
require "system_command"

module Homebrew
module DevCmd
class GenerateCaskCiMatrix < AbstractCommand
MAX_JOBS = 256

# Weight for each arch must add up to 1.0.
INTEL_RUNNERS = T.let({
{ symbol: :ventura, name: "macos-13", arch: :intel } => 1.0,
}.freeze, T::Hash[T::Hash[Symbol, T.any(Symbol, String)], Float])
ARM_RUNNERS = T.let({
{ symbol: :sonoma, name: "macos-14", arch: :arm } => 0.0,
{ symbol: :sequoia, name: "macos-15", arch: :arm } => 1.0,
}.freeze, T::Hash[T::Hash[Symbol, T.any(Symbol, String)], Float])
RUNNERS = T.let(INTEL_RUNNERS.merge(ARM_RUNNERS).freeze,
T::Hash[T::Hash[Symbol, T.any(Symbol, String)], Float])

cmd_args do
description <<~EOS
Generate a GitHub Actions matrix for a given pull request URL or list of cask names.
For internal use in Homebrew taps.
EOS

switch "--url",
description: "Treat named argument as a pull request URL."
switch "--cask", "--casks",
description: "Treat all named arguments as cask tokens."
switch "--skip-install",
description: "Skip installing casks"
switch "--new",
description: "Run new cask checks"
switch "--syntax-only",
description: "Only run syntax checks"

conflicts "--url", "--cask"
conflicts "--syntax-only", "--skip-install"
conflicts "--syntax-only", "--new"

named_args [:cask, :url], min: 1
hide_from_man_page!
end

sig { params(args: T::Array[String]).void }
def initialize(*args)
super
repository = ENV.fetch("GITHUB_REPOSITORY", nil)
raise UsageError, "The GITHUB_REPOSITORY environment variable must be set." if repository.blank?

@tap = T.let(Tap.fetch(repository), Tap)
end

sig { override.void }
def run
skip_install = args.skip_install?
new_cask = args.new?
casks = args.named if args.casks?
pr_url = args.named if args.url?
syntax_only = args.syntax_only?
tap = @tap

puts "Generating matrix for #{casks}..."

raise UsageError, "This command must be run from inside a tap directory." if Dir.pwd.to_s != tap.path.to_s

labels = if pr_url

Check warning on line 73 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L73

Added line #L73 was not covered by tests
pr = GitHub::API.open_rest(pr_url)
pr.fetch("labels").map { |l| l.fetch("name") }

Check warning on line 75 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L75

Added line #L75 was not covered by tests
else
[]
end

runner = random_runner[:name]

Check warning on line 80 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L80

Added line #L80 was not covered by tests
syntax_job = {
name: "syntax",

Check warning on line 82 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L82

Added line #L82 was not covered by tests
tap: tap.name,
runner:,
}

matrix = [syntax_job]

Check warning on line 87 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L87

Added line #L87 was not covered by tests

if !syntax_only && !labels&.include?("ci-syntax-only")
cask_jobs = if casks&.any?
generate_matrix(tap, labels:, cask_names: casks, skip_install:, new_cask:)
else
generate_matrix(tap, labels:, skip_install:, new_cask:)
end

if cask_jobs.any?
# If casks were changed, skip `audit` for whole tap.
syntax_job[:skip_audit] = true

# The syntax job only runs `style` at this point, which should work on Linux.
# Running on macOS is currently faster though, since `homebrew/cask` and
# `homebrew/core` are already tapped on macOS CI machines.
# syntax_job[:runner] = "ubuntu-latest"
end

matrix += cask_jobs

Check warning on line 106 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L106

Added line #L106 was not covered by tests
end

syntax_job[:name] += " (#{syntax_job[:runner]})"

Check warning on line 109 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L109

Added line #L109 was not covered by tests

puts JSON.pretty_generate(matrix)
github_output = ENV.fetch("GITHUB_OUTPUT", nil)

Check warning on line 112 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L111-L112

Added lines #L111 - L112 were not covered by tests
return unless github_output

File.open(ENV.fetch("GITHUB_OUTPUT"), "a") do |f|
f.puts "matrix=#{JSON.generate(matrix)}"

Check warning on line 116 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L115-L116

Added lines #L115 - L116 were not covered by tests
end
end

sig { params(cask_content: String).returns(T::Hash[T::Hash[Symbol, T.any(Symbol, String)], Float]) }
def filter_runners(cask_content)
# Retrieve arguments from `depends_on macos:`
required_macos = case cask_content

Check warning on line 123 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L123

Added line #L123 was not covered by tests
when /depends_on\s+macos:\s+\[([^\]]+)\]/
T.must(Regexp.last_match(1)).scan(/\s*(?:"([=<>]=)\s+)?:([^\s",]+)"?,?\s*/).map do |match|
{
version: T.must(match[1]).to_sym,

Check warning on line 127 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L127

Added line #L127 was not covered by tests
comparator: match[0] || "==",
}
end
when /depends_on\s+macos:\s+"?:([^\s"]+)"?/ # e.g. `depends_on macos: :big_sur`
[
{
version: T.must(Regexp.last_match(1)).to_sym,

Check warning on line 134 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L134

Added line #L134 was not covered by tests
comparator: "==",
},
]
when /depends_on\s+macos:\s+"([=<>]=)\s+:([^\s"]+)"/ # e.g. `depends_on macos: ">= :monterey"`
[
{
version: T.must(Regexp.last_match(2)).to_sym,

Check warning on line 141 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L141

Added line #L141 was not covered by tests
comparator: Regexp.last_match(1),
},
]
when /depends_on\s+macos:/
# In this case, `depends_on macos:` is present but wasn't matched by the
# previous regexes. We want this to visibly fail so we can address the
# shortcoming instead of quietly defaulting to `RUNNERS`.
odie "Unhandled `depends_on macos` argument"
else
[]
end

filtered_runners = RUNNERS.select do |runner, _|
required_macos.any? do |r|
MacOSVersion.from_symbol(runner.fetch(:symbol).to_sym).compare(

Check warning on line 156 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L154-L156

Added lines #L154 - L156 were not covered by tests
r.fetch(:comparator),
MacOSVersion.from_symbol(r.fetch(:version).to_sym),
)
end
end
filtered_runners = RUNNERS.dup if filtered_runners.empty?

archs = architectures(cask_content:)
filtered_runners.select! do |runner, _|
archs.include?(runner.fetch(:arch))

Check warning on line 166 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L164-L166

Added lines #L164 - L166 were not covered by tests
end

RUNNERS

Check warning on line 169 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L169

Added line #L169 was not covered by tests
end

sig { params(cask_content: BasicObject).returns(T::Array[Symbol]) }
def architectures(cask_content:)
case cask_content

Check warning on line 174 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L174

Added line #L174 was not covered by tests
when /depends_on\s+arch:\s+:arm64/
[:arm]
when /depends_on\s+arch:\s+:x86_64/
[:intel]
when /\barch\b/, /\bon_(arm|intel)\b/
[:arm, :intel]
else
RUNNERS.keys.map { |r| r.fetch(:arch) }.uniq.sort
end
end

sig {
params(available_runners: T::Hash[T::Hash[Symbol, T.any(Symbol, String)],

Check warning on line 187 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L187

Added line #L187 was not covered by tests
Float]).returns(T::Hash[Symbol, T.any(Symbol, String)])
}
def random_runner(available_runners = ARM_RUNNERS)
T.must(available_runners.max_by { |(_, weight)| rand ** (1.0 / weight) })

Check warning on line 191 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L191

Added line #L191 was not covered by tests
.first
end

sig { params(cask_content: String).returns([T::Array[T::Hash[Symbol, T.any(Symbol, String)]], T::Boolean]) }
def runners(cask_content:)
filtered_runners = filter_runners(cask_content)

Check warning on line 197 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L197

Added line #L197 was not covered by tests

macos_version_found = cask_content.match?(/\bMacOS\s*\.version\b/m)
filtered_macos_found = filtered_runners.keys.any? do |runner|

Check warning on line 200 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L199-L200

Added lines #L199 - L200 were not covered by tests
(
macos_version_found &&

Check warning on line 202 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L202

Added line #L202 was not covered by tests
cask_content.include?(runner[:symbol].inspect)
) || cask_content.include?("on_#{runner[:symbol]}")
end

if filtered_macos_found

Check warning on line 207 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L207

Added line #L207 was not covered by tests
# If the cask varies on a MacOS version, test it on every possible macOS version.
[filtered_runners.keys, true]
else
# Otherwise, select a runner from each architecture based on weighted random sample.
grouped_runners = filtered_runners.group_by { |runner, _| runner.fetch(:arch) }
selected_runners = grouped_runners.map do |_, runners|
random_runner(runners.to_h)

Check warning on line 214 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L213-L214

Added lines #L213 - L214 were not covered by tests
end
[selected_runners, false]

Check warning on line 216 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L216

Added line #L216 was not covered by tests
end
end

sig {
params(tap: T.nilable(Tap), labels: T::Array[String], cask_names: T::Array[String], skip_install: T::Boolean,

Check warning on line 221 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L221

Added line #L221 was not covered by tests
new_cask: T::Boolean).returns(T::Array[T::Hash[Symbol,
T.any(String, T::Boolean, T::Array[String])]])
}
def generate_matrix(tap, labels: [], cask_names: [], skip_install: false, new_cask: false)
odie "This command must be run from inside a tap directory." unless tap

changed_files = find_changed_files

Check warning on line 228 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L228

Added line #L228 was not covered by tests

ruby_files_in_wrong_directory =
T.must(changed_files[:modified_ruby_files]) - (
T.must(changed_files[:modified_cask_files]) +

Check warning on line 232 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L231-L232

Added lines #L231 - L232 were not covered by tests
T.must(changed_files[:modified_command_files]) +
T.must(changed_files[:modified_github_actions_files])
)

if ruby_files_in_wrong_directory.any?
ruby_files_in_wrong_directory.each do |path|
puts "::error file=#{path}::File is in wrong directory."

Check warning on line 239 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L239

Added line #L239 was not covered by tests
end

odie "Found Ruby files in wrong directory:\n#{ruby_files_in_wrong_directory.join("\n")}"

Check warning on line 242 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L242

Added line #L242 was not covered by tests
end

cask_files_to_check = if cask_names.any?

Check warning on line 245 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L245

Added line #L245 was not covered by tests
cask_names.map do |cask_name|
Cask::CaskLoader.find_cask_in_tap(cask_name, tap).relative_path_from(tap.path)

Check warning on line 247 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L247

Added line #L247 was not covered by tests
end
else
T.must(changed_files[:modified_cask_files])
end

jobs = cask_files_to_check.count

Check warning on line 253 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L253

Added line #L253 was not covered by tests
odie "Maximum job matrix size exceeded: #{jobs}/#{MAX_JOBS}" if jobs > MAX_JOBS

cask_files_to_check.flat_map do |path|
cask_token = path.basename(".rb")

Check warning on line 257 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L256-L257

Added lines #L256 - L257 were not covered by tests

audit_args = ["--online"]

Check warning on line 259 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L259

Added line #L259 was not covered by tests
audit_args << "--new" if T.must(changed_files[:added_files]).include?(path) || new_cask

audit_args << "--signing"

Check warning on line 262 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L262

Added line #L262 was not covered by tests

audit_exceptions = []

Check warning on line 264 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L264

Added line #L264 was not covered by tests

audit_exceptions << %w[homepage_https_availability] if labels.include?("ci-skip-homepage")

if labels.include?("ci-skip-livecheck")
audit_exceptions << %w[hosting_with_livecheck livecheck_https_availability
livecheck_min_os livecheck_version]
end

audit_exceptions << "livecheck_min_os" if labels.include?("ci-skip-livecheck-min-os")

if labels.include?("ci-skip-repository")
audit_exceptions << %w[github_repository github_prerelease_version
gitlab_repository gitlab_prerelease_version
bitbucket_repository]
end

if labels.include?("ci-skip-token")
audit_exceptions << %w[token_conflicts token_valid
token_bad_words]
end

audit_args << "--except" << audit_exceptions.join(",") if audit_exceptions.any?

cask_content = path.read

Check warning on line 288 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L288

Added line #L288 was not covered by tests

runners, multi_os = runners(cask_content:)
runners.product(architectures(cask_content:)).filter_map do |runner, arch|
native_runner_arch = arch == runner.fetch(:arch)

Check warning on line 292 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L290-L292

Added lines #L290 - L292 were not covered by tests
# If it's just a single OS test then we can just use the two real arch runners.
next if !native_runner_arch && !multi_os

arch_args = native_runner_arch ? [] : ["--arch=#{arch}"]
{
name: "test #{cask_token} (#{runner.fetch(:name)}, #{arch})",

Check warning on line 298 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L298

Added line #L298 was not covered by tests
tap: tap.name,
cask: {
token: cask_token,
path: "./#{path}",
},
audit_args: audit_args + arch_args,
fetch_args: arch_args,
skip_install: labels.include?("ci-skip-install") || !native_runner_arch || skip_install,
runner: runner.fetch(:name),
}
end
end
end

sig { returns(T::Hash[Symbol, T::Array[String]]) }
def find_changed_files
tap = @tap

Check warning on line 315 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L315

Added line #L315 was not covered by tests

commit_range_start = Utils.safe_popen_read("git", "rev-parse", "origin").chomp
commit_range_end = Utils.safe_popen_read("git", "rev-parse", "HEAD").chomp
commit_range = "#{commit_range_start}...#{commit_range_end}"

Check warning on line 319 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L317-L319

Added lines #L317 - L319 were not covered by tests

modified_files = Utils.safe_popen_read("git", "diff", "--name-only", "--diff-filter=AMR", commit_range)

Check warning on line 321 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L321

Added line #L321 was not covered by tests
.split("\n")
.map do |path|
Pathname(path)

Check warning on line 324 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L324

Added line #L324 was not covered by tests
end

added_files = Utils.safe_popen_read("git", "diff", "--name-only", "--diff-filter=A", commit_range)

Check warning on line 327 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L327

Added line #L327 was not covered by tests
.split("\n")
.map do |path|
Pathname(path)

Check warning on line 330 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L330

Added line #L330 was not covered by tests
end

modified_ruby_files = modified_files.select { |path| path.extname == ".rb" }
modified_command_files = modified_files.select { |path| path.ascend.to_a.last.to_s == "cmd" }
modified_github_actions_files = modified_files.select do |path|
path.to_s.start_with?(".github/actions/")

Check warning on line 336 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L333-L336

Added lines #L333 - L336 were not covered by tests
end
modified_cask_files = modified_files.select { |path| tap.cask_file?(path.to_s) }

Check warning on line 338 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L338

Added line #L338 was not covered by tests

{
modified_files:,

Check warning on line 341 in Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/dev-cmd/generate-cask-ci-matrix.rb#L341

Added line #L341 was not covered by tests
added_files:,
modified_ruby_files:,
modified_command_files:,
modified_github_actions_files:,
modified_cask_files:,
}
end
end
end
end

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading