mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-02 17:50:39 +00:00
92 lines
2.2 KiB
Bash
Executable File
92 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
GO_TEST_ARGS="-tags netgo -cpu 4 -timeout 8m"
|
|
SLOW=
|
|
NO_GO_GET=
|
|
|
|
usage() {
|
|
echo "$0 [-slow] [-in-container foo]"
|
|
}
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
"-slow")
|
|
SLOW=true
|
|
shift 1
|
|
;;
|
|
"-no-go-get")
|
|
NO_GO_GET=true
|
|
shift 1
|
|
;;
|
|
*)
|
|
usage
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ -n "$SLOW" -o -n "$CIRCLECI" ]; then
|
|
SLOW=true
|
|
fi
|
|
|
|
if [ -n "$SLOW" ]; then
|
|
GO_TEST_ARGS="$GO_TEST_ARGS -race -covermode=atomic"
|
|
|
|
if [ -n "$COVERDIR" ] ; then
|
|
coverdir="$COVERDIR"
|
|
else
|
|
coverdir=$(mktemp -d coverage.XXXXXXXXXX)
|
|
fi
|
|
|
|
mkdir -p $coverdir
|
|
fi
|
|
|
|
fail=0
|
|
|
|
TESTDIRS=$(find . -type f -name '*_test.go' | xargs -n1 dirname | grep -vE '^\./(\.git|vendor|prog|experimental)/' | sort -u)
|
|
|
|
# If running on circle, use the scheduler to work out what tests to run on what shard
|
|
if [ -n "$CIRCLECI" -a -z "$NO_SCHEDULER" -a -x "$DIR/sched" ]; then
|
|
TESTDIRS=$(echo $TESTDIRS | "$DIR/sched" sched units-$CIRCLE_BUILD_NUM $CIRCLE_NODE_TOTAL $CIRCLE_NODE_INDEX)
|
|
echo $TESTDIRS
|
|
fi
|
|
|
|
PACKAGE_BASE=$(go list -e ./)
|
|
|
|
for dir in $TESTDIRS; do
|
|
if [ -z "$NO_GO_GET" ]; then
|
|
go get -t -tags netgo $dir
|
|
fi
|
|
|
|
GO_TEST_ARGS_RUN="$GO_TEST_ARGS"
|
|
if [ -n "$SLOW" ]; then
|
|
COVERPKGS=$( (go list $dir; go list -f '{{join .Deps "\n"}}' $dir | grep -v "vendor" | grep "^$PACKAGE_BASE/") | paste -s -d, -)
|
|
output=$(mktemp $coverdir/unit.XXXXXXXXXX)
|
|
GO_TEST_ARGS_RUN="$GO_TEST_ARGS -coverprofile=$output -coverpkg=$COVERPKGS"
|
|
fi
|
|
|
|
START=$(date +%s)
|
|
if ! go test $GO_TEST_ARGS_RUN $dir; then
|
|
fail=1
|
|
fi
|
|
RUNTIME=$(( $(date +%s) - $START ))
|
|
|
|
# Report test runtime when running on circle, to help scheduler
|
|
if [ -n "$CIRCLECI" -a -z "$NO_SCHEDULER" -a -x "$DIR/sched" ]; then
|
|
"$DIR/sched" time $dir $RUNTIME
|
|
fi
|
|
done
|
|
|
|
if [ -n "$SLOW" -a -z "$COVERDIR" ] ; then
|
|
go get github.com/weaveworks/tools/cover
|
|
cover $coverdir/* >profile.cov
|
|
rm -rf $coverdir
|
|
go tool cover -html=profile.cov -o=coverage.html
|
|
go tool cover -func=profile.cov | tail -n1
|
|
fi
|
|
|
|
exit $fail
|