@@ -2,29 +2,76 @@ package workers
22
33import (
44 "context"
5+ "fmt"
56 "os"
67 "os/exec"
8+ "path/filepath"
9+ "strings"
710
811 "github.com/moby/buildkit/identity"
12+ "github.com/moby/buildkit/util/testutil/dockerd"
913 "github.com/moby/buildkit/util/testutil/integration"
1014 bkworkers "github.com/moby/buildkit/util/testutil/workers"
1115 "github.com/pkg/errors"
1216)
1317
1418func InitDockerWorker () {
1519 integration .Register (& dockerWorker {
16- id : "docker" ,
20+ id : "docker" ,
21+ binary : dockerd .DefaultDockerdBinary ,
1722 })
1823 integration .Register (& dockerWorker {
1924 id : "docker+containerd" ,
25+ binary : dockerd .DefaultDockerdBinary ,
2026 containerdSnapshotter : true ,
2127 })
28+ // e.g. `[email protected] =/opt/docker-26.0,[email protected] =/opt/docker-25.0` 29+ if s := os .Getenv ("TEST_DOCKER_EXTRA" ); s != "" {
30+ entries := strings .Split (s , "," )
31+ for _ , entry := range entries {
32+ ver , bin , err := func (entry string ) (string , string , error ) {
33+ p1 := strings .Split (strings .TrimSpace (entry ), "=" )
34+ if len (p1 ) != 2 {
35+ return "" , "" , errors .Errorf ("invalid entry: %q" , entry )
36+ }
37+ name , bin := p1 [0 ], p1 [1 ]
38+ if _ , err := os .Stat (bin ); err != nil {
39+ return "" , "" , errors .Wrapf (err , "bin not found: %q" , bin )
40+ }
41+ p2 := strings .Split (strings .TrimSpace (name ), "@" )
42+ if len (p2 ) != 2 {
43+ return "" , "" , errors .Errorf ("invalid name: %q" , name )
44+ }
45+ _ , ver := p2 [0 ], p2 [1 ]
46+ if ver == "" {
47+ return "" , "" , errors .New ("empty version" )
48+ }
49+ return ver , bin , nil
50+ }(entry )
51+ if err != nil {
52+ panic (errors .Wrapf (err , "unexpected TEST_DOCKER_EXTRA: %q" , s ))
53+ }
54+ integration .Register (& dockerWorker {
55+ id : fmt .Sprintf ("docker@%s" , ver ),
56+ binary : filepath .Join (bin , "dockerd" ),
57+ extraEnv : []string {fmt .Sprintf ("PATH=%s:%s" , bin , os .Getenv ("PATH" ))},
58+ })
59+ integration .Register (& dockerWorker {
60+ id : fmt .Sprintf ("docker+containerd@%s" , ver ),
61+ binary : filepath .Join (bin , "dockerd" ),
62+ containerdSnapshotter : true ,
63+ extraEnv : []string {fmt .Sprintf ("PATH=%s:%s" , bin , os .Getenv ("PATH" ))},
64+ })
65+ }
66+ }
2267}
2368
2469type dockerWorker struct {
2570 id string
71+ binary string
2672 containerdSnapshotter bool
2773 unsupported []string
74+ extraEnv []string
2875}
2976
3077func (c dockerWorker ) Name () string {
@@ -42,7 +89,9 @@ func (c *dockerWorker) NetNSDetached() bool {
4289func (c dockerWorker ) New (ctx context.Context , cfg * integration.BackendConfig ) (b integration.Backend , cl func () error , err error ) {
4390 moby := bkworkers.Moby {
4491 ID : c .id ,
92+ Binary : c .binary ,
4593 ContainerdSnapshotter : c .containerdSnapshotter ,
94+ ExtraEnv : c .extraEnv ,
4695 }
4796 bk , bkclose , err := moby .New (ctx , cfg )
4897 if err != nil {
0 commit comments