feat: Add version print
This commit is contained in:
48
pkg/version/verflag/verflag.go
Normal file
48
pkg/version/verflag/verflag.go
Normal file
@ -0,0 +1,48 @@
|
||||
// MIT License
|
||||
//
|
||||
// Copyright (c) 2024 vinchent <vinchent@vinchent.xyz>
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
package verflag
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"git.vinchent.xyz/vinchent/howmuch/pkg/version"
|
||||
"github.com/spf13/pflag"
|
||||
)
|
||||
|
||||
const versionFlagName = "version"
|
||||
|
||||
var doPrint *bool
|
||||
|
||||
func AddFlags(fs *pflag.FlagSet) {
|
||||
doPrint = fs.BoolP("version", "v", true, "Print version and exit")
|
||||
// By default, set to false
|
||||
*doPrint = false
|
||||
}
|
||||
|
||||
func PrintVersion() {
|
||||
fmt.Printf("%s\n", version.Get().String())
|
||||
if *doPrint {
|
||||
os.Exit(0)
|
||||
}
|
||||
}
|
85
pkg/version/version.go
Normal file
85
pkg/version/version.go
Normal file
@ -0,0 +1,85 @@
|
||||
// MIT License
|
||||
//
|
||||
// Copyright (c) 2024 vinchent <vinchent@vinchent.xyz>
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
package version
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"runtime"
|
||||
|
||||
"github.com/gosuri/uitable"
|
||||
)
|
||||
|
||||
// Version info format
|
||||
var (
|
||||
GitVersion = "v0.0.0-master+$Format:%h$"
|
||||
// BuildDate is the output of $(date -u + '%Y-%m-%dT%H:%M:%SZ')
|
||||
BuildDate = "1970-01-01T00:00:00Z"
|
||||
// GitCommit is the SHA1
|
||||
GitCommit = "$Format:%H$"
|
||||
// GitTreeState clean or dirty
|
||||
GitTreeState = ""
|
||||
)
|
||||
|
||||
type Info struct {
|
||||
GitVersion string `json:"git_version"`
|
||||
GitCommit string `json:"git_commit"`
|
||||
GitTreeState string `json:"git_tree_state"`
|
||||
BuildDate string `json:"build_date"`
|
||||
GoVersion string `json:"go_version"`
|
||||
Compiler string `json:"compiler"`
|
||||
Platform string `json:"platform"`
|
||||
}
|
||||
|
||||
func (info Info) String() string {
|
||||
table := uitable.New()
|
||||
table.RightAlign(0)
|
||||
table.MaxColWidth = 80
|
||||
table.Separator = " "
|
||||
table.AddRow("git version:", info.GitVersion)
|
||||
table.AddRow("git commit:", info.GitCommit)
|
||||
table.AddRow("git tree state:", info.GitTreeState)
|
||||
table.AddRow("build date:", info.BuildDate)
|
||||
table.AddRow("go version:", info.GoVersion)
|
||||
table.AddRow("compiler:", info.Compiler)
|
||||
table.AddRow("platform:", info.Platform)
|
||||
|
||||
return table.String()
|
||||
}
|
||||
|
||||
func (info Info) JSON() string {
|
||||
s, _ := json.Marshal(info)
|
||||
return string(s)
|
||||
}
|
||||
|
||||
func Get() Info {
|
||||
return Info{
|
||||
GitVersion: GitVersion,
|
||||
GitCommit: GitCommit,
|
||||
GitTreeState: GitTreeState,
|
||||
BuildDate: BuildDate,
|
||||
GoVersion: runtime.Version(),
|
||||
Compiler: runtime.Compiler,
|
||||
Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH),
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user