Skip to content

Commit 22fbeaf

Browse files
Add environment replacement support for chmod option
Add environment replacement support for chmod option argument for the ADD and COPY commands. Signed-off-by: Mitsuru Kariya <[email protected]>
1 parent 5a91bd3 commit 22fbeaf

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

frontend/dockerfile/dockerfile_test.go

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3466,9 +3466,13 @@ COPY --chmod=0644 foo /
34663466
COPY --chmod=777 bar /baz
34673467
COPY --chmod=0 foo /foobis
34683468
3469+
ARG mode
3470+
COPY --chmod=${mode} foo /footer
3471+
34693472
RUN stat -c "%04a" /foo > /out/fooperm
34703473
RUN stat -c "%04a" /baz > /out/barperm
34713474
RUN stat -c "%04a" /foobis > /out/foobisperm
3475+
RUN stat -c "%04a" /footer > /out/footerperm
34723476
FROM scratch
34733477
COPY --from=base /out /
34743478
`)
@@ -3493,6 +3497,9 @@ COPY --from=base /out /
34933497
OutputDir: destDir,
34943498
},
34953499
},
3500+
FrontendAttrs: map[string]string{
3501+
"build-arg:mode": "755",
3502+
},
34963503
LocalMounts: map[string]fsutil.FS{
34973504
dockerui.DefaultLocalNameDockerfile: dir,
34983505
dockerui.DefaultLocalNameContext: dir,
@@ -3512,6 +3519,10 @@ COPY --from=base /out /
35123519
dt, err = os.ReadFile(filepath.Join(destDir, "foobisperm"))
35133520
require.NoError(t, err)
35143521
require.Equal(t, "0000\n", string(dt))
3522+
3523+
dt, err = os.ReadFile(filepath.Join(destDir, "footerperm"))
3524+
require.NoError(t, err)
3525+
require.Equal(t, "0755\n", string(dt))
35153526
}
35163527

35173528
func testCopyOverrideFiles(t *testing.T, sb integration.Sandbox) {
@@ -3763,9 +3774,14 @@ FROM busybox AS build
37633774
ADD --chmod=644 %[1]s /tmp/foo1
37643775
ADD --chmod=755 %[1]s /tmp/foo2
37653776
ADD --chmod=0413 %[1]s /tmp/foo3
3777+
3778+
ARG mode
3779+
ADD --chmod=${mode} %[1]s /tmp/foo4
3780+
37663781
RUN stat -c "%%04a" /tmp/foo1 >> /dest && \
37673782
stat -c "%%04a" /tmp/foo2 >> /dest && \
3768-
stat -c "%%04a" /tmp/foo3 >> /dest
3783+
stat -c "%%04a" /tmp/foo3 >> /dest && \
3784+
stat -c "%%04a" /tmp/foo4 >> /dest
37693785
37703786
FROM scratch
37713787
COPY --from=build /dest /dest
@@ -3789,6 +3805,9 @@ COPY --from=build /dest /dest
37893805
OutputDir: destDir,
37903806
},
37913807
},
3808+
FrontendAttrs: map[string]string{
3809+
"build-arg:mode": "400",
3810+
},
37923811
LocalMounts: map[string]fsutil.FS{
37933812
dockerui.DefaultLocalNameDockerfile: dir,
37943813
dockerui.DefaultLocalNameContext: dir,
@@ -3798,7 +3817,7 @@ COPY --from=build /dest /dest
37983817

37993818
dt, err := os.ReadFile(filepath.Join(destDir, "dest"))
38003819
require.NoError(t, err)
3801-
require.Equal(t, []byte("0644\n0755\n0413\n"), dt)
3820+
require.Equal(t, []byte("0644\n0755\n0413\n0400\n"), dt)
38023821
}
38033822

38043823
func testDockerfileFromGit(t *testing.T, sb integration.Sandbox) {

frontend/dockerfile/instructions/commands.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,12 @@ func (c *AddCommand) Expand(expander SingleWordExpander) error {
255255
}
256256
c.Chown = expandedChown
257257

258+
expandedChmod, err := expander(c.Chmod)
259+
if err != nil {
260+
return err
261+
}
262+
c.Chmod = expandedChmod
263+
258264
expandedChecksum, err := expander(c.Checksum)
259265
if err != nil {
260266
return err
@@ -287,6 +293,12 @@ func (c *CopyCommand) Expand(expander SingleWordExpander) error {
287293
}
288294
c.Chown = expandedChown
289295

296+
expandedChmod, err := expander(c.Chmod)
297+
if err != nil {
298+
return err
299+
}
300+
c.Chmod = expandedChmod
301+
290302
return c.SourcesAndDest.Expand(expander)
291303
}
292304

0 commit comments

Comments
 (0)