📚 version - Awesome Go Library for Command Line

Go Gopher mascot for version

Collects and displays CLI version information in multiple formats along with upgrade notice.

🏷️ Command Line
📂 Libraries for building standard or basic Command Line applications.
97 stars
View on GitHub 🔗

Detailed Description of version

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 ⭐!

Quick Start

go get go.szostok.io/version

Visit version.szostok.io/quick-start for the most popular way of the setup.

Documentation

Visit version.szostok.io for complete documentation about setup and usage.

Why?

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")

Functionality

  • For Go 1.18+, detect version, commit, commitDate, and dirtyBuild automatically
    • Allow version data overriding via -ldflags
  • 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

Stay informed

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.