mirror of
https://github.com/syoyo/tinygltf.git
synced 2026-06-08 03:03:50 +00:00
538 lines
16 KiB
YAML
538 lines
16 KiB
YAML
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 -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Run loader_example
|
|
run: ./build/loader_example 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 -DCMAKE_CXX_COMPILER=clang++-21 -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Run loader_example
|
|
run: |
|
|
./build/loader_example 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 -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Run loader_example
|
|
run: ./build/loader_example 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 -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Run loader_example
|
|
run: ./build/loader_example models/Cube/Cube.gltf
|
|
|
|
- name: Run tests
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
# Windows x64 - MSVC
|
|
windows-msvc-x64:
|
|
runs-on: windows-latest
|
|
name: Windows x64 (MSVC)
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Configure
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake -G "Visual Studio 17 2022" -A x64 -DTINYGLTF_BUILD_LOADER_EXAMPLE=On -DTINYGLTF_BUILD_GL_EXAMPLES=Off -DTINYGLTF_BUILD_VALIDATOR_EXAMPLE=Off -DTINYGLTF_BUILD_TESTS=ON ..
|
|
|
|
- name: Build
|
|
run: cmake --build build --config Release
|
|
|
|
- name: Run loader_example
|
|
run: |
|
|
.\build\Release\loader_example.exe models\Cube\Cube.gltf
|
|
|
|
- name: Run tests
|
|
run: ctest --test-dir build -C Release --output-on-failure
|
|
|
|
# Windows x86 - MSVC
|
|
windows-msvc-x86:
|
|
runs-on: windows-latest
|
|
name: Windows x86 (MSVC)
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Configure
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake -G "Visual Studio 17 2022" -A Win32 -DTINYGLTF_BUILD_LOADER_EXAMPLE=On -DTINYGLTF_BUILD_GL_EXAMPLES=Off -DTINYGLTF_BUILD_VALIDATOR_EXAMPLE=Off -DTINYGLTF_BUILD_TESTS=ON ..
|
|
|
|
- name: Build
|
|
run: cmake --build build --config Release
|
|
|
|
- name: Run tests
|
|
run: ctest --test-dir build -C Release --output-on-failure
|
|
|
|
# Windows ARM64 - MSVC (cross-compile)
|
|
windows-msvc-arm64:
|
|
runs-on: windows-latest
|
|
name: Windows ARM64 (MSVC) - Cross-compile
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Configure
|
|
run: |
|
|
mkdir build
|
|
cd build
|
|
cmake -G "Visual Studio 17 2022" -A ARM64 -DTINYGLTF_BUILD_LOADER_EXAMPLE=On -DTINYGLTF_BUILD_GL_EXAMPLES=Off -DTINYGLTF_BUILD_VALIDATOR_EXAMPLE=Off ..
|
|
|
|
- name: Build
|
|
run: cmake --build build --config Release
|
|
|
|
# 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 -DTINYGLTF_BUILD_TESTS=ON
|
|
cmake --build build
|
|
|
|
- name: Run loader_example
|
|
run: |
|
|
./build/loader_example 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: |
|
|
x86_64-w64-mingw32-g++ -std=c++11 -o loader_example.exe loader_example.cc
|
|
|
|
# Special Configuration: No Exceptions
|
|
linux-noexception:
|
|
runs-on: ubuntu-latest
|
|
name: Linux x64 (GCC) - No Exceptions
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Build loader_example
|
|
run: |
|
|
g++ -DTINYGLTF_NOEXCEPTION -std=c++11 -o loader_example loader_example.cc
|
|
|
|
- name: Run loader_example
|
|
run: |
|
|
./loader_example models/Cube/Cube.gltf
|
|
|
|
- name: Build and run unit tests
|
|
run: |
|
|
cd tests
|
|
g++ -DTINYGLTF_NOEXCEPTION -I../ -std=c++11 -g -O0 -o tester_noexcept tester.cc
|
|
./tester_noexcept
|
|
|
|
# Special Configuration: Header-Only Mode
|
|
linux-header-only:
|
|
runs-on: ubuntu-latest
|
|
name: Linux x64 (GCC) - Header-Only Mode
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Build with CMake Header-Only
|
|
run: |
|
|
mkdir build
|
|
cmake -B build -DTINYGLTF_HEADER_ONLY=ON -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON
|
|
cmake --build build
|
|
|
|
- name: Run loader_example
|
|
run: |
|
|
./build/loader_example models/Cube/Cube.gltf
|
|
|
|
- name: Run tests
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
# 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
|
|
|
|
# Special Configuration: RapidJSON Backend
|
|
linux-rapidjson:
|
|
runs-on: ubuntu-latest
|
|
name: Linux x64 (GCC) - RapidJSON Backend
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Clone RapidJSON
|
|
run: |
|
|
git clone https://github.com/Tencent/rapidjson
|
|
|
|
- name: Configure
|
|
run: |
|
|
cmake -B build -DTINYGLTF_USE_RAPIDJSON=ON -DTINYGLTF_BUILD_LOADER_EXAMPLE=ON -DTINYGLTF_BUILD_TESTS=ON -DCMAKE_PREFIX_PATH=$PWD/rapidjson
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Run loader_example
|
|
run: |
|
|
./build/loader_example models/Cube/Cube.gltf
|
|
|
|
- name: Run tests
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
# Special Configuration: AddressSanitizer
|
|
linux-asan:
|
|
runs-on: ubuntu-latest
|
|
name: Linux x64 (Clang) - AddressSanitizer
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Build loader_example with ASan
|
|
run: |
|
|
clang++ -fsanitize=address -std=c++11 -g -O1 -o loader_example loader_example.cc
|
|
|
|
- name: Run loader_example
|
|
run: |
|
|
./loader_example models/Cube/Cube.gltf
|
|
|
|
- name: Build and run unit tests with ASan
|
|
run: |
|
|
cd tests
|
|
clang++ -fsanitize=address -I../ -std=c++11 -g -O1 -o tester tester.cc
|
|
./tester
|
|
|
|
# Special Configuration: UndefinedBehaviorSanitizer
|
|
linux-ubsan:
|
|
runs-on: ubuntu-latest
|
|
name: Linux x64 (Clang) - UndefinedBehaviorSanitizer
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
|
|
- name: Build loader_example with UBSan
|
|
run: |
|
|
clang++ -fsanitize=undefined -std=c++11 -g -O1 -o loader_example loader_example.cc
|
|
|
|
- name: Run loader_example
|
|
run: |
|
|
./loader_example models/Cube/Cube.gltf
|
|
|
|
- name: Build and run unit tests with UBSan
|
|
run: |
|
|
cd tests
|
|
clang++ -fsanitize=undefined -I../ -std=c++11 -g -O1 -o tester tester.cc
|
|
./tester
|
|
|
|
# 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 (18 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: Build and run tester_v3_c
|
|
shell: cmd
|
|
run: |
|
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
|
|
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: |
|
|
call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat"
|
|
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
|