Skip to content

Instantly share code, notes, and snippets.

@h12w h12w/goclean.sh
Last active Jul 21, 2019

Embed
What would you like to do?
golcean.sh does automatic checking on a Go package and its sub-packages.
#!/bin/bash
# The script does automatic checking on a Go package and its sub-packages, including:
# 1. gofmt (http://golang.org/cmd/gofmt/)
# 2. goimports (https://github.com/bradfitz/goimports)
# 3. golint (https://github.com/golang/lint)
# 4. go vet (http://golang.org/cmd/vet)
# 5. race detector (http://blog.golang.org/race-detector)
# 6. test coverage (http://blog.golang.org/cover)
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);
do
if ls $dir/*.go &> /dev/null; then
go test -covermode=count -coverprofile=$dir/profile.tmp $dir
if [ -f $dir/profile.tmp ]
then
cat $dir/profile.tmp | tail -n +2 >> profile.cov
rm $dir/profile.tmp
fi
fi
done
go tool cover -func profile.cov
# To submit the test coverage result to coveralls.io,
# use goveralls (https://github.com/mattn/goveralls)
# goveralls -coverprofile=profile.cov -service=travis-ci
@drewwells

This comment has been minimized.

Copy link

commented Dec 16, 2014

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

scripts/goclean.sh
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: https://circleci.com/gh/wellington/wellington/27

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

@davecgh

This comment has been minimized.

Copy link

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 ./...

@h12w

This comment has been minimized.

Copy link
Owner Author

commented Jun 15, 2015

Thanks.

I have just noticed that there are no notifications about the comments on Gist, I have just moved the script to my Git repository: https://github.com/hailiang/gosweep (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.