Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 15 additions & 3 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ defaults:
shell: bash -xeuo pipefail {0}

env:
# odeprecated: remove 22.04 image in Homebrew >=5.4
VERSIONS: '["22.04", "24.04"]'

jobs:
Expand Down Expand Up @@ -71,15 +72,15 @@ jobs:
"ghcr.io/homebrew/ubuntu${version}:${brew_version}"
"ghcr.io/homebrew/ubuntu${version}:latest"
)
if [[ "${version}" == "22.04" ]]; then
if [[ "${version}" == "24.04" ]]; then
tags+=(
"ghcr.io/homebrew/brew:${brew_version}"
"ghcr.io/homebrew/brew:latest"
)
fi
elif [[ "${GITHUB_EVENT_NAME}" == "push" &&
("${GITHUB_REF}" == "refs/heads/main") ]]; then
if [[ "${version}" == "22.04" ]]; then
if [[ "${version}" == "24.04" ]]; then
tags+=("ghcr.io/homebrew/brew:main")
fi
tags+=("ghcr.io/homebrew/ubuntu${version}:main")
Expand Down Expand Up @@ -138,6 +139,7 @@ jobs:
strategy:
fail-fast: false
matrix:
# odeprecated: remove 22.04 image in Homebrew >=5.4
version: ["22.04", "24.04"]
arch: ["x86_64", "arm64"]

Expand All @@ -162,6 +164,11 @@ jobs:
VERSION: ${{ matrix.version }}
PUSH: ${{ needs.generate-tags.outputs.push }}
run: |
# odeprecated: remove 22.04 image in Homebrew >=5.4
if [[ "${VERSION}" == "22.04" ]]; then
echo "The homebrew/ubuntu22.04 image is deprecated and will soon be retired. Use homebrew/brew." > .docker-deprecate
fi

filter="$(printf '.["%s"]' "${VERSION}")"
echo "push=$(jq --raw-output "${filter}" <<<"${PUSH}")" >>"${GITHUB_OUTPUT}"

Expand All @@ -182,8 +189,13 @@ jobs:
build-args: version=${{ matrix.version }}
labels: ${{ needs.generate-tags.outputs.labels }}

- name: Set environment variables
if: matrix.version == '22.04'
# odeprecated: remove 22.04 in Homebrew >=5.4
run: echo "HOMEBREW_GLIBC_TESTING=1" >> "$GITHUB_ENV"

- name: Run brew test-bot --only-setup
run: docker run --rm brew brew test-bot --only-setup
run: docker run --env HOMEBREW_GLIBC_TESTING --rm brew brew test-bot --only-setup

- name: Log in to GitHub Packages (BrewTestBot)
if: fromJSON(steps.attributes.outputs.push)
Expand Down
10 changes: 6 additions & 4 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -330,11 +330,11 @@ jobs:
container: ghcr.io/homebrew/ubuntu24.04:latest
- name: test-bot (Linux x86_64)
runs-on: ubuntu-latest
container: ghcr.io/homebrew/brew:main
# Use Debian Old Stable for testing Homebrew's glibc support.
container: ghcr.io/homebrew/ubuntu24.04:main
# Use older Ubuntu for testing Homebrew's glibc and gcc support.
- name: test-bot (Linux Homebrew glibc)
runs-on: ubuntu-latest
container: debian:oldstable
container: ubuntu:22.04
- name: test-bot (macOS x86_64)
runs-on: macos-15-intel
- name: test-bot (macOS arm64)
Expand All @@ -345,7 +345,9 @@ jobs:
- name: Install Homebrew and Homebrew's dependencies
# All other images are built from our Homebrew Dockerfile.
# This is the only one that needs to be set up manually.
if: matrix.container == 'debian:oldstable'
if: matrix.container == 'ubuntu:22.04'
env:
DEBIAN_FRONTEND: noninteractive
run: |
# Slimmed down version from the Homebrew Dockerfile
apt-get update
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG version=22.04
ARG version=24.04
# version is passed through by Docker.
# shellcheck disable=SC2154
FROM ubuntu:"${version}"
Expand Down
10 changes: 5 additions & 5 deletions Library/Homebrew/os.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ def self.kernel_name
::OS_VERSION = T.let(ENV.fetch("HOMEBREW_OS_VERSION").freeze, String)

# See Linux-CI.md
LINUX_CI_OS_VERSION = "Ubuntu 22.04"
LINUX_CI_ARM_RUNNER = "ubuntu-22.04-arm"
LINUX_GLIBC_CI_VERSION = "2.35"
LINUX_CI_OS_VERSION = "Ubuntu 24.04"
LINUX_CI_ARM_RUNNER = "ubuntu-24.04-arm"
LINUX_GLIBC_CI_VERSION = "2.39"
LINUX_GLIBC_NEXT_CI_VERSION = "2.39" # users below this version will be warned by `brew doctor`
LINUX_GCC_CI_VERSION = "12" # https://packages.ubuntu.com/jammy/gcc-12
LINUX_LIBSTDCXX_CI_VERSION = "6.0.30" # https://packages.ubuntu.com/jammy/libstdc++6
LINUX_GCC_CI_VERSION = "13" # https://packages.ubuntu.com/noble/gcc
LINUX_LIBSTDCXX_CI_VERSION = "6.0.33" # https://packages.ubuntu.com/noble/libstdc++6
LINUX_PREFERRED_GCC_COMPILER_FORMULA = T.let("gcc@#{LINUX_GCC_CI_VERSION}".freeze, String)
LINUX_PREFERRED_GCC_RUNTIME_FORMULA = "gcc"

Expand Down
2 changes: 1 addition & 1 deletion docs/Linux-CI.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ last_review_date: "2026-03-19"

# Linux CI in `homebrew/core`

We currently use Ubuntu 22.04 for bottling in `homebrew/core`.
We currently use Ubuntu 24.04 for bottling in `homebrew/core`.

We aim to use the oldest supported Ubuntu LTS version for our CI that provides the GCC version we need.

Expand Down
4 changes: 2 additions & 2 deletions docs/Support-Tiers.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ To qualify as Tier 1, a Linux configuration must meet all of the following:
- Running on:
- Ubuntu within its [standard support window](https://ubuntu.com/about/release-cycle) or
- a Homebrew-provided Docker image
- Using a system `glibc` version ≥ 2.35
- Using a system `glibc` version ≥ 2.39
- Using a Linux kernel version ≥ 3.2
- Installed in the default prefix: `/home/linuxbrew/.linuxbrew`
- Using a supported architecture (ARM64/AArch64 or Intel x86_64 with SSSE3 support)
Expand All @@ -67,7 +67,7 @@ Tier 2 configurations include:

- macOS prerelease versions before they are promoted to Tier 1
- macOS systems with outdated versions of Xcode Command Line Tools
- Linux systems with `glibc` versions between 2.13 and 2.34 (Homebrew’s own `glibc` formula will be installed automatically)
- Linux systems with `glibc` versions between 2.13 and 2.38 (Homebrew’s own `glibc` formula will be installed automatically)
- Homebrew installed outside the default prefix, requiring source builds for official packages (i.e. installing outside `/opt/homebrew`, `/usr/local`, or `/home/linuxbrew/.linuxbrew`)
- Architectures not yet officially supported by Homebrew
- Macs using OpenCore Legacy Patcher with a Westmere or newer Intel CPU
Expand Down
Loading