package wails import ( "context" "fmt" "regexp" "strings" "lmika.dev/actions/wails-release/internal/runner" ) var cliVersionRE = regexp.MustCompile(`v\d+\.\d+\.\d+`) // ParseCLIVersion extracts the version from `wails -v` output. func ParseCLIVersion(out []byte) (string, error) { m := cliVersionRE.FindString(strings.TrimSpace(string(out))) if m == "" { return "", fmt.Errorf("could not parse Wails CLI version from %q", string(out)) } return m, nil } // EnsureCLI installs the Wails CLI at `want` (e.g. "v2.11.0") if it is not // already installed at exactly that version. func EnsureCLI(ctx context.Context, r runner.Runner, want string) error { out, err := r.Run(ctx, runner.Spec{Name: "wails", Args: []string{"-v"}}) if err == nil { got, perr := ParseCLIVersion(out) if perr == nil && got == want { return nil } } _, err = r.Run(ctx, runner.Spec{ Name: "go", Args: []string{"install", "github.com/wailsapp/wails/v2/cmd/wails@" + want}, }) if err != nil { return fmt.Errorf("install wails CLI %s: %w", want, err) } return nil }