wails-release/internal/wails/cli.go

42 lines
1 KiB
Go
Raw Normal View History

package wails
import (
"context"
"fmt"
"regexp"
"strings"
"github.com/leonmika/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
}