This is a Production Draft ¯\(ツ)/¯ , it has no tests, no CI, no docs, no examples, etc. It's just a proof of concept whit good intentions and charm.
Tool for running bingo managed tools.
- Go 1.18+
bingo
go install github.com/diegosz/bingorun@latestRecommended: Pin the bingorun tool to your project using bingo. Do it via:
bingo get -l github.com/diegosz/bingorun@latestRun you desired tool using the following command:
bingorun <tool-name> [args...]It runs the specified tool, and (re)installs the tool if missing.
Example:
bingorun go-enum --marshal --nocase -f=<file.go>It could be used in go:generate directives, for example:
//go:generate bingorun go-enum --marshal --nocase -f=$GOFILEInstead of the tool name, you can use the following commands:
-b, --bin print the path of the tool binary
-v, --version print the version
-h, --help print this help messageI like to use bingo to automatically manage the versioning of Go package level binaries required as dev tools for a project.
It's an awesome tool that even allows you to use some versioned commands from
bigger projects like Kubernetes, Prometheus or Thanos without the use of a
lot of replace statements (plus others like exclude or retract).
Also I like to keep the go:generate directives in the source code, close to
the place that it belongs instead of having it far away in a makefile or some
other script. For example:
//go:generate go-enum --marshal --nocase -f=$GOFILEWhen using go:generate it also means that we will have defined 3 environment
variables with the name of the go package, the filename where the
directive is located and also the exact line the generate command was
invoked from.
$GOFILE: The base name of the file.$GOLINE: The line number of the directive in the source file.$GOPACKAGE: The name of the package of the file containing the directive.
We could install the tools using the bingo get -l symlink option to solve this
case, but when jumping from one project to the other, we could have side effects
by having another binary with same name or different version.
I completely agree with the notion of not including a run command within
bingo, as mentioned
here and
here, but no one mentioned
anything about not having a run command outside bingo. :-)
- Add tests.
- Add documentation.
- Add examples.
- Add continuous integration.