CI: Simplify upgrading toolchain versions in CI

Set the gcc and llvm versions as variables, and use them anywhere we
install a specific version. We then export these as outputs so that any
interested caller can retrieve the installed versions.

Our check for llvm.list also will have prevented us from upgrading llvm
versions. We now check that it contains the exact version we expect.
This commit is contained in:
Timothy Flynn 2026-02-17 16:36:39 -05:00 committed by Tim Flynn
parent b9c6263408
commit f200920a6c
4 changed files with 125 additions and 24 deletions

View file

@ -14,6 +14,23 @@ inputs:
description: 'Toolchain to set up'
required: true
default: 'Clang'
gcc_version:
description: 'GCC version to install'
required: false
default: '14'
llvm_version:
description: 'LLVM version to install'
required: false
default: '20'
outputs:
gcc_version:
description: 'The installed GCC version'
value: ${{ steps.export-versions.outputs.gcc_version }}
llvm_version:
description: 'The installed LLVM version'
value: ${{ steps.export-versions.outputs.llvm_version }}
runs:
using: "composite"
steps:
@ -34,25 +51,58 @@ runs:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
if [ ! -f /etc/apt/sources.list.d/llvm.list ]; then
UBUNTU_RELEASE=$(lsb_release -cs)
LLVM_LIST="/etc/apt/sources.list.d/llvm.list"
LLVM_TOOLCHAIN="llvm-toolchain-${UBUNTU_RELEASE}-${{ inputs.llvm_version }}"
if [ ! -f "${LLVM_LIST}" ] || ! grep -q "${LLVM_TOOLCHAIN}" "${LLVM_LIST}" ; then
curl -f -o /usr/share/keyrings/llvm-snapshot.gpg.key https://apt.llvm.org/llvm-snapshot.gpg.key
echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg.key] http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main" | sudo tee -a /etc/apt/sources.list.d/llvm.list
echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg.key] http://apt.llvm.org/${UBUNTU_RELEASE}/ ${LLVM_TOOLCHAIN} main" | sudo tee "${LLVM_LIST}"
fi
sudo apt-get update -y
sudo apt-get install -y autoconf autoconf-archive automake build-essential ccache cmake curl fonts-liberation2 \
gcc-14 g++-14 libcurl4-openssl-dev libdrm-dev libegl1-mesa-dev libgl1-mesa-dev libpulse-dev libssl-dev \
libstdc++-14-dev lld-20 llvm-20 nasm ninja-build qt6-base-dev qt6-tools-dev-tools tar unzip zip
sudo apt-get install -y \
autoconf \
autoconf-archive \
automake \
build-essential \
ccache \
cmake \
curl \
fonts-liberation2 \
g++-${{ inputs.gcc_version }} \
gcc-${{ inputs.gcc_version }} \
libcurl4-openssl-dev \
libdrm-dev \
libegl1-mesa-dev \
libgl1-mesa-dev \
libpulse-dev \
libssl-dev \
libstdc++-${{ inputs.gcc_version }}-dev \
lld-${{ inputs.llvm_version }} \
llvm-${{ inputs.llvm_version }} \
nasm \
ninja-build \
qt6-base-dev \
qt6-tools-dev-tools \
tar \
unzip \
zip
if ${{ inputs.toolchain == 'Clang' }} ; then
sudo apt-get install -y clang-20 clang++-20 clang-tools-20
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-20 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-20 100
sudo apt-get install -y \
clang-${{ inputs.llvm_version }} \
clang++-${{ inputs.llvm_version }} \
clang-tools-${{ inputs.llvm_version }}
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ inputs.llvm_version }} 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ inputs.llvm_version }} 100
fi
sudo update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-20 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100
sudo update-alternatives --install /usr/bin/llvm-symbolizer llvm-symbolizer /usr/bin/llvm-symbolizer-${{ inputs.llvm_version }} 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ inputs.gcc_version }} 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${{ inputs.gcc_version }} 100
- name: Ensure clang-cl is available
if: ${{ inputs.os == 'Windows' && inputs.toolchain == 'ClangCL' }}
@ -80,7 +130,21 @@ runs:
run: |
set -e
brew update
brew install autoconf autoconf-archive automake bash ccache coreutils libtool llvm@20 nasm ninja pkg-config qt unzip
brew install \
autoconf \
autoconf-archive \
automake \
bash \
ccache \
coreutils \
libtool \
llvm@${{ inputs.llvm_version }} \
nasm \
ninja \
pkg-config \
qt \
unzip
- name: 'Install wasm-tools'
shell: bash
@ -122,3 +186,10 @@ runs:
- name: 'Install vcpkg'
shell: bash
run: ./Toolchain/BuildVcpkg.py
- name: 'Export installed versions'
id: 'export-versions'
shell: bash
run: |
echo "gcc_version=${{ inputs.gcc_version }}" >> "$GITHUB_OUTPUT"
echo "llvm_version=${{ inputs.llvm_version }}" >> "$GITHUB_OUTPUT"

View file

