すべてを書き直し、3.0.0をリリースします
git-svn-id: file:///srv/svn/repo/suwako/trunk@31 0b558ee1-521d-8b46-a41b-40029c97c055
This commit is contained in:
2
COPYING
2
COPYING
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* ----------------------------------------------------------------------------
|
* ----------------------------------------------------------------------------
|
||||||
* "THE BEER-WARE LICENSE" (Revision 42.1):
|
* "THE BEER-WARE LICENSE" (Revision 42.1):
|
||||||
* <yakumo.izuru@chaotic.ninja> wrote this file. As long as you retain this notice you
|
* <eternal-servant@yakumo.dev> wrote this file. As long as you retain this notice you
|
||||||
* can do whatever you want with this stuff. If we meet some day, and you think
|
* can do whatever you want with this stuff. If we meet some day, and you think
|
||||||
* this stuff is worth it, you can buy me a bottle of sake in return Izuru Yakumo
|
* this stuff is worth it, you can buy me a bottle of sake in return Izuru Yakumo
|
||||||
* ----------------------------------------------------------------------------
|
* ----------------------------------------------------------------------------
|
||||||
|
|||||||
19
README.md
19
README.md
@@ -1,4 +1,4 @@
|
|||||||
SUWAKO(1) - FreeBSD General Commands Manual
|
SUWAKO(1) - General Commands Manual
|
||||||
|
|
||||||
# NAME
|
# NAME
|
||||||
|
|
||||||
@@ -7,17 +7,16 @@ SUWAKO(1) - FreeBSD General Commands Manual
|
|||||||
# SYNOPSIS
|
# SYNOPSIS
|
||||||
|
|
||||||
**suwako**
|
**suwako**
|
||||||
\[**-f** *from*]
|
**-f** *from*
|
||||||
\[**-t** *to*]
|
**-t** *to*
|
||||||
\[*input*]
|
*input*
|
||||||
|
|
||||||
# DESCRIPTION
|
# DESCRIPTION
|
||||||
|
|
||||||
Self-explanatory, besides, this was made as
|
Self-explanatory, besides, this was made as
|
||||||
a rewrite from a shell script that had curl
|
a rewrite from a shell script that had curl
|
||||||
and awk for dependencies.
|
and awk for dependencies.
|
||||||
It fully serves
|
It fully serves as a drop-in replacement.
|
||||||
as a drop-in replacement.
|
|
||||||
|
|
||||||
# USAGE
|
# USAGE
|
||||||
|
|
||||||
@@ -40,11 +39,11 @@ suwako.conf(5)
|
|||||||
|
|
||||||
# AUTHORS
|
# AUTHORS
|
||||||
|
|
||||||
Izuru Yakumo <[yakumo.izuru@chaotic.ninja](mailto:yakumo.izuru@chaotic.ninja)>
|
Izuru Yakumo <[eternal-servant@yakumo.dev](mailto:eternal-servant@yakumo.dev)>
|
||||||
|
|
||||||
# BUGS
|
# BUGS
|
||||||
|
|
||||||
You cannot translate the string "version", this is
|
Mozhi instances use translated-text as opposed to translated\_text
|
||||||
a direct consequence of using flaggy.
|
coming from SimplyTranslate instances.
|
||||||
|
|
||||||
FreeBSD 13.2-RELEASE-p4 - December 16, 2023
|
NetBSD 10.1 - May 14, 2025
|
||||||
|
|||||||
101
cmd/root.go
Normal file
101
cmd/root.go
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
Copyright © 2025 Izuru Yakumo <eternal-servant@yakumo.dev>
|
||||||
|
|
||||||
|
*/
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"gopkg.in/ini.v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
cfgFile string
|
||||||
|
input string
|
||||||
|
output string
|
||||||
|
)
|
||||||
|
|
||||||
|
var conf struct {
|
||||||
|
endpoint string
|
||||||
|
engine string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Translate struct {
|
||||||
|
Output string `json:"translated_text"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var rootCmd = &cobra.Command{
|
||||||
|
Use: "suwako",
|
||||||
|
Short: "A client for SimplyTranslate with illusionary origins",
|
||||||
|
Args: cobra.MinimumNArgs(1),
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
_split := fmt.Sprint(args)
|
||||||
|
text := fmt.Sprint(strings.Trim(_split, "[]"))
|
||||||
|
if len(output) == 0 {
|
||||||
|
log.Fatalf("\033[1;31m%s\033[0m\n", "No target language")
|
||||||
|
}
|
||||||
|
var translate Translate
|
||||||
|
encInput := url.PathEscape(text)
|
||||||
|
queryURL := conf.endpoint + "/api/translate" + "?engine=" + conf.engine + "&from=" + input + "&to=" + output + "&text=" + encInput
|
||||||
|
resp, err := http.Get(queryURL)
|
||||||
|
CheckErr(err)
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
_ = json.NewDecoder(resp.Body).Decode(&translate)
|
||||||
|
CheckErr(err)
|
||||||
|
if len(translate.Output) == 0 {
|
||||||
|
log.Fatalf("\033[1;31m%s\033[0m\n", "There was no output, maybe the endpoint is down?")
|
||||||
|
} else {
|
||||||
|
fmt.Printf("%v\n", translate.Output)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Version: "3.0.0",
|
||||||
|
}
|
||||||
|
func CheckErr(err error) {
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func Execute() {
|
||||||
|
err := rootCmd.Execute()
|
||||||
|
if err != nil {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
cobra.OnInitialize(initConfig)
|
||||||
|
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $XDG_CONFIG_HOME/suwako.ini)")
|
||||||
|
rootCmd.PersistentFlags().StringVarP(&input, "from", "f", "auto", "language to translate from (default is auto)")
|
||||||
|
rootCmd.PersistentFlags().StringVarP(&output, "to", "t", "", "target language")
|
||||||
|
}
|
||||||
|
func parseConfig(file string) error {
|
||||||
|
cfg, err := ini.Load(file)
|
||||||
|
CheckErr(err)
|
||||||
|
|
||||||
|
conf.endpoint = cfg.Section("suwako").Key("endpoint").String()
|
||||||
|
conf.engine = cfg.Section("suwako").Key("engine").String()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func initConfig() {
|
||||||
|
if cfgFile != "" {
|
||||||
|
parseConfig(cfgFile)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Find home directory.
|
||||||
|
xdg, err := os.UserConfigDir()
|
||||||
|
CheckErr(err)
|
||||||
|
defaultCfgPath := xdg + "/suwako.ini"
|
||||||
|
parseConfig(defaultCfgPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
// $TheSupernovaDuo: suwako,v 1.5.5 2024/01/20 21:07:30 yakumo_izuru Exp $
|
|
||||||
// Command line client for SimplyTranslate, a privacy friendly frontend to other translation engines
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"net/url"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/integrii/flaggy"
|
|
||||||
"gopkg.in/ini.v1"
|
|
||||||
"marisa.chaotic.ninja/suwako"
|
|
||||||
)
|
|
||||||
|
|
||||||
var conf struct {
|
|
||||||
engine string
|
|
||||||
instance string
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
input string
|
|
||||||
source string = "auto"
|
|
||||||
target string
|
|
||||||
)
|
|
||||||
|
|
||||||
type Translate struct {
|
|
||||||
Output string `json:"translated_text"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func errCheck(err error) {
|
|
||||||
if err != nil {
|
|
||||||
log.Println("Something happened :(")
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func iniLoad(file string) error {
|
|
||||||
cfg, err := ini.Load(file)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
conf.engine = cfg.Section("suwako").Key("engine").String()
|
|
||||||
conf.instance = cfg.Section("suwako").Key("instance").String()
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func flagParse() {
|
|
||||||
flaggy.SetName("suwako")
|
|
||||||
flaggy.SetDescription("Command line client for SimplyTranslate")
|
|
||||||
flaggy.SetVersion(suwako.FullVersion())
|
|
||||||
|
|
||||||
flaggy.String(&source, "f", "from", "Source language")
|
|
||||||
flaggy.String(&target, "t", "to", "Target language")
|
|
||||||
flaggy.AddPositionalValue(&input, "input", 1, true, "Text to translate")
|
|
||||||
|
|
||||||
flaggy.Parse()
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
// Flag parsing
|
|
||||||
flagParse()
|
|
||||||
|
|
||||||
// Load configuration file
|
|
||||||
config, err := os.UserConfigDir()
|
|
||||||
errCheck(err)
|
|
||||||
cfgfile := config + "/suwako/suwako.ini"
|
|
||||||
iniLoad(cfgfile)
|
|
||||||
|
|
||||||
// Verify command-line inputs
|
|
||||||
if len(target) == 0 {
|
|
||||||
log.Fatal("No target language")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Map variable to struct
|
|
||||||
var translate Translate
|
|
||||||
|
|
||||||
// Encode input just in case
|
|
||||||
var encInput = url.PathEscape(input)
|
|
||||||
|
|
||||||
// Construct the final path to query
|
|
||||||
var queryURL = conf.instance + "/api/translate/" + "?engine=" + conf.engine + "&from=" + source + "&to=" + target + "&text=" + encInput
|
|
||||||
|
|
||||||
// Shoot danmaku to path
|
|
||||||
resp, err := http.Get(queryURL)
|
|
||||||
errCheck(err)
|
|
||||||
defer resp.Body.Close()
|
|
||||||
|
|
||||||
// Decode JSON response, discard everything else, print to standard output
|
|
||||||
_ = json.NewDecoder(resp.Body).Decode(&translate)
|
|
||||||
errCheck(err)
|
|
||||||
if len(translate.Output) == 0 {
|
|
||||||
log.Fatal("There was no output, maybe the server was down?")
|
|
||||||
} else {
|
|
||||||
fmt.Printf("%v\n", translate.Output)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
2
doc.go
2
doc.go
@@ -1,2 +0,0 @@
|
|||||||
// package suwako is yet another client for SimplyTranslate https://simple-web.org/projects/simplytranslate.html written in Go.
|
|
||||||
package suwako
|
|
||||||
12
go.mod
12
go.mod
@@ -1,10 +1,16 @@
|
|||||||
module marisa.chaotic.ninja/suwako
|
module marisa.chaotic.ninja/suwako
|
||||||
|
|
||||||
go 1.18
|
go 1.21.0
|
||||||
|
|
||||||
|
toolchain go1.23.8
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/integrii/flaggy v1.5.2
|
github.com/spf13/cobra v1.9.1
|
||||||
gopkg.in/ini.v1 v1.67.0
|
gopkg.in/ini.v1 v1.67.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require github.com/stretchr/testify v1.8.4 // indirect
|
require (
|
||||||
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
|
github.com/spf13/pflag v1.0.6 // indirect
|
||||||
|
github.com/stretchr/testify v1.10.0 // indirect
|
||||||
|
)
|
||||||
|
|||||||
21
go.sum
21
go.sum
@@ -1,12 +1,19 @@
|
|||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||||
github.com/integrii/flaggy v1.5.2 h1:bWV20MQEngo4hWhno3i5Z9ISPxLPKj9NOGNwTWb/8IQ=
|
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
github.com/integrii/flaggy v1.5.2/go.mod h1:dO13u7SYuhk910nayCJ+s1DeAAGC1THCMj1uSFmwtQ8=
|
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
|
||||||
|
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
|
||||||
|
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
||||||
|
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||||
|
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||||
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
11
main.go
Normal file
11
main.go
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/*
|
||||||
|
Copyright © 2025 Izuru Yakumo <eternal-servant@yakumo.dev>
|
||||||
|
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "marisa.chaotic.ninja/suwako/cmd"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
cmd.Execute()
|
||||||
|
}
|
||||||
17
suwako.1
17
suwako.1
@@ -1,4 +1,4 @@
|
|||||||
.Dd $Mdocdate$
|
.Dd May 14, 2025
|
||||||
.Dt SUWAKO 1
|
.Dt SUWAKO 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@@ -6,15 +6,14 @@
|
|||||||
.Nd Command-line client for SimplyTranslate
|
.Nd Command-line client for SimplyTranslate
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm
|
.Nm
|
||||||
.Op Fl f Ar from
|
.Fl f Ar from
|
||||||
.Op Fl t Ar to
|
.Fl t Ar to
|
||||||
.Op Ar input
|
.Ar input
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
Self-explanatory, besides, this was made as
|
Self-explanatory, besides, this was made as
|
||||||
a rewrite from a shell script that had curl
|
a rewrite from a shell script that had curl
|
||||||
and awk for dependencies.
|
and awk for dependencies.
|
||||||
It fully serves
|
It fully serves as a drop-in replacement.
|
||||||
as a drop-in replacement.
|
|
||||||
.Sh USAGE
|
.Sh USAGE
|
||||||
.Bl -tag -width 11n -compact
|
.Bl -tag -width 11n -compact
|
||||||
.It Fl f
|
.It Fl f
|
||||||
@@ -28,7 +27,7 @@ Text to be translated
|
|||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr suwako.conf 5
|
.Xr suwako.conf 5
|
||||||
.Sh AUTHORS
|
.Sh AUTHORS
|
||||||
.An Izuru Yakumo Aq Mt yakumo.izuru@chaotic.ninja
|
.An Izuru Yakumo Aq Mt eternal-servant@yakumo.dev
|
||||||
.Sh BUGS
|
.Sh BUGS
|
||||||
You cannot translate the string "version", this is
|
Mozhi instances use translated-text as opposed to translated_text
|
||||||
a direct consequence of using flaggy.
|
coming from SimplyTranslate instances.
|
||||||
|
|||||||
@@ -1,26 +1,20 @@
|
|||||||
.Dd $Mdocdate$
|
.Dd May 14, 2025
|
||||||
.Dt SUWAKO.CONF 5
|
.Dt SUWAKO.CONF 5
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
.Nm suwako.conf
|
.Nm suwako.conf
|
||||||
.Nd INI-style configuration file for
|
.Nd INI-style configuration file for suwako
|
||||||
.Xr suwako 1
|
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
file specifies the instance address,
|
file specifies the instance address,
|
||||||
including the API path and the
|
including the API path and the
|
||||||
translation engine to be used on
|
translation engine to be used on
|
||||||
the
|
.Nm suwako
|
||||||
.Xr suwako 1
|
|
||||||
command.
|
|
||||||
.Sh OPTIONS
|
.Sh OPTIONS
|
||||||
.Bl -tag -width 11n -compact
|
.Bl -tag -width 11n -compact
|
||||||
.It instance
|
.It endpoint
|
||||||
Contains the HTTPS URI to the
|
Contains the HTTPS URI to the instance
|
||||||
server's up to the
|
|
||||||
.Sy /api/translate
|
|
||||||
endpoint.
|
|
||||||
.It engine
|
.It engine
|
||||||
For most use cases, the
|
For most use cases, the
|
||||||
.Em google
|
.Em google
|
||||||
@@ -30,7 +24,7 @@ support more translation
|
|||||||
engines.
|
engines.
|
||||||
.El
|
.El
|
||||||
.Sh FILES
|
.Sh FILES
|
||||||
.Pa ~/.suwako/suwako.conf
|
.Pa ~/.config/suwako.ini
|
||||||
path to this file
|
path to this file
|
||||||
.Sh AUTHORS
|
.Sh AUTHORS
|
||||||
.An Izuru Yakumo Aq Mt yakumo.izuru@chaotic.ninja
|
.An Izuru Yakumo Aq Mt eternal-servant@yakumo.dev
|
||||||
|
|||||||
50
version.go
50
version.go
@@ -1,50 +0,0 @@
|
|||||||
package suwako
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"runtime/debug"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
defaultVersion = "0.0.0"
|
|
||||||
defaultCommit = "HEAD"
|
|
||||||
defaultBuild = "0000-01-01:00:00+00:00"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// Version is the tagged release version in the form <major>.<minor>.<patch>
|
|
||||||
// following semantic versioning and is overwritten by the build system.
|
|
||||||
Version = defaultVersion
|
|
||||||
|
|
||||||
// Commit is the commit sha of the build (normally from Git) and is overwritten
|
|
||||||
// by the build system.
|
|
||||||
Commit = defaultCommit
|
|
||||||
|
|
||||||
// Build is the date and time of the build as an RFC3339 formatted string
|
|
||||||
// and is overwritten by the build system.
|
|
||||||
Build = defaultBuild
|
|
||||||
)
|
|
||||||
|
|
||||||
// FullVersion display the full version and build
|
|
||||||
func FullVersion() string {
|
|
||||||
var sb strings.Builder
|
|
||||||
|
|
||||||
isDefault := Version == defaultVersion && Commit == defaultCommit && Build == defaultBuild
|
|
||||||
|
|
||||||
if !isDefault {
|
|
||||||
sb.WriteString(fmt.Sprintf("%s@%s %s", Version, Commit, Build))
|
|
||||||
}
|
|
||||||
|
|
||||||
if info, ok := debug.ReadBuildInfo(); ok {
|
|
||||||
if isDefault {
|
|
||||||
sb.WriteString(fmt.Sprintf(" %s", info.Main.Version))
|
|
||||||
}
|
|
||||||
sb.WriteString(fmt.Sprintf(" %s", info.GoVersion))
|
|
||||||
if info.Main.Sum != "" {
|
|
||||||
sb.WriteString(fmt.Sprintf(" %s", info.Main.Sum))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return sb.String()
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user