@@ -10,7 +10,6 @@ import (
10
10
"os"
11
11
"path"
12
12
"path/filepath"
13
- "runtime"
14
13
"sort"
15
14
"strconv"
16
15
"strings"
@@ -361,6 +360,7 @@ func toDispatchState(ctx context.Context, dt []byte, opt ConvertOpt) (*dispatchS
361
360
if d .stage .BaseName == emptyImageName {
362
361
d .state = llb .Scratch ()
363
362
d .image = emptyImage (platformOpt .targetPlatform )
363
+ d .platform = & platformOpt .targetPlatform
364
364
continue
365
365
}
366
366
func (i int , d * dispatchState ) {
@@ -479,11 +479,7 @@ func toDispatchState(ctx context.Context, dt []byte, opt ConvertOpt) (*dispatchS
479
479
480
480
// make sure that PATH is always set
481
481
if _ , ok := shell .BuildEnvs (d .image .Config .Env )["PATH" ]; ! ok {
482
- var pathOS string
483
- if d .platform != nil {
484
- pathOS = d .platform .OS
485
- }
486
- d .image .Config .Env = append (d .image .Config .Env , "PATH=" + system .DefaultPathEnv (pathOS ))
482
+ d .image .Config .Env = append (d .image .Config .Env , "PATH=" + system .DefaultPathEnv (d .platform .OS ))
487
483
}
488
484
489
485
// initialize base metadata from image conf
@@ -892,6 +888,7 @@ func dispatchRun(d *dispatchState, c *instructions.RunCommand, proxy *llb.ProxyE
892
888
st := llb .Scratch ().Dir (sourcePath ).File (
893
889
llb .Mkfile (f , 0755 , []byte (data )),
894
890
dockerui .WithInternalName ("preparing inline document" ),
891
+ llb .Platform (* d .platform ),
895
892
)
896
893
897
894
mount := llb .AddMount (destPath , st , llb .SourcePath (sourcePath ), llb .Readonly )
@@ -995,11 +992,7 @@ func dispatchRun(d *dispatchState, c *instructions.RunCommand, proxy *llb.ProxyE
995
992
}
996
993
997
994
func dispatchWorkdir (d * dispatchState , c * instructions.WorkdirCommand , commit bool , opt * dispatchOpt ) error {
998
- platformOS := runtime .GOOS
999
- if d .platform != nil {
1000
- platformOS = d .platform .OS
1001
- }
1002
- wd , err := system .NormalizeWorkdir (d .image .Config .WorkingDir , c .Path , platformOS )
995
+ wd , err := system .NormalizeWorkdir (d .image .Config .WorkingDir , c .Path , d .platform .OS )
1003
996
if err != nil {
1004
997
return errors .Wrap (err , "normalizing workdir" )
1005
998
}
@@ -1024,6 +1017,7 @@ func dispatchWorkdir(d *dispatchState, c *instructions.WorkdirCommand, commit bo
1024
1017
d .state = d .state .File (llb .Mkdir (wd , 0755 , mkdirOpt ... ),
1025
1018
llb .WithCustomName (prefixCommand (d , uppercaseCmd (processCmdEnv (opt .shlex , c .String (), env )), d .prefixPlatform , & platform , env )),
1026
1019
location (opt .sourceMap , c .Location ()),
1020
+ llb .Platform (* d .platform ),
1027
1021
)
1028
1022
withLayer = true
1029
1023
}
@@ -1033,11 +1027,7 @@ func dispatchWorkdir(d *dispatchState, c *instructions.WorkdirCommand, commit bo
1033
1027
}
1034
1028
1035
1029
func dispatchCopy (d * dispatchState , cfg copyConfig ) error {
1036
- platformOS := runtime .GOOS
1037
- if d .platform != nil {
1038
- platformOS = d .platform .OS
1039
- }
1040
- pp , err := pathRelativeToWorkingDir (d .state , cfg .params .DestPath , platformOS )
1030
+ pp , err := pathRelativeToWorkingDir (d .state , cfg .params .DestPath , * d .platform )
1041
1031
if err != nil {
1042
1032
return err
1043
1033
}
@@ -1146,7 +1136,7 @@ func dispatchCopy(d *dispatchState, cfg copyConfig) error {
1146
1136
a = a .Copy (st , f , dest , opts ... )
1147
1137
}
1148
1138
} else {
1149
- src , err = system .CheckSystemDriveAndRemoveDriveLetter (src , platformOS )
1139
+ src , err = system .CheckSystemDriveAndRemoveDriveLetter (src , d . platform . OS )
1150
1140
if err != nil {
1151
1141
return errors .Wrap (err , "removing drive letter" )
1152
1142
}
@@ -1173,21 +1163,22 @@ func dispatchCopy(d *dispatchState, cfg copyConfig) error {
1173
1163
commitMessage .WriteString (" <<" + src .Path )
1174
1164
1175
1165
data := src .Data
1176
- f , err := system .CheckSystemDriveAndRemoveDriveLetter (src .Path , platformOS )
1166
+ f , err := system .CheckSystemDriveAndRemoveDriveLetter (src .Path , d . platform . OS )
1177
1167
if err != nil {
1178
1168
return errors .Wrap (err , "removing drive letter" )
1179
1169
}
1180
1170
st := llb .Scratch ().File (
1181
1171
llb .Mkfile (f , 0664 , []byte (data )),
1182
1172
dockerui .WithInternalName ("preparing inline document" ),
1173
+ llb .Platform (* d .platform ),
1183
1174
)
1184
1175
1185
1176
opts := append ([]llb.CopyOption {& llb.CopyInfo {
1186
1177
Mode : mode ,
1187
1178
CreateDestPath : true ,
1188
1179
}}, copyOpt ... )
1189
1180
1190
- dest , err = system .CheckSystemDriveAndRemoveDriveLetter (dest , platformOS )
1181
+ dest , err = system .CheckSystemDriveAndRemoveDriveLetter (dest , d . platform . OS )
1191
1182
if err != nil {
1192
1183
return errors .Wrap (err , "removing drive letter" )
1193
1184
}
@@ -1226,7 +1217,9 @@ func dispatchCopy(d *dispatchState, cfg copyConfig) error {
1226
1217
d .cmdIndex -- // prefixCommand increases it
1227
1218
pgName := prefixCommand (d , name , d .prefixPlatform , & platform , env )
1228
1219
1229
- var copyOpts []llb.ConstraintsOpt
1220
+ copyOpts := []llb.ConstraintsOpt {
1221
+ llb .Platform (* d .platform ),
1222
+ }
1230
1223
copy (copyOpts , fileOpt )
1231
1224
copyOpts = append (copyOpts , llb .ProgressGroup (pgID , pgName , true ))
1232
1225
@@ -1418,8 +1411,8 @@ func dispatchArg(d *dispatchState, c *instructions.ArgCommand, metaArgs []instru
1418
1411
return commitToHistory (& d .image , "ARG " + strings .Join (commitStrs , " " ), false , nil , d .epoch )
1419
1412
}
1420
1413
1421
- func pathRelativeToWorkingDir (s llb.State , p , platform string ) (string , error ) {
1422
- dir , err := s .GetDir (context .TODO ())
1414
+ func pathRelativeToWorkingDir (s llb.State , p string , platform ocispecs. Platform ) (string , error ) {
1415
+ dir , err := s .GetDir (context .TODO (), llb . Platform ( platform ) )
1423
1416
if err != nil {
1424
1417
return "" , err
1425
1418
}
@@ -1428,15 +1421,15 @@ func pathRelativeToWorkingDir(s llb.State, p, platform string) (string, error) {
1428
1421
return dir , nil
1429
1422
}
1430
1423
1431
- p , err = system .CheckSystemDriveAndRemoveDriveLetter (p , platform )
1424
+ p , err = system .CheckSystemDriveAndRemoveDriveLetter (p , platform . OS )
1432
1425
if err != nil {
1433
1426
return "" , errors .Wrap (err , "remving drive letter" )
1434
1427
}
1435
1428
1436
- if system .IsAbs (p , platform ) {
1429
+ if system .IsAbs (p , platform . OS ) {
1437
1430
return p , nil
1438
1431
}
1439
- return filepath . Join (dir , p ), nil
1432
+ return system . NormalizePath (dir , p , platform . OS , false )
1440
1433
}
1441
1434
1442
1435
func addEnv (env []string , k , v string ) []string {
0 commit comments