@@ -5,52 +5,56 @@ import (
55 "fmt"
66 "io"
77 "os"
8- "strings"
98
109 "github.com/kloudkit/ws-cli/internals/config"
10+ internalIO "github.com/kloudkit/ws-cli/internals/io"
1111 "github.com/kloudkit/ws-cli/internals/styles"
1212 "github.com/spf13/cobra"
1313)
1414
15- func readJsonFile () map [string ]any {
16- var content map [string ]any
17-
18- data , _ := os .ReadFile (config .DefaultManifestPath )
19-
20- _ = json .Unmarshal (data , & content )
21-
22- return content
15+ type Manifest struct {
16+ Version string `json:"version"`
17+ VSCode struct {
18+ Version string `json:"version"`
19+ } `json:"vscode"`
2320}
2421
25- func readJson (content map [string ]any , key string ) string {
26- keys := strings .Split (key , "." )
27- var value any = content
28-
29- for _ , k := range keys {
30- m , ok := value .(map [string ]any )
31- if ! ok {
32- return ""
33- }
22+ func readManifest () (* Manifest , error ) {
23+ if ! internalIO .FileExists (config .DefaultManifestPath ) {
24+ return nil , fmt .Errorf ("manifest not found at %s" , config .DefaultManifestPath )
25+ }
3426
35- value = m [k ]
27+ data , err := os .ReadFile (config .DefaultManifestPath )
28+ if err != nil {
29+ return nil , fmt .Errorf ("failed to read manifest: %w" , err )
3630 }
3731
38- if str , ok := value .(string ); ok {
39- return str
32+ var m Manifest
33+ if err := json .Unmarshal (data , & m ); err != nil {
34+ return nil , fmt .Errorf ("failed to parse manifest: %w" , err )
4035 }
4136
42- return fmt . Sprintf ( "%v" , value )
37+ return & m , nil
4338}
4439
4540func showVersion (writer io.Writer ) {
46- content := readJsonFile ()
41+ manifest , err := readManifest ()
42+ if err != nil {
43+ styles .PrintWarning (writer , fmt .Sprintf ("Could not read workspace version: %v" , err ))
44+ fmt .Fprintf (writer , "%s\n " , styles .Title ().Render ("Versions" ))
45+ t := styles .Table ().Rows (
46+ []string {"ws-cli" , Version },
47+ )
48+ fmt .Fprintln (writer , t .Render ())
49+ return
50+ }
4751
4852 fmt .Fprintf (writer , "%s\n " , styles .Title ().Render ("Versions" ))
4953
5054 t := styles .Table ().Rows (
51- []string {"workspace" , readJson ( content , "version" ) },
55+ []string {"workspace" , manifest . Version },
5256 []string {"ws-cli" , Version },
53- []string {"VSCode" , readJson ( content , "vscode.version" ) },
57+ []string {"VSCode" , manifest . VSCode . Version },
5458 )
5559
5660 fmt .Fprintln (writer , t .Render ())
0 commit comments