import "go.szostok.io/version"
Go package to present your CLI version in a classy way. All magic included!
Like the idea? Give a GitHub star ⭐!
go get go.szostok.io/version
Visit version.szostok.io/quick-start
for the most popular way of the setup.
Visit version.szostok.io
for complete documentation about setup and usage.
If you create a new CLI, it's natural that you use a framework such as Cobra, urfave/cli
, or similar. Each of your CLIs has also an option to show its version. But in this case, we repeat the same stuff: collecting and displaying related information.
This package aims to solve that problem. To register the version command, simply add:
extension.NewVersionCobraCmd()
Go 1.18 simplified collecting version-related data, as commit, date, and other data are embedded. You can still override these fields with ldflags, e.g.:
-X go.szostok.io/version.version=1.42.0
You can gain more features, such as upgrade notice, just by adding:
extension.WithUpgradeNotice("repo-owner", "repo-name")
- For Go 1.18+, detect
version
,commit
,commitDate
, anddirtyBuild
automatically- Allow version data overriding via
-ldflags
- Allow version data overriding via
- Print the version in the YAML, JSON, short, and pretty formats
- Detect and display an upgrade notice if a newer version of your project has been released
- Automatically disable color output for non-tty output streams
- Handle the version and upgrade notices separately
- Designed in a way that lets you use each component individually
- Everything can be enabled with a single line of code. For example, use
extension.NewVersionCobraCmd()
to enable the version command for Cobra - Customize the output format and behaviour (e.g. timeouts, re-check intervals)
- Parse any dates and print them in the local date and time format
- All provided functionality is fully tested to ensure no regression
- Extend the version info with own fields just by assigning your Go struct
Follow @m_szostok on Twitter to get the latest news. You can also subscribe for new version
releases on GitHub, where you can find a detailed changelog for each of them.
For additional content, check Mateusz Szostok's blog.