Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lima-vm
GitHub Repository: lima-vm/lima
Path: blob/master/pkg/osutil/osversion_darwin.go
2608 views
1
// SPDX-FileCopyrightText: Copyright The Lima Authors
2
// SPDX-License-Identifier: Apache-2.0
3
4
package osutil
5
6
import (
7
"fmt"
8
"os/exec"
9
"strings"
10
"sync"
11
12
"github.com/coreos/go-semver/semver"
13
)
14
15
// ProductVersion returns the macOS product version like "12.3.1".
16
var ProductVersion = sync.OnceValues(func() (*semver.Version, error) {
17
cmd := exec.Command("sw_vers", "-productVersion")
18
// output is like "12.3.1\n"
19
b, err := cmd.Output()
20
if err != nil {
21
return nil, fmt.Errorf("failed to execute %v: %w", cmd.Args, err)
22
}
23
verTrimmed := strings.TrimSpace(string(b))
24
// macOS 12.4 returns just "12.4\n"
25
for strings.Count(verTrimmed, ".") < 2 {
26
verTrimmed += ".0"
27
}
28
verSem, err := semver.NewVersion(verTrimmed)
29
if err != nil {
30
return nil, fmt.Errorf("failed to parse macOS version %q: %w", verTrimmed, err)
31
}
32
return verSem, nil
33
})
34
35