Compare commits

..

19 Commits

Author SHA1 Message Date
Michael Cho
b9297dcdfc
Migrate Linux CI to GCC 12 2025-09-14 21:12:55 -04:00
Patrick Linnane
6c44d1a8f1
Merge pull request #20681 from Homebrew/support-tahoe-drop-mojave
Support Tahoe, drop Mojave and older
2025-09-14 19:55:06 +00:00
Ruoyu Zhong
5f1241b953
Merge pull request #20685 from Homebrew/tahoe-runner
github_runner_matrix: deploy Tahoe runner in CI
2025-09-14 08:29:06 +00:00
Patrick Linnane
6cb3473e9e
Merge pull request #20686 from branchvincent/github-typecheck
utils/github: fix type error for `pull_request`
2025-09-13 19:44:05 +00:00
Branch Vincent
263ca54e7a
utils/github: fix type error for pull_request 2025-09-13 10:59:28 -07:00
Ruoyu Zhong
41198d866f
Merge pull request #20684 from Homebrew/update-report-desc
cmd/update-report: fix formula description display
2025-09-13 16:06:18 +00:00
Mike McQuaid
8304edbf2c
Merge pull request #20675 from Homebrew/shellenv_echo_path_helper
cmd/shellenv: echo path helper command rather than run it.
2025-09-13 15:56:32 +00:00
Ruoyu Zhong
96048f0a5a
cmd/update-report: fix cask desc display too 2025-09-13 23:48:15 +08:00
Ruoyu Zhong
a9cc3c49f5
github_runner_matrix: deploy Tahoe runner in CI 2025-09-13 23:28:41 +08:00
Ruoyu Zhong
c834a862ab
cmd/update-report: fix formula description display
When on a non-default branch (for e.g., testing), `Formula[formula]` can
return an error. In that case let's silently ignore it.
2025-09-13 23:27:25 +08:00
Carlo Cabrera
57578cf91a
Fix path_helper usage
The output of `path_helper` needs to be `eval`ed for it to work.
2025-09-13 13:32:16 +08:00
Mike McQuaid
47b7bf378e
Merge pull request #20682 from Homebrew/libstdcxx
Check host libstdc++ for brew `gcc` dependency
2025-09-12 19:14:54 +00:00
Mike McQuaid
d7c0052e78
Merge pull request #20680 from Homebrew/optlink-when-cask-installed
formula_installer: optlink even with cask installed
2025-09-12 19:14:22 +00:00
Patrick Linnane
f1aa78993c
workflows/pkg-installer: drop Ventura runner
Signed-off-by: Patrick Linnane <patrick@linnane.io>
2025-09-12 10:44:00 -07:00
Patrick Linnane
e63c885033
Support Tahoe, drop Mojave and older
Signed-off-by: Patrick Linnane <patrick@linnane.io>
2025-09-12 10:40:19 -07:00
Patrick Linnane
d3e7e6bde5
Merge pull request #20679 from Homebrew/docs-archive-formats
docs: clarify listed archive formats aren't exclusive
2025-09-12 16:45:19 +00:00
Michael Cho
c35fe04c91
formula_installer: optlink even with cask installed 2025-09-12 12:24:14 -04:00
Patrick Linnane
8567e8bcd3
docs: clarify listed archive formats aren't exclusive
Signed-off-by: Patrick Linnane <patrick@linnane.io>
2025-09-12 09:15:47 -07:00
Mike McQuaid
00a49bf8e1
cmd/shellenv: echo path helper command rather than run it.
This is faster at both execution and `eval`ing than the existing version
and aids caching.
2025-09-12 08:30:12 +01:00
19 changed files with 46 additions and 96 deletions

View File

