| name: Comprehensive CI |
| |
| on: |
| push: |
| branches: |
| - master |
| - release |
| - devel |
| pull_request: |
| branches: |
| - master |
| - release |
| - devel |
| workflow_dispatch: |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| # Linux x64 - GCC |
| linux-gcc-x64: |
| runs-on: ubuntu-latest |
| name: Linux x64 (GCC) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Configure |
| run: cmake -B build -DTINYGLTF3_BUILD_TESTS=ON |
| |
| - name: Build |
| run: cmake --build build |
| |
| - name: Run tester_v3_c on a sample model |
| run: ./build/tester_v3_c models/Cube/Cube.gltf |
| |
| - name: Run tests |
| run: ctest --test-dir build --output-on-failure |
| |
| # Linux x64 - Clang 21 |
| linux-clang-x64: |
| runs-on: ubuntu-24.04 |
| name: Linux x64 (Clang 21) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Install Clang 21 |
| run: | |
| wget https://apt.llvm.org/llvm.sh |
| chmod +x llvm.sh |
| sudo ./llvm.sh 21 |
| |
| - name: Configure |
| run: | |
| cmake -B build -DCMAKE_C_COMPILER=clang-21 -DTINYGLTF3_BUILD_TESTS=ON |
| |
| - name: Build |
| run: cmake --build build |
| |
| - name: Run tester_v3_c on a sample model |
| run: ./build/tester_v3_c models/Cube/Cube.gltf |
| |
| - name: Run tests |
| run: ctest --test-dir build --output-on-failure |
| |
| # Linux ARM64 - GCC (native) |
| linux-arm64: |
| runs-on: ubuntu-24.04-arm |
| name: Linux ARM64 (GCC) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Configure |
| run: cmake -B build -DTINYGLTF3_BUILD_TESTS=ON |
| |
| - name: Build |
| run: cmake --build build |
| |
| - name: Run tester_v3_c on a sample model |
| run: ./build/tester_v3_c models/Cube/Cube.gltf |
| |
| - name: Run tests |
| run: ctest --test-dir build --output-on-failure |
| |
| # macOS ARM64 Apple Silicon |
| macos-arm64: |
| runs-on: macos-14 |
| name: macOS ARM64 Apple Silicon (Clang) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Configure |
| run: cmake -B build -DTINYGLTF3_BUILD_TESTS=ON |
| |
| - name: Build |
| run: cmake --build build |
| |
| - name: Run tester_v3_c on a sample model |
| run: ./build/tester_v3_c models/Cube/Cube.gltf |
| |
| - name: Run tests |
| run: ctest --test-dir build --output-on-failure |
| |
| # Windows x64 - MSVC (VS version agnostic; msvc-dev-cmd locates the |
| # Visual Studio shipped with the runner image, e.g. VS2022 or VS2026) |
| windows-msvc-x64: |
| runs-on: windows-latest |
| name: Windows x64 (MSVC) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Set up MSVC environment |
| uses: ilammy/msvc-dev-cmd@v1 |
| |
| - name: Configure |
| run: cmake -B build -G Ninja -DTINYGLTF3_BUILD_TESTS=ON |
| |
| - name: Build |
| run: cmake --build build |
| |
| - name: Run tester_v3_c on a sample model |
| run: | |
| .\build\tester_v3_c.exe models\Cube\Cube.gltf |
| |
| - name: Run tests |
| run: ctest --test-dir build --output-on-failure |
| |
| # Windows MinGW - MSYS2 |
| windows-mingw-msys2: |
| runs-on: windows-latest |
| name: Windows x64 (MinGW MSYS2) |
| defaults: |
| run: |
| shell: msys2 {0} |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Setup MSYS2 |
| uses: msys2/setup-msys2@v2 |
| with: |
| msystem: UCRT64 |
| install: base-devel |
| pacboy: >- |
| cc:p cmake:p ninja:p |
| update: true |
| release: false |
| |
| - name: Build with CMake |
| run: | |
| cmake -G"Ninja" -S . -B build -DTINYGLTF3_BUILD_TESTS=ON |
| cmake --build build |
| |
| - name: Run tester_v3_c on a sample model |
| run: | |
| ./build/tester_v3_c models/Cube/Cube.gltf |
| |
| - name: Run tests |
| run: ctest --test-dir build --output-on-failure |
| |
| # Linux -> Windows MinGW Cross-compile |
| linux-mingw-cross: |
| runs-on: ubuntu-latest |
| name: Linux→Windows (MinGW Cross) - Build Only |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Install MinGW |
| run: | |
| sudo apt-get update |
| sudo apt-get install -y build-essential mingw-w64 |
| |
| - name: Build |
| run: | |
| cd tests |
| x86_64-w64-mingw32-gcc -I../ -std=c11 -g -O0 -DTINYGLTF3_ENABLE_FS -o tester_v3_c.exe tester_v3_c.c ../tiny_gltf_v3.c |
| |
| # v3 C tests through Meson on the primary desktop platforms. |
| v3-c-meson: |
| runs-on: ${{ matrix.os }} |
| name: v3 C Meson (${{ matrix.os }}) |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu-latest, macos-latest, windows-latest] |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Install Meson |
| run: python -m pip install meson ninja |
| |
| - name: Configure |
| run: meson setup build-meson -Dtests=true |
| |
| - name: Build |
| run: meson compile -C build-meson |
| |
| - name: Run v3 C tests |
| run: meson test -C build-meson --print-errorlogs |
| |
| # v3 C runtime: internal security regression tests + ported v1 unit tests. |
| v3-c-tests: |
| runs-on: ubuntu-latest |
| name: v3 C tests (Linux x64, GCC) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Build tester_v3_c |
| run: | |
| cd tests |
| cc -I../ -std=c11 -g -O0 -Wall -Wextra -Wpedantic -Werror -DTINYGLTF3_ENABLE_FS \ |
| -o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c |
| |
| - name: Build tester_v3_c_v1port |
| run: | |
| cd tests |
| cc -I../ -std=c11 -g -O0 -Wall -Wextra -Wpedantic -Werror -DTINYGLTF3_ENABLE_FS \ |
| -o tester_v3_c_v1port tester_v3_c_v1port.c ../tiny_gltf_v3.c |
| |
| - name: Run tester_v3_c (security regressions) |
| run: | |
| cd tests |
| ./tester_v3_c |
| |
| - name: Run tester_v3_c_v1port (ported unit tests) |
| run: | |
| cd tests |
| ./tester_v3_c_v1port |
| |
| # v3 C runtime under stock Ubuntu clang. |
| v3-c-tests-clang: |
| runs-on: ubuntu-latest |
| name: v3 C tests (Linux x64, Clang) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Install clang |
| run: | |
| sudo apt-get update |
| sudo apt-get install -y clang |
| |
| - name: Build tester_v3_c |
| run: | |
| cd tests |
| clang -I../ -std=c11 -g -O0 -Werror -Weverything \ |
| -Wno-padded -Wno-unsafe-buffer-usage -Wno-switch-default \ |
| -Wno-format-nonliteral -Wno-float-equal -Wno-cast-align \ |
| -Wno-declaration-after-statement -Wno-unknown-warning-option \ |
| -Wno-pre-c11-compat \ |
| -DTINYGLTF3_ENABLE_FS \ |
| -o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c |
| |
| - name: Build tester_v3_c_v1port |
| run: | |
| cd tests |
| clang -I../ -std=c11 -g -O0 -Werror -Weverything \ |
| -Wno-padded -Wno-unsafe-buffer-usage -Wno-switch-default \ |
| -Wno-format-nonliteral -Wno-float-equal -Wno-cast-align \ |
| -Wno-declaration-after-statement -Wno-unknown-warning-option \ |
| -Wno-pre-c11-compat \ |
| -DTINYGLTF3_ENABLE_FS \ |
| -o tester_v3_c_v1port tester_v3_c_v1port.c ../tiny_gltf_v3.c |
| |
| - name: Run tester_v3_c |
| run: | |
| cd tests |
| ./tester_v3_c |
| |
| - name: Run tester_v3_c_v1port |
| run: | |
| cd tests |
| ./tester_v3_c_v1port |
| |
| # v3 C runtime under bleeding-edge clang 21 (matches local dev environment). |
| v3-c-tests-clang21: |
| runs-on: ubuntu-24.04 |
| name: v3 C tests (Linux x64, Clang 21) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Install clang 21 |
| run: | |
| wget https://apt.llvm.org/llvm.sh |
| chmod +x llvm.sh |
| sudo ./llvm.sh 21 |
| |
| - name: Build tester_v3_c |
| run: | |
| cd tests |
| clang-21 -I../ -std=c11 -g -O0 -Werror -Weverything \ |
| -Wno-padded -Wno-unsafe-buffer-usage -Wno-switch-default \ |
| -Wno-format-nonliteral -Wno-float-equal -Wno-cast-align \ |
| -Wno-declaration-after-statement -Wno-unknown-warning-option \ |
| -Wno-pre-c11-compat \ |
| -DTINYGLTF3_ENABLE_FS \ |
| -o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c |
| |
| - name: Build tester_v3_c_v1port |
| run: | |
| cd tests |
| clang-21 -I../ -std=c11 -g -O0 -Werror -Weverything \ |
| -Wno-padded -Wno-unsafe-buffer-usage -Wno-switch-default \ |
| -Wno-format-nonliteral -Wno-float-equal -Wno-cast-align \ |
| -Wno-declaration-after-statement -Wno-unknown-warning-option \ |
| -Wno-pre-c11-compat \ |
| -DTINYGLTF3_ENABLE_FS \ |
| -o tester_v3_c_v1port tester_v3_c_v1port.c ../tiny_gltf_v3.c |
| |
| - name: Run tester_v3_c |
| run: | |
| cd tests |
| ./tester_v3_c |
| |
| - name: Run tester_v3_c_v1port |
| run: | |
| cd tests |
| ./tester_v3_c_v1port |
| |
| # v3 C runtime built with MSVC at warning-level 4 (/W4 /WX). |
| v3-c-tests-msvc: |
| runs-on: windows-latest |
| name: v3 C tests (Windows x64, MSVC /W4) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Set up MSVC environment |
| uses: ilammy/msvc-dev-cmd@v1 |
| |
| - name: Build and run tester_v3_c |
| shell: cmd |
| run: | |
| cd tests |
| cl /nologo /W4 /WX /std:c11 /Zi /Od /D_CRT_SECURE_NO_WARNINGS /DTINYGLTF3_ENABLE_FS /I.. tester_v3_c.c ..\tiny_gltf_v3.c /Fe:tester_v3_c.exe |
| tester_v3_c.exe |
| |
| - name: Build and run tester_v3_c_v1port |
| shell: cmd |
| run: | |
| cd tests |
| cl /nologo /W4 /WX /std:c11 /Zi /Od /D_CRT_SECURE_NO_WARNINGS /DTINYGLTF3_ENABLE_FS /I.. tester_v3_c_v1port.c ..\tiny_gltf_v3.c /Fe:tester_v3_c_v1port.exe |
| tester_v3_c_v1port.exe |
| |
| # v3 C runtime under ASan + UBSan for memory-safety + UB checks. |
| v3-c-tests-sanitizers: |
| runs-on: ubuntu-latest |
| name: v3 C tests (Clang ASan + UBSan) |
| steps: |
| - name: Checkout |
| uses: actions/checkout@v5 |
| |
| - name: Build tester_v3_c with ASan + UBSan |
| run: | |
| cd tests |
| clang -I../ -std=c11 -g -O1 -DTINYGLTF3_ENABLE_FS \ |
| -fsanitize=address,undefined -fno-omit-frame-pointer \ |
| -o tester_v3_c tester_v3_c.c ../tiny_gltf_v3.c |
| |
| - name: Build tester_v3_c_v1port with ASan + UBSan |
| run: | |
| cd tests |
| clang -I../ -std=c11 -g -O1 -DTINYGLTF3_ENABLE_FS \ |
| -fsanitize=address,undefined -fno-omit-frame-pointer \ |
| -o tester_v3_c_v1port tester_v3_c_v1port.c ../tiny_gltf_v3.c |
| |
| - name: Run tester_v3_c |
| env: |
| ASAN_OPTIONS: detect_leaks=1:halt_on_error=1 |
| UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1 |
| run: | |
| cd tests |
| ./tester_v3_c |
| |
| - name: Run tester_v3_c_v1port |
| env: |
| ASAN_OPTIONS: detect_leaks=1:halt_on_error=1 |
| UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1 |
| run: | |
| cd tests |
| ./tester_v3_c_v1port |