Skip to content

dev: add cumulative fee quantity #857

dev: add cumulative fee quantity

dev: add cumulative fee quantity #857

Workflow file for this run

name: CMake Build Matrix
on:
pull_request:
branches:
- develop
paths-ignore:
- '**/README.md'
- '**.example'
push:
branches:
- develop
paths-ignore:
- '**/README.md'
- '**.example'
env:
CMAKE_VERSION: 3.17.5
NINJA_VERSION: 1.9.0
# BUILD_TYPE: Release
# CCACHE_VERSION: 3.7.7
jobs:
build:
name: ${{ matrix.config.name }}
runs-on: ${{ matrix.config.os }}
strategy:
max-parallel: 1
fail-fast: false
matrix:
config:
- {
name: "Ubuntu Latest GCC",
os: ubuntu-latest,
cc: "gcc", cxx: "g++"
}
# - {
# name: "macOS Latest Clang",
# os: macos-latest,
# cc: "clang", cxx: "clang++"
# }
# - {
# name: "Windows Latest MinGW",
# os: windows-latest,
# cc: "gcc", cxx: "g++"
# }
# TODO: "Windows Latest MSVC" is not working yet
# - {
# name: "Windows Latest MSVC", artifact: "Windows-MSVC.tar.xz",
# os: windows-latest,
# cc: "cl", cxx: "cl",
# environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
# }
steps:
- uses: actions/checkout@v1
- name: Download Ninja and CMake
id: cmake_and_ninja
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 "win64-x64.zip")
set(cmake_dir "cmake-${cmake_version}-win64-x64/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 "Darwin-x86_64.tar.gz")
set(cmake_dir "cmake-${cmake_version}-Darwin-x86_64/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)
# Save the path for other steps
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/${cmake_dir}" cmake_dir)
message("::set-output name=cmake_dir::${cmake_dir}")
if (NOT "${{ runner.os }}" STREQUAL "Windows")
execute_process(
COMMAND chmod +x ninja
COMMAND chmod +x ${cmake_dir}/cmake
)
endif()
# - name: Download 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 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: Ccache cache files
# uses: actions/[email protected]
# with:
# path: .ccache
# key: ${{ matrix.config.name }}-ccache-${{ steps.ccache_cache_timestamp.outputs.timestamp }}
# restore-keys: |
# ${{ matrix.config.name }}-ccache-
- name: Install OpenSSL
shell: cmake -P {0}
run: |
message(STATUS "Using host CMake version: ${cmake_version}")
if ("${{ runner.os }}" STREQUAL "macOS")
execute_process(
COMMAND brew reinstall [email protected]
)
elseif ("${{ runner.os }}" STREQUAL "Windows")
execute_process(
COMMAND vcpkg install openssl:x64-windows
)
endif()
- name: Install SWIG
shell: cmake -P {0}
run: |
if ("${{ runner.os }}" STREQUAL "Windows")
# execute_process(
# COMMAND (New-Object System.Net.WebClient).DownloadFile("http://prdownloads.sourceforge.net/swig/swigwin-4.0.2.zip","swigwin-4.0.2.zip")
# )
# execute_process(
# COMMAND Expand-Archive .\swigwin-4.0.2.zip .
# )
# execute_process(
# COMMAND echo "$((Get-Item .).FullName)/swigwin-4.0.2" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
# )
elseif ("${{ runner.os }}" STREQUAL "Linux")
execute_process(
COMMAND sudo apt-get install -y swig
)
elseif ("${{ runner.os }}" STREQUAL "macOS")
execute_process(
COMMAND brew install swig
)
endif()
- name: Install node-gyp
shell: cmake -P {0}
run: |
execute_process(
COMMAND npm install -g node-gyp
)
- name: Configure 1
shell: cmake -P {0}
run: |
set(ENV{CC} ${{ matrix.config.cc }})
set(ENV{CXX} ${{ matrix.config.cxx }})
if ("${{ runner.os }}" STREQUAL "macOS")
set(ENV{OPENSSL_ROOT_DIR} "/usr/local/Cellar/openssl")
elseif ("${{ runner.os }}" STREQUAL "Windows")
set(ENV{OPENSSL_ROOT_DIR} "C:/vcpkg/installed/x64-windows-static")
# set(ENV{CMAKE_TOOLCHAIN_FILE} "C:/vcpkg/scripts/buildsystems/vcpkg.cmake")
endif()
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 ("$ENV{GITHUB_EVENT_NAME}" STREQUAL "push")
set(ENV{CMAKE_BUILD_TYPE} "Release")
set(ENV{DOTNET_BUILD_CONFIGURATION} "Release")
set(ENV{NODE_GYP_BUILD_MODE} "release")
else()
set(ENV{CMAKE_BUILD_TYPE} "Debug")
set(ENV{DOTNET_BUILD_CONFIGURATION} "Debug")
set(ENV{NODE_GYP_BUILD_MODE} "debug")
endif()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake
-DBUILD_TEST_BUILD=OFF
-DBUILD_TEST_UNIT=OFF
-S test
-B test/build
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_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()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake
-S example
-B example/build
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_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()
if ("${{ runner.os }}" STREQUAL "macOS" OR "${{ runner.os }}" STREQUAL "Linux")
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake
-DBUILD_PYTHON=ON
-DBUILD_JAVA=ON
-DBUILD_CSHARP=ON
# -DBUILD_GO=ON
# -DBUILD_JAVASCRIPT=ON
-DBUILD_TEST=ON
-S binding
-B binding/build
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_BUILD_TYPE}
-D DOTNET_BUILD_CONFIGURATION=$ENV{DOTNET_BUILD_CONFIGURATION}
-D NODE_GYP_BUILD_MODE=$ENV{NODE_GYP_BUILD_MODE}
-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()
endif()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake
-S performance
-B performance/build
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_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()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake
-S app
-B app/build
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_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 1
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()
set(path_separator ":")
if ("${{ runner.os }}" STREQUAL "Windows")
set(path_separator ";")
endif()
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}")
# 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 ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build example/build -j 2
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND rm -rf example/build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build performance/build -j 2
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND rm -rf performance/build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build app/build -j 2
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND rm -rf app/build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build test/build -j 2
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND rm -rf test/build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
# execute_process(COMMAND ccache -s)
- name: Configure 2
shell: cmake -P {0}
run: |
set(ENV{CC} ${{ matrix.config.cc }})
set(ENV{CXX} ${{ matrix.config.cxx }})
if ("${{ runner.os }}" STREQUAL "macOS")
set(ENV{OPENSSL_ROOT_DIR} "/usr/local/Cellar/openssl")
elseif ("${{ runner.os }}" STREQUAL "Windows")
set(ENV{OPENSSL_ROOT_DIR} "C:/vcpkg/installed/x64-windows-static")
# set(ENV{CMAKE_TOOLCHAIN_FILE} "C:/vcpkg/scripts/buildsystems/vcpkg.cmake")
endif()
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 ("$ENV{GITHUB_EVENT_NAME}" STREQUAL "push")
set(ENV{CMAKE_BUILD_TYPE} "Release")
set(ENV{DOTNET_BUILD_CONFIGURATION} "Release")
set(ENV{NODE_GYP_BUILD_MODE} "release")
else()
set(ENV{CMAKE_BUILD_TYPE} "Debug")
set(ENV{DOTNET_BUILD_CONFIGURATION} "Debug")
set(ENV{NODE_GYP_BUILD_MODE} "debug")
endif()
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake
-DBUILD_TEST_BUILD=OFF
-DBUILD_TEST_UNIT=ON
-S test
-B test/build
-D CMAKE_BUILD_TYPE=$ENV{CMAKE_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 2
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()
set(path_separator ":")
if ("${{ runner.os }}" STREQUAL "Windows")
set(path_separator ";")
endif()
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}")
# 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 ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build test/build -j 2
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
# execute_process(COMMAND ccache -s)
- name: Test
shell: cmake -P {0}
run: |
execute_process(
COMMAND ctest -VV
WORKING_DIRECTORY test/build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
execute_process(
COMMAND rm -rf test/build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
- name: Build non-C++
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()
set(path_separator ":")
if ("${{ runner.os }}" STREQUAL "Windows")
set(path_separator ";")
endif()
set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}")
if ("${{ runner.os }}" STREQUAL "macOS" OR "${{ runner.os }}" STREQUAL "Linux")
execute_process(
COMMAND ${{ steps.cmake_and_ninja.outputs.cmake_dir }}/cmake --build binding/build -j 2
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
endif()
- name: Test non-C++
shell: cmake -P {0}
run: |
if ("${{ runner.os }}" STREQUAL "macOS" OR "${{ runner.os }}" STREQUAL "Linux")
execute_process(
COMMAND ctest -VV
WORKING_DIRECTORY binding/build
RESULT_VARIABLE result
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
endif()