diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f58e9f5..295579c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,8 +22,6 @@ jobs: packages: "g++-8" packages_to_remove: "" os: "ubuntu-16.04" - cxx: "g++" - sources: "" llvm_os: "" llvm_ver: "" b2_args: "cxxstd=98,03,11,14,1z toolset=gcc-8 cxxflags=\"--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD\" linkflags=\"--coverage -lasan -lubsan\"" @@ -33,8 +31,6 @@ jobs: packages: "g++-4.6" packages_to_remove: "" os: "ubuntu-16.04" - cxx: "g++" - sources: "" llvm_os: "" llvm_ver: "" b2_args: "cxxstd=98,0x toolset=gcc-4.6 cxxflags=\"--coverage -DBOOST_TRAVISCI_BUILD\" linkflags=\"--coverage\"" @@ -44,8 +40,6 @@ jobs: packages: "clang++-7" packages_to_remove: "" os: "ubuntu-16.04" - cxx: "g++" - sources: "" llvm_os: "xenial" llvm_ver: "7" b2_args: "cxxstd=98,03,11,14,1z toolset=clang-7 cxxflags=\"--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD\" linkflags=\"--coverage -fsanitize=address,leak,undefined\"" @@ -55,8 +49,6 @@ jobs: packages: "libc++-dev" packages_to_remove: "" os: "ubuntu-16.04" - cxx: "g++" - sources: "" llvm_os: "" llvm_ver: "" b2_args: "cxxstd=03,11,14 toolset=clang-libc++ cxxflags=\"--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD\" linkflags=\"--coverage -fsanitize=address,leak,undefined\"" @@ -66,73 +58,74 @@ jobs: container: ${{ matrix.container }} steps: + - uses: actions/checkout@v2 - name: Check if running in container if: matrix.container != '' run: echo "GHA_CONTAINER=${{ matrix.container }}" >> $GITHUB_ENV - - uses: actions/checkout@v2 - - - name: linux + - name: Install packages shell: bash env: - CXX: ${{ matrix.cxx }} - SOURCES: ${{ matrix.sources }} - LLVM_OS: ${{ matrix.llvm_os }} - LLVM_VER: ${{ matrix.llvm_ver }} - PACKAGES: ${{ matrix.packages }} - PACKAGES_TO_REMOVE: ${{ matrix.packages_to_remove }} - JOB_BUILDTYPE: ${{ matrix.buildtype }} - B2_ARGS: ${{ matrix.b2_args }} - GCOVTOOL: ${{ matrix.gcovtool }} - TRAVIS_BRANCH: ${{ github.base_ref }} - TRAVIS_OS_NAME: "linux" + CI_LLVM_OS: ${{ matrix.llvm_os }} + CI_LLVM_VER: ${{ matrix.llvm_ver }} + CI_PACKAGES: ${{ matrix.packages }} + CI_PACKAGES_TO_REMOVE: ${{ matrix.packages_to_remove }} run: | - echo '==================================> SETUP' - echo '==================================> PACKAGES' - sudo ln -s /usr/bin/llvm-cov-9 /usr/bin/llvm-cov - set -e - if [ -n "$PACKAGES_TO_REMOVE" ]; then sudo apt-get purge -y $PACKAGES_TO_REMOVE; fi - echo ">>>>> APT: REPO.." - for i in {1..3}; do sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" && break || sleep 2; done - - if test -n "${LLVM_OS}" ; then - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - if test -n "${LLVM_VER}" ; then - sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS}-${LLVM_VER} main" - else - # Snapshot (i.e. trunk) build of clang - sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS} main" + set -ex + + ci_print_packages_info() { + if [ -n "$CI_DEBUG" ]; then + echo $1 + whoami + dpkg -l + echo "Checking /usr/local" + ls -al /usr/local + echo "Checking clang" + which clang++ || true + clang++ --version || true + ls -al /etc/alternatives + ls -al /usr/bin/c* fi - fi - echo ">>>>> APT: UPDATE.." - sudo -E apt-get -o Acquire::Retries=3 update - if test -n "${SOURCES}" ; then - echo ">>>>> APT: INSTALL SOURCES.." - for SOURCE in $SOURCES; do - sudo -E apt-add-repository ppa:$SOURCE - done - fi - echo ">>>>> APT: INSTALL ${PACKAGES}.." - sudo -E DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=3 -y --no-install-suggests --no-install-recommends install ${PACKAGES} + } - echo '==================================> INSTALL AND COMPILE' - set -e - export TRAVIS_BUILD_DIR=$(pwd) - export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')} - export VCS_COMMIT_ID=$GITHUB_SHA - export GIT_COMMIT=$GITHUB_SHA - export REPO_NAME=$(basename $GITHUB_REPOSITORY) - export USER=$(whoami) - export CC=${CC:-gcc} - export PATH=~/.local/bin:/usr/local/bin:$PATH + ci_remove_packages() { + if [ -n "$CI_PACKAGES_TO_REMOVE" ]; then + echo "About to run sudo apt-get purge -y $CI_PACKAGES_TO_REMOVE" + sudo apt-get purge -y $CI_PACKAGES_TO_REMOVE + fi + } - if [ "$JOB_BUILDTYPE" == "boost" ]; then + ci_linux_cxx_install() { + echo "About to run linux-cxx-install.sh" + wget https://raw.githubusercontent.com/boostorg/boost-ci/master/ci/drone/linux-cxx-install.sh + chmod +x linux-cxx-install.sh + mv linux-cxx-install.sh .github/ + PACKAGES=$CI_PACKAGES LLVM_OS=$CI_LLVM_OS LLVM_VER=$CI_LLVM_VER .github/linux-cxx-install.sh + echo "Done with linux-cxx-install.sh" + } - echo '==================================> INSTALL' + ci_print_packages_info "Before package removal or install" + ci_remove_packages + ci_linux_cxx_install + ci_print_packages_info "After package removal and install" - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true + - name: Prepare Boost libraries and Test + shell: bash + env: + CI_LLVM_VER: ${{ matrix.llvm_ver }} + CI_B2_ARGS: ${{ matrix.b2_args }} + CI_GCOVTOOL: ${{ matrix.gcovtool }} + CI_GIT_BRANCH: ${{ github.base_ref }} + run: | + set -ex + + export CI_PROJECT_DIR=$(pwd) + export CI_GIT_BRANCH=${CI_GIT_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')} + export CI_REPO_NAME=$(basename $GITHUB_REPOSITORY) + + BOOST_BRANCH=develop && [ "$CI_GIT_BRANCH" == "master" ] && BOOST_BRANCH=master || true IGNORE_COVERAGE='' - BOOST_LIBS_FOLDER=$(basename $REPO_NAME) + BOOST_LIBS_FOLDER=$(basename $CI_REPO_NAME) UBSAN_OPTIONS=print_stacktrace=1 LSAN_OPTIONS=verbosity=1:log_threads=1 BOOST=$HOME/boost-local @@ -140,9 +133,9 @@ jobs: cd $BOOST git submodule update --init --depth 10 --jobs 2 tools/build tools/boostdep tools/inspect libs/filesystem python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 2" $BOOST/libs/filesystem - echo "Testing $BOOST/libs/$BOOST_LIBS_FOLDER moved from $TRAVIS_BUILD_DIR, branch $BOOST_BRANCH" + echo "Testing $BOOST/libs/$BOOST_LIBS_FOLDER moved from $CI_PROJECT_DIR, branch $BOOST_BRANCH" rm -rf $BOOST/libs/$BOOST_LIBS_FOLDER || true - cp -rp $TRAVIS_BUILD_DIR $BOOST/libs/$BOOST_LIBS_FOLDER + cp -rp $CI_PROJECT_DIR $BOOST/libs/$BOOST_LIBS_FOLDER python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 2" $BOOST_LIBS_FOLDER git status ./bootstrap.sh @@ -150,42 +143,38 @@ jobs: ./b2 -j4 variant=debug tools/inspect/build echo "using gcc ;" >> ~/user-config.jam echo "using clang ;" >> ~/user-config.jam - echo "using clang : 3.8 : clang++-3.8 ;" >> ~/user-config.jam - echo "using clang : 4 : clang++-4.0 ;" >> ~/user-config.jam - echo "using clang : 5 : clang++-5.0 ;" >> ~/user-config.jam - echo "using clang : 6 : clang++-6.0 ;" >> ~/user-config.jam - echo "using clang : 7 : clang++-7 ;" >> ~/user-config.jam - echo "using clang : 8 : clang++-8 ;" >> ~/user-config.jam + if [ -n "$CI_LLVM_VER" ]; then echo "using clang : ${CI_LLVM_VER} : clang++-${CI_LLVM_VER} ;" >> ~/user-config.jam; fi echo "using clang : libc++ : clang++-libc++ ;" >> ~/user-config.jam cd $BOOST/libs/$BOOST_LIBS_FOLDER/test/ - echo '==================================> SCRIPT' + echo '==================================> TEST' - sh -c "../../../b2 -j2 $B2_ARGS" - ../../../dist/bin/inspect .. -license -copyright -crlf -end -path_name -tab -ascii -apple_macro -assert_macro -deprecated_macro -minmax -unnamed + sh -c "../../../b2 -j2 $CI_B2_ARGS" + ../../../dist/bin/inspect .. echo '==================================> AFTER_SUCCESS' - mkdir -p $TRAVIS_BUILD_DIR/coverals - find ../../../bin.v2/ -name "*.gcda" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - find ../../../bin.v2/ -name "*.gcno" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - find ../../../bin.v2/ -name "*.da" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - find ../../../bin.v2/ -name "*.no" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; + mkdir -p $CI_PROJECT_DIR/coverals + find ../../../bin.v2/ -name "*.gcda" -exec cp "{}" $CI_PROJECT_DIR/coverals/ \; + find ../../../bin.v2/ -name "*.gcno" -exec cp "{}" $CI_PROJECT_DIR/coverals/ \; + find ../../../bin.v2/ -name "*.da" -exec cp "{}" $CI_PROJECT_DIR/coverals/ \; + find ../../../bin.v2/ -name "*.no" -exec cp "{}" $CI_PROJECT_DIR/coverals/ \; wget https://github.com/linux-test-project/lcov/archive/v1.14.zip unzip v1.14.zip - LCOV="`pwd`/lcov-1.14/bin/lcov --gcov-tool $GCOVTOOL" + LCOV="`pwd`/lcov-1.14/bin/lcov --gcov-tool $CI_GCOVTOOL" mkdir -p ~/.local/bin - echo -e '#!/bin/bash\nexec llvm-cov gcov "$@"' > ~/.local/bin/gcov_for_clang.sh + echo -e "#!/bin/bash\nexec llvm-cov-${CI_LLVM_VER} gcov \"\$@\"" > ~/.local/bin/gcov_for_clang.sh chmod 755 ~/.local/bin/gcov_for_clang.sh - echo "$LCOV --directory $TRAVIS_BUILD_DIR/coverals --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info" - $LCOV --directory $TRAVIS_BUILD_DIR/coverals --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info + echo "$LCOV --directory $CI_PROJECT_DIR/coverals --base-directory `pwd` --capture --output-file $CI_PROJECT_DIR/coverals/coverage.info" + $LCOV --directory $CI_PROJECT_DIR/coverals --base-directory `pwd` --capture --output-file $CI_PROJECT_DIR/coverals/coverage.info cd $BOOST - $LCOV --remove $TRAVIS_BUILD_DIR/coverals/coverage.info "/usr*" "*/$BOOST_LIBS_FOLDER/test/*" $IGNORE_COVERAGE "*/$BOOST_LIBS_FOLDER/tests/*" "*/$BOOST_LIBS_FOLDER/examples/*" "*/$BOOST_LIBS_FOLDER/example/*" -o $TRAVIS_BUILD_DIR/coverals/coverage.info + $LCOV --remove $CI_PROJECT_DIR/coverals/coverage.info "/usr*" "*/$BOOST_LIBS_FOLDER/test/*" $IGNORE_COVERAGE "*/$BOOST_LIBS_FOLDER/tests/*" "*/$BOOST_LIBS_FOLDER/examples/*" "*/$BOOST_LIBS_FOLDER/example/*" -o $CI_PROJECT_DIR/coverals/coverage.info OTHER_LIBS=`grep "submodule .*" .gitmodules | sed 's/\[submodule\ "\(.*\)"\]/"\*\/boost\/\1\.hpp" "\*\/boost\/\1\/\*"/g'| sed "/\"\*\/boost\/$BOOST_LIBS_FOLDER\/\*\"/d" | sed ':a;N;$!ba;s/\n/ /g'` echo $OTHER_LIBS - eval "$LCOV --remove $TRAVIS_BUILD_DIR/coverals/coverage.info $OTHER_LIBS -o $TRAVIS_BUILD_DIR/coverals/coverage.info" - cd $TRAVIS_BUILD_DIR - sudo gem install coveralls-lcov || echo "ERROR. Failed to install coveralls-lcov" - coveralls-lcov coverals/coverage.info + eval "$LCOV --remove $CI_PROJECT_DIR/coverals/coverage.info $OTHER_LIBS -o $CI_PROJECT_DIR/coverals/coverage.info" - fi + - name: Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: ./coverals/coverage.info