@ -32,7 +32,7 @@ jobs:
TEMPORARY_CERTIFICATE_FILE: 'homebrew_developer_id_installer_certificate.p12'
TEMPORARY_KEYCHAIN_FILE: 'homebrew_installer_signing.keychain-db'
# Set to the oldest supported version of macOS
HOMEBREW_MACOS_OLDEST_SUPPORTED: '13.0'
HOMEBREW_MACOS_OLDEST_SUPPORTED: '14.0'
permissions:
contents: read # for code access
attestations: write # for actions/attest-build-provenance
@ -152,10 +152,6 @@ jobs:
fail-fast: false
matrix:
include:
# Intel
- runner: macos-13
name: macos-13-x86_64
# Apple Silicon
- runner: macos-14
name: macos-14-arm64
- runner: macos-15

View File

@ -576,18 +576,19 @@ esac
# - docs/Installation.md
# - https://github.com/Homebrew/install/blob/HEAD/install.sh
# - Library/Homebrew/os/mac.rb (latest_sdk_version)
# - Library/Homebrew/os/mac/xcode.rb (latest_version), (minimum_version)
# and, if needed:
# - MacOSVersion::SYMBOLS
HOMEBREW_MACOS_NEWEST_UNSUPPORTED="16"
HOMEBREW_MACOS_NEWEST_UNSUPPORTED="27"
# TODO: bump version when new macOS is released
HOMEBREW_MACOS_NEWEST_SUPPORTED="15"
HOMEBREW_MACOS_NEWEST_SUPPORTED="26"
# TODO: bump version when new macOS is released and update references in:
# - docs/Installation.md
# - HOMEBREW_MACOS_OLDEST_SUPPORTED in .github/workflows/pkg-installer.yml
# - `os-version min` in package/Distribution.xml
# - https://github.com/Homebrew/install/blob/HEAD/install.sh
HOMEBREW_MACOS_OLDEST_SUPPORTED="13"
HOMEBREW_MACOS_OLDEST_ALLOWED="10.11"
HOMEBREW_MACOS_OLDEST_SUPPORTED="14"
HOMEBREW_MACOS_OLDEST_ALLOWED="10.15"
if [[ -n "${HOMEBREW_MACOS}" ]]
then

View File

@ -50,7 +50,7 @@ homebrew-shellenv() {
echo "setenv HOMEBREW_REPOSITORY ${HOMEBREW_REPOSITORY};"
if [[ -n "${PATH_HELPER_ROOT}" ]]
then
PATH_HELPER_ROOT="${PATH_HELPER_ROOT}" PATH="${HOMEBREW_PATH}" /usr/libexec/path_helper -c
echo "eval \`PATH_HELPER_ROOT=\"${PATH_HELPER_ROOT}\" /usr/libexec/path_helper -c\`;"
else
echo "setenv PATH ${HOMEBREW_PREFIX}/bin:${HOMEBREW_PREFIX}/sbin:\$PATH;"
fi
@ -75,7 +75,7 @@ homebrew-shellenv() {
fi
if [[ -n "${PATH_HELPER_ROOT}" ]]
then
PATH_HELPER_ROOT="${PATH_HELPER_ROOT}" PATH="${HOMEBREW_PATH}" /usr/libexec/path_helper -s
echo "eval \"\$(PATH_HELPER_ROOT=\"${PATH_HELPER_ROOT}\" /usr/libexec/path_helper -s)\""
else
echo "export PATH=\"${HOMEBREW_PREFIX}/bin:${HOMEBREW_PREFIX}/sbin\${PATH+:\$PATH}\";"
fi

View File

@ -974,7 +974,11 @@ class ReporterHub
# Skip non-homebrew/core formulae for security.
return if formula.include?("/")
begin
Formula[formula].desc&.presence
rescue FormulaUnavailableError
nil
end
else
all_formula_json.find { |f| f["name"] == formula }
&.fetch("desc", nil)
@ -988,7 +992,11 @@ class ReporterHub
# Skip non-homebrew/cask formulae for security.
return if cask.include?("/")
begin
Cask::CaskLoader.load(cask).desc&.presence
rescue Cask::CaskError
nil
end
else
all_cask_json.find { |f| f["token"] == cask }
&.fetch("desc", nil)

View File

@ -1156,17 +1156,6 @@ on_request: installed_on_request?, options:)
def link(keg)
Formula.clear_cache
unless link_keg
begin
keg.optlink(verbose: verbose?, overwrite: overwrite?)
rescue Keg::LinkError => e
ofail "Failed to create #{formula.opt_prefix}"
puts "Things that depend on #{formula.full_name} will probably not build."
puts e
end
return
end
cask_installed_with_formula_name = begin
Cask::CaskLoader.load(formula.name, warn: false).installed?
rescue Cask::CaskUnavailableError, Cask::CaskInvalidError
@ -1175,6 +1164,17 @@ on_request: installed_on_request?, options:)
if cask_installed_with_formula_name
ohai "#{formula.name} cask is installed, skipping link."
@link_keg = false
end
unless link_keg
begin
keg.optlink(verbose: verbose?, overwrite: overwrite?)
rescue Keg::LinkError => e
ofail "Failed to create #{formula.opt_prefix}"
puts "Things that depend on #{formula.full_name} will probably not build."
puts e
end
return
end

