Merge pull request #17255 from Homebrew/github_actions_opoo_odie
extend/kernel: make `opoo`/`odie`/etc. print GitHub Actions notes.
This commit is contained in:
commit
7433205ddc
@ -136,10 +136,9 @@ on_request: true)
|
||||
|
||||
case deprecate_disable_type
|
||||
when :deprecated
|
||||
puts "::warning::#{message_full}" if ENV["GITHUB_ACTIONS"]
|
||||
opoo message_full
|
||||
when :disabled
|
||||
puts "::error::#{message_full}" if ENV["GITHUB_ACTIONS"]
|
||||
GitHub::Actions.puts_annotation_if_env_set(:error, message)
|
||||
raise CaskCannotBeInstalledError.new(@cask, message)
|
||||
end
|
||||
end
|
||||
|
||||
@ -308,7 +308,7 @@ module Homebrew
|
||||
ofail "#{errors_summary}."
|
||||
end
|
||||
|
||||
return unless ENV["GITHUB_ACTIONS"]
|
||||
return unless GitHub::Actions.env_set?
|
||||
|
||||
annotations = formula_problems.merge(cask_problems).flat_map do |(_, path), problems|
|
||||
problems.map do |problem|
|
||||
|
||||
@ -170,7 +170,7 @@ module Homebrew
|
||||
safe_system HOMEBREW_BREW_FILE, *upload_args
|
||||
end
|
||||
ensure
|
||||
if args.retain_bottle_dir? && ENV["GITHUB_ACTIONS"]
|
||||
if args.retain_bottle_dir? && GitHub::Actions.env_set?
|
||||
ohai "Bottle files retained at:", dir
|
||||
File.open(ENV.fetch("GITHUB_OUTPUT"), "a") do |f|
|
||||
f.puts "bottle_path=#{dir}"
|
||||
|
||||
@ -925,7 +925,7 @@ module Homebrew
|
||||
|
||||
def check_cask_staging_location
|
||||
# Skip this check when running CI since the staging path is not writable for security reasons
|
||||
return if ENV["GITHUB_ACTIONS"]
|
||||
return if GitHub::Actions.env_set?
|
||||
|
||||
path = Cask::Caskroom.path
|
||||
|
||||
|
||||
@ -64,6 +64,7 @@ module Kernel
|
||||
def opoo(message)
|
||||
Tty.with($stderr) do |stderr|
|
||||
stderr.puts Formatter.warning(message, label: "Warning")
|
||||
GitHub::Actions.puts_annotation_if_env_set(:warning, message)
|
||||
end
|
||||
end
|
||||
|
||||
@ -73,6 +74,7 @@ module Kernel
|
||||
def onoe(message)
|
||||
Tty.with($stderr) do |stderr|
|
||||
stderr.puts Formatter.error(message, label: "Error")
|
||||
GitHub::Actions.puts_annotation_if_env_set(:error, message)
|
||||
end
|
||||
end
|
||||
|
||||
@ -146,11 +148,14 @@ module Kernel
|
||||
next unless (match = line.match(HOMEBREW_TAP_PATH_REGEX))
|
||||
|
||||
tap = Tap.fetch(match[:user], match[:repo])
|
||||
tap_message = +"\nPlease report this issue to the #{tap} tap (not Homebrew/brew or Homebrew/homebrew-core)"
|
||||
tap_message = +"\nPlease report this issue to the #{tap.full_name} tap"
|
||||
tap_message += " (not Homebrew/brew or Homebrew/homebrew-core)" unless tap.official?
|
||||
tap_message += ", or even better, submit a PR to fix it" if replacement
|
||||
tap_message << ":\n #{line.sub(/^(.*:\d+):.*$/, '\1')}\n\n"
|
||||
break
|
||||
end
|
||||
file, line, = backtrace.first.split(":")
|
||||
line = line.to_i if line.present?
|
||||
|
||||
message = +"Calling #{method} is #{verb}! #{replacement_message}"
|
||||
message << tap_message if tap_message
|
||||
@ -158,12 +163,13 @@ module Kernel
|
||||
|
||||
disable = true if disable_for_developers && Homebrew::EnvConfig.developer?
|
||||
if disable || Homebrew.raise_deprecation_exceptions?
|
||||
puts "::error::#{message}" if ENV["GITHUB_ACTIONS"]
|
||||
puts GitHub::Actions::Annotation.new(:error, message, file:, line:) if GitHub::Actions.env_set?
|
||||
GitHub::Actions.puts_annotation_if_env_set(:error, message, file:, line:)
|
||||
exception = MethodDeprecatedError.new(message)
|
||||
exception.set_backtrace(backtrace)
|
||||
raise exception
|
||||
elsif !Homebrew.auditing?
|
||||
puts "::warning::#{message}" if ENV["GITHUB_ACTIONS"]
|
||||
GitHub::Actions.puts_annotation_if_env_set(:warning, message, file:, line:)
|
||||
opoo message
|
||||
end
|
||||
end
|
||||
|
||||
@ -134,7 +134,7 @@ module Homebrew
|
||||
# `brew test-bot` runs `brew doctor` in the CI for the Homebrew/brew
|
||||
# repository. This only needs to support whatever CI providers
|
||||
# Homebrew/brew is currently using.
|
||||
return if ENV["GITHUB_ACTIONS"]
|
||||
return if GitHub::Actions.env_set?
|
||||
|
||||
# With fake El Capitan for Portable Ruby, we are intentionally not using Xcode 8.
|
||||
# This is because we are not using the CLT and Xcode 8 has the 10.12 SDK.
|
||||
@ -165,7 +165,7 @@ module Homebrew
|
||||
# `brew test-bot` runs `brew doctor` in the CI for the Homebrew/brew
|
||||
# repository. This only needs to support whatever CI providers
|
||||
# Homebrew/brew is currently using.
|
||||
return if ENV["GITHUB_ACTIONS"]
|
||||
return if GitHub::Actions.env_set?
|
||||
|
||||
<<~EOS
|
||||
A newer Command Line Tools release is available.
|
||||
|
||||
@ -206,10 +206,9 @@ class FormulaInstaller
|
||||
|
||||
case deprecate_disable_type
|
||||
when :deprecated
|
||||
puts "::warning::#{message}" if ENV["GITHUB_ACTIONS"]
|
||||
opoo message
|
||||
when :disabled
|
||||
puts "::error::#{message}" if ENV["GITHUB_ACTIONS"]
|
||||
GitHub::Actions.puts_annotation_if_env_set(:error, message)
|
||||
raise CannotInstallFormulaError, message
|
||||
end
|
||||
end
|
||||
@ -505,7 +504,8 @@ on_request: installed_on_request?, options:)
|
||||
|
||||
raise if Homebrew::EnvConfig.developer?
|
||||
|
||||
$stderr.puts "Please report this issue to the #{formula.tap} tap (not Homebrew/brew or Homebrew/homebrew-core)!"
|
||||
$stderr.puts "Please report this issue to the #{formula.tap&.full_name} tap".squeeze(" ")
|
||||
$stderr.puts " (not Homebrew/brew or Homebrew/homebrew-core)!" unless formula.core_formula?
|
||||
false
|
||||
else
|
||||
f.linked_keg.exist? && f.opt_prefix.exist?
|
||||
|
||||
@ -15,7 +15,7 @@ module Homebrew
|
||||
def self.check_style_and_print(files, **options)
|
||||
success = check_style_impl(files, :print, **options)
|
||||
|
||||
if ENV["GITHUB_ACTIONS"] && !success
|
||||
if GitHub::Actions.env_set? && !success
|
||||
check_style_json(files, **options).each do |path, offenses|
|
||||
offenses.each do |o|
|
||||
line = o.location.line
|
||||
|
||||
@ -230,12 +230,12 @@ RSpec.describe Kernel do
|
||||
expect do
|
||||
odeprecated(
|
||||
"method", "replacement",
|
||||
caller: ["#{HOMEBREW_LIBRARY}/Taps/homebrew/homebrew-core/"],
|
||||
caller: ["#{HOMEBREW_LIBRARY}/Taps/playbrew/homebrew-play/"],
|
||||
disable: true
|
||||
)
|
||||
end.to raise_error(
|
||||
MethodDeprecatedError,
|
||||
%r{method.*replacement.*homebrew/core.*/Taps/homebrew/homebrew-core/}m,
|
||||
%r{method.*replacement.*playbrew/homebrew-play.*/Taps/playbrew/homebrew-play/}m,
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
@ -35,6 +35,25 @@ module GitHub
|
||||
EOS
|
||||
end
|
||||
|
||||
sig { returns(T::Boolean) }
|
||||
def self.env_set?
|
||||
ENV.fetch("GITHUB_ACTIONS", false).present?
|
||||
end
|
||||
|
||||
sig {
|
||||
params(
|
||||
type: Symbol, message: String,
|
||||
file: T.nilable(T.any(String, Pathname)),
|
||||
line: T.nilable(Integer)
|
||||
).void
|
||||
}
|
||||
def self.puts_annotation_if_env_set(type, message, file: nil, line: nil)
|
||||
# Don't print annotations during tests, too messy to handle these.
|
||||
return if ENV.fetch("HOMEBREW_TESTS", false)
|
||||
|
||||
puts Annotation.new(type, message) if env_set?
|
||||
end
|
||||
|
||||
# Helper class for formatting annotations on GitHub Actions.
|
||||
class Annotation
|
||||
ANNOTATION_TYPES = [:notice, :warning, :error].freeze
|
||||
@ -52,7 +71,7 @@ module GitHub
|
||||
params(
|
||||
type: Symbol,
|
||||
message: String,
|
||||
file: T.any(String, Pathname),
|
||||
file: T.nilable(T.any(String, Pathname)),
|
||||
title: T.nilable(String),
|
||||
line: T.nilable(Integer),
|
||||
end_line: T.nilable(Integer),
|
||||
@ -60,12 +79,12 @@ module GitHub
|
||||
end_column: T.nilable(Integer),
|
||||
).void
|
||||
}
|
||||
def initialize(type, message, file:, title: nil, line: nil, end_line: nil, column: nil, end_column: nil)
|
||||
def initialize(type, message, file: nil, title: nil, line: nil, end_line: nil, column: nil, end_column: nil)
|
||||
raise ArgumentError, "Unsupported type: #{type.inspect}" if ANNOTATION_TYPES.exclude?(type)
|
||||
|
||||
@type = type
|
||||
@message = Tty.strip_ansi(message)
|
||||
@file = self.class.path_relative_to_workspace(file)
|
||||
@file = self.class.path_relative_to_workspace(file) if file.present?
|
||||
@title = Tty.strip_ansi(title) if title
|
||||
@line = Integer(line) if line
|
||||
@end_line = Integer(end_line) if end_line
|
||||
@ -76,6 +95,7 @@ module GitHub
|
||||
sig { returns(String) }
|
||||
def to_s
|
||||
metadata = @type.to_s
|
||||
if @file
|
||||
metadata << " file=#{Actions.escape(@file.to_s)}"
|
||||
|
||||
if @line
|
||||
@ -87,6 +107,7 @@ module GitHub
|
||||
metadata << ",endColumn=#{@end_column}" if @end_column
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
metadata << ",title=#{Actions.escape(@title)}" if @title
|
||||
|
||||
@ -97,6 +118,8 @@ module GitHub
|
||||
# the `GITHUB_WORKSPACE` directory or if no `file` is specified.
|
||||
sig { returns(T::Boolean) }
|
||||
def relevant?
|
||||
return true if @file.blank?
|
||||
|
||||
@file.descend.next.to_s != ".."
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user