From 335f629d464cf655d32bec57321cbc54b6c7879d Mon Sep 17 00:00:00 2001 From: Abdessattar Sassi <457645+abdes@users.noreply.github.com> Date: Sat, 22 Apr 2023 10:47:06 +0400 Subject: [PATCH 1/4] chore: remove duplicate line --- tools/version-info/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/version-info/CMakeLists.txt b/tools/version-info/CMakeLists.txt index f84feb2..5627767 100644 --- a/tools/version-info/CMakeLists.txt +++ b/tools/version-info/CMakeLists.txt @@ -48,7 +48,6 @@ asap_add_executable(${MODULE_TARGET_NAME} WARNING SOURCES "src/main.cpp") target_compile_features(${MODULE_TARGET_NAME} PUBLIC cxx_constexpr) -target_compile_features(${MODULE_TARGET_NAME} PUBLIC cxx_constexpr) cmake_path(SET version_include_dir ${CMAKE_CURRENT_BINARY_DIR}/../../include NORMALIZE) target_include_directories( From 084ae866e16a7999c8612599610c385e0e555321 Mon Sep 17 00:00:00 2001 From: Abdessattar Sassi <457645+abdes@users.noreply.github.com> Date: Sat, 22 Apr 2023 10:52:22 +0400 Subject: [PATCH 2/4] feat: comprehensive macos builds for CI --- .github/workflows/macos-builds.yml | 86 ++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 .github/workflows/macos-builds.yml diff --git a/.github/workflows/macos-builds.yml b/.github/workflows/macos-builds.yml new file mode 100644 index 0000000..030026e --- /dev/null +++ b/.github/workflows/macos-builds.yml @@ -0,0 +1,86 @@ +name: macos-builds + +on: [push, pull_request] + +env: + CMAKE_VERSION: 3.21.1 + NINJA_VERSION: 1.11.1 + CCACHE_VERSION: 4.8 + CC: clang + CXX: clang++ + +jobs: + dev-build: + runs-on: macos-latest + strategy: + matrix: + generator: ['Unix Makefiles', Xcode] + build_type: [Debug, Release] + include: + - build_type: Debug + examples: ON + tests: OFF # the template asap has no unit tests + - build_type: Release + examples: ON + tests: OFF # the template asap has no unit tests + + steps: + - name: Setup cmake + uses: jwlawson/actions-setup-cmake@v1 + with: + cmake-version: ${{ env.CMAKE_VERSION }} + + - name: Setup ccache + uses: Chocobo1/setup-ccache-action@v1 + with: + install_ccache: true + update_packager_index: false + prepend_symlinks_to_path: false + + - name: Setup XCode + if: matrix.generator == 'Xcode' + uses: mobiledevops/xcode-select-version-action@v1 + with: + xcode-select-version: 13.1 + + - name: Log environment properties + run: | + echo "Build Type : ${{matrix.build_type}}" + echo "Generator : ${{matrix.generator}}" + cmake --version + clang --version + ccache --version + + - uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Configure build + working-directory: ${{runner.workspace}} + run: | + cmake -B build -S $GITHUB_WORKSPACE \ + -D CMAKE_BUILD_TYPE=${{matrix.build_type}} \ + -G "${{ matrix.generator }}" \ + -D USE_CCACHE=ON \ + -D ASAP_BUILD_TESTS=${{matrix.tests}} \ + -D ASAP_BUILD_EXAMPLES=${{matrix.examples}} \ + -D ASAP_BUILD_DOCS=OFF \ + -D CMAKE_INSTALL_PREFIX=install \ + -D CMAKE_VERBOSE_MAKEFILE=ON + + - name: Build main targets + working-directory: ${{runner.workspace}} + run: | + cmake --build build --config ${{matrix.build_type}} + + - name: Build test targets + working-directory: ${{runner.workspace}} + if: ${{ matrix.tests == true }} + run: | + cmake --build build --config ${{matrix.build_type}} --target build-all-tests + + - name: Run tests with ctest + working-directory: ${{runner.workspace}} + # Hardcode 2 cores we know are there + run: | + ctest --test-dir build -C ${{matrix.build_type}} -j 2 --output-on-failure From 844880907866c93043e07dd136f36af67183dd76 Mon Sep 17 00:00:00 2001 From: Abdessattar Sassi <457645+abdes@users.noreply.github.com> Date: Sat, 22 Apr 2023 11:25:36 +0400 Subject: [PATCH 3/4] chore: combine CI dev builds using callable workflows --- .github/workflows/all-dev-builds.yml | 11 +++++++++++ .github/workflows/macos-builds.yml | 2 +- .github/workflows/ubuntu-builds.yml | 2 +- .github/workflows/windows-builds.yml | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/all-dev-builds.yml diff --git a/.github/workflows/all-dev-builds.yml b/.github/workflows/all-dev-builds.yml new file mode 100644 index 0000000..32b3ed3 --- /dev/null +++ b/.github/workflows/all-dev-builds.yml @@ -0,0 +1,11 @@ +name: Matrix Development Builds + +on: [push, pull_request] + +jobs: + Linux: + uses: ./.github/workflows/ubuntu-builds.yml + Windows: + uses: ./.github/workflows/windows-builds.yml + MacOS: + uses: ./.github/workflows/macos-builds.yml diff --git a/.github/workflows/macos-builds.yml b/.github/workflows/macos-builds.yml index 030026e..cbe40af 100644 --- a/.github/workflows/macos-builds.yml +++ b/.github/workflows/macos-builds.yml @@ -1,6 +1,6 @@ name: macos-builds -on: [push, pull_request] +on: workflow_call env: CMAKE_VERSION: 3.21.1 diff --git a/.github/workflows/ubuntu-builds.yml b/.github/workflows/ubuntu-builds.yml index 68de447..e3477ae 100644 --- a/.github/workflows/ubuntu-builds.yml +++ b/.github/workflows/ubuntu-builds.yml @@ -1,6 +1,6 @@ name: ubuntu-builds -on: [push, pull_request] +on: workflow_call env: CMAKE_VERSION: 3.21.1 diff --git a/.github/workflows/windows-builds.yml b/.github/workflows/windows-builds.yml index 7cabc01..34d9289 100644 --- a/.github/workflows/windows-builds.yml +++ b/.github/workflows/windows-builds.yml @@ -1,6 +1,6 @@ name: windows-builds -on: [push, pull_request] +on: workflow_call env: CMAKE_VERSION: 3.21.1 From 6ce4d70d3c500413e968571198e703a642c313ad Mon Sep 17 00:00:00 2001 From: Abdessattar Sassi <457645+abdes@users.noreply.github.com> Date: Sat, 22 Apr 2023 11:30:53 +0400 Subject: [PATCH 4/4] chore: remove the release workflow Release builds and packaging will be redesigned. --- .github/workflows/cmake-build.yml | 349 ------------------------------ 1 file changed, 349 deletions(-) delete mode 100644 .github/workflows/cmake-build.yml diff --git a/.github/workflows/cmake-build.yml b/.github/workflows/cmake-build.yml deleted file mode 100644 index 3e45021..0000000 --- a/.github/workflows/cmake-build.yml +++ /dev/null @@ -1,349 +0,0 @@ -name: CMake Build Matrix - -on: [push, pull_request] - -env: - CMAKE_VERSION: 3.21.1 - NINJA_VERSION: 1.10.2 - BUILD_TYPE: Release - -jobs: - build: - name: ${{ matrix.config.name }} - runs-on: ${{ matrix.config.os }} - strategy: - fail-fast: false - matrix: - config: - - { - name: "Windows Latest MSVC", - os: windows-latest, - artifact: "Windows-MSVC.7z", - build_type: "Release", - cc: "cl", - cxx: "cl", - environment_script: "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", - archiver: "7z a", - generators: "Visual Studio 17 2022", - } - - { - name: "Ubuntu_GCC_10", - os: ubuntu-latest, - artifact: "Linux.7z", - build_type: "Release", - cc: "gcc-10", - cxx: "g++-10", - archiver: "7z a", - generators: "Ninja", - } - - { - name: "Ubuntu_GCC_11", - os: ubuntu-latest, - artifact: "Linux-GCC-11.7z", - build_type: "Release", - cc: "gcc", - cxx: "g++", - archiver: "7z a", - generators: "Ninja", - } - - { - name: "macOS Latest Clang", - os: macos-latest, - artifact: "macOS.7z", - build_type: "Release", - cc: "clang", - cxx: "clang++", - archiver: "7za a", - generators: "Ninja", - } - - steps: - - uses: actions/checkout@v2 - with: - submodules: recursive - - - name: Print env - run: | - echo github.event.action: ${{ github.event.action }} - echo github.event_name: ${{ github.event_name }} - - - name: Download 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: Install gcc-11 - shell: bash - if: endsWith(matrix.config.name, 'GCC_11') - run: | - sudo apt-get update - sudo apt-get install gcc-11 g++-11 - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 --slave /usr/bin/g++ g++ /usr/bin/g++-11 --slave /usr/bin/gcov gcov /usr/bin/gcov-11 - - - name: Install ccache - shell: cmake -P {0} - run: | - if("${{ runner.os }}" STREQUAL "Windows") - # If ccache behaves badly on windows, skip this step - execute_process(COMMAND choco install ccache) - elseif("${{ runner.os }}" STREQUAL "macOS") - execute_process(COMMAND brew install ccache) - elseif("${{ runner.os }}" STREQUAL "Linux") - set(ccache_version "4.6.3") - set(ccache_dist "ccache-${ccache_version}-linux-x86_64") - set(ccache_url "https://github.com/ccache/ccache/releases/download/v${ccache_version}/${ccache_dist}.tar.xz") - file(DOWNLOAD "${ccache_url}" ./ccache.tar.xz SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar zxvf ./ccache.tar.xz) - # Add to PATH environment variable - file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${ccache_dist}" ccache_dir) - set(path_separator ":") - file(APPEND "$ENV{GITHUB_PATH}" "$ENV{GITHUB_WORKSPACE}${path_separator}${ccache_dir}") - else() - message(FATAL_ERROR, "${{ runner.os }} is not supported") - endif() - - - name: Setup ccache - # If ccache behaves badly on windows, skip this step - # if: runner.os != 'Windows' - uses: Chocobo1/setup-ccache-action@v1 - with: - install_ccache: false - update_packager_index: false - prepend_symlinks_to_path: false - windows_compile_environment: msvc # this field is required - - - name: Configure - shell: cmake -P {0} - 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}") - - # If ccache shows some strange behavior on windows, you can easily - # disable it here by setting the variable to "OFF" - if (NOT "${{ runner.os }}" STREQUAL "Windows") - set(enable_ccache "ON") - else() - set(enable_ccache "ON") - endif() - - execute_process( - COMMAND cmake - -S . - -B build - -D CMAKE_BUILD_TYPE=$ENV{BUILD_TYPE} - -G Ninja - -D USE_CCACHE=${enable_ccache} - -D CMAKE_MAKE_PROGRAM=ninja - -D ASAP_BUILD_TESTS=ON - -D ASAP_BUILD_EXAMPLES=ON - -D CMAKE_INSTALL_PREFIX=install - -D CMAKE_VERBOSE_MAKEFILE=ON - RESULT_VARIABLE result - ) - if (NOT result EQUAL 0) - message(FATAL_ERROR "Bad exit status") - endif() - - - name: Build - 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() - - execute_process( - COMMAND cmake --build build --target all - 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: Run tests - 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: Install Strip - run: cmake --install build --strip - - - name: Pack - working-directory: install - run: cmake -E tar cfv ../${{ matrix.config.artifact }} --format=7zip . - - - name: Upload - uses: actions/upload-artifact@v1 - with: - path: ./${{ matrix.config.artifact }} - name: ${{ matrix.config.artifact }} - - release: - if: contains(github.ref, 'tags/v') - runs-on: ubuntu-latest - needs: build - - steps: - - name: Create Release - id: create_release - uses: actions/create-release@v1.0.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - tag_name: ${{ github.ref }} - release_name: Release ${{ github.ref }} - draft: false - prerelease: false - - - name: Store Release url - run: | - echo "${{ steps.create_release.outputs.upload_url }}" > ./upload_url - - - uses: actions/upload-artifact@v1 - with: - path: ./upload_url - name: upload_url - - publish: - if: contains(github.ref, 'tags/v') - name: ${{ matrix.config.name }} - runs-on: ${{ matrix.config.os }} - strategy: - fail-fast: false - matrix: - config: - - { - name: "Windows Latest MSVC", - artifact: "Windows-MSVC.7z", - os: windows-latest, - } - - { - name: "Ubuntu Latest GCC", - artifact: "Linux.7z", - os: ubuntu-latest, - } - - { - name: "macOS Latest Clang", - artifact: "macOS.7z", - os: macos-latest, - } - needs: release - - steps: - - name: Download artifact - uses: actions/download-artifact@v1 - with: - name: ${{ matrix.config.artifact }} - path: ./ - - - name: Download URL - uses: actions/download-artifact@v1 - with: - name: upload_url - path: ./ - - - id: set_upload_url - run: | - upload_url=`cat ./upload_url` - echo ::set-output name=upload_url::$upload_url - shell: bash - - - name: Upload to Release - id: upload_to_release - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ steps.set_upload_url.outputs.upload_url }} - asset_path: ./${{ matrix.config.artifact }} - asset_name: ${{ matrix.config.artifact }} - asset_content_type: application/x-gtar