mirror of https://github.com/docker/cli.git
Merge pull request #2654 from tonistiigi/rosetta
support emulated version detection
This commit is contained in:
commit
1d9ee72178
|
@ -34,6 +34,7 @@ import (
|
|||
"github.com/moby/buildkit/util/progress/progressui"
|
||||
"github.com/pkg/errors"
|
||||
fsutiltypes "github.com/tonistiigi/fsutil/types"
|
||||
"github.com/tonistiigi/go-rosetta"
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
|
@ -222,7 +223,9 @@ func runBuildBuildKit(dockerCli command.Cli, options buildOptions) error {
|
|||
}
|
||||
|
||||
if strings.EqualFold(options.platform, "local") {
|
||||
options.platform = platforms.DefaultString()
|
||||
p := platforms.DefaultSpec()
|
||||
p.Architecture = rosetta.NativeArch() // current binary architecture might be emulated
|
||||
options.platform = platforms.Format(p)
|
||||
}
|
||||
|
||||
eg.Go(func() error {
|
||||
|
|
|
@ -20,6 +20,7 @@ import (
|
|||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/tonistiigi/go-rosetta"
|
||||
kubernetesClient "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
)
|
||||
|
@ -125,6 +126,14 @@ func reformatDate(buildTime string) string {
|
|||
return buildTime
|
||||
}
|
||||
|
||||
func arch() string {
|
||||
arch := runtime.GOARCH
|
||||
if rosetta.Enabled() {
|
||||
arch += " (rosetta)"
|
||||
}
|
||||
return arch
|
||||
}
|
||||
|
||||
func runVersion(dockerCli command.Cli, opts *versionOptions) error {
|
||||
var err error
|
||||
tmpl, err := newVersionTemplate(opts.format)
|
||||
|
@ -147,7 +156,7 @@ func runVersion(dockerCli command.Cli, opts *versionOptions) error {
|
|||
GitCommit: version.GitCommit,
|
||||
BuildTime: reformatDate(version.BuildTime),
|
||||
Os: runtime.GOOS,
|
||||
Arch: runtime.GOARCH,
|
||||
Arch: arch(),
|
||||
Experimental: dockerCli.ClientInfo().HasExperimental,
|
||||
Context: dockerCli.CurrentContext(),
|
||||
},
|
||||
|
|
|
@ -67,6 +67,7 @@ github.com/spf13/cobra a684a6d7f5e37385d954dd3b5a14
|
|||
github.com/spf13/pflag 2e9d26c8c37aae03e3f9d4e90b7116f5accb7cab # v1.0.5
|
||||
github.com/theupdateframework/notary d6e1431feb32348e0650bf7551ac5cffd01d857b # v0.6.1
|
||||
github.com/tonistiigi/fsutil ae3a8d753069d0f76fbee396457e8b6cfd7cb8c3
|
||||
github.com/tonistiigi/go-rosetta f79598599c5d34ea253b56a1d7c89bc6a96de7db
|
||||
github.com/tonistiigi/units 6950e57a87eaf136bbe44ef2ec8e75b9e3569de2
|
||||
github.com/xeipuuv/gojsonpointer 02993c407bfbf5f6dae44c4f4b1cf6a39b5fc5bb
|
||||
github.com/xeipuuv/gojsonreference bd5ef7bd5415a7ac448318e64f11a24cd21e594b
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
MIT
|
||||
|
||||
Copyright (c) 2020 Tõnis Tiigi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
|
@ -0,0 +1,3 @@
|
|||
module github.com/tonistiigi/go-rosetta
|
||||
|
||||
go 1.13
|
|
@ -0,0 +1,20 @@
|
|||
// +build darwin
|
||||
|
||||
package rosetta
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
func Enabled() bool {
|
||||
v, err := syscall.SysctlUint32("sysctl.proc_translated")
|
||||
return err == nil && v == 1
|
||||
}
|
||||
|
||||
func NativeArch() string {
|
||||
if Enabled() && runtime.GOARCH == "amd64" {
|
||||
return "arm64"
|
||||
}
|
||||
return runtime.GOARCH
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// +build !darwin
|
||||
|
||||
package rosetta
|
||||
|
||||
import (
|
||||
"runtime"
|
||||
)
|
||||
|
||||
func Enabled() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func NativeArch() string {
|
||||
return runtime.GOARCH
|
||||
}
|
Loading…
Reference in New Issue