# 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: "MacOS / Clang (Debug, Single Precision)", os: macos-latest, build_type: "Debug", cc: "clang", cxx: "clang++", generators: "Ninja" } - { name: "Windows / MSVC (Debug, Single Precision)", os: windows-latest, build_type: "Debug", cc: "cl", cxx: "cl", generators: "Visual Studio 16 2019" } - { name: "Windows / MinGW (Debug, Single Precision)", os: windows-latest, build_type: "Debug", cc: "gcc", cxx: "g++", generators: "Ninja" } - { name: "MacOS / Clang (Release, Single Precision)", os: macos-latest, build_type: "Release", cc: "clang", cxx: "clang++", generators: "Ninja" } - { 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 ninja --version cmake --version gcc --version clang --version - name: Install dependencies on MacOS if: startsWith(matrix.config.os, 'macos') run: | brew install cmake ninja 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 }} \ -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.os, 'windows') shell: bash run: cmake --install build/ - name: Unit Tests shell: bash run: ./build/test/tests - 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: Compute Code Coverage if: ${{ matrix.config.coverage }} shell: bash run: | cmake --build build/ --target coverage ls -la coverage/ - name: Upload coverage to Codecov if: ${{ matrix.config.coverage }} uses: codecov/codecov-action@v2 with: fail_ci_if_error: true verbose: true