Track tools using tool directive
#1873
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary Of Changes
Additional Context
New in Go 1.24: https://tip.golang.org/doc/go1.24#tools
https://tip.golang.org/doc/modules/managing-dependencies#tools
Important context: I decided to keep the internal
toolsmodule becausego get -tooladds all the tool's dependencies into your project. That means, we will end up with a much largergo.modwith manyrequiredirectives for the tool's dependencies. Whilst this in itself is not a problem (that's whatgo.modis for), it has the potential to trigger false positives on security scanning tools.For example,
promtoolpulls a version ofgithub.com/golang-jwt/jwtthat has a known vulnerability. In this case, I realised it was not a vulnerability on our project, but on the tool dependency. For this reason, I decided to keep the internal tools pattern: to minimise false positives from security scannersThere's still some merit to having the
tooldirective ingo.mod, because it pulls more dependencies, which means is more accurately tracking what our project depends on (even if we don't link to it).Local Testing
Run
go install toolandcd internal/tools; go install tool. All tools build successfully and are installed to GOBIN.