Skip to content

Commit d704fcc

Browse files
authored
feat: add command to show version (#604)
* feat: add -version flag for jetkvm_app * move code to kvm package
1 parent ab3dda6 commit d704fcc

File tree

6 files changed

+100
-2
lines changed

6 files changed

+100
-2
lines changed

.golangci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ linters:
2323
- linters:
2424
- errcheck
2525
path: _test.go
26+
- linters:
27+
- forbidigo
28+
path: cmd/main.go
2629
- linters:
2730
- gochecknoinits
2831
path: internal/logging/sse.go

cmd/main.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,27 @@
11
package main
22

33
import (
4+
"flag"
5+
"fmt"
6+
"os"
7+
48
"github.com/jetkvm/kvm"
59
)
610

711
func main() {
12+
versionPtr := flag.Bool("version", false, "print version and exit")
13+
versionJsonPtr := flag.Bool("version-json", false, "print version as json and exit")
14+
flag.Parse()
15+
16+
if *versionPtr || *versionJsonPtr {
17+
versionData, err := kvm.GetVersionData(*versionJsonPtr)
18+
if err != nil {
19+
fmt.Printf("failed to get version data: %v\n", err)
20+
os.Exit(1)
21+
}
22+
fmt.Println(string(versionData))
23+
return
24+
}
25+
826
kvm.Main()
927
}

dev_deploy.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ cd "${REMOTE_PATH}"
174174
chmod +x jetkvm_app_debug
175175
176176
# Run the application in the background
177-
PION_LOG_TRACE=${LOG_TRACE_SCOPES} GODEBUG=netdns=1 ./jetkvm_app_debug
177+
PION_LOG_TRACE=${LOG_TRACE_SCOPES} ./jetkvm_app_debug | tee -a /tmp/jetkvm_app_debug.log
178178
EOF
179179

180180
echo "Deployment complete."

native.go

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"net"
1010
"os"
1111
"os/exec"
12+
"strings"
1213
"sync"
1314
"time"
1415

@@ -366,14 +367,30 @@ func shouldOverwrite(destPath string, srcHash []byte) bool {
366367
return !bytes.Equal(srcHash, dstHash)
367368
}
368369

370+
func getNativeSha256() ([]byte, error) {
371+
version, err := resource.ResourceFS.ReadFile("jetkvm_native.sha256")
372+
if err != nil {
373+
return nil, err
374+
}
375+
return version, nil
376+
}
377+
378+
func GetNativeVersion() (string, error) {
379+
version, err := getNativeSha256()
380+
if err != nil {
381+
return "", err
382+
}
383+
return strings.TrimSpace(string(version)), nil
384+
}
385+
369386
func ensureBinaryUpdated(destPath string) error {
370387
srcFile, err := resource.ResourceFS.Open("jetkvm_native")
371388
if err != nil {
372389
return err
373390
}
374391
defer srcFile.Close()
375392

376-
srcHash, err := resource.ResourceFS.ReadFile("jetkvm_native.sha256")
393+
srcHash, err := getNativeSha256()
377394
if err != nil {
378395
nativeLogger.Debug().Msg("error reading embedded jetkvm_native.sha256, proceeding with update")
379396
srcHash = nil

ota.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ const UpdateMetadataUrl = "https://api.jetkvm.com/releases"
5050

5151
var builtAppVersion = "0.1.0+dev"
5252

53+
func GetBuiltAppVersion() string {
54+
return builtAppVersion
55+
}
56+
5357
func GetLocalVersion() (systemVersion *semver.Version, appVersion *semver.Version, err error) {
5458
appVersion, err = semver.NewVersion(builtAppVersion)
5559
if err != nil {

version.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package kvm
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"html/template"
7+
"runtime"
8+
9+
"github.com/prometheus/common/version"
10+
)
11+
12+
var versionInfoTmpl = `
13+
JetKVM Application, version {{.version}} (branch: {{.branch}}, revision: {{.revision}})
14+
build date: {{.buildDate}}
15+
go version: {{.goVersion}}
16+
platform: {{.platform}}
17+
18+
{{if .nativeVersion}}
19+
JetKVM Native, version {{.nativeVersion}}
20+
{{end}}
21+
`
22+
23+
func GetVersionData(isJson bool) ([]byte, error) {
24+
version.Version = GetBuiltAppVersion()
25+
26+
m := map[string]string{
27+
"version": version.Version,
28+
"revision": version.GetRevision(),
29+
"branch": version.Branch,
30+
"buildDate": version.BuildDate,
31+
"goVersion": version.GoVersion,
32+
"platform": runtime.GOOS + "/" + runtime.GOARCH,
33+
}
34+
35+
nativeVersion, err := GetNativeVersion()
36+
if err == nil {
37+
m["nativeVersion"] = nativeVersion
38+
}
39+
40+
if isJson {
41+
jsonData, err := json.Marshal(m)
42+
if err != nil {
43+
return nil, err
44+
}
45+
return jsonData, nil
46+
}
47+
48+
t := template.Must(template.New("version").Parse(versionInfoTmpl))
49+
50+
var buf bytes.Buffer
51+
if err := t.ExecuteTemplate(&buf, "version", m); err != nil {
52+
return nil, err
53+
}
54+
55+
return buf.Bytes(), nil
56+
}

0 commit comments

Comments
 (0)