#!/bin/bash warnings=0 errors=0 scripted=0 goUp="\\e[1A" function run { if [[ $scripted -eq 0 ]]; then echo "[......] $*" fi # create tmpfile tmpfile=$(mktemp) # execute $* >$tmpfile 2>&1 rc=$? output=$(cat $tmpfile) # check return code if [[ $rc -eq 0 ]]; then if [[ $output == *"[no test files]"* ]]; then echo -e "${goUp}[\e[01;33mNOTEST\e[00m] $*" warnings=$((warnings+1)) else echo -ne "${goUp}[\e[01;32m OK \e[00m] " if [[ $2 == "test" ]]; then echo -n $* echo -n ": " echo $output | cut -f "3-" -d " " else echo $* fi fi else if [[ $output == *"build constraints exclude all Go files"* ]]; then echo -e "${goUp}[ !=OS ] $*" else echo -e "${goUp}[\e[01;31m FAIL \e[00m] $*" >/dev/stderr cat $tmpfile >/dev/stderr errors=$((errors+1)) fi fi rm -f $tmpfile } # get and switch to script dir baseDir="$( cd "$(dirname "$0")" && pwd )" cd "$baseDir" # change output format if being run in script if [[ $1 == "--scripted" ]]; then scripted=1 goUp="" fi # platform info platformInfo=$(go env GOOS GOARCH) echo "running tests for ${platformInfo//$'\n'/ }:" # get all packages packages=$(go list ./...) # run vet/test on packages for package in $packages; do run go vet $package run go test -cover $package done echo "" if [[ $errors -gt 0 ]]; then echo "failed with $errors errors and $warnings warnings" exit 1 else echo "succeeded with $warnings warnings" exit 0 fi