Compiler test #319
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
name: Continuous Integration Tests | |
on: | |
push: | |
pull_request: | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
schedule: | |
- cron: '30 15 * * *' | |
jobs: | |
preset-test: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
preset: ["gcc-debug", "gcc-release"] | |
name: "Preset: ${{ matrix.preset }}" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup build environment | |
uses: lukka/get-cmake@latest | |
with: | |
cmakeVersion: "~3.25.0" | |
ninjaVersion: "^1.11.1" | |
- name: Run preset | |
run: cmake --workflow --preset ${{ matrix.preset }} | |
gtest-test: | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [ubuntu-latest] | |
compiler: | |
- cpp: g++ | |
c: gcc | |
- cpp: clang++ | |
c: clang | |
cpp_version: [17, 20, 23, 26] | |
cmake_args: | |
- description: "Default" | |
args: "" | |
- description: "TSan" | |
args: "-DCMAKE_CXX_FLAGS=-fsanitize=thread" | |
- description: "ASan" | |
args: "-DCMAKE_CXX_FLAGS='-fsanitize=address -fsanitize=undefined'" | |
include: | |
- platform: ubuntu-latest | |
compiler: | |
cpp: g++ | |
c: gcc | |
cpp_version: 17 | |
cmake_args: | |
description: "Werror" | |
args: "-DCMAKE_CXX_FLAGS='-Werror=all -Werror=extra'" | |
- platform: ubuntu-latest | |
compiler: | |
cpp: g++ | |
c: gcc | |
cpp_version: 17 | |
cmake_args: | |
description: "Dynamic" | |
args: "-DBUILD_SHARED_LIBS=on" | |
name: "Unit: ${{ matrix.compiler.c }} ${{ matrix.cpp_version }} ${{ matrix.cmake_args.description }}" | |
runs-on: ${{ matrix.platform }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Ninja | |
uses: lukka/get-cmake@latest | |
with: | |
cmakeVersion: "~3.25.0" | |
ninjaVersion: "^1.11.1" | |
- name: Print installed softwares | |
run: | | |
clang++ --version | |
g++ --version | |
cmake --version | |
ninja --version | |
- name: Configure CMake | |
run: | | |
cmake -B build -S . -DCMAKE_CXX_STANDARD=${{ matrix.cpp_version }} ${{ matrix.cmake_args.args }} | |
env: | |
CC: ${{ matrix.compiler.c }} | |
CXX: ${{ matrix.compiler.cpp }} | |
CMAKE_GENERATOR: "Ninja Multi-Config" | |
- name: Build Release | |
run: | | |
cmake --build build --config Release --verbose | |
cmake --build build --config Release --target all_verify_interface_header_sets | |
cmake --install build --config Release --prefix /opt/beman.exemplar | |
find /opt/beman.exemplar -type f | |
- name: Test Release | |
run: ctest --test-dir build --build-config Release | |
- name: Build Debug | |
run: | | |
cmake --build build --config Debug --verbose | |
cmake --build build --config Debug --target all_verify_interface_header_sets | |
cmake --install build --config Debug --prefix /opt/beman.exemplar | |
find /opt/beman.exemplar -type f | |
- name: Test Debug | |
run: ctest --test-dir build --build-config Debug | |
configuration-test: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
args: | |
- name: "Disable build testing" | |
arg: "-DBEMAN_EXEMPLAR_BUILD_TESTS=OFF" | |
- name: "Disable example building" | |
arg: "-DBEMAN_EXEMPLAR_BUILD_EXAMPLES=OFF" | |
name: "CMake: ${{ matrix.args.name }}" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup build environment | |
uses: lukka/get-cmake@latest | |
with: | |
cmakeVersion: "~3.25.0" | |
ninjaVersion: "^1.11.1" | |
- name: Print installed softwares | |
run: | | |
cmake --version | |
ninja --version | |
- name: Configure CMake | |
run: | | |
cmake -B build -S . -DCMAKE_CXX_STANDARD=17 ${{ matrix.args.arg }} | |
env: | |
CMAKE_GENERATOR: "Ninja Multi-Config" | |
- name: Build Release | |
run: | | |
cmake --build build --config Release --verbose | |
cmake --build build --config Release --target all_verify_interface_header_sets | |
cmake --install build --config Release --prefix /opt/beman.exemplar | |
find /opt/beman.exemplar -type f | |
- name: Build Debug | |
run: | | |
cmake --build build --config Debug --verbose | |
cmake --build build --config Debug --target all_verify_interface_header_sets | |
cmake --install build --config Debug --prefix /opt/beman.exemplar | |
find /opt/beman.exemplar -type f | |
compiler-test: | |
runs-on: ubuntu-24.04 | |
strategy: | |
matrix: | |
compilers: | |
- class: GNU | |
version: 14 | |
- class: GNU | |
version: 13 | |
- class: GNU | |
version: 12 | |
- class: LLVM | |
version: 20 | |
- class: LLVM | |
version: 19 | |
- class: LLVM | |
version: 18 | |
- class: LLVM | |
version: 17 | |
name: "Compiler: ${{ matrix.compilers.class }} ${{ matrix.compilers.version }}" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup build environment | |
uses: lukka/get-cmake@latest | |
with: | |
cmakeVersion: "~3.25.0" | |
ninjaVersion: "^1.11.1" | |
- name: Install Compiler | |
id: install-compiler | |
run: | | |
if [ "${{ matrix.compilers.class }}" = "GNU" ]; then | |
CC=gcc-${{ matrix.compilers.version }} | |
CXX=g++-${{ matrix.compilers.version }} | |
sudo add-apt-repository universe | |
sudo apt-get update | |
sudo apt-get install -y $CC | |
sudo apt-get install -y $CXX | |
$CC --version | |
$CXX --version | |
else | |
wget https://apt.llvm.org/llvm.sh | |
chmod +x llvm.sh | |
sudo bash llvm.sh ${{ matrix.compilers.version }} | |
CC=clang-${{ matrix.compilers.version }} | |
CXX=clang++-${{ matrix.compilers.version }} | |
$CC --version | |
$CXX --version | |
fi | |
echo "CC=$CC" >> "$GITHUB_OUTPUT" | |
echo "CXX=$CXX" >> "$GITHUB_OUTPUT" | |
- name: Configure CMake | |
run: | | |
cmake -B build -S . -DCMAKE_CXX_STANDARD=20 | |
env: | |
CC: ${{ steps.install-compiler.outputs.CC }} | |
CXX: ${{ steps.install-compiler.outputs.CXX }} | |
CMAKE_GENERATOR: "Ninja Multi-Config" | |
- name: Build Debug | |
run: | | |
cmake --build build --config Debug --verbose | |
cmake --build build --config Debug --target all_verify_interface_header_sets | |
cmake --install build --config Debug --prefix /opt/beman.exemplar | |
find /opt/beman.exemplar -type f | |
- name: Test Debug | |
run: ctest --test-dir build --build-config Debug | |
create-issue-when-fault: | |
runs-on: ubuntu-latest | |
needs: [preset-test, gtest-test, configuration-test, compiler-test] | |
if: failure() && github.event_name == 'schedule' | |
steps: | |
# See https://github.com/cli/cli/issues/5075 | |
- uses: actions/checkout@v4 | |
- name: Create issue | |
run: | | |
issue_num=$(gh issue list -s open -S "[SCHEDULED-BUILD] Build & Test failure" -L 1 --json number | jq 'if length == 0 then -1 else .[0].number end') | |
body="**Build-and-Test Failure Report** | |
- **Time of Failure**: $(date -u '+%B %d, %Y, %H:%M %Z') | |
- **Commit**: [${{ github.sha }}](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}) | |
- **Action Run**: [View logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) | |
The scheduled build-and-test triggered by cron has failed. | |
Please investigate the logs and recent changes associated with this commit or rerun the workflow if you believe this is an error." | |
if [[ $issue_num -eq -1 ]]; then | |
gh issue create --repo ${{ github.repository }} --title "[SCHEDULED-BUILD] Build & Test failure" --body "$body" | |
else | |
gh issue comment --repo ${{ github.repository }} $issue_num --body "$body" | |
fi | |
env: | |
GH_TOKEN: ${{ github.token }} |