reactphysics3d/.github/workflows/build-and-test.yml
2021-08-10 07:24:36 +02:00

295 lines
8.9 KiB
YAML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Build and run tests for ReactPhysics3D
name: Build and Test ReactPhysics3D
# Controls when the action will run. Triggers the workflow on push
on:
push:
pull_request:
release:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- {
name: "Linux / GCC (Debug, Single Precision)",
os: ubuntu-latest,
build_type: "Debug",
cc: "gcc",
cxx: "g++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "Linux / GCC (Release, Single Precision)",
os: ubuntu-latest,
build_type: "Release",
cc: "gcc",
cxx: "g++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "Linux / GCC (Debug, Double Precision)",
os: ubuntu-latest,
build_type: "Debug",
cc: "gcc",
cxx: "g++",
generators: "Ninja",
double_precision: true,
coverage: false,
}
- {
name: "Linux / GCC (Release, Double Precision)",
os: ubuntu-latest,
build_type: "Release",
cc: "gcc",
cxx: "g++",
generators: "Ninja",
double_precision: true,
coverage: false,
}
- {
name: "Linux / Clang (Debug, Single Precision)",
os: ubuntu-latest,
build_type: "Debug",
cc: "clang",
cxx: "clang++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "Linux / Clang (Release, Single Precision)",
os: ubuntu-latest,
build_type: "Release",
cc: "clang",
cxx: "clang++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "Linux / Clang (Debug, Double Precision)",
os: ubuntu-latest,
build_type: "Debug",
cc: "clang",
cxx: "clang++",
generators: "Ninja",
double_precision: true,
coverage: false,
}
- {
name: "Linux / Clang (Release, Double Precision)",
os: ubuntu-latest,
build_type: "Release",
cc: "clang",
cxx: "clang++",
generators: "Ninja",
double_precision: true,
coverage: false,
}
- {
name: "Windows / MSVC (Debug, Single Precision)",
os: windows-latest,
build_type: "Debug",
cc: "cl",
cxx: "cl",
generators: "Visual Studio 16 2019",
double_precision: false,
coverage: false,
}
- {
name: "Windows / MSVC (Release, Single Precision)",
os: windows-latest,
build_type: "Release",
cc: "cl",
cxx: "cl",
generators: "Visual Studio 16 2019",
double_precision: false,
coverage: false,
}
- {
name: "Windows / MinGW (Debug, Single Precision)",
os: windows-latest,
build_type: "Debug",
cc: "gcc",
cxx: "g++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "Windows / MinGW (Release, Single Precision)",
os: windows-latest,
build_type: "Release",
cc: "gcc",
cxx: "g++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "MacOS / Clang (Debug, Single Precision)",
os: macos-latest,
build_type: "Debug",
cc: "clang",
cxx: "clang++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "MacOS / Clang (Release, Single Precision)",
os: macos-latest,
build_type: "Release",
cc: "clang",
cxx: "clang++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "MacOS / GCC (Debug, Single Precision)",
os: macos-latest,
build_type: "Debug",
cc: "gcc",
cxx: "g++",
generators: "Ninja",
double_precision: false,
coverage: false,
}
- {
name: "Code Coverage",
os: ubuntu-latest,
build_type: "Debug",
cc: "gcc",
cxx: "g++",
generators: "Ninja",
double_precision: false,
coverage: true,
}
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: Print env
run: |
echo github.event.action: ${{ github.event.action }}
echo github.event_name: ${{ github.event_name }}
- name: Install dependencies on Windows
if: startsWith(matrix.config.os, 'windows')
run: |
choco install ninja cmake
ninja --version
cmake --version
- name: Install dependencies on Linux
if: startsWith(matrix.config.os, 'ubuntu')
run: |
sudo apt-get update
sudo apt-get install ninja-build cmake lcov valgrind
ninja --version
cmake --version
gcc --version
clang --version
- name: Install dependencies on MacOS
if: startsWith(matrix.config.os, 'macos')
run: |
brew install cmake ninja
brew reinstall gcc
ninja --version
cmake --version
- name: CMake Configure
shell: bash
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
run: |
mkdir build
cmake \
-S . \
-B build \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
-DRP3D_DOUBLE_PRECISION_ENABLED=${{ matrix.config.double_precision }} \
-DRP3D_CODE_COVERAGE_ENABLED=${{ matrix.config.coverage }} \
-DCODE_COVERAGE_VERBOSE=True \
-DRP3D_COMPILE_TESTS=True \
-G "${{ matrix.config.generators }}" \
- name: Build
shell: bash
run: cmake --build build/ --config ${{ matrix.config.build_type }}
- name: Install Library on Linux/MacOS
if: ${{ !startsWith(matrix.config.os, 'windows') }}
shell: bash
run: sudo cmake --install build/
- name: Install Library on Windows
if: startsWith(matrix.config.name, 'Windows / MinGW')
shell: bash
run: cmake --install build/
- name: Unit Tests (Linux / MacOS / Windows MinGW)
if: ${{ !startsWith(matrix.config.os, 'windows') }}
shell: bash
run: ./build/test/tests
- name: Unit Tests (Wndows MSVC)
if: ${{ startsWith(matrix.config.name, 'Windows / MSVC') }}
shell: bash
run: "./build/test/${{ matrix.config.build_type }}/tests.exe"
- name: Build and Run Hello World
if: ${{ !matrix.config.coverage }}
shell: bash
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
run: |
mkdir build_hello_world
cmake \
-S helloworld \
-B build_hello_world \
-DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \
-DCMAKE_EXE_LINKER_FLAGS=-no-pie \
-G "${{ matrix.config.generators }}"
cmake --build build_hello_world/ --config ${{ matrix.config.build_type }}
./build_hello_world/helloworld
- name: Memory Leaks Test
if: ${{ startsWith(matrix.config.name, 'Linux / GCC (Debug, Single Precision)') }}
shell: bash
run: valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --error-exitcode=1 ./build/test/tests
- name: Compute Code Coverage
if: ${{ matrix.config.coverage }}
env:
CC: ${{ matrix.config.cc }}
CXX: ${{ matrix.config.cxx }}
shell: bash
run: |
cmake --build build/ --target coverage
- name: Upload coverage to Codecov
if: ${{ matrix.config.coverage }}
uses: codecov/codecov-action@v2
with:
fail_ci_if_error: true
verbose: false