From b19542eb31f103a7d1f9f938ca07a96515fd9782 Mon Sep 17 00:00:00 2001 From: Edward Nolan Date: Sat, 29 Aug 2026 16:22:54 -0400 Subject: [PATCH] CMake 4.3.4, GCC 16.2.0, Clang 23 Switch the arm64 base image from arm64-llvm-openrc to arm64-openrc. The LLVM-profile stage3 points portage at the .../23.0/arm64_llvm binhost, which carries ~400 packages (clang 22 and gcc 15.3.0 only); the default profile uses .../23.0/arm64 with ~10000, covering clang 17-22 and gcc 14-15. Recategorise accordingly: - clang 17.0.6-r1, 18.1.8-r7 and 19.1.7-r1 are now cached on arm64, so they join testing_ci.yml's arm64 matrix and clang 19.1.7-r1 leaves fromsource_ci.yml entirely. - gcc 11.5.0, 12.5.0 and 13.4.1_p20260603 are cached on amd64 but not on arm64. Their amd64 leg was in testing_ci.yml and their arm64 leg in fromsource_ci.yml, so both files' merge jobs created the :11/:12/:13 tags from a single arch's digest and whichever ran last won. Move them wholly into fromsource_ci.yml; Dockerfile.fromsource still honours the binhost, so the amd64 legs keep pulling the binpkgs. - Drop stale clang 17.0.6-r1 and 18.1.8-r7 entries from fromsource_ci.yml's merge matrix; no build job in that workflow produced them. Also replace the =dev-lang/python-3.12.12 pin in Dockerfile.test with the :3.12 slot. That version has been dropped from the tree, which would have broken the clang 17 build on both arches. Refresh README.md: the published tag list was stale (GCC 16.1.0/15.2.1, Clang 22.1.6, no Clang 23) and it still advertised CMake 4.2.1. Also mention gcovr and vcpkg, which the images have shipped for a while. Fix three bugs in Dockerfile.test's Clang package.mask block, which left portage free to resolve LLVM components to a major that the same block masks. This surfaced as a hard failure for Clang 17 and 18 on arm64: - llvm-runtimes/libcxx and libcxxabi were not masked at all, so portage preferred the newest libcxx, which depends on a masked llvm slot. - llvm-core/llvmgold was masked only under `uname -m == x86_64`. It is keyworded ~arm64, so on arm64 it could resolve to a masked slot as well. - The clang-runtime mask named llvm-core/clang-runtime, which does not exist. The package is llvm-runtimes/clang-runtime, so that line masked nothing. amd64 survived with only the libcxx route open because portage backtracks out of it; arm64 had two open routes and gave up, which is why Clang 19-22 pass there and 17-18 do not. Verified with `emerge -p` for Clang 17 and 18 on both stage3 images: every LLVM component now pins to the matching major. Sync the ebuild tree with `emerge --sync` (rsync) rather than `emerge-webrsync`. webrsync fetches the daily snapshot, which lags the tree by up to 24 hours; the rsync mirrors regenerate roughly every 30 minutes. Clang 23.1.0 landed in the tree at 07:30 UTC and the snapshot in use that evening had been cut at 00:48 UTC, so `=llvm-core/clang-23.1.0` had no ebuild to match. Measured on amd64: `emerge --sync` takes about 52-58s against 16s for `emerge-webrsync`, which is noise next to an 8-90 minute image build. rsync is already present in the stage3, so this needs no repos.conf changes. Co-Authored-By: Claude Opus 5 --- .github/workflows/fromsource_ci.yml | 60 +++++++++++++---------------- .github/workflows/testing_ci.yml | 58 ++++++++++++++-------------- Dockerfile.fromsource | 6 +-- Dockerfile.test | 16 ++++---- README.md | 11 +++--- 5 files changed, 71 insertions(+), 80 deletions(-) diff --git a/.github/workflows/fromsource_ci.yml b/.github/workflows/fromsource_ci.yml index ab8e0f0..5fd650a 100644 --- a/.github/workflows/fromsource_ci.yml +++ b/.github/workflows/fromsource_ci.yml @@ -35,17 +35,26 @@ jobs: matrix: compilers: - kind: clang - compiler-version: 23.0.0_pre20260512 + compiler-version: 24.0.0_pre20260725 tags: [trunk] - kind: clang - compiler-version: 22.1.6 - tags: [22.1.6, 22, latest] + compiler-version: 23.1.0 + tags: [23.1.0, 23, latest] - kind: gcc compiler-version: 17.0.9999 tags: [trunk] - kind: gcc - compiler-version: 16.1.0 - tags: [16.1.0, 16, latest] + compiler-version: 16.2.0 + tags: [16.2.0, 16, latest] + - kind: gcc + compiler-version: 13.4.1_p20260603 + tags: [13.4.1, 13] + - kind: gcc + compiler-version: 12.5.0 + tags: [12.5.0, 12] + - kind: gcc + compiler-version: 11.5.0 + tags: [11.5.0, 11] name: "${{ matrix.compilers.kind }}-${{ matrix.compilers.compiler-version }} (amd64)" steps: - name: Checkout repository @@ -97,28 +106,25 @@ jobs: path: /tmp/digest.txt retention-days: 1 - # arm64 binpkgs are not available for GCC 11/12/13 or Clang 17/18/19, so those - # are built from source here. Clang trunk is also built from source on arm64. - # Clang 17/18 and trunk arm64 are currently broken in Gentoo and omitted until fixed. build-arm64: runs-on: ubuntu-24.04-arm env: - BASE_IMAGE: gentoo/stage3:arm64-llvm-openrc + BASE_IMAGE: gentoo/stage3:arm64-openrc strategy: fail-fast: false matrix: compilers: - kind: clang - compiler-version: 22.1.6 - tags: [22.1.6, 22, latest] + compiler-version: 23.1.0 + tags: [23.1.0, 23, latest] - kind: gcc compiler-version: 17.0.9999 tags: [trunk] - kind: gcc - compiler-version: 16.1.0 - tags: [16.1.0, 16, latest] + compiler-version: 16.2.0 + tags: [16.2.0, 16, latest] - kind: gcc - compiler-version: 13.4.1_p20260212 + compiler-version: 13.4.1_p20260603 tags: [13.4.1, 13] - kind: gcc compiler-version: 12.5.0 @@ -126,9 +132,6 @@ jobs: - kind: gcc compiler-version: 11.5.0 tags: [11.5.0, 11] - - kind: clang - compiler-version: 19.1.7-r1 - tags: [19.1.7, 19] name: "${{ matrix.compilers.kind }}-${{ matrix.compilers.compiler-version }} (arm64)" steps: - name: Checkout repository @@ -189,19 +192,19 @@ jobs: matrix: compilers: - kind: clang - compiler-version: 23.0.0_pre20260512 + compiler-version: 24.0.0_pre20260725 tags: [trunk] - kind: clang - compiler-version: 22.1.6 - tags: [22.1.6, 22, latest] + compiler-version: 23.1.0 + tags: [23.1.0, 23, latest] - kind: gcc compiler-version: 17.0.9999 tags: [trunk] - kind: gcc - compiler-version: 16.1.0 - tags: [16.1.0, 16, latest] + compiler-version: 16.2.0 + tags: [16.2.0, 16, latest] - kind: gcc - compiler-version: 13.4.1_p20260212 + compiler-version: 13.4.1_p20260603 tags: [13.4.1, 13] - kind: gcc compiler-version: 12.5.0 @@ -209,15 +212,6 @@ jobs: - kind: gcc compiler-version: 11.5.0 tags: [11.5.0, 11] - - kind: clang - compiler-version: 19.1.7-r1 - tags: [19.1.7, 19] - - kind: clang - compiler-version: 18.1.8-r7 - tags: [18.1.8, 18] - - kind: clang - compiler-version: 17.0.6-r1 - tags: [17.0.6, 17] name: "merge-${{ matrix.compilers.kind }}-${{ matrix.compilers.compiler-version }}" steps: - name: Log in to the Container registry @@ -255,8 +249,6 @@ jobs: if [ -f /tmp/digests/amd64/digest.txt ]; then digests+=" ${image_name}@$(cat /tmp/digests/amd64/digest.txt)" else - # GCC 11/12/13 and Clang 17/18/19 have no amd64 fromsource build; - # fetch the amd64 digest that testing_ci.yml already published. amd64_digest=$(docker manifest inspect "${image_name}:${first_tag}" 2>/dev/null \ | jq -r '.manifests[]? | select(.platform.architecture == "amd64") | .digest' || true) [ -n "${amd64_digest}" ] && digests+=" ${image_name}@${amd64_digest}" diff --git a/.github/workflows/testing_ci.yml b/.github/workflows/testing_ci.yml index 8d27d93..84cd2e3 100644 --- a/.github/workflows/testing_ci.yml +++ b/.github/workflows/testing_ci.yml @@ -33,20 +33,14 @@ jobs: matrix: compilers: - kind: gcc - compiler-version: 15.2.1_p20260214 - tags: [15.2.1, 15] + compiler-version: 15.3.0 + tags: [15.3.0, 15] - kind: gcc - compiler-version: 14.3.1_p20250801 + compiler-version: 14.3.1_p20260604 tags: [14.3.1, 14] - - kind: gcc - compiler-version: 13.4.1_p20260212 - tags: [13.4.1, 13] - - kind: gcc - compiler-version: 12.5.0 - tags: [12.5.0, 12] - - kind: gcc - compiler-version: 11.5.0 - tags: [11.5.0, 11] + - kind: clang + compiler-version: 22.1.8 + tags: [22.1.8, 22] - kind: clang compiler-version: 21.1.8 tags: [21.1.8, 21] @@ -113,28 +107,38 @@ jobs: path: /tmp/digest.txt retention-days: 1 - # arm64 binpkgs are only available for GCC 14/15 and Clang 20/21. - # The remaining compilers are built from source in fromsource_ci.yml. build-arm64: runs-on: ubuntu-24.04-arm env: - BASE_IMAGE: gentoo/stage3:arm64-llvm-openrc + BASE_IMAGE: gentoo/stage3:arm64-openrc strategy: fail-fast: false matrix: compilers: - kind: gcc - compiler-version: 15.2.1_p20260214 - tags: [15.2.1, 15] + compiler-version: 15.3.0 + tags: [15.3.0, 15] - kind: gcc - compiler-version: 14.3.1_p20250801 + compiler-version: 14.3.1_p20260604 tags: [14.3.1, 14] + - kind: clang + compiler-version: 22.1.8 + tags: [22.1.8, 22] - kind: clang compiler-version: 21.1.8 tags: [21.1.8, 21] - kind: clang compiler-version: 20.1.8 tags: [20.1.8, 20] + - kind: clang + compiler-version: 19.1.7-r1 + tags: [19.1.7, 19] + - kind: clang + compiler-version: 18.1.8-r7 + tags: [18.1.8, 18] + - kind: clang + compiler-version: 17.0.6-r1 + tags: [17.0.6, 17] name: "${{ matrix.compilers.kind }}-${{ matrix.compilers.compiler-version }} (arm64)" steps: - name: Checkout repository @@ -195,20 +199,14 @@ jobs: matrix: compilers: - kind: gcc - compiler-version: 15.2.1_p20260214 - tags: [15.2.1, 15] + compiler-version: 15.3.0 + tags: [15.3.0, 15] - kind: gcc - compiler-version: 14.3.1_p20250801 + compiler-version: 14.3.1_p20260604 tags: [14.3.1, 14] - - kind: gcc - compiler-version: 13.4.1_p20260212 - tags: [13.4.1, 13] - - kind: gcc - compiler-version: 12.5.0 - tags: [12.5.0, 12] - - kind: gcc - compiler-version: 11.5.0 - tags: [11.5.0, 11] + - kind: clang + compiler-version: 22.1.8 + tags: [22.1.8, 22] - kind: clang compiler-version: 21.1.8 tags: [21.1.8, 21] diff --git a/Dockerfile.fromsource b/Dockerfile.fromsource index 968aa95..c5627c5 100644 --- a/Dockerfile.fromsource +++ b/Dockerfile.fromsource @@ -9,7 +9,7 @@ RUN /bin/bash <<"EOF" set -eux echo 'BINPKG_FORMAT="gpkg"' >> /etc/portage/make.conf echo 'FEATURES="getbinpkg"' >> /etc/portage/make.conf - emerge-webrsync + emerge --sync getuto emerge dev-vcs/git mkdir -p /etc/portage/repos.conf @@ -32,10 +32,10 @@ EOF2 emerge --sync fi echo "ACCEPT_KEYWORDS=\"~${GENTOO_ARCH}\"" >> /etc/portage/make.conf - echo "=dev-build/cmake-4.3.3" >> /etc/portage/package.unmask + echo "=dev-build/cmake-4.3.4" >> /etc/portage/package.unmask mkdir -p /etc/portage/package.accept_keywords echo "dev-util/gcovr **" >> /etc/portage/package.accept_keywords/gcovr - emerge =dev-build/cmake-4.3.3 + emerge =dev-build/cmake-4.3.4 emerge dev-build/ninja emerge dev-util/gcovr emerge app-misc/jq diff --git a/Dockerfile.test b/Dockerfile.test index 3e9888c..8a3cb51 100644 --- a/Dockerfile.test +++ b/Dockerfile.test @@ -9,7 +9,7 @@ RUN /bin/bash <<"EOF" set -eux echo 'BINPKG_FORMAT="gpkg"' >> /etc/portage/make.conf echo 'FEATURES="getbinpkg"' >> /etc/portage/make.conf - emerge-webrsync + emerge --sync getuto case $(uname -m) in x86_64) GENTOO_ARCH=amd64; GCC_TRIPLET=x86_64-pc-linux-gnu ;; @@ -17,10 +17,10 @@ RUN /bin/bash <<"EOF" *) echo "Unsupported arch: $(uname -m)"; exit 1 ;; esac echo "ACCEPT_KEYWORDS=\"~${GENTOO_ARCH}\"" >> /etc/portage/make.conf - echo "=dev-build/cmake-4.3.3" >> /etc/portage/package.unmask + echo "=dev-build/cmake-4.3.4" >> /etc/portage/package.unmask mkdir -p /etc/portage/package.accept_keywords echo "dev-util/gcovr **" >> /etc/portage/package.accept_keywords/gcovr - emerge =dev-build/cmake-4.3.3 + emerge =dev-build/cmake-4.3.4 emerge dev-build/ninja emerge dev-vcs/git emerge dev-util/gcovr @@ -29,7 +29,7 @@ RUN /bin/bash <<"EOF" use_params='' case ${compiler_version%%.*} in 17) - emerge =dev-lang/python-3.12.12 + emerge dev-lang/python:3.12 use_params=python_single_target_python3_12 ;; esac echo ">llvm-runtimes/openmp-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm @@ -37,12 +37,12 @@ RUN /bin/bash <<"EOF" echo ">llvm-runtimes/compiler-rt-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm echo ">llvm-runtimes/compiler-rt-sanitizers-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm echo ">llvm-core/llvm-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm - if [[ $(uname -m) == x86_64 ]] ; then - echo ">llvm-core/llvmgold-${compiler_version%%\.*}-r9999" >> /etc/portage/package.mask/llvm - fi + echo ">llvm-core/llvmgold-${compiler_version%%\.*}-r9999" >> /etc/portage/package.mask/llvm echo ">llvm-core/llvm-toolchain-symlinks-${compiler_version%%\.*}-r9999" >> /etc/portage/package.mask/llvm echo ">llvm-core/clang-common-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm - echo ">llvm-core/clang-runtime-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm + echo ">llvm-runtimes/clang-runtime-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm + echo ">llvm-runtimes/libcxx-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm + echo ">llvm-runtimes/libcxxabi-${compiler_version%%-r*}-r9999" >> /etc/portage/package.mask/llvm USE="libcxx $use_params" emerge =llvm-core/clang-${compiler_version} ln -s /usr/lib/llvm/${compiler_version%%.*}/bin/* /usr/local/bin/ elif [[ ${compiler_kind} == gcc ]] ; then diff --git a/README.md b/README.md index 9dc124f..2d6618d 100644 --- a/README.md +++ b/README.md @@ -14,23 +14,24 @@ This project builds the following images intended for use by CI for Beman librar - `ghcr.io/bemanproject/infra-containers-gcc` - `trunk` (rebuilt weekly) - - `latest`/`16`/`16.1.0` - - `15`/`15.2.1` + - `latest`/`16`/`16.2.0` + - `15`/`15.3.0` - `14`/`14.3.1` - `13`/`13.4.1` - `12`/`12.5.0` - `11`/`11.5.0` - `ghcr.io/bemanproject/infra-containers-clang` - `trunk` (rebuilt weekly) - - `latest`/`22`/`22.1.6` + - `latest`/`23`/`23.1.0` + - `22`/`22.1.8` - `21`/`21.1.8` - `20`/`20.1.8` - `19`/`19.1.7` - `18`/`18.1.8` - `17`/`17.0.6` -Along with the compiler version specified in the tag, these images contain CMake 4.2.1 and -recent versions of ninja, git, and jq. +Along with the compiler version specified in the tag, these images contain CMake 4.3.4, +vcpkg (at `VCPKG_ROOT`), and recent versions of ninja, git, gcovr, and jq. ## Implementation Details