github action #13 #78
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
name: CI Build | |
on: | |
push: | |
branches: | |
- main | |
- dev | |
pull_request: | |
branches: | |
- main | |
jobs: | |
build: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
include: | |
- os: windows-latest | |
c_compiler: cl | |
cpp_compiler: cl | |
- os: ubuntu-latest | |
c_compiler: gcc | |
cpp_compiler: g++ | |
- os: ubuntu-latest | |
c_compiler: clang | |
cpp_compiler: clang++ | |
- os: macos-latest | |
c_compiler: clang | |
cpp_compiler: clang++ | |
steps: | |
- uses: actions/checkout@v4 | |
# Install dependencies for Ubuntu | |
- name: Install dependencies (Ubuntu) | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y ninja-build qt6-base-dev qt6-base-dev-tools libgl1-mesa-dev libglu1-mesa-dev | |
echo "CMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu/cmake/Qt6" >> $GITHUB_ENV | |
# Install dependencies for macOS | |
- name: Install dependencies (macOS) | |
if: matrix.os == 'macos-latest' | |
run: | | |
brew install ninja qt | |
echo "CMAKE_PREFIX_PATH=$(brew --prefix qt)" >> $GITHUB_ENV | |
# Set up Visual Studio Build Tools and MSVC on Windows | |
- name: Set up Visual Studio Build Tools and MSVC (Windows) | |
if: matrix.os == 'windows-latest' | |
shell: powershell | |
run: | | |
choco install visualstudio2022buildtools -y | |
choco install ninja -y | |
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' -y | |
# Locate Visual Studio installation using vswhere | |
$vs_path = &"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" ` | |
-latest -products * ` | |
-requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ` | |
-property installationPath | |
if (-not $vs_path) { | |
Write-Host "Visual Studio Build Tools not found!" | |
exit 1 | |
} | |
$vs_vars_cmd = "$vs_path\VC\Auxiliary\Build\vcvars64.bat" | |
if (-not (Test-Path $vs_vars_cmd)) { | |
Write-Host "vcvars64.bat not found at: $vs_vars_cmd" | |
exit 1 | |
} | |
Write-Host "Found vcvars64.bat at: $vs_vars_cmd" | |
echo "VS_VARS_CMD=$vs_vars_cmd" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 | |
- name: Initialize MSVC environment | |
if: matrix.os == 'windows-latest' | |
shell: cmd | |
run: | | |
echo Using vcvars64.bat from: %VS_VARS_CMD% | |
if not exist "%VS_VARS_CMD%" ( | |
echo Error: vcvars64.bat not found! | |
exit 1 | |
) | |
call "%VS_VARS_CMD%" | |
- name: Set reusable build output path | |
id: strings | |
shell: bash | |
run: echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" | |
- name: Configure CMake | |
run: | | |
cmake -B "${{ steps.strings.outputs.build-output-dir }}" \ | |
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} \ | |
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} \ | |
-DCMAKE_BUILD_TYPE=Release \ | |
-G "Ninja" \ | |
-S "${{ github.workspace }}" | |
shell: bash | |
- name: Build | |
run: cmake --build "${{ steps.strings.outputs.build-output-dir }}" --config Release | |
- name: Test | |
working-directory: "${{ steps.strings.outputs.build-output-dir }}" | |
run: ctest --output-on-failure --build-config Release |