@@ -51,6 +51,8 @@ var bakeTests = []func(t *testing.T, sb integration.Sandbox){
5151 testBakeLocalCwdOverride ,
5252 testBakeRemoteCmdContextOverride ,
5353 testBakeRemoteContextSubdir ,
54+ testBakeRemoteNamedContextSubdir ,
55+ testBakeRemoteNamedContextDot ,
5456 testBakeRemoteCmdContextEscapeRoot ,
5557 testBakeRemoteCmdContextEscapeRelative ,
5658 testBakeRemoteDockerfileCwd ,
@@ -563,12 +565,12 @@ COPY super-cool.txt /
563565 }{
564566 {
565567 name : "no ref" ,
566- expectedContext : addr ,
568+ expectedContext : addr + "#:bar" ,
567569 },
568570 {
569571 name : "branch ref" ,
570572 ref : "main" ,
571- expectedContext : addr + "#main" ,
573+ expectedContext : addr + "#main:bar " ,
572574 },
573575 }
574576 for _ , tt := range tests {
@@ -920,6 +922,80 @@ COPY super-cool.txt /
920922 require .FileExists (t , filepath .Join (dirDest , "super-cool.txt" ))
921923}
922924
925+ // https://github.com/docker/buildx/issues/3670
926+ func testBakeRemoteNamedContextSubdir (t * testing.T , sb integration.Sandbox ) {
927+ bakefile := []byte (`
928+ target default {
929+ context = "./build"
930+ dockerfile = "Dockerfile"
931+ contexts = {
932+ files = "./files-src/"
933+ }
934+ }
935+ ` )
936+ dockerfile := []byte (`
937+ FROM scratch
938+ COPY --from=files file.txt /file.txt
939+ ` )
940+
941+ dir := tmpdir (
942+ t ,
943+ fstest .CreateFile ("docker-bake.hcl" , bakefile , 0600 ),
944+ fstest .CreateDir ("build" , 0700 ),
945+ fstest .CreateFile ("build/Dockerfile" , dockerfile , 0600 ),
946+ fstest .CreateDir ("files-src" , 0700 ),
947+ fstest .CreateFile ("files-src/file.txt" , []byte ("hello" ), 0600 ),
948+ )
949+ dirDest := t .TempDir ()
950+
951+ git , err := gitutil .New (gitutil .WithWorkingDir (dir ))
952+ require .NoError (t , err )
953+ gittestutil .GitInit (git , t )
954+ gittestutil .GitAdd (git , t , "docker-bake.hcl" , "build" , "files-src" )
955+ gittestutil .GitCommit (git , t , "initial commit" )
956+ addr := gittestutil .GitServeHTTP (git , t )
957+
958+ out , err := bakeCmd (sb , withDir ("/tmp" ), withArgs (addr , "--set" , "*.output=type=local,dest=" + dirDest ))
959+ require .NoError (t , err , out )
960+ require .FileExists (t , filepath .Join (dirDest , "file.txt" ))
961+ }
962+
963+ func testBakeRemoteNamedContextDot (t * testing.T , sb integration.Sandbox ) {
964+ bakefile := []byte (`
965+ target default {
966+ context = "./build"
967+ dockerfile = "Dockerfile"
968+ contexts = {
969+ files = "."
970+ }
971+ }
972+ ` )
973+ dockerfile := []byte (`
974+ FROM scratch
975+ COPY --from=files marker.txt /marker.txt
976+ ` )
977+
978+ dir := tmpdir (
979+ t ,
980+ fstest .CreateFile ("docker-bake.hcl" , bakefile , 0600 ),
981+ fstest .CreateDir ("build" , 0700 ),
982+ fstest .CreateFile ("build/Dockerfile" , dockerfile , 0600 ),
983+ fstest .CreateFile ("marker.txt" , []byte ("hello" ), 0600 ),
984+ )
985+ dirDest := t .TempDir ()
986+
987+ git , err := gitutil .New (gitutil .WithWorkingDir (dir ))
988+ require .NoError (t , err )
989+ gittestutil .GitInit (git , t )
990+ gittestutil .GitAdd (git , t , "docker-bake.hcl" , "build" , "marker.txt" )
991+ gittestutil .GitCommit (git , t , "initial commit" )
992+ addr := gittestutil .GitServeHTTP (git , t )
993+
994+ out , err := bakeCmd (sb , withDir ("/tmp" ), withArgs (addr , "--set" , "*.output=type=local,dest=" + dirDest ))
995+ require .NoError (t , err , out )
996+ require .FileExists (t , filepath .Join (dirDest , "marker.txt" ))
997+ }
998+
923999func testBakeRemoteCmdContextEscapeRoot (t * testing.T , sb integration.Sandbox ) {
9241000 dirSrc := tmpdir (
9251001 t ,
0 commit comments