View File

@ -9,7 +9,7 @@ class GitHubRunnerMatrix
# on homebrew/core and tag the first commit with a bottle e.g.
# `git tag 15-sequoia f42c4a659e4da887fc714f8f41cc26794a4bb320`
# to allow people to jump to specific commits based on their macOS version.
NEWEST_HOMEBREW_CORE_MACOS_RUNNER = :sequoia
NEWEST_HOMEBREW_CORE_MACOS_RUNNER = :tahoe
OLDEST_HOMEBREW_CORE_MACOS_RUNNER = :sonoma
NEWEST_HOMEBREW_CORE_INTEL_MACOS_RUNNER = :sonoma

View File

@ -56,7 +56,7 @@ module OS
def self.latest_sdk_version
# TODO: bump version when new Xcode macOS SDK is released
# NOTE: We only track the major version of the SDK.
::Version.new("15")
::Version.new("26")
end
sig { returns(String) }

View File

@ -17,6 +17,7 @@ module OS
def self.latest_version(macos: MacOS.version)
macos = macos.strip_patch
case macos
when "26" then "26.0"
when "15" then "16.4"
when "14" then "16.2"
when "13" then "15.2"
@ -43,6 +44,7 @@ module OS
def self.minimum_version
macos = MacOS.version
case macos
when "26" then "26.0"
when "15" then "16.0"
when "14" then "15.0"
when "13" then "14.1"

View File

@ -364,26 +364,6 @@ RSpec.describe Cask::Cask, :cask do
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip",
"version": "1.0.0",
"sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216"
},
"mojave": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip",
"version": "1.0.0",
"sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216"
},
"high_sierra": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip",
"version": "1.0.0",
"sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216"
},
"sierra": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip",
"version": "1.0.0",
"sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216"
},
"el_capitan": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine/darwin/1.0.0/intel.zip",
"version": "1.0.0",
"sha256": "1866dfa833b123bb8fe7fa7185ebf24d28d300d0643d75798bc23730af734216"
}
}
JSON
@ -418,22 +398,6 @@ RSpec.describe Cask::Cask, :cask do
"catalina": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"mojave": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"high_sierra": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"sierra": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"el_capitan": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
}
}
JSON
@ -469,22 +433,6 @@ RSpec.describe Cask::Cask, :cask do
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"mojave": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"high_sierra": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"sierra": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"el_capitan": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-darwin.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"
},
"x86_64_linux": {
"url": "file://#{TEST_FIXTURE_DIR}/cask/caffeine-intel-linux.zip",
"sha256": "8c62a2b791cf5f0da6066a0a4b6e85f62949cd60975da062df44adf887f4370b"

View File

@ -9,7 +9,7 @@ cask "with-depends-on-everything" do
depends_on cask: "local-caffeine"
depends_on cask: "with-depends-on-cask"
depends_on formula: "unar"
depends_on macos: ">= :el_capitan"
depends_on macos: ">= :catalina"
app "Caffeine.app"
end

View File

@ -7,7 +7,7 @@ cask "with-depends-on-macos-comparison" do
url "file://#{TEST_FIXTURE_DIR}/cask/caffeine.zip"
homepage "https://brew.sh/with-depends-on-macos-comparison"
depends_on macos: ">= :el_capitan"
depends_on macos: ">= :catalina"
app "Caffeine.app"
end

View File

@ -82,7 +82,7 @@
],
"macos": {
">=": [
"10.11"
"10.15"
]
}
},

