Categorygo.hein.dev/go-version
modulepackage
0.1.0
Repository: https://github.com/christopherhein/go-version.git
Documentation: pkg.go.dev

# README

= Go Version

image::https://travis-ci.org/christopherhein/go-version.svg?branch=master[link="https://travis-ci.org/christopherhein/go-version"]

This package gives allows you to use https://github.com/spf13/cobra and https://github.com/goreleaser/goreleaser together to output your version in a simple way. Supporting multiple flags for mutating the output.

== Usage

To use this package you will need to create cobra command for version such as this.

[source,go]

package main

import ( "fmt" goversion "go.hein.dev/go-version" "github.com/spf13/cobra" )

var ( shortened = false version = "dev" commit = "none" date = "unknown" output = "json" versionCmd = &cobra.Command{ Use: "version", Short: "Version will output the current build information", Long: ``, Run: func(_ *cobra.Command, _ []string) { resp := goVersion.FuncWithOutput(shortened, version, commit, date, output) fmt.Print(resp) return }, } )

func init() { versionCmd.Flags().BoolVarP(&shortened, "short", "s", false, "Print just the version number.") versionCmd.Flags().StringVarP(&output, "output", "o", "json", "Output format. One of 'yaml' or 'json'.") rootCmd.AddCommand(versionCmd) }

When you do this then you can pass in these flags at build time. _If you'd like more control of the output you can change the Run function to something more like this.

[source,go]

Run: func(_ *cobra.Command, _ []string) { var response string versionOutput := New(version, commit, date)

if shortened {
	response = versionOutput.ToShortened()
} else {
	response = versionOutput.ToJSON()
}
fmt.Printf("%+v", response)
return

},

[source,shell]

go build -ldflags "-X main.commit= -X main.date="

This then gives your CLI the ability to use this for the JSON output:

[source,shell]

$ ./my-cli version {"Version":"dev","Commit":"","Date":""}

Or to make this human readable you could use:

[source,shell]

$ ./my-cli -s

Version: dev Commit: Date:

== Testing

To run the test suite all you need to do is run.

[source,shell]

go test -v ./...

== Contributing

If you want to contribute check out https://github.com/christopherhein/go-version/blob/master/CONTRIBUTING.adoc

# Packages

Copyright © 2019 NAME HERE <EMAIL ADDRESS> Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.

# Functions

Func will return the versioning code with only JSON and raw text support.
FuncWithOutput will add the versioning code.
New will create a pointer to a new version object.

# Variables

JSON returns json so that we can change the output.
YAML returns yaml so that we can change the output.

# Structs

Info creates a formattable struct for output.