diff --git a/lib/test_runner.rb b/lib/test_runner.rb index c4fa84a8..5c7e1d50 100644 --- a/lib/test_runner.rb +++ b/lib/test_runner.rb @@ -142,14 +142,14 @@ def build_tests(argument, tap:, git:, output_paths:, skip_setup:, args.deleted_formulae.nil? if no_formulae_flags && (no_only_args || args.only_formulae? || args.only_formulae_detect?) - tests[:formulae_detect] = Tests::PackagesDetect.new(argument, tap: tap, - git: git, + tests[:formulae_detect] = Tests::PackagesDetect.new(argument, tap:, + git:, dry_run: args.dry_run?, fail_fast: args.fail_fast?, verbose: args.verbose?) - elsif (no_only_args || args.only_casks_detect?) - tests[:casks_detect] = Tests::PackagesDetect.new(argument, tap: tap, - git: git, + elsif no_only_args || args.only_casks_detect? + tests[:casks_detect] = Tests::PackagesDetect.new(argument, tap:, + git:, dry_run: args.dry_run?, fail_fast: args.fail_fast?, verbose: args.verbose?) diff --git a/lib/tests/packages_detect.rb b/lib/tests/packages_detect.rb index 8ae8053c..a04bf3d7 100644 --- a/lib/tests/packages_detect.rb +++ b/lib/tests/packages_detect.rb @@ -3,7 +3,7 @@ module Homebrew module Tests class PackagesDetect < Test - attr_reader :testing_formulae, :added_formulae, :deleted_formulae, + attr_reader :testing_formulae, :added_formulae, :deleted_formulae, :testing_casks, :added_casks, :deleted_casks def initialize(argument, tap:, git:, dry_run:, fail_fast:, verbose:) @@ -60,6 +60,15 @@ def detect_packages!(args:) end @testing_formulae = [canonical_formula_name] + @testing_casks = [] + elsif (canonical_cask_name = safe_cask_canonical_name(@argument, args:)) + unless canonical_cask_name.include?("/") + ENV["HOMEBREW_NO_INSTALL_FROM_API"] = "1" + CoreTap.ensure_installed! + end + + @testing_casks = [canonical_cask_name] + @testing_formulae = [] else raise UsageError, "#{@argument} is not detected from GitHub Actions or a formula name!" @@ -139,20 +148,14 @@ def detect_packages!(args:) if tap && diff_start_sha1 != diff_end_sha1 formula_path = tap.formula_dir.to_s - @added_formulae += - diff_packages(diff_start_sha1, diff_end_sha1, formula_path, "A") - modified_formulae += - diff_packages(diff_start_sha1, diff_end_sha1, formula_path, "M") - @deleted_formulae += - diff_packages(diff_start_sha1, diff_end_sha1, formula_path, "D") + @added_formulae += diff_packages(diff_start_sha1, diff_end_sha1, formula_path, "A") + modified_formulae += diff_packages(diff_start_sha1, diff_end_sha1, formula_path, "M") + @deleted_formulae += diff_packages(diff_start_sha1, diff_end_sha1, formula_path, "D") cask_path = tap.cask_dir.to_s - @added_casks += @added_formulae + - diff_packages(diff_start_sha1, diff_end_sha1, cask_path, "A") - modified_casks += modified_formulae + - diff_packages(diff_start_sha1, diff_end_sha1, cask_path, "M") - @deleted_casks += @deleted_formulae + - diff_packages(diff_start_sha1, diff_end_sha1, cask_path, "D") + @added_casks += diff_packages(diff_start_sha1, diff_end_sha1, cask_path, "A") + modified_casks += diff_packages(diff_start_sha1, diff_end_sha1, cask_path, "M") + @deleted_casks += diff_packages(diff_start_sha1, diff_end_sha1, cask_path, "D") end # If a package is both added and deleted: it's actually modified. @@ -169,7 +172,6 @@ def detect_packages!(args:) if args.test_default_formula? # Build the default test formula. modified_formulae << "homebrew/test-bot/testbottest" - modified_casks << "homebrew/test-bot/testbottest" end @testing_formulae += @added_formulae + modified_formulae @@ -189,6 +191,7 @@ def detect_packages!(args:) @added_formulae.uniq! modified_formulae.uniq! @deleted_formulae.uniq! + @testing_casks.uniq! @added_casks.uniq! modified_casks.uniq! @@ -214,19 +217,24 @@ def detect_packages!(args:) end end - puts <<-EOS - - testing_formulae #{@testing_formulae.join(" ").presence || "(none)"} - added_formulae #{@added_formulae.join(" ").presence || "(none)"} - modified_formulae #{modified_formulae.join(" ").presence || "(none)"} - deleted_formulae #{@deleted_formulae.join(" ").presence || "(none)"} - formulae_to_fetch #{@formulae_to_fetch.join(" ").presence || "(none)"} + if args.only_casks_detect? + puts <<-EOS - testing_casks #{@testing_casks.join(" ").presence || "(none)"} - added_casks #{@added_casks.join(" ").presence || "(none)"} - modified_casks #{modified_casks.join(" ").presence || "(none)"} - deleted_casks #{@deleted_casks.join(" ").presence || "(none)"} - EOS + testing_casks #{@testing_casks.join(" ").presence || "(none)"} + added_casks #{@added_casks.join(" ").presence || "(none)"} + modified_casks #{modified_casks.join(" ").presence || "(none)"} + deleted_casks #{@deleted_casks.join(" ").presence || "(none)"} + EOS + else + puts <<-EOS + + testing_formulae #{@testing_formulae.join(" ").presence || "(none)"} + added_formulae #{@added_formulae.join(" ").presence || "(none)"} + modified_formulae #{modified_formulae.join(" ").presence || "(none)"} + deleted_formulae #{@deleted_formulae.join(" ").presence || "(none)"} + formulae_to_fetch #{@formulae_to_fetch.join(" ").presence || "(none)"} + EOS + end end def safe_formula_canonical_name(formula_name, args:) @@ -246,6 +254,22 @@ def safe_formula_canonical_name(formula_name, args:) puts e.backtrace if args.debug? end + def safe_cask_canonical_name(cask_name, args:) + Homebrew.with_no_api_env do + CaskLoader.load(cask_name).full_name + end + rescue TapCaskUnavailableError => e + raise if e.tap.installed? + + test "brew", "tap", e.tap.name + retry unless steps.last.failed? + onoe e + puts e.backtrace if args.debug? + rescue CaskUnavailableError, TapCaskAmbiguityError => e + onoe e + puts e.backtrace if args.debug? + end + def rev_parse(ref) Utils.popen_read(git, "-C", repository, "rev-parse", "--verify", ref).strip end @@ -264,14 +288,11 @@ def diff_packages(start_revision, end_revision, path, filter) ).lines.filter_map do |line| file = Pathname.new line.chomp - name = nil if tap.formula_file?(file) - name = tap.formula_file_to_name(file) + tap.formula_file_to_name(file) elsif tap.cask_file?(file) - name = file.basename(".rb").to_s + file.basename(".rb").to_s end - - name end.compact end end