Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions cmd/scw-wasm-tester/human.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//go:build wasm && js

package main

import (
"syscall/js"

"github.com/hashicorp/go-version"
"github.com/scaleway/scaleway-cli/v2/internal/core"
"github.com/scaleway/scaleway-cli/v2/internal/human"
)

func wasmTestMarshalBuildInfo(_ js.Value, _ []js.Value) any {
data := &core.BuildInfo{
Version: version.Must(version.NewSemver("2.0.0")),
BuildDate: "",
GoVersion: "",
GitBranch: "",
GitCommit: "",
GoArch: "",
GoOS: "",
}
str, err := human.Marshal(data, nil)
if err != nil {
return err.Error()
}
return js.ValueOf(str)
}
3 changes: 2 additions & 1 deletion cmd/scw-wasm-tester/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import (
type jsFunction func(js.Value, []js.Value) any

var tests = map[string]jsFunction{
"FromSlice": wasmTestFromSlice,
"FromSlice": wasmTestFromSlice,
"MarshalBuildInfo": wasmTestMarshalBuildInfo,
}

func main() {
Expand Down
45 changes: 43 additions & 2 deletions cmd/scw-wasm/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,44 @@
package main

import (
"runtime"
"runtime/debug"
"syscall/js"

"github.com/hashicorp/go-version"
"github.com/scaleway/scaleway-cli/v2/internal/core"
"github.com/scaleway/scaleway-cli/v2/internal/jshelpers"
"github.com/scaleway/scaleway-cli/v2/internal/wasm"
)

var (
// Version is updated by goreleaser
Version = "" // ${BUILD_VERSION:-`git describe --tags --dirty --always`}"

// These are initialized by the build script

BuildDate = "unknown" // date -u '+%Y-%m-%d_%I:%M:%S%p'
GitBranch = "unknown" // git symbolic-ref -q --short HEAD || echo HEAD"
GitCommit = "unknown" // git rev-parse --short HEAD

// These are GO constants

GoVersion = runtime.Version()
GoOS = runtime.GOOS
GoArch = runtime.GOARCH
)

func buildVersion() string {
if Version == "" {
buildInfos, ok := debug.ReadBuildInfo()
if ok && buildInfos.Main.Version != "(devel)" && buildInfos.Main.Version != "" {
return buildInfos.Main.Version
}
return "v2+dev"
}
return Version
}

func main() {
stopChan := make(chan struct{})
stop := func(_ js.Value, args []js.Value) (any, error) {
Expand All @@ -17,11 +49,20 @@ func main() {
}

args := getArgs()
buildInfo := &core.BuildInfo{
Version: version.Must(version.NewSemver(buildVersion())),
BuildDate: BuildDate,
GoVersion: GoVersion,
GitBranch: GitBranch,
GitCommit: GitCommit,
GoArch: GoArch,
GoOS: GoOS,
}

if args.targetObject != "" {
cliPackage := js.ValueOf(map[string]any{})
cliPackage.Set("run", js.FuncOf(jshelpers.AsPromise(wasm.Run)))
cliPackage.Set("complete", js.FuncOf(jshelpers.AsPromise(wasm.Autocomplete)))
cliPackage.Set("run", js.FuncOf(jshelpers.AsPromise(wasm.RunWithBuildInfo(buildInfo))))
cliPackage.Set("complete", js.FuncOf(jshelpers.AsPromise(wasm.AutocompleteWithBuildInfo(buildInfo))))
cliPackage.Set("configureOutput", js.FuncOf(jshelpers.AsPromise(wasm.ConfigureOutput)))
cliPackage.Set("stop", js.FuncOf(jshelpers.AsyncJsFunc(stop)))
js.Global().Set(args.targetObject, cliPackage)
Expand Down
3 changes: 2 additions & 1 deletion cmd/scw-wasm/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"fmt"
"syscall/js"

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

resp, err := wasm.Run(runCfg, givenArgs)
resp, err := wasm.Run(&core.BuildInfo{}, runCfg, givenArgs)

return jshelpers.FromObject(resp), nil
}
12 changes: 10 additions & 2 deletions internal/wasm/autocomplete.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"fmt"
"strconv"
"strings"

"github.com/scaleway/scaleway-cli/v2/internal/core"
)

type AutoCompleteConfig struct {
Expand All @@ -15,7 +17,7 @@ type AutoCompleteConfig struct {
RightWords []string `js:"rightWords"`
}

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

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

completeCommand = append(completeCommand, words...)

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

return suggestions, nil
}

func AutocompleteWithBuildInfo(buildInfo *core.BuildInfo) func(cfg *AutoCompleteConfig) ([]string, error) {
return func(cfg *AutoCompleteConfig) ([]string, error) {
return Autocomplete(buildInfo, cfg)
}
}
14 changes: 10 additions & 4 deletions internal/wasm/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@ type RunResponse struct {
ExitCode int `js:"exitCode"`
}

func runCommand(cfg *RunConfig, args []string, stdout io.Writer, stderr io.Writer) int {
func runCommand(buildInfo *core.BuildInfo, cfg *RunConfig, args []string, stdout io.Writer, stderr io.Writer) int {
exitCode, _, _ := core.Bootstrap(&core.BootstrapConfig{
Args: args,
Commands: getCommands(),
BuildInfo: &core.BuildInfo{},
BuildInfo: buildInfo,
Stdout: stdout,
Stderr: stderr,
Stdin: nil,
Expand All @@ -52,18 +52,24 @@ func runCommand(cfg *RunConfig, args []string, stdout io.Writer, stderr io.Write
return exitCode
}

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

cliArgs = append(cliArgs, args...)

exitCode := runCommand(cfg, cliArgs, stdout, stderr)
exitCode := runCommand(buildInfo, cfg, cliArgs, stdout, stderr)

return &RunResponse{
Stdout: stdout.String(),
Stderr: stderr.String(),
ExitCode: exitCode,
}, nil
}

func RunWithBuildInfo(buildInfo *core.BuildInfo) func(config *RunConfig, args []string) (*RunResponse, error) {
return func(config *RunConfig, args []string) (*RunResponse, error) {
return Run(buildInfo, config, args)
}
}
8 changes: 5 additions & 3 deletions wasm/package.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
{
"name": "@scaleway-internal/scaleway-cli-wasm",
"version": "0.0.11",
"version": "0.0.14",
"description": "",
"type": "module",
"main": "index.js",
"scripts": {
"test": "vitest src"
"test": "vitest src",
"lint": "prettier --check ."
},
"types": "index.d.ts",
"keywords": [],
"author": "",
"devDependencies": {
"@vitest/browser": "^0.34.4",
"prettier": "3.0.3",
"typescript": "^5.0.4",
"vitest": "^0.30.1"
"vitest": "^0.34.4"
},
"files": [
"cli.wasm",
Expand Down
Loading