#25 added empty include dir #127
This file contains hidden or 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: Main flow | |
| on: | |
| push: | |
| branches: [ "main" ] | |
| pull_request: | |
| branches: [ "main" ] | |
| env: | |
| # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) | |
| CMAKE_VERSION: 3.21.1 | |
| NINJA_VERSION: 1.10.2 | |
| QT_VERSION : "5.15.2" | |
| BUILD_TYPE: Release | |
| CCACHE_VERSION: 4.4 | |
| jobs: | |
| build: | |
| name: Building the binaries for ${{ matrix.config.name }} | |
| runs-on: ${{ matrix.config.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| config: | |
| - { | |
| name: "Windows Latest MinGW", artifact: "Windows-MinGW.7z", | |
| os: windows-latest, | |
| cc: "gcc", cxx: "g++" | |
| } | |
| - { | |
| name: "Ubuntu Latest GCC", artifact: "Linux.7z", | |
| os: ubuntu-latest, | |
| cc: "gcc", cxx: "g++" | |
| } | |
| # commented to reduce billed execution time | |
| #- { | |
| # name: "macOS Latest Clang", artifact: "macOS.7z", | |
| # os: macos-latest, | |
| # cc: "clang", cxx: "clang++" | |
| # } | |
| steps: | |
| # TODO to update the name of build dir | |
| #- name : Clean up before build (Linux only) | |
| # if: matrix.config.os == 'ubuntu-latest' | |
| # run: | | |
| # rm -rf build | |
| #- name: Clean up before build (Windows only) | |
| # if: matrix.config.os == 'windows-latest' | |
| # run: | | |
| # cmd /c "rmdir /s /q build" | |
| - name: Checkout FVA repository | |
| uses: actions/checkout@v3 | |
| with: #to checkout submodules as well | |
| submodules: 'true' | |
| - name: Download and configure Ninja and CMake. | |
| shell: cmake -P {0} | |
| run: | | |
| set(cmake_version $ENV{CMAKE_VERSION}) | |
| set(ninja_version $ENV{NINJA_VERSION}) | |
| message(STATUS "Using host CMake version: ${CMAKE_VERSION}") | |
| if ("${{ runner.os }}" STREQUAL "Windows") | |
| set(ninja_suffix "win.zip") | |
| set(cmake_suffix "windows-x86_64.zip") | |
| set(cmake_dir "cmake-${cmake_version}-windows-x86_64/bin") | |
| elseif ("${{ runner.os }}" STREQUAL "Linux") | |
| set(ninja_suffix "linux.zip") | |
| set(cmake_suffix "linux-x86_64.tar.gz") | |
| set(cmake_dir "cmake-${cmake_version}-linux-x86_64/bin") | |
| elseif ("${{ runner.os }}" STREQUAL "macOS") | |
| set(ninja_suffix "mac.zip") | |
| set(cmake_suffix "macos-universal.tar.gz") | |
| set(cmake_dir "cmake-${cmake_version}-macos-universal/CMake.app/Contents/bin") | |
| endif() | |
| set(ninja_url "https://github.com/ninja-build/ninja/releases/download/v${ninja_version}/ninja-${ninja_suffix}") | |
| file(DOWNLOAD "${ninja_url}" ./ninja.zip SHOW_PROGRESS) | |
| execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ninja.zip) | |
| set(cmake_url "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/cmake-${cmake_version}-${cmake_suffix}") | |
| file(DOWNLOAD "${cmake_url}" ./cmake.zip SHOW_PROGRESS) | |
| execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./cmake.zip) | |
| # Add to PATH environment variable | |
| file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir) | |
| set(path_separator ":") | |
| if ("${{ runner.os }}" STREQUAL "Windows") | |
| set(path_separator ";") | |
| endif() | |
| file(APPEND "$ENV{GITHUB_PATH}" "$ENV{GITHUB_WORKSPACE}${path_separator}${cmake_dir}") | |
| if (NOT "${{ runner.os }}" STREQUAL "Windows") | |
| execute_process( | |
| COMMAND chmod +x ninja | |
| COMMAND chmod +x ${cmake_dir}/cmake | |
| ) | |
| endif() | |
| - name: Download the ccache | |
| id: ccache | |
| shell: cmake -P {0} | |
| run: | | |
| set(ccache_url "https://github.com/cristianadam/ccache/releases/download/v$ENV{CCACHE_VERSION}/${{ runner.os }}.tar.xz") | |
| file(DOWNLOAD "${ccache_url}" ./ccache.tar.xz SHOW_PROGRESS) | |
| execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf ./ccache.tar.xz) | |
| - name: Prepare the ccache timestamp | |
| id: ccache_cache_timestamp | |
| shell: cmake -P {0} | |
| run: | | |
| string(TIMESTAMP current_date "%Y-%m-%d-%H;%M;%S" UTC) | |
| message("::set-output name=timestamp::${current_date}") | |
| - name: install GoogleTest | |
| if: ${{ steps.cache.output.cache-hit != 'true' }} | |
| run: | | |
| git clone https://github.com/google/googletest.git --branch release-1.12.1 | |
| cd googletest | |
| cmake -Bbuild -DCMAKE_INSTALL_PREFIX="$HOME/.local" -Dgtest_force_shared_crt=1 | |
| cmake --build build --config Release | |
| cmake --build build --target install --config Release | |
| cd .. | |
| - name: Call the ccache to cache files | |
| uses: actions/cache@v3 | |
| with: | |
| path: .ccache | |
| key: ${{ matrix.config.name }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }} | |
| restore-keys: | | |
| ${{ matrix.config.name }}-ccache- | |
| - name: Download and install QT | |
| uses: jurplel/install-qt-action@v3 | |
| #with: TODO uncoment | |
| # version: ${{ env.QT_VERSION }} | |
| # target: 'desktop' | |
| # arch: 'win64_mingw81' | |
| # setup-python : 'false' | |
| - name: Configure make files by CMake | |
| shell: cmake -P {0} | |
| env: | |
| CMAKE_PREFIX_PATH: ${{env.Qt5_Dir}} | |
| run: | | |
| set(ENV{CC} ${{ matrix.config.cc }}) | |
| set(ENV{CXX} ${{ matrix.config.cxx }}) | |
| if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
| execute_process( | |
| COMMAND "${{ matrix.config.environment_script }}" && set | |
| OUTPUT_FILE environment_script_output.txt | |
| ) | |
| file(STRINGS environment_script_output.txt output_lines) | |
| foreach(line IN LISTS output_lines) | |
| if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
| set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
| endif() | |
| endforeach() | |
| endif() | |
| set(path_separator ":") | |
| if ("${{ runner.os }}" STREQUAL "Windows") | |
| set(path_separator ";") | |
| endif() | |
| set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") | |
| execute_process( | |
| COMMAND cmake | |
| -S . | |
| -B build | |
| -D CMAKE_BUILD_TYPE=$ENV{BUILD_TYPE} | |
| -G Ninja | |
| -D CMAKE_MAKE_PROGRAM=ninja | |
| -D CMAKE_C_COMPILER_LAUNCHER=ccache | |
| -D CMAKE_CXX_COMPILER_LAUNCHER=ccache | |
| RESULT_VARIABLE result | |
| ) | |
| if (NOT result EQUAL 0) | |
| message(FATAL_ERROR "Bad exit status") | |
| endif() | |
| - name: Build the sources | |
| shell: cmake -P {0} | |
| run: | | |
| set(ENV{NINJA_STATUS} "[%f/%t %o/sec] ") | |
| if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") | |
| file(STRINGS environment_script_output.txt output_lines) | |
| foreach(line IN LISTS output_lines) | |
| if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
| set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") | |
| endif() | |
| endforeach() | |
| endif() | |
| file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}" ccache_basedir) | |
| set(ENV{CCACHE_BASEDIR} "${ccache_basedir}") | |
| set(ENV{CCACHE_DIR} "${ccache_basedir}/.ccache") | |
| set(ENV{CCACHE_COMPRESS} "true") | |
| set(ENV{CCACHE_COMPRESSLEVEL} "6") | |
| set(ENV{CCACHE_MAXSIZE} "400M") | |
| if ("${{ matrix.config.cxx }}" STREQUAL "cl") | |
| set(ENV{CCACHE_MAXSIZE} "600M") | |
| endif() | |
| execute_process(COMMAND ccache -p) | |
| execute_process(COMMAND ccache -z) | |
| execute_process( | |
| COMMAND cmake --build build | |
| RESULT_VARIABLE result | |
| OUTPUT_VARIABLE output | |
| ERROR_VARIABLE output | |
| ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE | |
| ) | |
| if (NOT result EQUAL 0) | |
| string(REGEX MATCH "FAILED:.*$" error_message "${output}") | |
| string(REPLACE "\n" "%0A" error_message "${error_message}") | |
| message("::error::${error_message}") | |
| message(FATAL_ERROR "Build failed") | |
| endif() | |
| - name: Make the ccache statistics | |
| shell: cmake -P {0} | |
| run: | | |
| file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}" ccache_basedir) | |
| set(ENV{CCACHE_BASEDIR} "${ccache_basedir}") | |
| set(ENV{CCACHE_DIR} "${ccache_basedir}/.ccache") | |
| execute_process(COMMAND ccache -s) | |
| - name: Run unit tests based on CTests | |
| shell: cmake -P {0} | |
| run: | | |
| include(ProcessorCount) | |
| ProcessorCount(N) | |
| set(ENV{CTEST_OUTPUT_ON_FAILURE} "ON") | |
| execute_process( | |
| COMMAND ctest -j ${N} | |
| WORKING_DIRECTORY build | |
| RESULT_VARIABLE result | |
| OUTPUT_VARIABLE output | |
| ERROR_VARIABLE output | |
| ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE | |
| ) | |
| if (NOT result EQUAL 0) | |
| string(REGEX MATCH "[0-9]+% tests.*[0-9.]+ sec.*$" test_results "${output}") | |
| string(REPLACE "\n" "%0A" test_results "${test_results}") | |
| message("::error::${test_results}") | |
| message(FATAL_ERROR "Running tests failed!") | |
| endif() | |
| - name: Code coverage using Codecov | |
| if: matrix.config.os == 'ubuntu-latest' | |
| run: | | |
| echo "==================Installing coverage tool=====================================" | |
| sudo apt-get update | |
| sudo apt-get -y install lcov | |
| echo "==================Run capture for coverage=====================================" | |
| lcov --capture --directory ./build --output-file ./build/coverage.info --ignore-errors mismatch | |
| echo "==================Filtering coverage=====================================" | |
| lcov --remove ./build/coverage.info --directory ./build -o ./build/filtered_coverage.info \ | |
| '/usr/include/*' \ | |
| '/include/gtest/*' \ | |
| '*/test/*' \ | |
| '*/googletest/*' | |
| echo "================================= Conversion coverage=====================================" | |
| genhtml ./build/filtered_coverage.info --output-directory coverage_report | |
| echo "==========================================================================================" | |
| - name: Install binaries to instdir and stripping them to make binaries smaller by CMake | |
| run: cmake --install build --prefix instdir --strip | |
| - name: Pack the binaries by 7zip | |
| working-directory: instdir | |
| run: cmake -E tar cfv ../${{ matrix.config.artifact }} --format=7zip . | |
| - name: Upload artifact to git hub storage to use later | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: ./${{ matrix.config.artifact }} | |
| name: ${{ matrix.config.artifact }} | |
| - name: Setup MSBuild | |
| if: matrix.config.os == 'windows-latest' | |
| uses: microsoft/setup-msbuild@v1.3.1 | |
| - name: MS package build | |
| if: matrix.config.os == 'windows-latest' | |
| run: > | |
| msbuild ./packaging/ms.wixproj | |
| - name: Upload win pkg to git hub storage | |
| if: matrix.config.os == 'windows-latest' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: ./packaging/bin/ms.msi | |
| name: ms.msi | |
| - name: Upload LastTest.log to git hub storage | |
| if: matrix.config.os == 'windows-latest' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: ./build/Testing/Temporary/LastTest.log | |
| name: LastTest.log | |
| - name: Upload CTestCostData.txt to git hub storage | |
| if: matrix.config.os == 'windows-latest' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: ./build/Testing/Temporary/CTestCostData.txt | |
| name: CTestCostData.txt | |
| - name: Pack Coverage Info by 7zip | |
| if: matrix.config.os == 'ubuntu-latest' | |
| working-directory: coverage_report | |
| run: cmake -E tar cfv ../coverage_report.zip --format=7zip . | |
| - name: Upload Coverage Info to github storage | |
| if: matrix.config.os == 'ubuntu-latest' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| path: ./coverage_report.zip | |
| name: coverage_report.zip | |