mirror of
				https://github.com/AdguardTeam/AdGuardHome.git
				synced 2022-10-30 02:30:37 +03:00 
			
		
		
		
	Merge in DNS/adguard-home from imp-sh to master Squashed commit of the following: commit 477832e11eca2ef7ac0071b5da938dacb2ed617d Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Wed May 19 20:24:34 2021 +0300 scripts: rm dbg commit dbb4b8c783f607781b980dcd57d78085c9022e72 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Wed May 19 20:21:20 2021 +0300 all: imp code, compat, docs commit e6e4375d67ad1c213efb04411e3ba0bc6293f936 Author: Ainar Garipov <A.Garipov@AdGuard.COM> Date: Wed May 19 19:33:48 2021 +0300 all: imp scripts
		
			
				
	
	
		
			203 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
verbose="${VERBOSE:-0}"
 | 
						|
 | 
						|
# Set verbosity.
 | 
						|
if [ "$verbose" -gt '0' ]
 | 
						|
then
 | 
						|
	set -x
 | 
						|
fi
 | 
						|
 | 
						|
# Set $EXIT_ON_ERROR to zero to see all errors.
 | 
						|
if [ "${EXIT_ON_ERROR:-1}" -eq '0' ]
 | 
						|
then
 | 
						|
	set +e
 | 
						|
else
 | 
						|
	set -e
 | 
						|
fi
 | 
						|
 | 
						|
# We don't need glob expansions and we want to see errors about unset variables.
 | 
						|
set -f -u
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Deferred Helpers
 | 
						|
 | 
						|
not_found_msg='
 | 
						|
looks like a binary not found error.
 | 
						|
make sure you have installed the linter binaries using:
 | 
						|
 | 
						|
	$ make go-tools
 | 
						|
'
 | 
						|
readonly not_found_msg
 | 
						|
 | 
						|
# TODO(a.garipov): Put it into a separate script and source it both here and in
 | 
						|
# txt-lint.sh?
 | 
						|
not_found() {
 | 
						|
	if [ "$?" -eq '127' ]
 | 
						|
	then
 | 
						|
		# Code 127 is the exit status a shell uses when a command or
 | 
						|
		# a file is not found, according to the Bash Hackers wiki.
 | 
						|
		#
 | 
						|
		# See https://wiki.bash-hackers.org/dict/terms/exit_status.
 | 
						|
		echo "$not_found_msg" 1>&2
 | 
						|
	fi
 | 
						|
}
 | 
						|
trap not_found EXIT
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Warnings
 | 
						|
 | 
						|
go_min_version='go1.15'
 | 
						|
go_min_version_prefix="go version ${go_min_version}"
 | 
						|
go_version_msg="
 | 
						|
warning: your go version is different from the recommended minimal one (${go_min_version}).
 | 
						|
if you have the version installed, please set the GO environment variable.
 | 
						|
for example:
 | 
						|
 | 
						|
	export GO='${go_min_version}'
 | 
						|
"
 | 
						|
readonly go_min_version go_min_version_prefix go_version_msg
 | 
						|
 | 
						|
case "$( "$GO" version )"
 | 
						|
in
 | 
						|
("$go_min_version_prefix"*)
 | 
						|
	# Go on.
 | 
						|
	;;
 | 
						|
(*)
 | 
						|
	echo "$go_version_msg" 1>&2
 | 
						|
	;;
 | 
						|
esac
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Simple Analyzers
 | 
						|
 | 
						|
# blocklist_imports is a simple check against unwanted packages.  Currently it
 | 
						|
# only looks for package log which is replaced by our own package
 | 
						|
# github.com/AdguardTeam/golibs/log.
 | 
						|
blocklist_imports() {
 | 
						|
	git grep -F -e '"log"' -- '*.go' || exit 0;
 | 
						|
}
 | 
						|
 | 
						|
# method_const is a simple check against the usage of some raw strings and
 | 
						|
# numbers where one should use named constants.
 | 
						|
method_const() {
 | 
						|
	git grep -F -e '"GET"' -e '"POST"' -- '*.go' || exit 0;
 | 
						|
}
 | 
						|
 | 
						|
