• Stars
    star
    97
  • Rank 348,505 (Top 7 %)
  • Language
    Go
  • License
    MIT License
  • Created over 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

🧬 Pure DNA of your CLI!
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.