Files
Diagon/.github/workflows/continuous-integration.yaml
T
2023-04-30 22:45:37 +02:00

265 lines
6.8 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.
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/install-boost@v1.0.1
with:
boost_version: 1.73.0
- 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/install-boost@v1.0.1
with:
boost_version: 1.73.0
- 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