package osutil
import (
"fmt"
"os/exec"
"strings"
"sync"
"github.com/coreos/go-semver/semver"
)
var ProductVersion = sync.OnceValues(func() (*semver.Version, error) {
cmd := exec.Command("sw_vers", "-productVersion")
b, err := cmd.Output()
if err != nil {
return nil, fmt.Errorf("failed to execute %v: %w", cmd.Args, err)
}
verTrimmed := strings.TrimSpace(string(b))
for strings.Count(verTrimmed, ".") < 2 {
verTrimmed += ".0"
}
verSem, err := semver.NewVersion(verTrimmed)
if err != nil {
return nil, fmt.Errorf("failed to parse macOS version %q: %w", verTrimmed, err)
}
return verSem, nil
})