View File

@ -82,7 +82,7 @@
],
"macos": {
">=": [
"10.11"
"10.15"
]
}
},

View File

@ -654,7 +654,7 @@ module GitHub
end
end
sig { params(tap_remote_repo: String, pull_request: String).returns(T::Array[T.untyped]) }
sig { params(tap_remote_repo: String, pull_request: T.any(String, Integer)).returns(T::Array[T.untyped]) }
def self.get_pull_request_changed_files(tap_remote_repo, pull_request)
files = []
API.paginate_rest(url_to("repos", tap_remote_repo, "pulls", pull_request, "files")) do |result|

View File

@ -185,7 +185,7 @@ Fill in the following stanzas for your cask:
| ------------------ | ----------- |
| `version` | application version |
| `sha256` | SHA-256 checksum of the file downloaded from `url`, calculated by the command `shasum -a 256 <file>`. Can be suppressed by using the special value `:no_check`. (see [`sha256` Stanza Details](Cask-Cookbook.md#stanza-sha256)) |
| `url` | URL to the `.dmg`/`.zip`/`.tgz`/`.tbz2` file that contains the application.<br />A [`verified` parameter](Cask-Cookbook.md#when-url-and-homepage-domains-differ-add-verified) must be added if the hostnames in the `url` and `homepage` stanzas differ. |
| `url` | URL to the `.dmg`/`.zip`/`.tgz` file (or other common archive formats) that contains the application.<br />A [`verified` parameter](Cask-Cookbook.md#when-url-and-homepage-domains-differ-add-verified) must be added if the hostnames in the `url` and `homepage` stanzas differ. |
| `name` | the full and proper name defined by the vendor, and any useful alternate names (see [`name` Stanza Details](Cask-Cookbook.md#stanza-name)) |
| `desc` | one-line description of the software (see [`desc` Stanza Details](Cask-Cookbook.md#stanza-desc)) |
| `homepage` | application homepage; used for the `brew home` command |

View File

@ -120,7 +120,7 @@ Each of the following stanzas is required for every cask.
| ---------------------------------- | :---------------------------: | ----- |
| [`version`](#stanza-version) | no | Application version, or the special value `:latest`. |
| [`sha256`](#stanza-sha256) | no | SHA-256 checksum of the file downloaded from `url` as calculated by the command `shasum -a 256 <file>`, or the special value `:no_check`. |
| [`url`](#stanza-url) | no | URL to the `.dmg`/`.zip`/`.tgz`/`.tbz2` file that contains the application. A [comment](#when-url-and-homepage-domains-differ-add-verified) should be added if the domains in the `url` and `homepage` stanzas differ. |
| [`url`](#stanza-url) | no | URL to the `.dmg`/`.zip`/`.tgz` file (or other common archive formats) that contains the application. A [comment](#when-url-and-homepage-domains-differ-add-verified) should be added if the domains in the `url` and `homepage` stanzas differ. |
| [`name`](#stanza-name) | yes | String providing the full and proper name defined by the vendor. |
| [`desc`](#stanza-desc) | no | One-line description of the cask. Shown when running `brew info`. |
| `homepage` | no | Application homepage; used for the `brew home` command. |

View File

@ -1,5 +1,5 @@
---
last_review_date: "2025-04-12"
last_review_date: "2025-09-12"
---
# Installation
@ -13,7 +13,7 @@ The macOS `.pkg` installer also installs Homebrew to its default prefix (`/opt/h
## macOS Requirements
* An Apple Silicon CPU or 64-bit Intel CPU <sup>[1](#1)</sup>
* macOS Ventura (13) (or higher) installed on officially supported hardware<sup>[2](#2)</sup>
* macOS Sonoma (14) (or higher) installed on officially supported hardware<sup>[2](#2)</sup>
* Command Line Tools (CLT) for Xcode (from `xcode-select --install` or
[https://developer.apple.com/download/all/](https://developer.apple.com/download/all/)) or
[Xcode](https://itunes.apple.com/us/app/xcode/id497799835) <sup>[3](#3)</sup>
@ -116,7 +116,7 @@ Uninstallation is documented in the [FAQ](FAQ.md#how-do-i-uninstall-homebrew).
<a data-proofer-ignore name="1"><sup>1</sup></a> For 32-bit or PPC support see [Tigerbrew](https://github.com/mistydemeo/tigerbrew).
<a data-proofer-ignore name="2"><sup>2</sup></a> macOS 13 (Ventura) or higher is best and supported, 10.11 (El Capitan) 12 (Monterey) are unsupported but may work and 10.10 (Yosemite) and older will not run Homebrew at all. For 10.4 (Tiger) 10.6 (Snow Leopard) see [Tigerbrew](https://github.com/mistydemeo/tigerbrew). Using OpenCore Legacy Patcher is a [Tier 2](Support-Tiers.md#tier-2) or [Tier 3](Support-Tiers.md#tier-3) configuration depending on CPU generation.
<a data-proofer-ignore name="2"><sup>2</sup></a> macOS 14 (Sonoma) or higher is best and supported, 10.15 (Catalina) 13 (Ventura) are unsupported but may work and 10.14 (Mojave) and older will not run Homebrew at all. Using OpenCore Legacy Patcher is a [Tier 2](Support-Tiers.md#tier-2) or [Tier 3](Support-Tiers.md#tier-3) configuration depending on CPU generation.
<a data-proofer-ignore name="3"><sup>3</sup></a> You may need to install Xcode, the CLT, or both depending on the formula, to install a bottle (binary package) which is the only supported configuration. Downloading Xcode may require an Apple Developer account on older versions of Mac OS X. Sign up for free at [Apple's website](https://developer.apple.com/account/).

View File

@ -120,12 +120,7 @@ As a result, Homebrew will also drop macOS Intel x86_64 support in a future rele
Here's the timescale for planned future Tier support:
- Today (August 2025):
- Tier 1: macOS Sequoia 15, Sonoma 14, Ventura 13 on Apple Silicon and Intel x86_64
- Tier 2: macOS Tahoe 26
- Tier 3: macOS El Capitan 10.11 - Monterey 12
- Unsupported: OS X Yosemite 10.10 and earlier
- September (or later) 2025:
- Today (September 2025):
- Tier 1: macOS Tahoe 26, Sequoia 15, Sonoma 14 on Apple Silicon and Intel x86_64
- Tier 3: macOS Catalina 10.15 - Ventura 13
- Unsupported: macOS Mojave 10.14 and earlier

View File

@ -4,7 +4,7 @@
<options customize="never" hostArchitectures="x86_64,arm64" rootVolumeOnly="true"/>
<volume-check>
<allowed-os-versions>
<os-version min="13.0.0"/>
<os-version min="14.0.0"/>
</allowed-os-versions>
</volume-check>
<choices-outline>
@ -27,7 +27,7 @@
<license file="LICENSE.rtf"/>
<conclusion file="CONCLUSION.rtf" />
<allowed-os-versions>
<os-version min="13.0.0"/>
<os-version min="14.0.0"/>
</allowed-os-versions>
<script>