Skip to content
Merged
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
43 changes: 18 additions & 25 deletions bindings/bind/compile.go
Original file line number Diff line number Diff line change
Expand Up @@ -968,41 +968,34 @@ type suiEnv struct {

func setupSuiEnv(alias, rpcURL string) error {
// Step 1 — Fetch all current envs via CLI
// Output format: [[{env1}, {env2}, ...], "active_alias"]
// The CLI may also print non-JSON preamble (e.g. config initialization messages).
cmd := exec.Command("sui", "client", "envs", "--json")
out, err := cmd.Output()
if err != nil {
return fmt.Errorf("failed to list Sui environments: %w", err)
}

// The CLI may print non-JSON preamble (e.g. "create one [Y/n]?") before
// the JSON array, so try parsing from each '[' until one succeeds.
outStr := string(out)
idxFront := strings.Index(outStr, "testnet")
if idxFront == -1 {
return fmt.Errorf("testnet environment not found")
var parsed []json.RawMessage
for i := 0; i < len(outStr); i++ {
if outStr[i] == '[' {
if err := json.Unmarshal([]byte(outStr[i:]), &parsed); err == nil {
break
}
parsed = nil
}
}

idxBack := strings.LastIndex(outStr, "testnet")
if idxBack == -1 {
return fmt.Errorf("testnet environment not found")
}
outTrimmed := string(out[idxFront+len("testnet")+1:idxBack-5]) + "]"

var parsed []any
if err := json.Unmarshal([]byte(outTrimmed), &parsed); err != nil {
return fmt.Errorf("failed to parse envs JSON: %w\nOutput:\n%s", err, outTrimmed)
if len(parsed) == 0 {
return fmt.Errorf("failed to parse envs JSON from output:\n%s", outStr)
}

// First element is the array of env objects.
var envList []suiEnv
if arr, ok := parsed[0].([]any); ok {
for _, e := range arr {
data, _ := json.Marshal(e)
var env suiEnv
if err := json.Unmarshal(data, &env); err == nil {
envList = append(envList, env)
} else {
log.Printf("failed to unmarshal env: %+v\n", err)
}
}
} else {
log.Printf("parsed[0] is not []any, got %T\n", parsed[0])
if err := json.Unmarshal(parsed[0], &envList); err != nil {
return fmt.Errorf("failed to parse env list: %w\nOutput:\n%s", err, string(parsed[0]))
}

// Step 2 — Check for existing alias and remove it
Expand Down
Loading