diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..d170fffa --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,363 @@ +name: CI + +on: + pull_request: + push: + branches: + - master + - develop + - feature/** + +env: + UBSAN_OPTIONS: print_stacktrace=1 + +jobs: + posix: + if: true + strategy: + fail-fast: false + matrix: + include: +# gcc 4.7 not supported by beast +# minimum requirement is gcc 4.8 + - toolset: gcc-4.8 + cxxstd: "11" + os: ubuntu-16.04 + install: g++-4.8 + supported: true +# gcc 4.9 not supported by beast +# It dies with ICE when compiling + - toolset: gcc-5 + cxxstd: "11,14,1z" + os: ubuntu-16.04 + supported: true + - toolset: gcc-6 + cxxstd: "11,14,1z" + os: ubuntu-16.04 + install: g++-6 + supported: true + - toolset: gcc-7 + cxxstd: "11,14,17" + os: ubuntu-18.04 + supported: true + - toolset: gcc-8 + cxxstd: "11,14,17,2a" + os: ubuntu-18.04 + supported: true + - toolset: gcc-9 + cxxstd: "11,14,17,2a" + os: ubuntu-18.04 + supported: true + - toolset: gcc-10 + cxxstd: "11,14,17,2a" + os: ubuntu-18.04 + supported: true +# clang 3.5 not supported +# It can't compile the websocket stream code + - toolset: clang + compiler: clang++-3.6 + cxxstd: "11,14" + os: ubuntu-16.04 + install: clang-3.6 + supported: true + - toolset: clang + compiler: clang++-3.7 + cxxstd: "11,14" + os: ubuntu-16.04 + install: clang-3.7 + supported: true + - toolset: clang + compiler: clang++-3.8 + cxxstd: "11,14" + os: ubuntu-16.04 + install: clang-3.8 + supported: true + - toolset: clang + compiler: clang++-3.9 + cxxstd: "11,14" + os: ubuntu-16.04 + install: clang-3.9 + supported: true + - toolset: clang + compiler: clang++-4.0 + cxxstd: "11,14" + os: ubuntu-16.04 + install: clang-4.0 + supported: true + - toolset: clang + compiler: clang++-5.0 + cxxstd: "11,14,1z" + os: ubuntu-16.04 + install: clang-5.0 + supported: true + - toolset: clang + compiler: clang++-6.0 + cxxstd: "11,14,17" + os: ubuntu-18.04 + supported: true + - toolset: clang + compiler: clang++-7 + cxxstd: "11,14" + os: ubuntu-18.04 + install: clang-7 + supported: true + - toolset: clang + compiler: clang++-8 + cxxstd: "11,14,17" + os: ubuntu-20.04 + supported: true + - toolset: clang + compiler: clang++-9 + cxxstd: "11,14,17,2a" + os: ubuntu-20.04 + supported: true + - toolset: clang + compiler: clang++-10 + cxxstd: "11,14,17,2a" + os: ubuntu-20.04 + supported: true +# macos + - description: macos-cxx11 + toolset: clang + cxxstd: "11" + os: macos-10.15 + supported: true + - description: macos-cxx14 + toolset: clang + cxxstd: "14" + os: macos-10.15 + supported: true + - description: macos-cxx17 + toolset: clang + cxxstd: "17" + os: macos-10.15 + supported: true + - description: macos-cxx2a + toolset: clang + cxxstd: "2a" + os: macos-10.15 + supported: true + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v2 + + - name: Install packages + if: matrix.install + run: sudo apt install ${{matrix.install}} + + - name: Setup Boost + run: | + if [[ $(uname) =~ [Ll]inux ]]; then + echo Installing locales for ${TRAVIS_OS_NAME} ... + sudo /usr/sbin/locale-gen fr_FR + sudo /usr/sbin/locale-gen en_GB + sudo locale -a + echo ...done with locales + fi + echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY + LIBRARY=${GITHUB_REPOSITORY#*/} + echo LIBRARY: $LIBRARY + echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV + echo GITHUB_BASE_REF: $GITHUB_BASE_REF + echo GITHUB_REF: $GITHUB_REF + REF=${GITHUB_BASE_REF:-$GITHUB_REF} + REF=${REFrefs/heads/} + echo REF: $REF + BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true + echo BOOST_BRANCH: $BOOST_BRANCH + cd .. + git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY + ./bootstrap.sh + ./b2 -d0 headers + + - name: Macos specific + if: matrix.os == 'macos-10.15' + run: | + echo "macos - set up homebrew openssl" + cat > ~/user-config.jam </usr/local/opt/openssl/include + debug:/usr/local/opt/openssl/lib + windowsdebug:/usr/local/opt/openssl/debug/lib + release:/usr/local/opt/openssl/lib + ; + EOF + + - name: Create user-config.jam + if: matrix.compiler + run: | + echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" >> ~/user-config.jam + + - name: Run tests + run: | + cd ../boost-root + if [[ "${{matrix.supported}}" != "true" ]] ; then + echo "This configuration is not supported because ${{matrix.supported}}" + exit 0 + fi + toolsets=$(sed 's/,/ /g' <<<"${{matrix.toolset}}") + standards=$(sed 's/,/ /g' <<<"${{matrix.cxxstd}}") + variants="debug release" + err=0 + for toolset in ${toolsets} ; do + for standard in ${standards} ; do + for variant in ${variants} ; do + if [[ err -ne 0 ]] ; then + echo "skipping: ${toolset} ${standard} ${variant}" + else + echo "running: ${toolset} ${standard} ${variant}" + ./b2 -j3 libs/$LIBRARY/test toolset=${toolset} cxxstd=${standard} variant=${variant} + err=$? + fi + done + done + done + [[ $err -ne 0 ]] && false || true + + windows: + if: true + strategy: + fail-fast: false + matrix: + include: + - description: msvc-14.1-cxx14-win32 + toolset: msvc-14.1 + cxxstd: "14" + addrmd: 32 + os: windows-2016 + cxxflags: "" + supported: true +# msvc-141 ICEs when built with +# optimisations on in c++17 configuration +# both 32-bit and 64-bit arch + - description: msvc-14.1-cxx14-win64 + toolset: msvc-14.1 + cxxstd: "14" + addrmd: 64 + os: windows-2016 + cxxflags: "" + supported: true + - description: msvc-14.2-cxx14-win32 + toolset: msvc-14.2 + cxxstd: "14" + addrmd: 32 + os: windows-2019 + cxxflags: "" + supported: true + - description: msvc-14.2-cxx17-win32 + toolset: msvc-14.2 + cxxstd: "17" + addrmd: 32 + os: windows-2019 + cxxflags: "cxxflags=-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1" + supported: true + - description: msvc-14.2-cxx20-win32 + toolset: msvc-14.2 + cxxstd: "latest" + addrmd: 32 + os: windows-2019 + cxxflags: "cxxflags=-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1" + supported: true + - description: msvc-14.2-cxx14-win64 + toolset: msvc-14.2 + cxxstd: "14" + addrmd: 64 + os: windows-2019 + cxxflags: "" + supported: true + - description: msvc-14.2-cxx17-win64 + toolset: msvc-14.2 + cxxstd: "17" + addrmd: 64 + os: windows-2019 + cxxflags: "cxxflags=-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1" + supported: true + - description: msvc-14.2-cxx20-win64 + toolset: msvc-14.2 + cxxstd: "latest" + addrmd: 64 + os: windows-2019 + cxxflags: "cxxflags=-D_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING=1" + supported: true + - toolset: gcc + cxxstd: "11,14,17,2a" + addrmd: 64 + os: windows-2019 + cxxflags: "cxxflags=-Wa,-mbig-obj" + supported: "Too many unknowns to get this compiler working - gcc-8.1" + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v2 + + - name: Setup OpenSSL + shell: cmd + run: | + echo Install choco + powershell -Command iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')) + if "${{matrix.addrmd}}" == "64" ( + choco install --no-progress -y openssl --x64 + mklink /D "C:\\OpenSSL" "C:\\Program Files\\OpenSSL-Win64" + ) else ( + choco install --no-progress -y openssl --x86 + mklink /D "C:\\OpenSSL" "C:\\Program Files (x86)\\OpenSSL-Win32" + ) + + - name: Setup Boost + shell: cmd + run: | + echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% + for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi + echo LIBRARY: %LIBRARY% + echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% + echo GITHUB_BASE_REF: %GITHUB_BASE_REF% + echo GITHUB_REF: %GITHUB_REF% + if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% + set BOOST_BRANCH=develop + for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master + echo BOOST_BRANCH: %BOOST_BRANCH% + cd .. + git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% + copy libs\%LIBRARY%\tools\user-config.jam %USERPROFILE%\user-config.jam + set OPENSSL_ROOT=C:\OpenSSL + cmd /c bootstrap + b2 -d0 headers + + - name: Run tests + shell: bash + run: | + echo "current directory: $(pwd)" + cd ../boost-root + export OPENSSL_ROOT="C:\\OpenSSL" + if [[ "${{matrix.supported}}" != "true" ]] ; then + echo "This configuration is not supported because ${{matrix.supported}}" + exit 0 + fi + toolsets=$(sed 's/,/ /g' <<<"${{matrix.toolset}}") + standards=$(sed 's/,/ /g' <<<"${{matrix.cxxstd}}") + address_models=$(sed 's/,/ /g' <<<"${{matrix.addrmd}}") + variants="debug release" + for toolset in ${toolsets} ; do + for standard in ${standards} ; do + for address_model in ${address_models} ; do + for variant in ${variants} ; do + echo "running: ${toolset} ${standard} ${address_model} ${variant}" + ./b2 -j3 ${{matrix.cxxflags}} libs/$LIBRARY/test toolset=${toolset} cxxstd=${standard} address-model=${address_model} variant=${variant} || exit $? + done + done + done + done diff --git a/CHANGELOG.md b/CHANGELOG.md index 8cf9ef91..aab51ff7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +* Enable Github Actions CI. + +-------------------------------------------------------------------------------- + Version 311: * Fix warning in http-server-fast. diff --git a/test/beast/_experimental/stream.cpp b/test/beast/_experimental/stream.cpp index 58b57bfa..592dd388 100644 --- a/test/beast/_experimental/stream.cpp +++ b/test/beast/_experimental/stream.cpp @@ -164,8 +164,15 @@ public: auto ex = co_await net::this_coro::executor; auto s1 = test::stream(ex); auto s2 = net::use_awaitable.as_default_on(std::move(s1)); +#ifdef BOOST_ASIO_HAS_DEFAULT_FUNCTION_TEMPLATE_ARGUMENTS auto bt = co_await s2.async_read_some(b); bt = co_await s2.async_write_some(b); +#else + auto bt = co_await s2.async_read_some(b, + net::use_awaitable); + bt = co_await s2.async_write_some(b, + net::use_awaitable); +#endif } #endif