diff --git a/.travis.yml b/.travis.yml index 194e22521dd..b77532ad6e3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,16 +12,11 @@ node_js: cache: - node_modules before_install: -- export START_TIME=$( date +%s ) - npm i -g yarn install: -- yarn add mrgit --ignore-workspace-root-check -- mrgit sync --resolver-url-template="https://github.com/\${ path }.git" -- git checkout package.json yarn.lock -- rm -rf node_modules - yarn install script: -- yarn run test --reporter=dots --production +- ./scripts/codecov-run-tests.sh - yarn run docs:api --validate-only - 'if [ $TRAVIS_TEST_RESULT -eq 0 ]; then travis_wait 30 yarn run docs:build-and-publish-nightly; diff --git a/scripts/continuous-integration-run-tests.sh b/scripts/continuous-integration-run-tests.sh new file mode 100755 index 00000000000..b9c2dc245e9 --- /dev/null +++ b/scripts/continuous-integration-run-tests.sh @@ -0,0 +1,95 @@ +#!/bin/bash + +# @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. +# For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license + +packages=$(ls packages -1 | sed -e 's#^ckeditor5\?-\(.\+\)$#\1#') + +errorOccured=0 + +failedTestsPackages="" +failedCoveragePackages="" + +RED='\033[0;31m' +NC='\033[0m' + +# Travis functions inspired by https://github.com/travis-ci/travis-rubies/blob/a10ba31e3f508650204017332a608ef9bce2c733/build.sh. +function travis_nanoseconds() { + local cmd="date" + local format="+%s%N" + local os=$(uname) + + if hash gdate > /dev/null 2>&1; then + cmd="gdate" # use gdate if available + elif [[ "$os" = Darwin ]]; then + format="+%s000000000" # fallback to second precision on darwin (does not support %N) + fi + + $cmd -u $format +} + +travis_time_start() { + travis_timer_id=$(printf %08x $(( RANDOM * RANDOM ))) + travis_start_time=$(travis_nanoseconds) + echo -en "travis_time:start:$travis_timer_id\r${ANSI_CLEAR}" +} + +travis_time_finish() { + local result=$? + travis_end_time=$(travis_nanoseconds) + local duration=$(($travis_end_time-$travis_start_time)) + echo -en "\ntravis_time:end:$travis_timer_id:start=$travis_start_time,finish=$travis_end_time,duration=$duration\r${ANSI_CLEAR}" + return $result +} + + +fold_start() { + echo -e "travis_fold:start:$1\033[33;1m$2\033[0m" + travis_time_start +} + +fold_end() { + travis_time_finish + echo -e "\ntravis_fold:end:$1\n" + +} + +for package in $packages; do + + fold_start "pkg-$package" "Testing $package${NC}" + + yarn run test -f $package --reporter=dots --production --coverage + + if [ "$?" -ne "0" ]; then + echo + + echo -e "💥 ${RED}$package${NC} failed to pass unit tests 💥" + failedTestsPackages="$failedTestsPackages $package" + errorOccured=1 + fi + + if [ "$?" -ne "0" ]; then + echo -e "💥 ${RED}$package${NC} doesn't have required code coverage 💥" + failedCoveragePackages="$failedCoveragePackages $package" + errorOccured=1 + fi + + fold_end "pkg-$package" +done; + +if [ "$errorOccured" -eq "1" ]; then + echo + echo "---" + echo + + if ! [[ -z $failedTestsPackages ]]; then + echo -e "Following packages did not pass unit tests:${RED}$failedTestsPackages${NC}" + fi + + if ! [[ -z $failedCoveragePackages ]]; then + echo -e "Following packages did not provide required code coverage:${RED}$failedCoveragePackages${NC}" + fi + + echo + exit 1 # Will break the CI build +fi