# underscores is a simple check against Go filenames with underscores.
 | 
						|
underscores() {
 | 
						|
	git ls-files '*_*.go' | {
 | 
						|
		grep -F\
 | 
						|
		-e '_big.go'\
 | 
						|
		-e '_bsd.go'\
 | 
						|
		-e '_darwin.go'\
 | 
						|
		-e '_freebsd.go'\
 | 
						|
		-e '_linux.go'\
 | 
						|
		-e '_little.go'\
 | 
						|
		-e '_others.go'\
 | 
						|
		-e '_test.go'\
 | 
						|
		-e '_unix.go'\
 | 
						|
		-e '_windows.go' \
 | 
						|
		-v\
 | 
						|
		|| exit 0
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Helpers
 | 
						|
 | 
						|
# exit_on_output exits with a nonzero exit code if there is anything in the
 | 
						|
# command's combined output.
 | 
						|
exit_on_output() (
 | 
						|
	set +e
 | 
						|
 | 
						|
	if [ "$VERBOSE" -lt '2' ]
 | 
						|
	then
 | 
						|
		set +x
 | 
						|
	fi
 | 
						|
 | 
						|
	cmd="$1"
 | 
						|
	shift
 | 
						|
 | 
						|
	output="$( "$cmd" "$@" 2>&1 )"
 | 
						|
	exitcode="$?"
 | 
						|
	if [ "$exitcode" != '0' ]
 | 
						|
	then
 | 
						|
		echo "'$cmd' failed with code $exitcode"
 | 
						|
	fi
 | 
						|
 | 
						|
	if [ "$output" != '' ]
 | 
						|
	then
 | 
						|
		if [ "$*" != '' ]
 | 
						|
		then
 | 
						|
			echo "combined output of '$cmd $@':"
 | 
						|
		else
 | 
						|
			echo "combined output of '$cmd':"
 | 
						|
		fi
 | 
						|
 | 
						|
		echo "$output"
 | 
						|
 | 
						|
		if [ "$exitcode" -eq '0' ]
 | 
						|
		then
 | 
						|
			exitcode='1'
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
 | 
						|
	return "$exitcode"
 | 
						|
)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Constants
 | 
						|
 | 
						|
go_files='./main.go ./tools.go ./internal/'
 | 
						|
readonly go_files
 | 
						|
 | 
						|
 | 
						|
 | 
						|
# Checks
 | 
						|
 | 
						|
exit_on_output blocklist_imports
 | 
						|
 | 
						|
exit_on_output method_const
 | 
						|
 | 
						|
exit_on_output underscores
 | 
						|
 | 
						|
exit_on_output gofumpt --extra -l -s .
 | 
						|
 | 
						|
golint --set_exit_status ./...
 | 
						|
 | 
						|
"$GO" vet ./...
 | 
						|
 | 
						|
# Here and below, don't use quotes to get word splitting.
 | 
						|
gocyclo --over 17 $go_files
 | 
						|
 | 
						|
gosec --quiet $go_files
 | 
						|
 | 
						|
ineffassign ./...
 | 
						|
 | 
						|
unparam ./...
 | 
						|
 | 
						|
git ls-files -- '*.go' '*.mod' '*.sh' 'Makefile' | xargs misspell --error
 | 
						|
 | 
						|
looppointer ./...
 | 
						|
 | 
						|
nilness ./...
 | 
						|
 | 
						|
exit_on_output shadow --strict ./...
 | 
						|
 | 
						|
# TODO(a.garipov): Enable errcheck fully after handling all errors, including
 | 
						|
# the deferred and generated ones, properly.  Also, perhaps, enable --blank.
 | 
						|
#
 | 
						|
# errcheck ./...
 | 
						|
exit_on_output sh -c '
 | 
						|
	errcheck --asserts --ignoregenerated ./... |\
 | 
						|
		{ grep -e "defer" -v || exit 0; }
 | 
						|
'
 | 
						|
 | 
						|
staticcheck ./...
 |