mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-27 09:11:57 +00:00
74dc626 Merge pull request #108 from weaveworks/disable-apt-daily b4f1d91 Merge pull request #107 from weaveworks/docker-17-update 7436aa1 Override apt daily job to not run immediately on boot 7980f15 Merge pull request #106 from weaveworks/document-docker-install-role f741e53 Bump to Docker 17.06 from CE repo 61796a1 Update Docker CE Debian repo details 0d86f5e Allow for Docker package to be named docker-ce 065c68d Document selection of Docker installation role. 3809053 Just --porcelain; it defaults to v1 11400ea Merge pull request #105 from weaveworks/remove-weaveplugin-remnants b8b4d64 remove weaveplugin remnants 35099c9 Merge pull request #104 from weaveworks/pull-docker-py cdd48fc Pull docker-py to speed tests/builds up. e1c6c24 Merge pull request #103 from weaveworks/test-build-tags d5d71e0 Add -tags option so callers can pass in build tags 8949b2b Merge pull request #98 from weaveworks/git-status-tag ac30687 Merge pull request #100 from weaveworks/python_linting 4b125b5 Pin yapf & flake8 versions 7efb485 Lint python linting function 444755b Swap diff direction to reflect changes required c5b2434 Install flake8 & yapf 5600eac Lint python in build-tools repo 0b02ca9 Add python linting c011c0d Merge pull request #79 from kinvolk/schu/python-shebang 6577d07 Merge pull request #99 from weaveworks/shfmt-version 00ce0dc Use git status instead of diff to add 'WIP' tag 411fd13 Use shfmt v1.3.0 instead of latest from master. 31d069d Change Python shebang to `#!/usr/bin/env python` git-subtree-dir: tools git-subtree-split: 74dc626b6de3ffb38591510f7cb7bc2db33743c4
155 lines
3.7 KiB
Bash
Executable File
155 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
SLOW=
|
|
NO_GO_GET=true
|
|
TAGS=
|
|
PARALLEL=
|
|
RACE="-race -covermode=atomic"
|
|
TIMEOUT=1m
|
|
|
|
usage() {
|
|
echo "$0 [-slow] [-in-container foo] [-netgo] [-(no-)go-get] [-timeout 1m]"
|
|
}
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
"-slow")
|
|
SLOW=true
|
|
shift 1
|
|
;;
|
|
"-no-race")
|
|
RACE=
|
|
shift 1
|
|
;;
|
|
"-no-go-get")
|
|
NO_GO_GET=true
|
|
shift 1
|
|
;;
|
|
"-go-get")
|
|
NO_GO_GET=
|
|
shift 1
|
|
;;
|
|
"-netgo")
|
|
TAGS="netgo"
|
|
shift 1
|
|
;;
|
|
"-tags")
|
|
TAGS="$2"
|
|
shift 2
|
|
;;
|
|
"-p")
|
|
PARALLEL=true
|
|
shift 1
|
|
;;
|
|
"-timeout")
|
|
TIMEOUT=$2
|
|
shift 2
|
|
;;
|
|
*)
|
|
usage
|
|
exit 2
|
|
;;
|
|
esac
|
|
done
|
|
|
|
GO_TEST_ARGS=(-tags "${TAGS[@]}" -cpu 4 -timeout $TIMEOUT)
|
|
|
|
if [ -n "$SLOW" ] || [ -n "$CIRCLECI" ]; then
|
|
SLOW=true
|
|
fi
|
|
|
|
if [ -n "$SLOW" ]; then
|
|
GO_TEST_ARGS=("${GO_TEST_ARGS[@]}" ${RACE})
|
|
|
|
# shellcheck disable=SC2153
|
|
if [ -n "$COVERDIR" ]; then
|
|
coverdir="$COVERDIR"
|
|
else
|
|
coverdir=$(mktemp -d coverage.XXXXXXXXXX)
|
|
fi
|
|
|
|
mkdir -p "$coverdir"
|
|
fi
|
|
|
|
fail=0
|
|
|
|
if [ -z "$TESTDIRS" ]; then
|
|
# NB: Relies on paths being prefixed with './'.
|
|
TESTDIRS=($(git ls-files -- '*_test.go' | grep -vE '^(vendor|experimental)/' | xargs -n1 dirname | sort -u | sed -e 's|^|./|'))
|
|
else
|
|
# TESTDIRS on the right side is not really an array variable, it
|
|
# is just a string with spaces, but it is written like that to
|
|
# shut up the shellcheck tool.
|
|
TESTDIRS=($(for d in ${TESTDIRS[*]}; do echo "$d"; done))
|
|
fi
|
|
|
|
# If running on circle, use the scheduler to work out what tests to run on what shard
|
|
if [ -n "$CIRCLECI" ] && [ -z "$NO_SCHEDULER" ] && [ -x "$DIR/sched" ]; then
|
|
PREFIX=$(go list -e ./ | sed -e 's/\//-/g')
|
|
TESTDIRS=($(echo "${TESTDIRS[@]}" | "$DIR/sched" sched "$PREFIX-$CIRCLE_PROJECT_USERNAME-$CIRCLE_PROJECT_REPONAME-$CIRCLE_BUILD_NUM" "$CIRCLE_NODE_TOTAL" "$CIRCLE_NODE_INDEX"))
|
|
echo "${TESTDIRS[@]}"
|
|
fi
|
|
|
|
PACKAGE_BASE=$(go list -e ./)
|
|
|
|
# Speed up the tests by compiling and installing their dependencies first.
|
|
go test -i "${GO_TEST_ARGS[@]}" "${TESTDIRS[@]}"
|
|
|
|
run_test() {
|
|
local dir=$1
|
|
if [ -z "$NO_GO_GET" ]; then
|
|
go get -t -tags "${TAGS[@]}" "$dir"
|
|
fi
|
|
|
|
local GO_TEST_ARGS_RUN=("${GO_TEST_ARGS[@]}")
|
|
if [ -n "$SLOW" ]; then
|
|
local COVERPKGS
|
|
COVERPKGS=$( (
|
|
go list "$dir"
|
|
go list -f '{{join .Deps "\n"}}' "$dir" | grep -v "vendor" | grep "^$PACKAGE_BASE/"
|
|
) | paste -s -d, -)
|
|
local output
|
|
output=$(mktemp "$coverdir/unit.XXXXXXXXXX")
|
|
local GO_TEST_ARGS_RUN=("${GO_TEST_ARGS[@]}" -coverprofile=$output -coverpkg=$COVERPKGS)
|
|
fi
|
|
|
|
local START
|
|
START=$(date +%s)
|
|
if ! go test "${GO_TEST_ARGS_RUN[@]}" "$dir"; then
|
|
fail=1
|
|
fi
|
|
local END
|
|
END=$(date +%s)
|
|
local RUNTIME=$((END - START))
|
|
|
|
# Report test runtime when running on circle, to help scheduler
|
|
if [ -n "$CIRCLECI" ] && [ -z "$NO_SCHEDULER" ] && [ -x "$DIR/sched" ]; then
|
|
"$DIR/sched" time "$dir" "$RUNTIME"
|
|
fi
|
|
}
|
|
|
|
for dir in "${TESTDIRS[@]}"; do
|
|
if [ -n "$PARALLEL" ]; then
|
|
run_test "$dir" &
|
|
else
|
|
run_test "$dir"
|
|
fi
|
|
done
|
|
|
|
if [ -n "$PARALLEL" ]; then
|
|
wait
|
|
fi
|
|
|
|
if [ -n "$SLOW" ] && [ -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
|