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.
126 lines
2.8 KiB
126 lines
2.8 KiB
3 years ago
|
#!/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, fix, tidy"
|
||
|
}
|
||
|
|
||
|
case $1 in
|
||
|
lint)
|
||
|
lint
|
||
|
;;
|
||
|
test)
|
||
|
test
|
||
|
;;
|
||
|
test_coverage)
|
||
|
test_coverage
|
||
|
;;
|
||
|
tidy)
|
||
|
tidy
|
||
|
;;
|
||
|
fix)
|
||
|
fix
|
||
|
;;
|
||
|
*)
|
||
|
help
|
||
|
;;
|
||
|
esac
|