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.
kratos/hack/tools.sh

126 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, fix, tidy"
}
case $1 in
lint)
lint
;;
test)
test
;;
test_coverage)
test_coverage
;;
tidy)
tidy
;;
fix)
fix
;;
*)
help
;;
esac