Skip to content

👷 Update CI tasks #16

👷 Update CI tasks

👷 Update CI tasks #16

name: Compiler Compatibility CI
on:
push:
branches: [master]
pull_request:
jobs:
build:
strategy:
fail-fast: false
matrix:
compiler:
- { tag: "ubuntu-2404_clang-16", name: "Ubuntu 24.04 Clang 16", cxx: "/usr/bin/clang++-16", cc: "/usr/bin/clang-16", runs-on: "ubuntu-24.04" }
- { tag: "ubuntu-2404_clang-17", name: "Ubuntu 24.04 Clang 17", cxx: "/usr/bin/clang++-17", cc: "/usr/bin/clang-17", runs-on: "ubuntu-24.04" }
- { tag: "ubuntu-2404_clang-18", name: "Ubuntu 24.04 Clang 18", cxx: "/usr/bin/clang++-18", cc: "/usr/bin/clang-18", runs-on: "ubuntu-24.04" }
- { tag: "ubuntu-2404_gcc-12", name: "Ubuntu 24.04 G++ 12", cxx: "/usr/bin/g++-12", cc: "/usr/bin/gcc-12", runs-on: "ubuntu-24.04" }
- { tag: "ubuntu-2404_gcc-13", name: "Ubuntu 24.04 G++ 13", cxx: "/usr/bin/g++-13", cc: "/usr/bin/gcc-13", runs-on: "ubuntu-24.04" }
- { tag: "ubuntu-2404_gcc-14", name: "Ubuntu 24.04 G++ 14", cxx: "/usr/bin/g++-14", cc: "/usr/bin/gcc-14", runs-on: "ubuntu-24.04" }
- { tag: "ubuntu-2204_clang-13", name: "Ubuntu 22.04 Clang 13", cxx: "/usr/bin/clang++-13", cc: "/usr/bin/clang-13", runs-on: "ubuntu-22.04" }
- { tag: "ubuntu-2204_clang-14", name: "Ubuntu 22.04 Clang 14", cxx: "/usr/bin/clang++-14", cc: "/usr/bin/clang-14", runs-on: "ubuntu-22.04" }
- { tag: "ubuntu-2204_clang-15", name: "Ubuntu 22.04 Clang 15", cxx: "/usr/bin/clang++-15", cc: "/usr/bin/clang-15", runs-on: "ubuntu-22.04" }
- { tag: "ubuntu-2204_gcc-10", name: "Ubuntu 22.04 G++ 10", cxx: "/usr/bin/g++-10", cc: "/usr/bin/gcc-10", runs-on: "ubuntu-22.04" }
- { tag: "ubuntu-2204_gcc-11", name: "Ubuntu 22.04 G++ 11", cxx: "/usr/bin/g++-11", cc: "/usr/bin/gcc-11", runs-on: "ubuntu-22.04" }
- { tag: "windows-2025_msvc17", name: "Windows Server 2025 MSVC 17", cxx: "", cc: "", runs-on: "windows-2025" }
- { tag: "windows-2022_msvc17", name: "Windows Server 2022 MSVC 17", cxx: "", cc: "", runs-on: "windows-2022" }
- { tag: "macos-13_clang-15", name: "MacOS 13 Clang 15", cxx: "/usr/local/Cellar/llvm@15//15.0.7/bin/clang++", cc: "/usr/local/Cellar/llvm@15//15.0.7/bin/clang", runs-on: "macos-13" }
- { tag: "macos-14-arm_clang-15", name: "MacOS 14 (Arm64) Clang 15", cxx: "/opt/homebrew/opt/llvm@15/bin/clang++", cc: "/opt/homebrew/opt/llvm@15/bin/clang", runs-on: "macos-14" }
- { tag: "macos-15-arm_clang-18", name: "MacOS 15 (Arm64) Clang 18", cxx: "/opt/homebrew/opt/llvm@18/bin/clang++", cc: "/opt/homebrew/opt/llvm@18/bin/clang", runs-on: "macos-15" }
# x64 MacOS is payed only for >= 14
# - { tag: "macos-14_clang-15", name: "MacOS 14 Clang 15", cxx: "/opt/homebrew/opt/llvm@15/bin/clang++", cc: "/opt/homebrew/opt/llvm@15/bin/clang", runs-on: "macos-14-large" }
# - { tag: "macos-15_clang-18", name: "MacOS 15 Clang 18", cxx: "/opt/homebrew/opt/llvm@18/bin/clang++", cc: "/opt/homebrew/opt/llvm@18/bin/clang", runs-on: "macos-15-large" }
runs-on: ${{ matrix.compiler.runs-on }}
name: Compiler ${{ matrix.compiler.name }}
env:
CXX: ${{ matrix.compiler.cxx }}
CC: ${{ matrix.compiler.cc }}
outputs:
# Because github wants us to suffer we need to list out every output instead of using a matrix statement or some kind of dynamic setting
ubuntu-2404_clang-16: ${{ steps.status.outputs.ubuntu-2404_clang-16 }}
ubuntu-2404_clang-17: ${{ steps.status.outputs.ubuntu-2404_clang-17 }}
ubuntu-2404_clang-18: ${{ steps.status.outputs.ubuntu-2404_clang-18 }}
ubuntu-2404_gcc-12: ${{ steps.status.outputs.ubuntu-2404_gcc-12 }}
ubuntu-2404_gcc-13: ${{ steps.status.outputs.ubuntu-2404_gcc-13 }}
ubuntu-2404_gcc-14: ${{ steps.status.outputs.ubuntu-2404_gcc-14 }}
ubuntu-2204_clang-13: ${{ steps.status.outputs.ubuntu-2204_clang-13 }}
ubuntu-2204_clang-14: ${{ steps.status.outputs.ubuntu-2204_clang-14 }}
ubuntu-2204_clang-15: ${{ steps.status.outputs.ubuntu-2204_clang-15 }}
ubuntu-2204_gcc-10: ${{ steps.status.outputs.ubuntu-2204_gcc-10 }}
ubuntu-2204_gcc-11: ${{ steps.status.outputs.ubuntu-2204_gcc-11 }}
windows-2025_msvc17: ${{ steps.status.outputs.windows-2025_msvc17 }}
windows-2022_msvc17: ${{ steps.status.outputs.windows-2022_msvc17 }}
macos-13_clang-15: ${{ steps.status.outputs.macos-13_clang-15 }}
macos-14-arm_clang-15: ${{ steps.status.outputs.macos-14-arm_clang-15 }}
macos-15-arm_clang-18: ${{ steps.status.outputs.macos-15-arm_clang-18 }}
macos-14_clang-15: ${{ steps.status.outputs.macos-14_clang-15 }}
macos-15_clang-18: ${{ steps.status.outputs.macos-15_clang-18 }}
defaults:
run:
shell: bash -l {0}
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set LDFLAGS=-Wl,-ld_classic
if: contains(matrix.compiler.tag, 'macos-13') || contains(matrix.compiler.tag, 'macos-14')
run: echo "LDFLAGS=-Wl,-ld_classic" >> $GITHUB_ENV
# Ubuntu 22.04 container has libstdc++13 installed which is incompatible with clang < 15 in C++20
- name: Uninstall libstdc++-13-dev
if: (matrix.compiler.tag == 'ubuntu-2204_clang-14') || (matrix.compiler.tag == 'ubuntu-2204_clang-13')
run: |
sudo apt autoremove libstdc++-13-dev gcc-13 libgcc-13-dev
sudo apt install libstdc++-12-dev gcc-12 libgcc-12-dev
- name: Install liburing
if: contains(matrix.compiler.runs-on, 'ubuntu')
run: sudo apt install liburing-dev
- name: Configure
if: contains(matrix.compiler.tag, 'ubuntu')
run: cmake -S. -Bbuild -DASYNCPP_BUILD_TEST=ON -DASYNCPP_WITH_ASAN=ON -DASYNCPP_WITH_TSAN=OFF
- name: Configure
if: contains(matrix.compiler.tag, 'ubuntu') != true
run: cmake -S. -Bbuild -DASYNCPP_BUILD_TEST=ON -DASYNCPP_WITH_ASAN=OFF -DASYNCPP_WITH_TSAN=OFF
- name: Build
run: cmake --build build --config Debug
- name: Test
working-directory: ${{ github.workspace }}/build
if: contains(matrix.compiler.tag, 'windows') != true
run: ./asyncpp_io-test
- name: Test
if: contains(matrix.compiler.tag, 'windows')
working-directory: ${{ github.workspace }}/build
run: Debug/asyncpp_io-test.exe
- name: Update Result
id: status
if: ${{ always() }}
run: echo "${{ matrix.compiler.tag }}=${{ job.status }}" >> $GITHUB_OUTPUT
badge-upload:
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && always() }}
needs: [build]
runs-on: ubuntu-20.04
name: Publish badges
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Publish Badges
uses: ./.github/actions/badge
with:
category: compiler
badges: ${{ toJson(needs.build.outputs) }}