4
4
package docker
5
5
6
6
import (
7
+ "fmt"
7
8
"os"
8
9
"os/exec"
9
10
"path/filepath"
10
11
11
12
"github.com/imdario/mergo"
13
+ "golang.org/x/exp/slices"
12
14
)
13
15
14
16
// This package provides an API to build images using docker.
@@ -27,6 +29,7 @@ type BuildFlags struct {
27
29
Platforms []string
28
30
NoCache bool
29
31
DockerfilePath string
32
+ Engine string
30
33
}
31
34
32
35
type BuildOptions func (* BuildFlags )
@@ -51,6 +54,10 @@ func Build(path string, opts ...BuildOptions) error {
51
54
for _ , opt := range opts {
52
55
opt (flags )
53
56
}
57
+ err := validateFlags (flags )
58
+ if err != nil {
59
+ return err
60
+ }
54
61
55
62
args := []string {"build" , "." }
56
63
args = ToArgs (args , flags )
@@ -60,7 +67,12 @@ func Build(path string, opts ...BuildOptions) error {
60
67
args = append (args , "-f" , fileName )
61
68
}
62
69
63
- cmd := exec .Command ("docker" , args ... )
70
+ binName := "docker"
71
+ if flags .Engine != "" {
72
+ binName = flags .Engine
73
+ }
74
+
75
+ cmd := exec .Command (binName , args ... )
64
76
cmd .Stdin = os .Stdin
65
77
cmd .Stdout = os .Stdout
66
78
cmd .Stderr = os .Stderr
@@ -88,3 +100,11 @@ func isFile(path string) bool {
88
100
89
101
return fileInfo .Mode ().IsRegular ()
90
102
}
103
+
104
+ func validateFlags (flags * BuildFlags ) error {
105
+ engines := []string {"" , "docker" , "podman" }
106
+ if ! slices .Contains (engines , flags .Engine ) {
107
+ return fmt .Errorf ("unrecognized container engine: %s" , flags .Engine )
108
+ }
109
+ return nil
110
+ }
0 commit comments