diff options
Diffstat (limited to 'ci/common')
-rw-r--r-- | ci/common/build.sh | 9 | ||||
-rwxr-xr-x | ci/common/submit_coverage.sh | 6 | ||||
-rw-r--r-- | ci/common/suite.sh | 166 | ||||
-rw-r--r-- | ci/common/test.sh | 15 |
4 files changed, 23 insertions, 173 deletions
diff --git a/ci/common/build.sh b/ci/common/build.sh index 0ee4b7493f..b8bbff0b16 100644 --- a/ci/common/build.sh +++ b/ci/common/build.sh @@ -8,8 +8,6 @@ _stat() { top_make() { printf '%78s\n' | tr ' ' '=' - # Travis has 1.5 virtual cores according to: - # http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM ninja "$@" } @@ -46,7 +44,9 @@ build_deps() { cd "${CI_BUILD_DIR}" } -prepare_build() { +build_nvim() { + check_core_dumps --delete quiet + if test -n "${CLANG_SANITIZER}" ; then CMAKE_FLAGS="${CMAKE_FLAGS} -DCLANG_${CLANG_SANITIZER}=ON" fi @@ -55,9 +55,8 @@ prepare_build() { cd "${BUILD_DIR}" echo "Configuring with '${CMAKE_FLAGS} $@'." cmake -G Ninja ${CMAKE_FLAGS} "$@" "${CI_BUILD_DIR}" -} -build_nvim() { + echo "Building nvim." if ! top_make nvim ; then exit 1 diff --git a/ci/common/submit_coverage.sh b/ci/common/submit_coverage.sh index 9c7887de0b..f781ca8e5e 100755 --- a/ci/common/submit_coverage.sh +++ b/ci/common/submit_coverage.sh @@ -4,7 +4,7 @@ # Args: # $1: Flag(s) for codecov, separated by comma. -set -ex +set -e # Change to grandparent dir (POSIXly). CDPATH='' cd -P -- "$(dirname -- "$0")/../.." || exit @@ -18,12 +18,12 @@ if ! [ -f "$codecov_sh" ]; then curl --retry 5 --silent --fail -o "$codecov_sh" https://codecov.io/bash chmod +x "$codecov_sh" - python3 -m pip install --quiet --user gcovr + python -m pip install --quiet --user gcovr fi ( cd build - python3 -m gcovr --branches --exclude-unreachable-branches --print-summary -j 2 --exclude '.*/auto/.*' --root .. --delete -o ../coverage.xml --xml + python -m gcovr --branches --exclude-unreachable-branches --print-summary -j 2 --exclude '.*/auto/.*' --root .. --delete -o ../coverage.xml --xml ) # Upload to codecov. diff --git a/ci/common/suite.sh b/ci/common/suite.sh index 038b116c5a..5110e22ec2 100644 --- a/ci/common/suite.sh +++ b/ci/common/suite.sh @@ -11,65 +11,20 @@ FAIL_SUMMARY="" END_MARKER="$BUILD_DIR/.tests_finished" FAIL_SUMMARY_FILE="$BUILD_DIR/.test_errors" -ANSI_CLEAR="\033[0K" - -if test "$TRAVIS" = "true"; then - ci_fold() { - local action="$1" - local name="$2" - name="$(echo -n "$name" | tr '\n\0' '--' | sed 's/[^A-Za-z0-9]\{1,\}/-/g')" - name="$(echo -n "$name" | sed 's/-$//')" - echo -en "travis_fold:${action}:${name}\r${ANSI_CLEAR}" - } -elif test "$GITHUB_ACTIONS" = "true"; then - ci_fold() { - local action="$1" - local name="$2" - name="$(echo -n "$name" | tr '\n\0' '--' | sed 's/[^A-Za-z0-9]\{1,\}/-/g')" - name="$(echo -n "$name" | sed 's/-$//')" - case "$action" in - start) - echo "::group::${name}" - ;; - end) - echo "::endgroup::" - ;; - *) - :;; - esac - } -else - ci_fold() { - return 0 - } -fi - enter_suite() { - set +x FAILED=0 rm -f "${END_MARKER}" local suite_name="$1" export NVIM_TEST_CURRENT_SUITE="${NVIM_TEST_CURRENT_SUITE}/$suite_name" - ci_fold start "${NVIM_TEST_CURRENT_SUITE}" - set -x } exit_suite() { - set +x if test $FAILED -ne 0 ; then echo "Suite ${NVIM_TEST_CURRENT_SUITE} failed, summary:" echo "${FAIL_SUMMARY}" - else - ci_fold end "${NVIM_TEST_CURRENT_SUITE}" fi export NVIM_TEST_CURRENT_SUITE="${NVIM_TEST_CURRENT_SUITE%/*}" - if test "$1" != "--continue" ; then - exit $FAILED - else - local saved_failed=$FAILED - FAILED=0 - return $saved_failed - fi + FAILED=0 } fail() { @@ -87,114 +42,15 @@ fail() { FAILED=1 } -run_test() { - local cmd="$1" - test $# -gt 0 && shift - local test_name="$1" - : ${test_name:=$cmd} - test $# -gt 0 && shift - if ! eval "$cmd" ; then - fail "${test_name}" "$@" - fi -} - -run_test_wd() { - local hang_ok= - if test "$1" = "--allow-hang" ; then - hang_ok=1 - shift - fi - - local timeout="$1" - test $# -gt 0 && shift - - local cmd="$1" - test $# -gt 0 && shift - - local restart_cmd="$1" - : ${restart_cmd:=true} - test $# -gt 0 && shift - - local test_name="$1" - : ${test_name:=$cmd} - test $# -gt 0 && shift - - local output_file="$(mktemp)" - local status_file="$(mktemp)" - local sid_file="$(mktemp)" - - local restarts=5 - local prev_tmpsize=-1 - while test $restarts -gt 0 ; do - : > "$status_file" - : > "$sid_file" - setsid \ - env \ - output_file="$output_file" \ - status_file="$status_file" \ - sid_file="$sid_file" \ - cmd="$cmd" \ - CI_DIR="$CI_DIR" \ - sh -c ' - . "${CI_DIR}/common/test.sh" - ps -o sid= > "$sid_file" - ( - ret=0 - if ! eval "$cmd" 2>&1 ; then - ret=1 - fi - echo "$ret" > "$status_file" - ) | tee -a "$output_file" - ' - while test "$(stat -c "%s" "$status_file")" -eq 0 ; do - prev_tmpsize=$tmpsize - sleep $timeout - tmpsize="$(stat -c "%s" "$output_file")" - if test $tempsize -eq $prev_temsize ; then - # no output, assuming either hang or exit - break - fi - done - restarts=$(( restarts - 1 )) - if test "$(stat -c "%s" "$status_file")" -eq 0 ; then - # Status file not updated, assuming hang - - # SID not known, this should not ever happen - if test "$(stat -c "%s" "$sid_file")" -eq 0 ; then - fail "$test_name" E "Shell did not run" - break - fi - - # Kill all processes which belong to one session: should get rid of test - # processes as well as sh itself. - pkill -KILL -s$(cat "$sid_file") - - if test $restarts -eq 0 ; then - if test -z "$hang_ok" ; then - fail "$test_name" E "Test hang up" - fi - else - echo "Test ${test_name} hang up, restarting" - eval "$restart_cmd" - fi - else - local new_failed="$(cat "$status_file")" - if test "$new_failed" != "0" ; then - fail "$test_name" F "Test failed in run_test_wd" - fi - break - fi - done - - rm -f "$output_file" - rm -f "$status_file" - rm -f "$sid_file" -} - ended_successfully() { if test -f "${FAIL_SUMMARY_FILE}" ; then echo 'Test failed, complete summary:' cat "${FAIL_SUMMARY_FILE}" + + if [[ "$GITHUB_ACTIONS" == "true" ]]; then + rm -f "$FAIL_SUMMARY_FILE" + fi + return 1 fi if ! test -f "${END_MARKER}" ; then @@ -208,3 +64,13 @@ end_tests() { touch "${END_MARKER}" ended_successfully } + +run_suite() { + local command="$1" + local suite_name="$2" + + enter_suite "$suite_name" + eval "$command" || fail "$suite_name" + exit_suite +} + diff --git a/ci/common/test.sh b/ci/common/test.sh index 92c15c8ba1..f211a2e7aa 100644 --- a/ci/common/test.sh +++ b/ci/common/test.sh @@ -87,18 +87,15 @@ check_sanitizer() { } run_unittests() {( - enter_suite unittests ulimit -c unlimited || true if ! build_make unittest ; then fail 'unittests' F 'Unit tests failed' fi submit_coverage unittest check_core_dumps "$(command -v luajit)" - exit_suite )} run_functionaltests() {( - enter_suite functionaltests ulimit -c unlimited || true if ! build_make ${FUNCTIONALTEST}; then fail 'functionaltests' F 'Functional tests failed' @@ -107,11 +104,9 @@ run_functionaltests() {( check_sanitizer "${LOG_DIR}" valgrind_check "${LOG_DIR}" check_core_dumps - exit_suite )} run_oldtests() {( - enter_suite oldtests ulimit -c unlimited || true if ! make oldtest; then reset @@ -121,11 +116,9 @@ run_oldtests() {( check_sanitizer "${LOG_DIR}" valgrind_check "${LOG_DIR}" check_core_dumps - exit_suite )} check_runtime_files() {( - set +x local test_name="$1" ; shift local message="$1" ; shift local tst="$1" ; shift @@ -146,7 +139,6 @@ check_runtime_files() {( )} install_nvim() {( - enter_suite 'install_nvim' if ! build_make install ; then fail 'install' E 'make install failed' exit_suite @@ -179,11 +171,4 @@ install_nvim() {( if ! grep -q "$gpat" "${INSTALL_PREFIX}/share/nvim/runtime/$genvimsynf" ; then fail 'funcnames' F "It appears that $genvimsynf does not contain $gpat." fi - - exit_suite )} - -csi_clean() { - find "${BUILD_DIR}/bin" -name 'test-includes-*' -delete - find "${BUILD_DIR}" -name '*test-include*.o' -delete -} |