@ -13,7 +13,7 @@ on:
env:
LADYBIRD_SOURCE_DIR: ${{ github.workspace }}
CCACHE_DIR: ${{ github.workspace }}/.ccache
VCPKG_ROOT: ${{ github.workspace }}/Build/vcpkg
VCPKG_ROOT: ${{ github.workspace }}/Build/vcpkg
jobs:
build-and-package:
@ -64,6 +64,7 @@ jobs:
- name: "Set up environment"
uses: ./.github/actions/setup
id: 'setup'
with:
os: ${{ matrix.os_name }}
arch: ${{ matrix.arch }}
@ -83,8 +84,8 @@ jobs:
- name: Create build directory Ubuntu
run: |
cmake --preset Distribution \
-DCMAKE_C_COMPILER=clang-20 \
-DCMAKE_CXX_COMPILER=clang++-20 \
-DCMAKE_C_COMPILER=clang-${{ steps.setup.outputs.llvm_version }} \
-DCMAKE_CXX_COMPILER=clang++-${{ steps.setup.outputs.llvm_version }} \
-DENABLE_CI_BASELINE_CPU=ON \
-DENABLE_GUI_TARGETS=OFF
if: ${{ matrix.os_name == 'Linux' }}

View file

@ -54,6 +54,7 @@ jobs:
- name: Set Up Environment
uses: ./.github/actions/setup
id: 'setup'
with:
os: ${{ inputs.os_name }}
arch: ${{ inputs.arch }}
@ -75,11 +76,11 @@ jobs:
fi
if ${{ inputs.toolchain == 'Clang' }} ; then
echo "host_cc=clang-20" >> "$GITHUB_OUTPUT"
echo "host_cxx=clang++-20" >> "$GITHUB_OUTPUT"
echo "host_cc=clang-${{ steps.setup.outputs.llvm_version }}" >> "$GITHUB_OUTPUT"
echo "host_cxx=clang++-${{ steps.setup.outputs.llvm_version }}" >> "$GITHUB_OUTPUT"
elif ${{ inputs.toolchain == 'GNU' }} ; then
echo "host_cc=gcc-14" >> "$GITHUB_OUTPUT"
echo "host_cxx=g++-14" >> "$GITHUB_OUTPUT"
echo "host_cc=gcc-${{ steps.setup.outputs.gcc_version }}" >> "$GITHUB_OUTPUT"
echo "host_cxx=g++-${{ steps.setup.outputs.gcc_version }}" >> "$GITHUB_OUTPUT"
fi
elif ${{ inputs.os_name == 'macOS' }} ; then
echo "host_cc=$(xcrun --find clang)" >> "$GITHUB_OUTPUT"

View file

@ -6,6 +6,7 @@ on:
env:
LADYBIRD_SOURCE_DIR: ${{ github.workspace }}
LLVM_VERSION: 20
VCPKG_ROOT: ${{ github.workspace }}/Build/vcpkg
jobs:
@ -50,10 +51,37 @@ jobs:
repository: tc39/test262-parser-tests
path: test262-parser-tests
# FIXME: Use the setup action from .github/actions/setup/action.yml.
- name: Install dependencies
run: |
UBUNTU_RELEASE=$(lsb_release -cs)
LLVM_LIST="/etc/apt/sources.list.d/llvm.list"
LLVM_TOOLCHAIN="llvm-toolchain-${UBUNTU_RELEASE}-${LLVM_VERSION}"
if [ ! -f "${LLVM_LIST}" ] || ! grep -q "${LLVM_TOOLCHAIN}" "${LLVM_LIST}" ; then
curl -f -o /usr/share/keyrings/llvm-snapshot.gpg.key https://apt.llvm.org/llvm-snapshot.gpg.key
echo "deb [signed-by=/usr/share/keyrings/llvm-snapshot.gpg.key] http://apt.llvm.org/${UBUNTU_RELEASE}/ ${LLVM_TOOLCHAIN} main" | sudo tee "${LLVM_LIST}"
fi
sudo apt-get update -y
sudo apt-get install -y ninja-build unzip clang-20 clang++-20 jq curl zip tar autoconf autoconf-archive automake nasm pkg-config libgl1-mesa-dev rsync libtool
sudo apt-get install -y \
autoconf \
autoconf-archive \
automake \
clang++-${LLVM_VERSION} \
clang-${LLVM_VERSION} \
curl \
jq \
libgl1-mesa-dev \
libtool \
nasm \
ninja-build \
pkg-config \
rsync \
tar \
unzip \
zip
# We are currently limited to CMake 3.28 in Ubuntu 24.04. Our build requires CMake 3.30 or later.
CMAKE_VERSION=4.2.3
@ -112,11 +140,11 @@ jobs:
export HOME=${{ github.workspace }}/home
mkdir -p $HOME
env CC=clang-20 \
CXX=clang++-20 \
env CC=clang-${LLVM_VERSION} \
CXX=clang++-${LLVM_VERSION} \
cmake --preset Release -B libjs-test262/Build \
-DCMAKE_C_COMPILER=clang-20 \
-DCMAKE_CXX_COMPILER=clang++-20 \
-DCMAKE_C_COMPILER=clang-${LLVM_VERSION} \
-DCMAKE_CXX_COMPILER=clang++-${LLVM_VERSION} \
-DWASM_SPEC_TEST_SKIP_FORMATTING=ON \
-DINCLUDE_WASM_SPEC_TESTS=ON \
-DENABLE_GUI_TARGETS=OFF