name: cmake on: push: branches: [main] paths: - ".github/workflows/cmake.yml" - "include/**" - "src/**" - "tests/**" - "CMakeLists.txt" pull_request: branches: [main] paths: - ".github/workflows/cmake.yml" - "include/**" - "src/**" - "tests/**" - "CMakeLists.txt" jobs: build: strategy: matrix: os: [ubuntu-24.04, windows-2025, macos-15] runs-on: ${{ matrix.os }} steps: - name: Setup ninja if: matrix.os == 'windows-2025' uses: MinoruSekine/setup-scoop@v4.0.1 with: buckets: main apps: ninja - name: Setup llvm & libstdc++ & cmake & ninja if: matrix.os == 'ubuntu-24.04' run: | sudo apt update sudo apt install -y gcc-14 g++-14 libstdc++-14-dev sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 100 sudo update-alternatives --set gcc /usr/bin/gcc-14 sudo update-alternatives --set g++ /usr/bin/g++-14 wget https://apt.llvm.org/llvm.sh chmod +x llvm.sh sudo ./llvm.sh 20 all sudo apt install -y cmake ninja-build - name: Setup llvm@20 and lld if: matrix.os == 'macos-15' run: | brew install llvm@20 lld@20 - name: Checkout repository uses: actions/checkout@v4 - name: Setup msvc sysroot for cmake if: matrix.os == 'windows-2025' uses: ilammy/msvc-dev-cmd@v1 - name: Build clice (release, windows) if: matrix.os == 'windows-2025' run: | cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCLICE_ENABLE_TEST=ON cmake --build build - name: Build clice (debug, linux) if: matrix.os == 'ubuntu-24.04' run: | cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang-20 -DCMAKE_CXX_COMPILER=clang++-20 -DCLICE_ENABLE_TEST=ON cmake --build build - name: Build clice (debug, macos) if: matrix.os == 'macos-15' run: | export PATH="/opt/homebrew/opt/llvm@20/bin:/opt/homebrew/opt/lld@20/bin:$PATH" cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCLICE_ENABLE_TEST=ON cmake --build build - name: Install uv for integration tests uses: astral-sh/setup-uv@v6 - name: Run tests if: matrix.os == 'windows-2025' run: | ./build/bin/unit_tests.exe --test-dir="./tests/data" --resource-dir="./.llvm/lib/clang/20" uv run pytest -s --log-cli-level=INFO tests/integration --executable=./build/bin/clice.exe --resource-dir="./build/lib/clang/20" - name: Run tests if: matrix.os == 'ubuntu-24.04' || matrix.os == 'macos-15' run: | ./build/bin/unit_tests --test-dir="./tests/data" --resource-dir="./.llvm/lib/clang/20" uv run pytest -s --log-cli-level=INFO tests/integration --executable=./build/bin/clice --resource-dir="./build/lib/clang/20"