Skip to content

Bump actions/checkout from 6 to 7 in the actions group #65

Bump actions/checkout from 6 to 7 in the actions group

Bump actions/checkout from 6 to 7 in the actions group #65

Workflow file for this run

name: ci
on:
push:
branches: [ master ]
tags: [ v* ]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
build:
name: ${{ matrix.platform.name }}-${{ matrix.config.name }}-${{ matrix.type.name }}
runs-on: ${{ matrix.platform.os }}
strategy:
fail-fast: false
matrix:
platform:
- { name: Windows MinGW, os: windows-2025, flags: -GNinja -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ -DEvoAI_BUILD_TESTS=TRUE }
- { name: Windows LLVM, os: windows-2025, flags: -GNinja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DEvoAI_BUILD_TESTS=TRUE }
- { name: Linux GCC, os: ubuntu-24.04, flags: -G"Unix Makefiles" -DEvoAI_BUILD_TESTS=TRUE }
- { name: Linux Clang, os: ubuntu-24.04, flags: -G"Unix Makefiles" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DEvoAI_BUILD_TESTS=TRUE }
- { name: macOS x64, os: macos-15, flags: -GNinja -DEvoAI_BUILD_TESTS=TRUE }
- { name: macOS x64 Xcode, os: macos-15, flags: -GXcode -DEvoAI_BUILD_TESTS=TRUE }
- { name: macOS arm64, os: macos-15, flags: -GNinja -DEvoAI_BUILD_TESTS=TRUE }
config:
- { name: Shared, flags: -DBUILD_SHARED_LIBS=TRUE }
- { name: Static, flags: -DBUILD_SHARED_LIBS=FALSE -DEvoAI_BUILD_STATIC=TRUE }
type:
- { name: Release, flags: -DCMAKE_BUILD_TYPE=Release }
- { name: Debug, flags: -DCMAKE_BUILD_TYPE=Debug }
include:
- platform: { name: Android, os: ubuntu-24.04 }
config: { name: x86 (API 33), flags: -GNinja -DCMAKE_ANDROID_ARCH_ABI=x86 -DCMAKE_SYSTEM_NAME=Android -DCMAKE_SYSTEM_VERSION=33 -DCMAKE_ANDROID_NDK=$ANDROID_SDK_ROOT/ndk/26.2.11394342 -DBUILD_SHARED_LIBS=TRUE -DCMAKE_ANDROID_STL_TYPE=c++_shared, arch: x86, api: 33 }
type: { name: Release }
- platform: { name: Android, os: ubuntu-24.04 }
config: { name: x86_64 (API 33), flags: -GNinja -DCMAKE_ANDROID_ARCH_ABI=x86_64 -DCMAKE_SYSTEM_NAME=Android -DCMAKE_SYSTEM_VERSION=33 -DCMAKE_ANDROID_NDK=$ANDROID_SDK_ROOT/ndk/26.2.11394342 -DBUILD_SHARED_LIBS=TRUE -DCMAKE_ANDROID_STL_TYPE=c++_shared, arch: x86_64, api: 33 }
type: { name: Release }
- platform: { name: Android, os: ubuntu-24.04 }
config: { name: armeabi-v7a (API 33), flags: -GNinja -DCMAKE_ANDROID_ARCH_ABI=armeabi-v7a -DCMAKE_SYSTEM_NAME=Android -DCMAKE_SYSTEM_VERSION=33 -DCMAKE_ANDROID_NDK=$ANDROID_SDK_ROOT/ndk/26.2.11394342 -DBUILD_SHARED_LIBS=TRUE -DCMAKE_ANDROID_STL_TYPE=c++_shared, arch: armeabi-v7a, api: 33 }
type: { name: Release, flags: -DCMAKE_BUILD_TYPE=Release }
- platform: { name: Android, os: ubuntu-24.04 }
config: { name: arm64-v8a (API 33), flags: -GNinja -DCMAKE_ANDROID_ARCH_ABI=arm64-v8a -DCMAKE_SYSTEM_NAME=Android -DCMAKE_SYSTEM_VERSION=33 -DCMAKE_ANDROID_NDK=$ANDROID_SDK_ROOT/ndk/26.2.11394342 -DBUILD_SHARED_LIBS=TRUE -DCMAKE_ANDROID_STL_TYPE=c++_shared, arch: arm64-v8a, api: 33 }
type: { name: Release, flags: -DCMAKE_BUILD_TYPE=Release }
- platform: { name: Emscripten, os: ubuntu-24.04, flags: -DEvoAI_BUILD_TESTS=TRUE }
config: { name: Static, flags: -G"Unix Makefiles" -DBUILD_SHARED_LIBS=FALSE -DEvoAI_BUILD_STATIC=TRUE }
type: { name: Release, flags: -DCMAKE_BUILD_TYPE=Release }
exclude:
- platform: { name: Emscripten }
config: { name: Shared }
steps:
- name: Checkout Code
uses: actions/checkout@v7
- name: Setup MSYS2
if: runner.os == 'Windows'
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
update: true
install: >-
git
base-devel
mingw-w64-x86_64-toolchain
mingw-w64-x86_64-cmake
mingw-w64-x86_64-ninja
mingw-w64-x86_64-clang
- name: Get CMake and Ninja
if: runner.os != 'Windows'
uses: lukka/get-cmake@latest
with:
cmakeVersion: '3.28'
ninjaVersion: latest
- name: Cache Desktop Deps
if: matrix.platform.name != 'Android' && matrix.platform.name != 'Emscripten'
id: cache-desktop
uses: actions/cache@v5
with:
path: |
JsonBox/build/install
googletest/build/install
key: desktop-${{ runner.os }}-${{ matrix.platform.name }}-${{ matrix.config.name }}-${{ matrix.type.name }}
- name: Cache Emscripten Deps
if: matrix.platform.name == 'Emscripten'
id: cache-emscripten
uses: actions/cache@v5
with:
path: |
emsdk
JsonBox/build/install
googletest/build/install
key: emscripten-${{ matrix.type.name }}
- name: Cache Android NDK & Libs
if: matrix.platform.name == 'Android'
id: cache-android
uses: actions/cache@v5
with:
path: |
/usr/local/lib/android/sdk/ndk/26.2.11394342
key: android-deps-ndk-26.2-${{ matrix.type.name }}
- name: Install Android components
if: matrix.platform.name == 'Android' && steps.cache-android.outputs.cache-hit != 'true'
run: |
echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --install "build-tools;33.0.2"
echo "y" | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --install "ndk;26.2.11394342"
- name: Build Dependencies (Windows)
if: runner.os == 'Windows' && steps.cache-desktop.outputs.cache-hit != 'true'
shell: msys2 {0}
run: |
./.devops/install_dependencies.sh "${{ matrix.platform.name }}" ${{ matrix.type.name }}
- name: Build Dependencies (Linux/Mac)
if: runner.os != 'Windows' && matrix.platform.name != 'Android' && matrix.platform.name != 'Emscripten' && steps.cache-desktop.outputs.cache-hit != 'true'
run: |
bash .devops/install_dependencies.sh "${{ matrix.platform.name }}" ${{ matrix.type.name }}
- name: Build Dependencies (Android)
if: matrix.platform.name == 'Android' && steps.cache-android.outputs.cache-hit != 'true'
run: |
export ANDROID_NDK_ROOT=$(echo $ANDROID_SDK_ROOT/ndk/26.2.11394342)
bash .devops/install_dependencies.sh "${{ matrix.platform.name }}" ${{ matrix.type.name }}
- name: Build Dependencies (Emscripten)
if: matrix.platform.name == 'Emscripten' && steps.cache-emscripten.outputs.cache-hit != 'true'
run: |
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source emsdk_env.sh
cd ..
bash .devops/install_dependencies.sh "${{ matrix.platform.name }}" ${{ matrix.type.name }}
- name: Build and Test (Windows)
if: runner.os == 'Windows'
shell: msys2 {0}
run: |
export JB_ROOT=$(cd JsonBox/build/install && pwd -W)
export GT_ROOT=$(cd googletest/build/install && pwd -W)
mkdir build && cd build
cmake \
${{ matrix.config.flags }} ${{ matrix.platform.flags }} ${{ matrix.type.flags }} \
-DJsonBox_ROOT="$JB_ROOT" \
-DGTest_ROOT="$GT_ROOT" \
..
cmake --build . --config ${{ matrix.type.name }} -j 4
export PATH=$PATH:/mingw64/bin
ctest --output-on-failure -C ${{ matrix.type.name }} --repeat until-pass:3
- name: Build and Test (Linux/Mac)
if: runner.os != 'Windows' && matrix.platform.name != 'Android' && matrix.platform.name != 'Emscripten'
run: |
mkdir build && cd build
cmake \
${{ matrix.config.flags }} ${{ matrix.platform.flags }} ${{ matrix.type.flags }} \
-DJsonBox_ROOT=$GITHUB_WORKSPACE/JsonBox/build/install \
-DGTest_ROOT=$GITHUB_WORKSPACE/googletest/build/install \
..
cmake --build . --config ${{ matrix.type.name }} -j 4
ctest --output-on-failure -C ${{ matrix.type.name == 'Debug' && 'Debug' || 'Release' }} --repeat until-pass:3
- name: Build and Test (Emscripten)
if: matrix.platform.name == 'Emscripten'
run: |
./emsdk/emsdk activate latest
source ./emsdk/emsdk_env.sh
mkdir build && cd build
emcmake cmake \
${{ matrix.config.flags }} ${{ matrix.platform.flags }} \
-DJsonBox_ROOT=$GITHUB_WORKSPACE/JsonBox/build/install \
-DGTest_ROOT=$GITHUB_WORKSPACE/googletest/build/install \
..
cmake --build . --config ${{ matrix.type.name }} -j 4
node bin/RunAllTests.js
- name: Build (Android)
if: matrix.platform.name == 'Android'
run: |
mkdir build && cd build
cmake ${{ matrix.config.flags }} -DJsonBox_ROOT=$ANDROID_SDK_ROOT/ndk/26.2.11394342/sources/third_party/JsonBox ..
cmake --build . --config ${{ matrix.type.name }} -j 4
- name: Package (Windows)
if: matrix.type.name == 'Release' && runner.os == 'Windows'
shell: msys2 {0}
run: |
cd build
cpack -G ZIP
- name: Package (Unix)
if: matrix.type.name == 'Release'
run: |
cd build
cpack -G ZIP
- name: Upload Artifacts
if: matrix.type.name == 'Release'
uses: actions/upload-artifact@v7
with:
name: EvoAI-${{ matrix.platform.name }}-${{ matrix.config.name }}
path: build/*.zip
if-no-files-found: warn
release:
name: Create Release
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Download Artifacts
uses: actions/download-artifact@v8
with:
path: artifacts
merge-multiple: true
- name: Create Release
uses: softprops/action-gh-release@v3
with:
files: artifacts/*.zip
generate_release_notes: true