You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
2.8 KiB
125 lines
2.8 KiB
#!/usr/bin/env bash
|
|
|
|
# This is a tools shell script
|
|
# used by Makefile commands
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
GO111MODULE=on
|
|
KRAOTS_HOME=$(
|
|
cd "$(dirname "${BASH_SOURCE[0]}")" &&
|
|
cd .. &&
|
|
pwd
|
|
)
|
|
|
|
source "${KRAOTS_HOME}/hack/util.sh"
|
|
|
|
LINTER=${KRAOTS_HOME}/bin/golangci-lint
|
|
LINTER_CONFIG=${KRAOTS_HOME}/.golangci.yml
|
|
FAILURE_FILE=${KRAOTS_HOME}/hack/.lintcheck_failures
|
|
IGNORED_FILE=${KRAOTS_HOME}/hack/.test_ignored_files
|
|
|
|
all_modules=$(util::find_modules)
|
|
failing_modules=()
|
|
while IFS='' read -r line; do failing_modules+=("$line"); done < <(cat "$FAILURE_FILE")
|
|
ignored_modules=()
|
|
while IFS='' read -r line; do ignored_modules+=("$line"); done < <(cat "$IGNORED_FILE")
|
|
|
|
# functions
|
|
# lint all mod
|
|
function lint() {
|
|
for mod in $all_modules; do
|
|
local in_failing
|
|
util::array_contains "$mod" "${failing_modules[*]}" && in_failing=$? || in_failing=$?
|
|
if [[ "$in_failing" -ne "0" ]]; then
|
|
pushd "$mod" >/dev/null &&
|
|
echo "golangci lint $(sed -n 1p go.mod | cut -d ' ' -f2)" &&
|
|
eval "${LINTER} run --timeout=5m --config=${LINTER_CONFIG}"
|
|
popd >/dev/null || exit
|
|
fi
|
|
done
|
|
}
|
|
|
|
# test all mod
|
|
function test() {
|
|
for mod in $all_modules; do
|
|
local in_failing
|
|
util::array_contains "$mod" "${ignored_modules[*]}" && in_failing=$? || in_failing=$?
|
|
if [[ "$in_failing" -ne "0" ]]; then
|
|
pushd "$mod" >/dev/null &&
|
|
echo "go test $(sed -n 1p go.mod | cut -d ' ' -f2)" &&
|
|
go test -race ./...
|
|
popd >/dev/null || exit
|
|
fi
|
|
done
|
|
}
|
|
|
|
function test_coverage() {
|
|
echo "" >coverage.out
|
|
local base
|
|
base=$(pwd)
|
|
for mod in $all_modules; do
|
|
local in_failing
|
|
util::array_contains "$mod" "${ignored_modules[*]}" && in_failing=$? || in_failing=$?
|
|
if [[ "$in_failing" -ne "0" ]]; then
|
|
pushd "$mod" >/dev/null &&
|
|
echo "go test $(sed -n 1p go.mod | cut -d ' ' -f2)" &&
|
|
go test -race -coverprofile=profile.out -covermode=atomic ./...
|
|
if [ -f profile.out ]; then
|
|
cat profile.out >>"${base}/coverage.out"
|
|
rm profile.out
|
|
fi
|
|
popd >/dev/null || exit
|
|
fi
|
|
done
|
|
}
|
|
|
|
# try to fix all mod with golangci-lint
|
|
function fix() {
|
|
for mod in $all_modules; do
|
|
local in_failing
|
|
util::array_contains "$mod" "${failing_modules[*]}" && in_failing=$? || in_failing=$?
|
|
if [[ "$in_failing" -ne "0" ]]; then
|
|
pushd "$mod" >/dev/null &&
|
|
echo "golangci fix $(sed -n 1p go.mod | cut -d ' ' -f2)" &&
|
|
eval "${LINTER} run -v --fix --timeout=5m --config=${LINTER_CONFIG}"
|
|
popd >/dev/null || exit
|
|
fi
|
|
done
|
|
}
|
|
|
|
function tidy() {
|
|
for mod in $all_modules; do
|
|
pushd "$mod" >/dev/null &&
|
|
echo "go mod tidy $(sed -n 1p go.mod | cut -d ' ' -f2)" &&
|
|
go mod tidy
|
|
popd >/dev/null || exit
|
|
done
|
|
}
|
|
|
|
function help() {
|
|
echo "use: lint, test, test_coverage, fix, tidy"
|
|
}
|
|
|
|
case $1 in
|
|
lint)
|
|
lint
|
|
;;
|
|
test)
|
|
test
|
|
;;
|
|
test_coverage)
|
|
test_coverage
|
|
;;
|
|
tidy)
|
|
tidy
|
|
;;
|
|
fix)
|
|
fix
|
|
;;
|
|
*)
|
|
help
|
|
;;
|
|
esac
|
|
|