@@ -4,35 +4,49 @@ import (
44 "fmt"
55 "os"
66 "os/exec"
7+ "runtime"
78 "strings"
89
10+ "github.com/replicate/cog/pkg/util"
911 "github.com/replicate/cog/pkg/util/console"
1012)
1113
1214func Build (dir , dockerfile , imageName string ) error {
13- cmd := exec .Command (
14- "docker" , "build" , "." ,
15- "-f" , "-" ,
15+ var args []string
16+ if util .IsM1Mac (runtime .GOOS , runtime .GOARCH ) {
17+ args = m1BuildxBuildArgs ()
18+ } else {
19+ args = buildKitBuildArgs ()
20+ }
21+ args = append (args ,
22+ "--file" , "-" ,
1623 "--build-arg" , "BUILDKIT_INLINE_CACHE=1" ,
17- "-t" , imageName ,
24+ "--tag" , imageName ,
25+ "." ,
1826 )
27+ cmd := exec .Command ("docker" , args ... )
1928 cmd .Dir = dir
2029 cmd .Stdout = os .Stdout
2130 cmd .Stderr = os .Stderr
2231 cmd .Stdin = strings .NewReader (dockerfile )
23- cmd .Env = append (os .Environ (), "DOCKER_BUILDKIT=1" )
2432
2533 console .Debug ("$ " + strings .Join (cmd .Args , " " ))
2634 return cmd .Run ()
2735}
2836
2937func BuildAddLabelsToImage (image string , labels map [string ]string ) error {
3038 dockerfile := "FROM " + image
31- args := []string {
32- "build" ,
33- "-f" , "-" ,
34- "-t" , image ,
39+ var args []string
40+ if util .IsM1Mac (runtime .GOOS , runtime .GOARCH ) {
41+ args = m1BuildxBuildArgs ()
42+ } else {
43+ args = buildKitBuildArgs ()
3544 }
45+
46+ args = append (args ,
47+ "--file" , "-" ,
48+ "--tag" , image ,
49+ )
3650 for k , v := range labels {
3751 // Unlike in Dockerfiles, the value here does not need quoting -- Docker merely
3852 // splits on the first '=' in the argument and the rest is the label value.
@@ -51,3 +65,11 @@ func BuildAddLabelsToImage(image string, labels map[string]string) error {
5165 }
5266 return nil
5367}
68+
69+ func m1BuildxBuildArgs () []string {
70+ return []string {"buildx" , "build" , "--platform" , "linux/amd64" }
71+ }
72+
73+ func buildKitBuildArgs () []string {
74+ return []string {"build" }
75+ }
0 commit comments