Skip to content

Instantly share code, notes, and snippets.



Last active Aug 13, 2020
What would you like to do? does automatic checking on a Go package and its sub-packages.
# The script does automatic checking on a Go package and its sub-packages, including:
# 1. gofmt (
# 2. goimports (
# 3. golint (
# 4. go vet (
# 5. race detector (
# 6. test coverage (
set -e
# Automatic checks
test -z "$(gofmt -l -w . | tee /dev/stderr)"
test -z "$(goimports -l -w . | tee /dev/stderr)"
test -z "$(golint . | tee /dev/stderr)"
go vet ./...
go test -race ./...
# Run test coverage on each subdirectories and merge the coverage profile.
echo "mode: count" > profile.cov
# Standard go tooling behavior is to ignore dirs with leading underscors
for dir in $(find . -maxdepth 10 -not -path './.git*' -not -path '*/_*' -type d);
if ls $dir/*.go &> /dev/null; then
go test -covermode=count -coverprofile=$dir/profile.tmp $dir
if [ -f $dir/profile.tmp ]
cat $dir/profile.tmp | tail -n +2 >> profile.cov
rm $dir/profile.tmp
go tool cover -func profile.cov
# To submit the test coverage result to,
# use goveralls (
# goveralls -coverprofile=profile.cov -service=travis-ci

This comment has been minimized.

Copy link

@drewwells drewwells commented Dec 16, 2014

Great work. I found one problem on The for dir loop is creating odd dependency paths. ie.

ok      _/home/ubuntu/wellington    1.024s
ok      _/home/ubuntu/wellington/context    1.030s
ok      _/home/ubuntu/wellington/context/handlers   6.189s
ok      _/home/ubuntu/wellington/lexer  1.012s
cover: can't find "context.go": cannot find package "_/home/ubuntu/wellington/context/" 

go test|vet|tool ./... is working fine, only the find command is causing this issue. I haven't quite figured it out yet, but you can check out the build in action here:

I wonder if the pwd is changing, and profile.cov needs to explicitly define a directory to dump in?


This comment has been minimized.

Copy link

@davecgh davecgh commented Jan 16, 2015

I'm using a modified version of this and noticed that when there is a race, it doesn't return an error from the test command unless you set an environment variable.

I'd suggest:
env GORACE="halt_on_error=1" go test -v -race ./...


This comment has been minimized.

Copy link
Owner Author

@h12w h12w commented Jun 15, 2015


I have just noticed that there are no notifications about the comments on Gist, I have just moved the script to my Git repository: (name changed from goclean to gosweep to avoid confusion with "go clean" command).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.