42 lines
1 KiB
Go
42 lines
1 KiB
Go
|
|
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
|
||
|
|
}
|