Skip to content

ci: Update macOS images used (#1432) #12

ci: Update macOS images used (#1432)

ci: Update macOS images used (#1432) #12

Workflow file for this run

name: Build
on:
push:
pull_request:
env:
CTEST_OUTPUT_ON_FAILURE: ON
VERBOSE: 1
defaults:
run:
shell: bash
permissions:
contents: read
jobs:
build_and_test:
timeout-minutes: 30
env:
CMAKE_GENERATOR: Ninja
name: ${{ matrix.os }}-${{ matrix.compiler }}-${{ matrix.version }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-20.04
compiler: gcc
version: "8"
- os: ubuntu-20.04
compiler: gcc
version: "9"
- os: ubuntu-20.04
compiler: gcc
version: "10"
- os: ubuntu-20.04
compiler: clang
version: "9"
- os: ubuntu-20.04
compiler: clang
version: "10"
- os: ubuntu-20.04
compiler: clang
version: "11"
- os: ubuntu-20.04
compiler: clang
version: "12"
- os: ubuntu-22.04
compiler: clang
version: "13"
- os: ubuntu-22.04
compiler: clang
version: "14"
- os: ubuntu-22.04
compiler: clang
version: "15"
- os: ubuntu-22.04
compiler: gcc
version: "11"
- os: ubuntu-22.04
compiler: gcc
version: "12"
- os: ubuntu-22.04
compiler: gcc
version: "13"
- os: macOS-12
compiler: xcode
version: "13.4.1"
- os: macOS-12
compiler: xcode
version: "14.2"
- os: macOS-13
compiler: xcode
version: "15.0.1"
- os: macOS-14
compiler: xcode
version: "15.3"
steps:
- name: Install dependencies on Linux
if: ${{ runner.os == 'Linux' }}
run: |
sudo apt-get update
packages="
elfutils
libhiredis-dev
libzstd-dev
ninja-build
pkg-config
python3
redis-server
redis-tools
"
# Install ld.gold (binutils) and ld.lld (lld) on different runs.
if [ "${{ matrix.os }}" = "ubuntu-22.04" ]; then
sudo apt-get install -y $packages binutils
else
sudo apt-get install -y $packages lld
fi
if [ "${{ matrix.compiler }}" = "gcc" ]; then
echo "CC=gcc-${{ matrix.version }}" >> $GITHUB_ENV
echo "CXX=g++-${{ matrix.version }}" >> $GITHUB_ENV
sudo apt-get install -y g++-${{ matrix.version }} g++-${{ matrix.version }}-multilib
if [ "${{ matrix.version }}" = 8 ]; then
# The compilation test in StdFilesystem.cmake doesn't work when
# GCC 9 is installed as well, so need to force linking with
# libstdc++fs for GCC 8. Note: This requires using -fuse-ld=lld to
# work.
echo "LDFLAGS=-lstdc++fs" >> $GITHUB_ENV
fi
else
echo "CC=clang-${{ matrix.version }}" >> $GITHUB_ENV
echo "CXX=clang++-${{ matrix.version }}" >> $GITHUB_ENV
sudo apt-get install -y clang-${{ matrix.version }} g++-multilib lld-${{ matrix.version }}
fi
- name: Install dependencies on macOS
if: ${{ runner.os == 'macOS' }}
run: |
HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 \
brew install ninja pkg-config hiredis redis
if [ "${{ matrix.compiler }}" = "gcc" ]; then
brew install gcc@${{ matrix.version }}
echo "CC=gcc-${{ matrix.version }}" >> $GITHUB_ENV
echo "CXX=g++-${{ matrix.version }}" >> $GITHUB_ENV
else
sudo xcode-select -switch /Applications/Xcode_${{ matrix.version }}.app
echo "CC=clang" >> $GITHUB_ENV
echo "CXX=clang++" >> $GITHUB_ENV
fi
- name: Get source
uses: actions/checkout@v4
- name: Build and test
run: ci/build
env:
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI
- name: Collect testdir from failed tests
if: failure()
run: ci/collect-testdir
- name: Upload testdir from failed tests
if: failure()
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.os }}-${{ matrix.compiler }}-${{ matrix.version }}-testdir.tar.xz
path: testdir.tar.xz
build_and_test_msys:
timeout-minutes: 30
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include:
- sys: mingw64
env: x86_64
compiler: gcc
- sys: mingw64
env: x86_64
compiler: clang
name: 'Windows ${{ matrix.sys }} ${{ matrix.compiler }}'
defaults:
run:
shell: msys2 {0}
steps:
- name: '${{ matrix.sys }} Set up MSYS2'
uses: msys2/setup-msys2@v2
with:
msystem: ${{matrix.sys}}
update: true
install: >-
git
diffutils
tar
mingw-w64-${{matrix.env}}-toolchain
mingw-w64-${{matrix.env}}-cmake
mingw-w64-${{matrix.env}}-ninja
mingw-w64-${{matrix.env}}-hiredis
mingw-w64-${{matrix.env}}-lld
mingw-w64-${{matrix.env}}-${{matrix.compiler}}
- name: Set up environment
run: |
if [ "${{ matrix.compiler }}" = "gcc" ]; then
echo "CC=gcc" >> $GITHUB_ENV
echo "CXX=g++" >> $GITHUB_ENV
else
echo "CC=clang" >> $GITHUB_ENV
echo "CXX=clang++" >> $GITHUB_ENV
fi
- name: Get source
uses: actions/checkout@v4
- name: Build and test
run: ci/build
continue-on-error: ${{ matrix.allow_test_failures == true &&
steps.build-and-test.outputs.exit_status == 8 }}
env:
CMAKE_GENERATOR: Ninja
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI
TEST_CC: gcc
- name: Collect testdir from failed tests
if: failure()
run: ci/collect-testdir
- name: Upload testdir from failed tests
if: failure()
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.sys}}-${{ matrix.env }}-${{ matrix.compiler }}-testdir.tar.xz
path: testdir.tar.xz
build_macos_universal:
timeout-minutes: 30
name: macOS universal binary
runs-on: macos-12
env:
CMAKE_GENERATOR: Ninja
steps:
- name: Get source
uses: actions/checkout@v4
- name: Install Dependencies
run: |
HOMEBREW_NO_AUTO_UPDATE=1 HOMEBREW_NO_INSTALL_CLEANUP=1 \
brew install ninja
- name: Build macOS universal binary
run: ci/build-macos-binary
- name: Archive universal binary
uses: actions/upload-artifact@v4
with:
name: macOS-binary
path: build_universal/ccache
specific_tests:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: Linux GCC debug + in source
os: ubuntu-20.04
CC: gcc
CXX: g++
BUILDDIR: .
CCACHE_LOC: .
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=Debug
apt_get: elfutils libzstd-dev pkg-config libhiredis-dev
- name: Linux GCC 32-bit
os: ubuntu-20.04
CC: gcc
CXX: g++
CFLAGS: -m32 -g -O2
CXXFLAGS: -m32 -g -O2
LDFLAGS: -m32
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON
apt_get: elfutils gcc-multilib g++-multilib lib32stdc++-10-dev
- name: Linux GCC CUDA
os: ubuntu-20.04
CC: gcc
CXX: g++
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON
CUDA: 11.7.0-1
apt_get: elfutils libzstd-dev
- name: Linux MinGW 32-bit
os: ubuntu-20.04
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -D CMAKE_TOOLCHAIN_FILE=../toolchains/i686-w64-mingw32-posix.cmake -D ZSTD_FROM_INTERNET=ON -D HIREDIS_FROM_INTERNET=ON
RUN_TESTS: none
apt_get: elfutils mingw-w64
- name: Linux MinGW 64-bit
os: ubuntu-20.04
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -D CMAKE_TOOLCHAIN_FILE=../toolchains/x86_64-w64-mingw32-posix.cmake -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON
RUN_TESTS: unittest-in-wine
apt_get: elfutils mingw-w64 wine
- name: Windows VS2019 32-bit Ninja
os: windows-2019
msvc_arch: x64_x86
CC: cl
CXX: cl
CMAKE_GENERATOR: Ninja
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON
TEST_CC: clang -target i686-pc-windows-msvc
- name: Windows VS2019 32-bit MSBuild
os: windows-2019
msvc_arch: x64_x86
allow_test_failures: true # For now, don't fail the build on failure
CC: cl
CXX: cl
CMAKE_GENERATOR: Visual Studio 16 2019
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON -A Win32
TEST_CC: clang -target i686-pc-windows-msvc
- name: Windows VS2019 64-bit Ninja
os: windows-2019
msvc_arch: x64
CC: cl
CXX: cl
CMAKE_GENERATOR: Ninja
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON
TEST_CC: clang -target x86_64-pc-windows-msvc
- name: Windows VS2019 64-bit MSBuild
os: windows-2019
msvc_arch: x64
allow_test_failures: true # For now, don't fail the build on failure
CC: cl
CXX: cl
CMAKE_GENERATOR: Visual Studio 16 2019
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON -A x64
TEST_CC: clang -target x86_64-pc-windows-msvc
- name: Windows VS2022 32-bit Ninja
os: windows-2022
msvc_arch: x64_x86
allow_test_failures: true # For now, don't fail the build on failure
CC: cl
CXX: cl
CMAKE_GENERATOR: Ninja
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON
TEST_CC: clang -target i686-pc-windows-msvc
- name: Windows VS2022 32-bit MSBuild
os: windows-2022
msvc_arch: x64_x86
allow_test_failures: true # For now, don't fail the build on failure
CC: cl
CXX: cl
CMAKE_GENERATOR: Visual Studio 17 2022
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON -A Win32
TEST_CC: clang -target i686-pc-windows-msvc
- name: Windows VS2022 64-bit Ninja
os: windows-2022
msvc_arch: x64
allow_test_failures: true # For now, don't fail the build on failure
CC: cl
CXX: cl
CMAKE_GENERATOR: Ninja
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON
TEST_CC: clang -target x86_64-pc-windows-msvc
- name: Windows VS2022 64-bit MSBuild
os: windows-2022
msvc_arch: x64
allow_test_failures: true # For now, don't fail the build on failure
CC: cl
CXX: cl
CMAKE_GENERATOR: Visual Studio 17 2022
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DZSTD_FROM_INTERNET=ON -DHIREDIS_FROM_INTERNET=ON -A x64
TEST_CC: clang -target x86_64-pc-windows-msvc
- name: Clang address & UB sanitizer
os: ubuntu-20.04
CC: clang
CXX: clang++
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=CI -DENABLE_SANITIZER_ADDRESS=ON -DENABLE_SANITIZER_UNDEFINED_BEHAVIOR=ON
ASAN_OPTIONS: detect_leaks=0
apt_get: elfutils libzstd-dev pkg-config libhiredis-dev
- name: Clang static analyzer
os: ubuntu-20.04
CC: clang
CXX: clang++
CMAKE_PREFIX: scan-build
RUN_TESTS: none
apt_get: libzstd-dev pkg-config libhiredis-dev
- name: Linux binary
os: ubuntu-20.04
CC: gcc
CXX: g++
SPECIAL: build-and-verify-package
CMAKE_PARAMS: -DCMAKE_BUILD_TYPE=Release
apt_get: elfutils libzstd-dev pkg-config libhiredis-dev ninja-build
- name: Source package
os: ubuntu-20.04
CC: gcc
CXX: g++
SPECIAL: build-and-verify-source-package
apt_get: elfutils libzstd-dev pkg-config libhiredis-dev ninja-build asciidoctor
- name: HTML documentation
os: ubuntu-20.04
EXTRA_CMAKE_BUILD_FLAGS: --target doc-html
RUN_TESTS: none
apt_get: libzstd-dev pkg-config libhiredis-dev asciidoctor
- name: Manual page
os: ubuntu-20.04
EXTRA_CMAKE_BUILD_FLAGS: --target doc-man-page
RUN_TESTS: none
apt_get: libzstd-dev pkg-config libhiredis-dev asciidoctor
- name: Clang-Tidy
os: ubuntu-20.04
CC: clang-12
CXX: clang++-12
RUN_TESTS: none
CMAKE_PARAMS: -DENABLE_CLANG_TIDY=ON -DCLANGTIDY=/usr/bin/clang-tidy-12
apt_get: libzstd-dev pkg-config libhiredis-dev clang-12 clang-tidy-12
steps:
- name: Get source
uses: actions/checkout@v4
- name: Install CUDA
if: matrix.CUDA != ''
run: sudo --preserve-env=CUDA,GITHUB_PATH ci/install-cuda
env:
CUDA: ${{ matrix.CUDA }}
- name: Run apt-get
if: matrix.apt_get != ''
run: sudo apt-get update && sudo apt-get install ${{ matrix.apt_get }}
- name: Prepare Windows environment (Visual Studio)
if: runner.os == 'Windows'
uses: ilammy/[email protected]
with:
arch: ${{ matrix.msvc_arch }}
- name: Prepare Windows environment (Clang)
if: runner.os == 'Windows'
shell: powershell
run: |
$ErrorActionPreference = 'Stop'
# The test suite currently requires that the compiler specified by the
# "CC" environment variable is on a path without spaces. Provide that
# by creating a junction from ~/opt/llvm to the Visual Studio path.
$null = New-Item `
-Path "${HOME}\opt\llvm" `
-ItemType Junction `
-Target "${env:VCINSTALLDIR}\Tools\Llvm\x64" `
-Force
"Path=${HOME}\opt\llvm\bin;${env:Path}" | `
Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
- name: Build and test
id: build-and-test
env:
ASAN_OPTIONS: ${{ matrix.ASAN_OPTIONS }}
BUILDDIR: ${{ matrix.BUILDDIR }}
CC: ${{ matrix.CC }}
CCACHE_LOC: ${{ matrix.CCACHE_LOC }}
CFLAGS: ${{ matrix.CFLAGS }}
CMAKE_GENERATOR: ${{ matrix.CMAKE_GENERATOR }}
CMAKE_PARAMS: ${{ matrix.CMAKE_PARAMS }}
CXX: ${{ matrix.CXX }}
CXXFLAGS: ${{ matrix.CXXFLAGS }}
EXTRA_CMAKE_BUILD_FLAGS: ${{ matrix.EXTRA_CMAKE_BUILD_FLAGS }}
LDFLAGS: ${{ matrix.LDFLAGS }}
RUN_TESTS: ${{ matrix.RUN_TESTS }}
SPECIAL: ${{ matrix.SPECIAL }}
TEST_CC: ${{ matrix.TEST_CC }}
run: |
rc=0
ci/build || rc=$?
echo "exit_status=$rc" >> $GITHUB_OUTPUT
exit $rc
# CTest exits with return code 8 on test failure.
continue-on-error: ${{ matrix.allow_test_failures == true &&
steps.build-and-test.outputs.exit_status == 8 }}
- name: Collect testdir from failed tests
if: failure() || steps.build-and-test.outcome == 'failure'
run: ci/collect-testdir
# TODO: in case of build-and-verify-*package the BUILDDIR is set within those scripts.
- name: Upload testdir from failed tests
if: failure() || steps.build-and-test.outcome == 'failure'
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.name }} - testdir.tar.xz
path: testdir.tar.xz
check_format:
timeout-minutes: 30
name: Code formatting
runs-on: ubuntu-20.04
strategy:
fail-fast: false
steps:
- name: Get source
uses: actions/checkout@v4
- name: Run Clang-Format in check mode
run: misc/format-files --all --check
spelling:
timeout-minutes: 30
name: Spelling
runs-on: ubuntu-22.04
strategy:
fail-fast: false
steps:
- name: Get source
uses: actions/checkout@v4
- name: Install spell checkers
run: |
sudo apt-get update
sudo apt-get install python3-pip
pip3 install codespell==2.2.6 typos==1.16.26
- name: Run codespell
run: codespell -q 7 -S ".git,build*,./misc/typos.toml,./src/third_party/*" -I misc/codespell-allowlist.txt
- name: Run typos
run: typos -c misc/typos.toml