45345 Commits

Author SHA1 Message Date
Sam Ford
473f448b22
OnSystem: handle non-macOS current_os values
The `OnSystem.os_condition_met?` method only handles Linux and macOS
values for the current OS, so this fails when testing with a generic
OS. This shortcoming is only being surfaced now because there weren't
any tests for `OnSystem` before.

This addresses the issue by accounting for macOS values (`:macos` or
a symbol from `MacOSVersion::SYMBOLS`) and returning `false` for any
other values (`:linux`, `:generic`, etc.).
2025-06-08 10:13:40 -04:00
Sam Ford
ccfc31bc18
MacOSRequirement: add more type signatures
This adds more type signatures to `MacOSRequirement` to move it closer
to `typed: strict`. There are a few areas that aren't quite clear to
me based on the code and existing tests, so I've done what I can at
the moment.
2025-06-08 10:13:40 -04:00
Sam Ford
8350b8a43a
MacOSRequirement: add #highest_allowed method
This adds a `#highest_allowed` method to `MacOSRequirement`, so we can
easily identify the highest supported macOS version that a requirement
allows, if any.

This can be used when producing a minimal set of supported macOS
versions that meet requirements in `UsesOnSystem.macos_requirements`.
One of the intended use cases for this is to identify which macOS
versions we could simulate to work with all variations of a cask that
uses macOS on_system blocks.
2025-06-08 10:13:40 -04:00
Sam Ford
01825acabd
UsesOnSystem: Collect macOS requirements
When determining macOS requirements for a cask, we may need to
reference requirements from related on_system blocks (e.g.,
`on_monterey :or_older`, `on_ventura`, `on_sonoma :or_newer`) when
`depends_on macos` isn't adequate.

Sometimes casks specify different `depends_on macos` values in macOS
on_system blocks but that value is only set when the cask is loaded
in an environment that satisfies the on_system block's requirements.
There are other casks that contain macOS on_system blocks and use
`depends_on macos` outside of the on_system blocks but it may only
use the macOS version of the lowest on_system block (e.g.,
`>= :monterey`), which isn't sufficient if the cask's values vary
based on macOS version.

To be able to simulate macOS versions that meet the requirements of
all the on_system blocks in a cask, we need to collect the macOS
requirements in a way that doesn't require OS simulation. This is also
something that's easy to do in on_system methods, so this adds a
`macos_requirements` array to `UsesOnSystem`, containing
`MacOSRequirement` objects created from the cask's macOS on_system
block conditions.
2025-06-08 00:57:22 -04:00
Sam Ford
3df8f70511
OnSystem: Add UsesOnSystem class
This adds a `UsesOnSystem` class to `OnSystem`, containing boolean
instance variables to indicate which types of on_system methods are
used in a formula or cask. This is intended as a replacement for
`@on_system_blocks_exist`, which doesn't allow us to determine what
kinds of on_system calls were used. This provides more granularity
but we can still use `@uses_on_system.present?` to determine whether
any on_system calls were used (and this doubles as a `nil` check in
`Formula`, as the `self.class` instance variable has to use a nilable
type).

The `UsesOnSystem` instance variables cover the current
`ARCH_OPTIONS` and `BASE_OS_OPTIONS`. At the moment, we mostly need
to tell whether there are macOS/Linux or Intel/ARM on_system calls,
so I've omitted instance variables for specific macOS version until
we have a need for them.

