Problem
build depends on install, which runs 8+ go install @latest calls (golangci-lint, govulncheck, gosec, gotestsum, gomarkdoc, goreleaser, syft, goimports) on every invocation. Every CI job that calls make test, make lint, or make build pays this cost unless a GOPATH/bin cache is warm, adding ~2–3 min per job unnecessarily.
A downstream project has worked around this by caching ~/go/bin in GitHub Actions workflows, but the root issue is in bootstrap.mk.
Suggestion
Split install into two targets:
install-deps — go mod download + go mod tidy only
install-tools — all go install dev tool installs
build should depend only on install-deps. install can remain as a convenience target that calls both.
CI can then cache the tools layer (keyed on go.sum) independently from module deps, and tool reinstalls become a true cache-miss event rather than the default path.
Problem
builddepends oninstall, which runs 8+go install @latestcalls (golangci-lint, govulncheck, gosec, gotestsum, gomarkdoc, goreleaser, syft, goimports) on every invocation. Every CI job that callsmake test,make lint, ormake buildpays this cost unless a GOPATH/bin cache is warm, adding ~2–3 min per job unnecessarily.A downstream project has worked around this by caching
~/go/binin GitHub Actions workflows, but the root issue is inbootstrap.mk.Suggestion
Split
installinto two targets:install-deps—go mod download+go mod tidyonlyinstall-tools— allgo installdev tool installsbuildshould depend only oninstall-deps.installcan remain as a convenience target that calls both.CI can then cache the tools layer (keyed on
go.sum) independently from module deps, and tool reinstalls become a true cache-miss event rather than the default path.