Skip to content

Commit 2708b8f

Browse files
authored
fix(wasm): version command (#3371)
1 parent 956aba8 commit 2708b8f

File tree

11 files changed

+650
-282
lines changed

11 files changed

+650
-282
lines changed

cmd/scw-wasm-tester/human.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//go:build wasm && js
2+
3+
package main
4+
5+
import (
6+
"syscall/js"
7+
8+
"github.com/hashicorp/go-version"
9+
"github.com/scaleway/scaleway-cli/v2/internal/core"
10+
"github.com/scaleway/scaleway-cli/v2/internal/human"
11+
)
12+
13+
func wasmTestMarshalBuildInfo(_ js.Value, _ []js.Value) any {
14+
data := &core.BuildInfo{
15+
Version: version.Must(version.NewSemver("2.0.0")),
16+
BuildDate: "",
17+
GoVersion: "",
18+
GitBranch: "",
19+
GitCommit: "",
20+
GoArch: "",
21+
GoOS: "",
22+
}
23+
str, err := human.Marshal(data, nil)
24+
if err != nil {
25+
return err.Error()
26+
}
27+
return js.ValueOf(str)
28+
}

cmd/scw-wasm-tester/main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import (
1111
type jsFunction func(js.Value, []js.Value) any
1212

1313
var tests = map[string]jsFunction{
14-
"FromSlice": wasmTestFromSlice,
14+
"FromSlice": wasmTestFromSlice,
15+
"MarshalBuildInfo": wasmTestMarshalBuildInfo,
1516
}
1617

1718
func main() {

cmd/scw-wasm/main.go

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,44 @@
33
package main
44

55
import (
6+
"runtime"
7+
"runtime/debug"
68
"syscall/js"
79

10+
"github.com/hashicorp/go-version"
11+
"github.com/scaleway/scaleway-cli/v2/internal/core"
812
"github.com/scaleway/scaleway-cli/v2/internal/jshelpers"
913
"github.com/scaleway/scaleway-cli/v2/internal/wasm"
1014
)
1115

16+
var (
17+
// Version is updated by goreleaser
18+
Version = "" // ${BUILD_VERSION:-`git describe --tags --dirty --always`}"
19+
20+
// These are initialized by the build script
21+
22+
BuildDate = "unknown" // date -u '+%Y-%m-%d_%I:%M:%S%p'
23+
GitBranch = "unknown" // git symbolic-ref -q --short HEAD || echo HEAD"
24+
GitCommit = "unknown" // git rev-parse --short HEAD
25+
26+
// These are GO constants
27+
28+
GoVersion = runtime.Version()
29+
GoOS = runtime.GOOS
30+
GoArch = runtime.GOARCH
31+
)
32+
33+
func buildVersion() string {
34+
if Version == "" {
35+
buildInfos, ok := debug.ReadBuildInfo()
36+
if ok && buildInfos.Main.Version != "(devel)" && buildInfos.Main.Version != "" {
37+
return buildInfos.Main.Version
38+
}
39+
return "v2+dev"
40+
}
41+
return Version
42+
}
43+
1244
func main() {
1345
stopChan := make(chan struct{})
1446
stop := func(_ js.Value, args []js.Value) (any, error) {
@@ -17,11 +49,20 @@ func main() {
1749
}
1850

1951
args := getArgs()
52+
buildInfo := &core.BuildInfo{
53+
Version: version.Must(version.NewSemver(buildVersion())),
54+
BuildDate: BuildDate,
55+
GoVersion: GoVersion,
56+
GitBranch: GitBranch,
57+
GitCommit: GitCommit,
58+
GoArch: GoArch,
59+
GoOS: GoOS,
60+
}
2061

2162
if args.targetObject != "" {
2263
cliPackage := js.ValueOf(map[string]any{})
23-
cliPackage.Set("run", js.FuncOf(jshelpers.AsPromise(wasm.Run)))
24-
cliPackage.Set("complete", js.FuncOf(jshelpers.AsPromise(wasm.Autocomplete)))
64+
cliPackage.Set("run", js.FuncOf(jshelpers.AsPromise(wasm.RunWithBuildInfo(buildInfo))))
65+
cliPackage.Set("complete", js.FuncOf(jshelpers.AsPromise(wasm.AutocompleteWithBuildInfo(buildInfo))))
2566
cliPackage.Set("configureOutput", js.FuncOf(jshelpers.AsPromise(wasm.ConfigureOutput)))
2667
cliPackage.Set("stop", js.FuncOf(jshelpers.AsyncJsFunc(stop)))
2768
js.Global().Set(args.targetObject, cliPackage)

cmd/scw-wasm/run.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"syscall/js"
88

9+
"github.com/scaleway/scaleway-cli/v2/internal/core"
910
"github.com/scaleway/scaleway-cli/v2/internal/jshelpers"
1011
"github.com/scaleway/scaleway-cli/v2/internal/wasm"
1112
)
@@ -25,7 +26,7 @@ func wasmRun(this js.Value, args []js.Value) (any, error) {
2526
return nil, fmt.Errorf("invalid args given: %w", err)
2627
}
2728

28-
resp, err := wasm.Run(runCfg, givenArgs)
29+
resp, err := wasm.Run(&core.BuildInfo{}, runCfg, givenArgs)
2930

3031
return jshelpers.FromObject(resp), nil
3132
}

internal/wasm/autocomplete.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"fmt"
77
"strconv"
88
"strings"
9+
10+
"github.com/scaleway/scaleway-cli/v2/internal/core"
911
)
1012

1113
type AutoCompleteConfig struct {
@@ -15,7 +17,7 @@ type AutoCompleteConfig struct {
1517
RightWords []string `js:"rightWords"`
1618
}
1719

18-
func Autocomplete(cfg *AutoCompleteConfig) ([]string, error) {
20+
func Autocomplete(buildInfo *core.BuildInfo, cfg *AutoCompleteConfig) ([]string, error) {
1921
indexToComplete := int64(len(cfg.LeftWords) + 2)
2022

2123
words := append(cfg.LeftWords, cfg.SelectedWord)
@@ -25,7 +27,7 @@ func Autocomplete(cfg *AutoCompleteConfig) ([]string, error) {
2527

2628
completeCommand = append(completeCommand, words...)
2729

28-
resp, err := Run(&RunConfig{
30+
resp, err := Run(buildInfo, &RunConfig{
2931
JWT: cfg.JWT,
3032
}, completeCommand)
3133
if err != nil {
@@ -40,3 +42,9 @@ func Autocomplete(cfg *AutoCompleteConfig) ([]string, error) {
4042

4143
return suggestions, nil
4244
}
45+
46+
func AutocompleteWithBuildInfo(buildInfo *core.BuildInfo) func(cfg *AutoCompleteConfig) ([]string, error) {
47+
return func(cfg *AutoCompleteConfig) ([]string, error) {
48+
return Autocomplete(buildInfo, cfg)
49+
}
50+
}

internal/wasm/run.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@ type RunResponse struct {
3333
ExitCode int `js:"exitCode"`
3434
}
3535

36-
func runCommand(cfg *RunConfig, args []string, stdout io.Writer, stderr io.Writer) int {
36+
func runCommand(buildInfo *core.BuildInfo, cfg *RunConfig, args []string, stdout io.Writer, stderr io.Writer) int {
3737
exitCode, _, _ := core.Bootstrap(&core.BootstrapConfig{
3838
Args: args,
3939
Commands: getCommands(),
40-
BuildInfo: &core.BuildInfo{},
40+
BuildInfo: buildInfo,
4141
Stdout: stdout,
4242
Stderr: stderr,
4343
Stdin: nil,
@@ -52,18 +52,24 @@ func runCommand(cfg *RunConfig, args []string, stdout io.Writer, stderr io.Write
5252
return exitCode
5353
}
5454

55-
func Run(cfg *RunConfig, args []string) (*RunResponse, error) {
55+
func Run(buildInfo *core.BuildInfo, cfg *RunConfig, args []string) (*RunResponse, error) {
5656
cliArgs := []string{"scw"}
5757
stdout := bytes.NewBuffer(nil)
5858
stderr := bytes.NewBuffer(nil)
5959

6060
cliArgs = append(cliArgs, args...)
6161

62-
exitCode := runCommand(cfg, cliArgs, stdout, stderr)
62+
exitCode := runCommand(buildInfo, cfg, cliArgs, stdout, stderr)
6363

6464
return &RunResponse{
6565
Stdout: stdout.String(),
6666
Stderr: stderr.String(),
6767
ExitCode: exitCode,
6868
}, nil
6969
}
70+
71+
func RunWithBuildInfo(buildInfo *core.BuildInfo) func(config *RunConfig, args []string) (*RunResponse, error) {
72+
return func(config *RunConfig, args []string) (*RunResponse, error) {
73+
return Run(buildInfo, config, args)
74+
}
75+
}

wasm/package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
{
22
"name": "@scaleway-internal/scaleway-cli-wasm",
3-
"version": "0.0.11",
3+
"version": "0.0.14",
44
"description": "",
55
"type": "module",
66
"main": "index.js",
77
"scripts": {
8-
"test": "vitest src"
8+
"test": "vitest src",
9+
"lint": "prettier --check ."
910
},
1011
"types": "index.d.ts",
1112
"keywords": [],
1213
"author": "",
1314
"devDependencies": {
15+
"@vitest/browser": "^0.34.4",
1416
"prettier": "3.0.3",
1517
"typescript": "^5.0.4",
16-
"vitest": "^0.30.1"
18+
"vitest": "^0.34.4"
1719
},
1820
"files": [
1921
"cli.wasm",

0 commit comments

Comments
 (0)