As a practical example, if you wanted to determine whether a cask
uses Linux on_system calls, you can call
`cask.uses_on_system.linux?`. The `linux` boolean will be `true` if
the cask has an `on_linux` block, an `on_system` block (which requires
Linux), or uses `os linux: ...`. This is something that would be
challenging to determine from outside of `OnSystem` but it's
relatively easy to collect the information in `OnSystem` methods and
make it available like this.
2025-06-07 17:58:12 -04:00
Sam Ford
bafa2ec126
OnSystem: add tests
`OnSystem` is exercised by other tests that include its modules but
this adds some baseline tests to ensure some of these methods work as
expected when tested in isolation. Between these added tests and
existing tests, we should have 100% coverage when run on Homebrew/brew
CI.
2025-06-06 15:09:35 -04:00
Sam Ford
2d603b0c26
OnSystem: enable strict typing 2025-06-06 15:09:35 -04:00
Rylan Polster
1f37a11b79
Merge pull request #20051 from Homebrew/internal-api-bare-minimum
Reduce the internal formula API to contain the bare minimum data
4.5.5
2025-06-06 16:45:40 +00:00
Mike McQuaid
fda164535e
Merge pull request #20059 from Homebrew/improve_caveats_completions
Improve completions (and elisp) output in caveats
2025-06-06 16:44:33 +00:00
Mike McQuaid
ff710f8191
Improve completions (and elisp) output in caveats
Instead of repeatedly outputting the same identical messages across
multiple packages and repeating them all for every package after they
were all installed: just output the identical messages in the final
caveats output instead.
2025-06-06 17:09:28 +01:00
Mike McQuaid
dd7b95439a
Merge pull request #20057 from Homebrew/cask_loader_error_handling
cask_loader: improve error handling.
2025-06-06 15:10:40 +00:00
Mike McQuaid
e7f667c198
cask_loader: improve error handling.
Handle weird edge cases where we try to read a cask from invalid paths.
2025-06-06 14:19:00 +01:00
Mike McQuaid
b23bc5e0fe
Merge pull request #20058 from Homebrew/dependabot/github_actions/github-actions-694872dfd1
build(deps): bump github/codeql-action from 3.28.18 to 3.28.19 in the github-actions group
2025-06-06 11:30:26 +00:00
dependabot[bot]
08e9a4365f
build(deps): bump github/codeql-action in the github-actions group
Bumps the github-actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).


Updates `github/codeql-action` from 3.28.18 to 3.28.19
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](ff0a06e83c...fca7ace96b)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-06 08:33:23 +00:00
Rylan Polster
73b64390b3
Use existing Utils::Bottles::Collector#specification_for method 2025-06-05 12:38:15 -04:00
Rylan Polster
e83dc1cb3c
Fallback to older bottle hashes when viable 2025-06-05 11:32:47 -04:00
Eric Knibbe
0c4672a323
Merge pull request #20055 from Homebrew/cop-cask-url-verified
rubocops/cask/url: put keyword parameters on a new line
2025-06-05 15:32:32 +00:00
Mike McQuaid
1d2f045ecf
Merge pull request #20047 from Homebrew/brew_sh_profiles
`brew (bundle|) sh`: use user's configuration but override prompts.
2025-06-05 14:54:56 +00:00
Eric Knibbe
c75122c694
rubocops/cask/url: put keyword parameters on a new line 2025-06-05 10:53:34 -04:00
Mike McQuaid
5fe43ed3f2
brew (bundle|) sh: use user's configuration but override prompts.
This was more painful that I expected but will allow `brew bundle sh`
and `brew sh` to use the user's configuration but use our custom prompt
for Bash and ZSH.
2025-06-05 15:43:34 +01:00
Mike McQuaid
485f1abbee
Merge pull request #20053 from Homebrew/skip_zero_values
bin/brew: don't copy across zeroed env values.
2025-06-05 07:43:17 +00:00
Mike McQuaid
916c25ef18
bin/brew: don't copy across zeroed env values. 2025-06-05 08:33:08 +01:00
Rylan Polster
e47bc2fb86
Use hashes of arrays instead 2025-06-05 03:15:44 -04:00
Rylan Polster
b44ec56267
Reduce the internal formula API to contain the bare minimum data 2025-06-05 02:08:29 -04:00
Rylan Polster
0b67caf718
Merge pull request #20046 from Homebrew/internal-api-switch
Add undocumented `HOMEBREW_USE_INTERNAL_API` switch
2025-06-04 20:40:05 +00:00
Rylan Polster
71c8174136
Add undocumented HOMEBREW_USE_INTERNAL_API switch 2025-06-04 16:29:43 -04:00
Rylan Polster
6f8d31d698
Merge pull request #20048 from Homebrew/update-expat-version
os/mac/pkgconfig/15: update `expat` version to 2.7.1
2025-06-04 20:13:05 +00:00
Rylan Polster
da624601bb
os/mac/pkgconfig/15: update expat version 2025-06-04 15:46:41 -04:00
Mike McQuaid
68ef29fb5c
Merge pull request #20045 from Homebrew/fix-sharded-api
Fix sharded API structure to match existing API
2025-06-04 07:58:26 +00:00
Mike McQuaid
e825ceea0a
Merge pull request #20041 from Homebrew/mcp_server
Add `brew mcp-server`: a MCP server for Homebrew.
2025-06-04 07:58:01 +00:00
Eric Knibbe
ab1c3ed5f8
Merge pull request #20044 from Homebrew/show-env-var-associations
parser: show related environment variable in switch description
2025-06-04 01:11:58 +00:00
Rylan Polster
fa45209f09
Fix sharded API structure to match existing API 2025-06-03 16:58:47 -04:00
Eric Knibbe
3dc9e88542
parser: show related env var in switch description 2025-06-03 13:57:42 -04:00
Rylan Polster
317110f6f4
Merge pull request #20042 from Homebrew/refactor-bottle-tag-handling
Refactor `OnSystem` and `SimulateSystem` bottle tag handling
2025-06-03 16:22:53 +00:00
Rylan Polster
c03f70f1dc
Refactor OnSystem and SimulateSystem bottle tag handling 2025-06-03 11:57:17 -04:00
Mike McQuaid
21e3621132
Merge pull request #20040 from Homebrew/brew_sh_tests
test/cmd: add more shell tests.
2025-06-03 14:33:47 +00:00
Mike McQuaid
76c4eb60ee
test/cmd: add more shell tests.
This should help ensure that these don't regress.
2025-06-03 15:24:19 +01:00
Mike McQuaid
f9471f9591
Add brew mcp-server: a MCP server for Homebrew.
Add a new `brew mcp-server` command for a Model Context Protocol (MCP)
server for Homebrew. This integrates with AI/LLM tools like Claude,
Claude Code and Cursor.

