diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 9fc32622aa5f7..3dbf53e27c05f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -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: @@ -71,7 +72,7 @@ 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" @@ -79,7 +80,7 @@ jobs: 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") @@ -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"] @@ -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}" @@ -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) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 15d75961d0daf..f5a484c32cfeb 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -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) @@ -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 diff --git a/Dockerfile b/Dockerfile index 6a887e121cc08..448d2fe6995ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG version=22.04 +ARG version=24.04 # version is passed through by Docker. # shellcheck disable=SC2154 FROM ubuntu:"${version}" diff --git a/Library/Homebrew/os.rb b/Library/Homebrew/os.rb index c8be3389d7356..2531b9ba00664 100644 --- a/Library/Homebrew/os.rb +++ b/Library/Homebrew/os.rb @@ -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" diff --git a/docs/Linux-CI.md b/docs/Linux-CI.md index 90f5aaebfa264..4055fe573f0be 100644 --- a/docs/Linux-CI.md +++ b/docs/Linux-CI.md @@ -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. diff --git a/docs/Support-Tiers.md b/docs/Support-Tiers.md index 61d4b9d22bb91..79511d1d2d4c5 100644 --- a/docs/Support-Tiers.md +++ b/docs/Support-Tiers.md @@ -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) @@ -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