Should auxiliary code generators be in `cmd/` or in `tools/`?
renom opened this issue · 2 comments
E.g. we have an app in cmd/ and a couple of code generators that generate code used in the app. Where should we put those generators?
It depends... Whenever you have something with the main package, even if it's not an app you ship, putting it under cmd is ok. Kubernetes is kind of like that: https://github.com/kubernetes/kubernetes/tree/master/cmd
A lot of times the external/3rd party code generators or other code related tools (e.g., linters) go into the tools directory where they get pulled in as dependencies (which is an enhanced version of what's described here https://www.jvt.me/posts/2022/06/15/go-tools-dependency-management/ and here https://marcofranssen.nl/manage-go-tools-via-go-modules ):
Here are a few examples of that:
https://github.com/cilium/cilium/blob/main/tools/tools.go
https://github.com/dapr/dapr/blob/master/tools/tools.go
https://github.com/buildpacks/pack/blob/main/tools/tools.go
Sometimes the tools directory does include custom code too. Here's an example: https://github.com/influxdata/influxdb/blob/master/tools/tmpl/main.go
And sometimes the tools directory has a bunch of supporting components that are all over the place like Istio, for example: https://github.com/istio/istio/tree/master/tools
converting to a discussion... useful question and info