It currently supports the calls needed/used by the MCP Inspector and
Cursor (where I've tested it).

It provides as `tools` the subcommands output by `brew help` but should
be fairly straightforward to add more in future.

It is implemented in a slightly strange way (a standalone Ruby command
called from a shell command) as MCP servers need a faster startup time
than a normal Homebrew Ruby command allows and fail if they don't get
it.

There are a few Ruby libraries available but, given how relatively
simplistic the implementation is, it didn't feel worthwhile to use and
vendor them.
2025-06-03 15:22:33 +01:00
Mike McQuaid
89739ac615
Merge pull request #20039 from Homebrew/sync-shared-config
Synchronize shared configuration
2025-06-03 08:23:41 +00:00
Mike McQuaid
29ffef482c
Merge pull request #20038 from Homebrew/shard-json-api
Shard JSON API by OS/Arch combination
2025-06-03 08:22:10 +00:00
BrewTestBot
175eb65073
dependabot.yml: update to match main configuration 2025-06-03 08:05:26 +00:00
Rylan Polster
0f03757e8f
Shard JSON API by OS/Arch combination 2025-06-02 23:06:02 -04:00
Mike McQuaid
a0c89e4a7f
Merge pull request #20037 from Homebrew/move_sudo_reset_timestamp
brew.sh: move sudo reset timestamp.
2025-06-03 01:27:47 +00:00
Mike McQuaid
7c5affa824
brew.sh: move sudo reset timestamp.
Let's move this from `bin/brew` to make things like e.g. `brew --prefix`
or `brew shellenv` not reset the sudo timestamp.

This is still in a place that ensures that e.g. no untrusted formula or
tap code has been run yet so should have no security implications but
provide mild usability improvements.
2025-06-02 15:09:27 +01:00
Mike McQuaid
d914a72122
Merge pull request #20030 from Homebrew/rubocop-messages
audits: quote and reword problem description text
2025-06-02 08:02:20 +00:00
Eric Knibbe
cd6777fc73
audits: quote and reword problem description text 2025-05-30 23:49:26 -04:00
Bo Anderson
54c8b127ea
Merge pull request #20028 from Homebrew/sponsors-maintainers-man-completions
Update manpage and completions.
4.5.4
2025-05-31 02:23:19 +00:00
Mike McQuaid
bdbd80671a
Merge pull request #20026 from abitrolly/non-archive-fix
create: fix archive check if HTML starts with spaces
2025-05-30 16:49:09 +00:00
Mike McQuaid
e71b1473b8
formula_creator: tweak variable name 2025-05-30 14:55:50 +01:00
Mike McQuaid
8c6b3db1cd
Merge pull request #20029 from Homebrew/dependabot/github_actions/github-actions-4335f8aa65
build(deps): bump the github-actions group with 2 updates
2025-05-30 10:37:47 +00:00