name: CI
on:
  push:
    branches: [main]
permissions:
  contents: read
jobs:
  build-appleclang:
    runs-on: macos-latest
    strategy:
      fail-fast: false
      matrix:
        ver: [17, 20]
    env:
      CC: clang
      CXX: clang++
      # Unlike GCC and upstream Clang, AppleClang still defaults to `-std=c++98`
      # for some reason. Also, the macOS image on GitHub Actions provides wildly
      # numbered Xcode versions. Thus, rather than varying the compiler version,
      # we set the `-std` flag explicitly in order to vary the language version.
      # (The other two flags are the default provided for CXXFLAGS in Makefile.)
      CXXFLAGS: -O3 -g -std=c++${{ matrix.ver }}
    steps:
      - uses: actions/checkout@v4
      - name: Install Abseil, GoogleTest and Benchmark
        run: |
          brew update
          brew install abseil googletest google-benchmark
        shell: bash
      - run: make && make test
        shell: bash
  build-clang:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        ver: [15, 16, 17]
    env:
      CC: clang-${{ matrix.ver }}
      CXX: clang++-${{ matrix.ver }}
    steps:
      - uses: actions/checkout@v4
      - name: Install Clang ${{ matrix.ver }}
        run: |
          # Avoid `Conflicts: python3-lldb-x.y` between packages.
          sudo apt purge -y python3-lldb-14
          wget https://apt.llvm.org/llvm.sh
          chmod +x ./llvm.sh
          sudo ./llvm.sh ${{ matrix.ver }}
        shell: bash
      - name: Install Abseil, GoogleTest and Benchmark
        run: |
          sudo apt update -y
          sudo apt install -y libabsl-dev libgtest-dev libbenchmark-dev
        shell: bash
      - run: make && make test
        shell: bash
  build-gcc:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        ver: [11, 12, 13]
    env:
      CC: gcc-${{ matrix.ver }}
      CXX: g++-${{ matrix.ver }}
    steps:
      - uses: actions/checkout@v4
      - name: Install Abseil, GoogleTest and Benchmark
        run: |
          sudo apt update -y
          sudo apt install -y libabsl-dev libgtest-dev libbenchmark-dev
        shell: bash
      - run: make && make test
        shell: bash
