Build and run tests #234
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and run tests | |
on: | |
create: | |
tags: | |
-v* | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
jobs: | |
test: | |
name: "Tests" | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- name: "Linux GCC" | |
os: ubuntu-latest | |
compiler: gcc | |
test: true | |
- name: "Linux Clang" | |
os: ubuntu-latest | |
compiler: llvm | |
test: true | |
- name: "MacOS clang" | |
os: macos-latest | |
test: true | |
compiler: llvm | |
- name: "Windows" | |
os: windows-latest | |
compiler: cl | |
- name: "WebAssembly" | |
os: ubuntu-latest | |
emscripten: true | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: "Checkout repository" | |
uses: actions/checkout@v2 | |
- name: "Setup Cpp" | |
uses: aminya/setup-cpp@v1 | |
with: | |
compiler: ${{ matrix.compiler }} | |
vcvarsall: ${{ contains(matrix.os, 'windows' )}} | |
cmake: true | |
ninja: true | |
clangtidy: false | |
cppcheck: false | |
gcovr: "5.0" | |
opencppcoverage: false | |
- name: "Setup Java" | |
uses: actions/setup-java@v3 | |
with: | |
distribution: "temurin" | |
java-version: '17' | |
check-latest: true | |
- name: "Install Linux Dependencies" | |
if: ${{ runner.os == 'Linux' }} | |
run: sudo apt install libboost-graph-dev uuid-dev | |
- name: "Install boost for windows" | |
if: ${{ runner.os == 'Windows' }} | |
uses: MarkusJx/[email protected] | |
with: | |
boost_version: 1.81.0 | |
platform_version: 2022 | |
toolset: msvc | |
- name: "Install dependencies for macOS" | |
if: ${{ runner.os == 'macOS' }} | |
run: | | |
brew install gcc | |
brew install boost | |
- name: "Setup Emscripten" | |
if: ${{ matrix.emscripten }} | |
uses: mymindstorm/setup-emsdk@v7 | |
- name: "Configure emscripten" | |
if: ${{ matrix.emscripten }} | |
run: > | |
emcmake cmake -S . | |
-B ./build | |
-DCMAKE_BUILD_TYPE:STRING=Debug | |
-DDIAGON_BUILD_TESTS:BOOL=OFF | |
-DDIAGON_BUILD_TESTS_FUZZER:BOOL=OFF; | |
- name: "Configure build only" | |
if: ${{ !matrix.emscripten && !matrix.test}} | |
run: > | |
cmake -S . | |
-B ./build | |
-DCMAKE_BUILD_TYPE:STRING=Debug | |
-DDIAGON_BUILD_TESTS:BOOL=OFF | |
-DDIAGON_BUILD_TESTS_FUZZER:BOOL=OFF; | |
- name: "Configure buil and tests" | |
if: ${{ !matrix.emscripten && matrix.test}} | |
run: > | |
cmake -S . | |
-B ./build | |
-DCMAKE_BUILD_TYPE:STRING=Debug | |
-DDIAGON_BUILD_TESTS:BOOL=ON | |
-DDIAGON_BUILD_TESTS_FUZZER:BOOL=OFF; | |
- name: "Build" | |
run: > | |
cmake --build ./build; | |
- name: "Run tests" | |
if: ${{ matrix.test}} | |
run: > | |
cd build; | |
./input_output_test; | |
# Create a release on new v* tags | |
release: | |
needs: test | |
if: ${{ github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') }} | |
name: "Create release" | |
runs-on: ubuntu-latest | |
outputs: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
steps: | |
- name: "Create release" | |
uses: softprops/action-gh-release@v1 | |
id: create_release | |
with: | |
draft: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
# Build artifact for the release | |
package: | |
name: "Build packages" | |
needs: release | |
strategy: | |
matrix: | |
include: | |
- name: "Linux Clang" | |
os: ubuntu-latest | |
compiler: llvm | |
asset_path: build/diagon*Linux* | |
- name: "WebAssembly" | |
os: ubuntu-latest | |
emscripten: true | |
asset_path: build/diagon-Web.zip | |
- name: "MacOS" | |
os: macos-latest | |
compiler: llvm | |
asset_path: build/diagon*Darwin* | |
- name: "Windows" | |
os: windows-latest | |
compiler: cl | |
asset_path: build/diagon*Win64* | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: "Checkout repository" | |
uses: actions/checkout@v2 | |
- name: "Setup Cpp" | |
uses: aminya/setup-cpp@v1 | |
with: | |
compiler: ${{ matrix.compiler }} | |
vcvarsall: ${{ contains(matrix.os, 'windows' )}} | |
cmake: true | |
ninja: true | |
clangtidy: false | |
cppcheck: false | |
gcovr: "5.0" | |
opencppcoverage: false | |
- name: "Setup Java" | |
uses: actions/setup-java@v3 | |
with: | |
distribution: "temurin" | |
java-version: '17' | |
check-latest: true | |
- name: "Install Linux Dependencies" | |
if: ${{ runner.os == 'Linux' }} | |
run: sudo apt install libboost-graph-dev uuid-dev | |
- name: "Install boost for windows" | |
if: ${{ runner.os == 'Windows' }} | |
uses: MarkusJx/[email protected] | |
with: | |
boost_version: 1.81.0 | |
platform_version: 2022 | |
toolset: msvc | |
- name: "Install dependencies for macOS" | |
if: ${{ runner.os == 'macOS' }} | |
run: | | |
brew install gcc | |
brew install boost | |
- name: "Setup Emscripten" | |
if: ${{ matrix.emscripten }} | |
uses: mymindstorm/setup-emsdk@v7 | |
- name: "Configure cmake with emscripten" | |
if: ${{ matrix.emscripten }} | |
run: > | |
emcmake cmake -S . | |
-B ./build | |
-DCMAKE_BUILD_TYPE:STRING=Release | |
-DDIAGON_BUILD_TESTS:BOOL=OFF | |
-DDIAGON_BUILD_TESTS_FUZZER:BOOL=OFF; | |
- name: "Configure CMake" | |
if: ${{ !matrix.emscripten }} | |
run: > | |
cmake -S . | |
-B ./build | |
-DCMAKE_BUILD_TYPE:STRING=Release | |
-DDIAGON_BUILD_TESTS:BOOL=OFF | |
-DDIAGON_BUILD_TESTS_FUZZER:BOOL=OFF; | |
- name: "Build" | |
run: > | |
cmake | |
--build ./build | |
--target package; | |
- name: "Upload native binaries" | |
uses: shogo82148/actions-upload-release-asset@v1 | |
if: ${{ !matrix.emscripten }} | |
with: | |
upload_url: ${{ needs.release.outputs.upload_url }} | |
asset_path: ${{ matrix.asset_path }} | |
overwrite: true | |
- name: "Make webAssembly distribution" | |
if: ${{ matrix.emscripten }} | |
run: > | |
cd build; | |
mkdir -p diagon-Web; | |
cp diagon.js diagon-Web; | |
cp diagon*wasm diagon-Web; | |
cp index.html diagon-Web; | |
cp style.css diagon-Web; | |
cp run_diagon.sh diagon-Web; | |
chmod a+x ./diagon-Web/run_diagon.sh; | |
zip -r diagon-Web.zip diagon-Web; | |
- name: "Upload WebAssembly distribution" | |
if: ${{ matrix.emscripten }} | |
uses: shogo82148/actions-upload-release-asset@v1 | |
with: | |
upload_url: ${{ needs.release.outputs.upload_url }} | |
asset_path: ${{ matrix.asset_path }} | |
overwrite: true |