Nightly #76
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: Nightly | |
on: | |
schedule: | |
# Run every night at 2 AM UTC | |
- cron: '0 2 * * *' | |
workflow_dispatch: # Allow manual triggering | |
env: | |
BUILD_TYPE: Release | |
jobs: | |
nightly-build: | |
name: Nightly Build - ${{ matrix.config.name }} | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
name: "Windows MSVC Latest", | |
os: windows-latest, | |
generator: "Ninja", | |
cc: "cl", | |
cxx: "cl" | |
} | |
- { | |
name: "Ubuntu GCC Latest", | |
os: ubuntu-latest, | |
generator: "Ninja", | |
cc: "gcc-14", | |
cxx: "g++-14" | |
} | |
- { | |
name: "Ubuntu Clang Latest", | |
os: ubuntu-latest, | |
generator: "Ninja", | |
cc: "clang", | |
cxx: "clang++" | |
} | |
- { | |
name: "macOS Clang Latest", | |
os: macos-latest, | |
generator: "Ninja", | |
cc: "clang", | |
cxx: "clang++", | |
min_clang_version: "17" | |
} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup CMake and Ninja | |
uses: lukka/get-cmake@latest | |
- name: Install Linux dependencies | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y build-essential gcc-14 g++-14 | |
- name: Check macOS Clang version | |
if: runner.os == 'macOS' | |
id: clang_check | |
run: | | |
# Check current Clang version | |
clang_version=$(clang --version | head -n1 | grep -o '[0-9]\+\.[0-9]\+' | head -n1 | cut -d. -f1) | |
echo "Current Clang version: $clang_version" | |
echo "clang_version=$clang_version" >> $GITHUB_OUTPUT | |
if [[ "${{ matrix.config.min_clang_version }}" != "" ]] && [[ $clang_version -lt ${{ matrix.config.min_clang_version }} ]]; then | |
echo "Clang version $clang_version is less than required ${{ matrix.config.min_clang_version }}" | |
echo "Skipping this build as it's not compatible with older Clang versions" | |
echo "skip_build=true" >> $GITHUB_OUTPUT | |
else | |
echo "skip_build=false" >> $GITHUB_OUTPUT | |
fi | |
- name: Skip build notification | |
if: runner.os == 'macOS' && steps.clang_check.outputs.skip_build == 'true' | |
run: | | |
echo "::notice::Skipping macOS build due to incompatible Clang version (${{ steps.clang_check.outputs.clang_version }} < ${{ matrix.config.min_clang_version }})" | |
- name: Setup MSVC | |
if: runner.os == 'Windows' | |
uses: ilammy/msvc-dev-cmd@v1 | |
- name: Configure CMake | |
if: steps.clang_check.outputs.skip_build != 'true' | |
shell: bash | |
run: | | |
cmake -B build \ | |
-G "${{ matrix.config.generator }}" \ | |
-DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ | |
-DCMAKE_C_COMPILER=${{ matrix.config.cc }} \ | |
-DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} \ | |
-DOULY_BUILD_TESTS=ON \ | |
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON | |
working-directory: ${{ github.workspace }} | |
env: | |
CC: ${{ matrix.config.cc }} | |
CXX: ${{ matrix.config.cxx }} | |
- name: Build | |
if: steps.clang_check.outputs.skip_build != 'true' | |
working-directory: build | |
run: cmake --build . --config ${{ env.BUILD_TYPE }} --parallel | |
- name: Test | |
if: steps.clang_check.outputs.skip_build != 'true' | |
working-directory: build | |
run: ctest -C ${{ env.BUILD_TYPE }} --output-on-failure --parallel | |
- name: Report Status | |
if: failure() && steps.clang_check.outputs.skip_build != 'true' | |
run: | | |
echo "::warning::Nightly build failed for ${{ matrix.config.name }}" |