name: 'build direwolf' on: # permit to manually trigger the CI workflow_dispatch: inputs: cmake_flags: description: 'Custom CMAKE flags' required: false push: paths-ignore: - '.github/**' pull_request: paths-ignore: - '.github/**' jobs: build: name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.os }} strategy: fail-fast: false matrix: config: - { name: 'Windows Latest MinGW 64bit', os: windows-latest, cc: 'x86_64-w64-mingw32-gcc', cxx: 'x86_64-w64-mingw32-g++', ar: 'x86_64-w64-mingw32-ar', windres: 'x86_64-w64-mingw32-windres', arch: 'x86_64', build_type: 'Release', cmake_extra_flags: '-G "MinGW Makefiles"' } - { name: 'Windows 2019 MinGW 32bit', os: windows-2019, cc: 'i686-w64-mingw32-gcc', cxx: 'i686-w64-mingw32-g++', ar: 'i686-w64-mingw32-ar', windres: 'i686-w64-mingw32-windres', arch: 'i686', build_type: 'Release', cmake_extra_flags: '-G "MinGW Makefiles"' } - { name: 'macOS latest', os: macos-latest, cc: 'clang', cxx: 'clang++', arch: 'x86_64', build_type: 'Release', cmake_extra_flags: '' } - { name: 'Ubuntu latest Debug', os: ubuntu-latest, cc: 'gcc', cxx: 'g++', arch: 'x86_64', build_type: 'Debug', cmake_extra_flags: '' } - { name: 'Ubuntu 22.04', os: ubuntu-22.04, cc: 'gcc', cxx: 'g++', arch: 'x86_64', build_type: 'Release', cmake_extra_flags: '' } - { name: 'Ubuntu 20.04', os: ubuntu-20.04, cc: 'gcc', cxx: 'g++', arch: 'x86_64', build_type: 'Release', cmake_extra_flags: '' } steps: - name: checkout uses: actions/checkout@v2 with: fetch-depth: 8 - name: dependency shell: bash run: | # this is not perfect but enought for now if [ "$RUNNER_OS" == "Linux" ]; then sudo apt-get update sudo apt-get install libasound2-dev libudev-dev libhamlib-dev gpsd elif [ "$RUNNER_OS" == "macOS" ]; then # just to simplify I use homebrew but # we can use macports (latest direwolf is already available as port) brew install portaudio hamlib gpsd elif [ "$RUNNER_OS" == "Windows" ]; then # add the folder to PATH echo "C:\msys64\mingw32\bin" >> $GITHUB_PATH fi - name: create build environment run: | cmake -E make_directory ${{github.workspace}}/build - name: configure shell: bash working-directory: ${{github.workspace}}/build run: | if [ "$RUNNER_OS" == "Windows" ]; then export CC=${{ matrix.config.cc }} export CXX=${{ matrix.config.cxx }} export AR=${{ matrix.config.ar }} export WINDRES=${{ matrix.config.windres }} fi cmake $GITHUB_WORKSPACE \ -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \ -DCMAKE_C_COMPILER=${{ matrix.config.cc }} \ -DCMAKE_CXX_COMPILER=${{ matrix.config.cxx }} \ -DCMAKE_CXX_FLAGS="-Werror" -DUNITTEST=1 \ ${{ matrix.config.cmake_extra_flags }} \ ${{ github.event.inputs.cmake_flags }} - name: build shell: bash working-directory: ${{github.workspace}}/build run: | if [ "$RUNNER_OS" == "Windows" ]; then export CC=${{ matrix.config.cc }} export CXX=${{ matrix.config.cxx }} export AR=${{ matrix.config.ar }} export WINDRES=${{ matrix.config.windres }} fi cmake --build . --config ${{ matrix.config.build_type }} \ ${{ github.event.inputs.cmake_flags }} - name: test continue-on-error: true shell: bash working-directory: ${{github.workspace}}/build run: | ctest -C ${{ matrix.config.build_type }} \ --parallel 2 --output-on-failure \ ${{ github.event.inputs.cmake_flags }} - name: package shell: bash working-directory: ${{github.workspace}}/build run: | if [ "$RUNNER_OS" == "Windows" ] || [ "$RUNNER_OS" == "macOS" ]; then make package fi - name: archive binary uses: actions/upload-artifact@v4 with: name: direwolf_${{ matrix.config.os }}_${{ matrix.config.arch }}_${{ github.sha }} path: | ${{github.workspace}}/build/direwolf-*.zip ${{github.workspace}}/build/direwolf.conf ${{github.workspace}}/build/src/* ${{github.workspace}}/build/CMakeCache.txt !${{github.workspace}}/build/src/cmake_install.cmake !${{github.workspace}}/build/src/CMakeFiles !${{github.workspace}}/build/src/Makefile