Toolbox and building blocks for new Go projects, to get started quickly and right-footed!
Makefile
withlint
,test
,build
,fmt
and more- Linting with
gofmt
,gofumpt
,go vet
,staticcheck
andgolangci-lint
- Logging setup using the slog logger (with debug and json logging options)
- GitHub Workflows for linting and testing, as well as releasing and publishing Docker images
- Entry files for CLI and HTTP server
- Webserver with
- Graceful shutdown, implementing
livez
,readyz
and draining API handlers - Prometheus metrics
- Using https://pkg.go.dev/github.com/go-chi/chi/v5 for routing
- Urfave for cli args
- Graceful shutdown, implementing
- https://github.com/uber-go/nilaway
- Postgres database with migrations
- See also:
- Public project setup: https://github.com/flashbots/flashbots-repository-template
- Repository for common Go utilities: https://github.com/flashbots/go-utils
Pick and choose whatever is useful to you! Don't feel the need to use everything, or even to follow this structure.
Build CLI
make build-cli
Build HTTP server
make build-httpserver
Install dev dependencies
go install mvdan.cc/gofumpt@v0.4.0
go install honnef.co/go/tools/cmd/staticcheck@2024.1.1
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.60.3
go install go.uber.org/nilaway/cmd/nilaway@v0.0.0-20240821220108-c91e71c080b7
go install github.com/daixiang0/gci@v0.11.2
Lint, test, format
make lint
make test
make fmt
Database tests (using a live Postgres instance)
Database tests will be run if the RUN_DB_TESTS
environment variable is set to 1
.
# start the database
docker run -d --name postgres-test -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres postgres
# run the tests
RUN_DB_TESTS=1 make test
# stop the database
docker rm -f postgres-test