👷 Update CI tasks (#2) #20
This file contains hidden or 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
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) }} | |