mirror of
https://github.com/safing/portmaster
synced 2025-04-03 10:39:13 +00:00
Add testing and CI integration
This commit is contained in:
parent
4348caa258
commit
a976d5270c
4 changed files with 231 additions and 0 deletions
6
.gitattributes
vendored
Normal file
6
.gitattributes
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
# Treat all Go files in this repo as binary, with no git magic updating
|
||||
# line endings. Windows users contributing to Go will need to use a
|
||||
# modern version of git and editors capable of LF line endings.
|
||||
|
||||
*.go -text diff=golang
|
||||
|
10
.golangci.yml
Normal file
10
.golangci.yml
Normal file
|
@ -0,0 +1,10 @@
|
|||
linters:
|
||||
enable-all: true
|
||||
disable:
|
||||
- lll
|
||||
- gochecknoinits
|
||||
- gochecknoglobals
|
||||
- funlen
|
||||
- whitespace
|
||||
- wsl
|
||||
- godox
|
20
.travis.yml
Normal file
20
.travis.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
language: go
|
||||
|
||||
os:
|
||||
- linux
|
||||
- windows
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
- /^feature\/travis\/.+$/ # feature/travis/*
|
||||
- /^fix\/travis\/.+$/ # fix/travis/*
|
||||
|
||||
install:
|
||||
- go get -d -u github.com/golang/dep
|
||||
- go install github.com/golang/dep/cmd/dep
|
||||
- dep ensure
|
||||
- ./test install
|
||||
|
||||
script: ./test --scripted
|
195
test
Executable file
195
test
Executable file
|
@ -0,0 +1,195 @@
|
|||
#!/bin/bash
|
||||
|
||||
warnings=0
|
||||
errors=0
|
||||
scripted=0
|
||||
goUp="\\e[1A"
|
||||
all=0
|
||||
fullTestFlags="-short"
|
||||
install=0
|
||||
|
||||
function help {
|
||||
echo "usage: $0 [command] [options]"
|
||||
echo ""
|
||||
echo "commands:"
|
||||
echo " <none> run baseline tests"
|
||||
echo " all run all tests"
|
||||
echo " install install deps for running baseline tests"
|
||||
echo " install all install deps for running all tests"
|
||||
echo ""
|
||||
echo "options:"
|
||||
echo " --scripted dont jump console lines (still use colors)"
|
||||
echo " [package] run tests only on this package"
|
||||
}
|
||||
|
||||
function run {
|
||||
if [[ $scripted -eq 0 ]]; then
|
||||
echo "[......] $*"
|
||||
fi
|
||||
|
||||
# create tmpfile
|
||||
tmpfile=$(mktemp)
|
||||
# execute
|
||||
$* >$tmpfile 2>&1
|
||||
rc=$?
|
||||
output=$(cat $tmpfile)
|
||||
|
||||
# check return code
|
||||
if [[ $rc -eq 0 ]]; then
|
||||
if [[ $output == *"[no test files]"* ]]; then
|
||||
echo -e "${goUp}[\e[01;33mNOTEST\e[00m] $*"
|
||||
warnings=$((warnings+1))
|
||||
else
|
||||
echo -ne "${goUp}[\e[01;32m OK \e[00m] "
|
||||
if [[ $2 == "test" ]]; then
|
||||
echo -n $*
|
||||
echo -n ": "
|
||||
echo $output | cut -f "3-" -d " "
|
||||
else
|
||||
echo $*
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [[ $output == *"build constraints exclude all Go files"* ]]; then
|
||||
echo -e "${goUp}[ !=OS ] $*"
|
||||
else
|
||||
echo -e "${goUp}[\e[01;31m FAIL \e[00m] $*"
|
||||
cat $tmpfile
|
||||
errors=$((errors+1))
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -f $tmpfile
|
||||
}
|
||||
|
||||
function checkformat {
|
||||
if [[ $scripted -eq 0 ]]; then
|
||||
echo "[......] gofmt $1"
|
||||
fi
|
||||
|
||||
output=$(gofmt -l $GOPATH/src/$1/*.go)
|
||||
if [[ $output == "" ]]; then
|
||||
echo -e "${goUp}[\e[01;32m OK \e[00m] gofmt $*"
|
||||
else
|
||||
echo -e "${goUp}[\e[01;31m FAIL \e[00m] gofmt $*"
|
||||
echo "The following files do not conform to gofmt:"
|
||||
gofmt -l $GOPATH/src/$1/*.go # keeps format
|
||||
errors=$((errors+1))
|
||||
fi
|
||||
}
|
||||
|
||||
# get and switch to script dir
|
||||
baseDir="$( cd "$(dirname "$0")" && pwd )"
|
||||
cd "$baseDir"
|
||||
|
||||
# args
|
||||
while true; do
|
||||
case "$1" in
|
||||
"-h"|"help"|"--help")
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
"--scripted")
|
||||
scripted=1
|
||||
goUp=""
|
||||
shift 1
|
||||
;;
|
||||
"install")
|
||||
install=1
|
||||
shift 1
|
||||
;;
|
||||
"all")
|
||||
all=1
|
||||
fullTestFlags=""
|
||||
shift 1
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# check if $GOPATH/bin is in $PATH
|
||||
if [[ $PATH != *"$GOPATH/bin"* ]]; then
|
||||
export PATH=$GOPATH/bin:$PATH
|
||||
fi
|
||||
|
||||
# install
|
||||
if [[ $install -eq 1 ]]; then
|
||||
echo "installing dependencies..."
|
||||
echo "$ go get -u golang.org/x/lint/golint"
|
||||
go get -u golang.org/x/lint/golint
|
||||
if [[ $all -eq 1 ]]; then
|
||||
echo "$ go get -u github.com/golangci/golangci-lint/cmd/golangci-lint"
|
||||
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# check dependencies
|
||||
if [[ $(which go) == "" ]]; then
|
||||
echo "go command not found"
|
||||
exit 1
|
||||
fi
|
||||
if [[ $(which gofmt) == "" ]]; then
|
||||
echo "gofmt command not found"
|
||||
exit 1
|
||||
fi
|
||||
if [[ $(which golint) == "" ]]; then
|
||||
echo "golint command not found"
|
||||
echo "install with: go get -u golang.org/x/lint/golint"
|
||||
echo "or run: ./test install"
|
||||
exit 1
|
||||
fi
|
||||
if [[ $all -eq 1 ]]; then
|
||||
if [[ $(which golangci-lint) == "" ]]; then
|
||||
echo "golangci-lint command not found"
|
||||
echo "install locally with: go get -u github.com/golangci/golangci-lint/cmd/golangci-lint"
|
||||
echo "or run: ./test install all"
|
||||
echo ""
|
||||
echo "hint: install for CI with: curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin vX.Y.Z"
|
||||
echo "don't forget to specify the version you want"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# target selection
|
||||
if [[ "$1" == "" ]]; then
|
||||
# get all packages
|
||||
packages=$(go list ./...)
|
||||
else
|
||||
# single package testing
|
||||
packages=$(go list)/$1
|
||||
if [[ ! -d "$GOPATH/src/$packages" ]]; then
|
||||
echo "go package $packages does not exist"
|
||||
help
|
||||
exit 1
|
||||
fi
|
||||
echo "note: only running tests for package $packages"
|
||||
fi
|
||||
|
||||
# platform info
|
||||
platformInfo=$(go env GOOS GOARCH)
|
||||
echo "running tests for ${platformInfo//$'\n'/ }:"
|
||||
|
||||
# run vet/test on packages
|
||||
for package in $packages; do
|
||||
echo ""
|
||||
echo $package
|
||||
checkformat $package
|
||||
run golint -set_exit_status -min_confidence 1.0 $package
|
||||
run go vet $package
|
||||
if [[ $all -eq 1 ]]; then
|
||||
run golangci-lint run $GOPATH/src/$package
|
||||
fi
|
||||
run go test -cover $fullTestFlags $package
|
||||
done
|
||||
|
||||
echo ""
|
||||
if [[ $errors -gt 0 ]]; then
|
||||
echo "failed with $errors errors and $warnings warnings"
|
||||
exit 1
|
||||
else
|
||||
echo "succeeded with $warnings warnings"
|
||||
exit 0
|
||||
fi
|
Loading…
Add table
Reference in a new issue