Calls to `opoo` and `onoe` produce duplicate `Warning:` and `Error:`
messages in CI logs because we print something to stdout and print an
annotation. Annotations also produce `Error:` and `Warning:` lines in
the log.
Let's fix this by skipping printing the message if we've already printed
an annotation.
Some formulae include these files, and they can't always be removed.
However, they can cause spurious linkage failures, so let's skip them
when checking for linkage. See, for example, faust at
Homebrew/homebrew-core#191308.
Seen in:
https://github.com/Homebrew/homebrew-core/pull/191090#issuecomment-2363215204
There's a missing signature issue here due to the `generic_*` aliasing
we're doing. With prepend, though: this is no longer needed and we can
use `super` instead which is more idiomatic and nicer overall.
This pattern should probably be applied in other places but: let's try
this targetting fix for here first.
- only use annotations for `opoo` and `onoe` if
`HOMEBREW_GITHUB_ACTIONS` is set. This will make using `brew` less
noisy in GitHub Actions for third parties. See
Homebrew/discussions#5602.
- if we've already called `puts_annotation_if_env_set`, then we no
longer need to print the message to `$stderr`. The message from the
annotation already show up in the GitHub Actions log, so printing to
`$stderr` just leads to duplicate messages in the log.
While we're here, let's make sure to forward the `file:` and `line:`
kwargs of `puts_annotation_if_env_set` to the `Annotation` constructor.
- Avoid near duplicate messages
- Provide correct CLT download instructions
Before:
```
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
Warning: Your Command Line Tools are too outdated.
Update them from Software Update in System Settings.
If that doesn't show you any updates, run:
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
Alternatively, manually download them from:
https://developer.apple.com/download/all/.
You should download the Command Line Tools for Xcode 16.0.
Warning: A newer Command Line Tools release is available.
Update them from Software Update in System Settings.
If that doesn't show you any updates, run:
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
Alternatively, manually download them from:
https://developer.apple.com/download/all/.
You should download the Command Line Tools for Xcode 16.0.
Warning: Your Xcode (15.4) at /Applications/Xcode.app is too outdated.
Please update to Xcode 16.0 (or delete it).
Xcode can be updated from:
https://developer.apple.com/download/all/
Warning: Your Xcode (15.4) is outdated.
Please update to Xcode 16.0 (or delete it).
Xcode can be updated from:
https://developer.apple.com/download/all/
If 16.0 is installed, you may need to:
sudo xcode-select --switch /Applications/Xcode.app
Current developer directory is:
/Applications/Xcode.app/Contents/Developer
```
After:
```console
$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!
Warning: Your Command Line Tools are too outdated.
Install the Command Line Tools for Xcode 16 from:
https://developer.apple.com/download/all/
Warning: Your Xcode (15.4) at /Applications/Xcode.app is too outdated.
Please update to Xcode 16.0 (or delete it).
Xcode can be updated from:
https://developer.apple.com/download/all/
```