Skip to content

Commit de65ae6

Browse files
authored
Merge pull request moby#5151 from kariya-mitsuru/add-env-replace-for-chmod
Add environment replacement support for chmod option
2 parents 33c1609 + 22fbeaf commit de65ae6

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
@@ -3504,9 +3504,13 @@ COPY --chmod=0644 foo /
35043504
COPY --chmod=777 bar /baz
35053505
COPY --chmod=0 foo /foobis
35063506
3507+
ARG mode
3508+
COPY --chmod=${mode} foo /footer
3509+
35073510
RUN stat -c "%04a" /foo > /out/fooperm
35083511
RUN stat -c "%04a" /baz > /out/barperm
35093512
RUN stat -c "%04a" /foobis > /out/foobisperm
3513+
RUN stat -c "%04a" /footer > /out/footerperm
35103514
FROM scratch
35113515
COPY --from=base /out /
35123516
`)
@@ -3531,6 +3535,9 @@ COPY --from=base /out /
35313535
OutputDir: destDir,
35323536
},
35333537
},
3538+
FrontendAttrs: map[string]string{
3539+
"build-arg:mode": "755",
3540+
},
35343541
LocalMounts: map[string]fsutil.FS{
35353542
dockerui.DefaultLocalNameDockerfile: dir,
35363543
dockerui.DefaultLocalNameContext: dir,
@@ -3550,6 +3557,10 @@ COPY --from=base /out /
35503557
dt, err = os.ReadFile(filepath.Join(destDir, "foobisperm"))
35513558
require.NoError(t, err)
35523559
require.Equal(t, "0000\n", string(dt))
3560+
3561+
dt, err = os.ReadFile(filepath.Join(destDir, "footerperm"))
3562+
require.NoError(t, err)
3563+
require.Equal(t, "0755\n", string(dt))
35533564
}
35543565

35553566
func testCopyInvalidChmod(t *testing.T, sb integration.Sandbox) {
@@ -3852,9 +3863,14 @@ FROM busybox AS build
38523863
ADD --chmod=644 %[1]s /tmp/foo1
38533864
ADD --chmod=755 %[1]s /tmp/foo2
38543865
ADD --chmod=0413 %[1]s /tmp/foo3
3866+
3867+
ARG mode
3868+
ADD --chmod=${mode} %[1]s /tmp/foo4
3869+
38553870
RUN stat -c "%%04a" /tmp/foo1 >> /dest && \
38563871
stat -c "%%04a" /tmp/foo2 >> /dest && \
3857-
stat -c "%%04a" /tmp/foo3 >> /dest
3872+
stat -c "%%04a" /tmp/foo3 >> /dest && \
3873+
stat -c "%%04a" /tmp/foo4 >> /dest
38583874
38593875
FROM scratch
38603876
COPY --from=build /dest /dest
@@ -3878,6 +3894,9 @@ COPY --from=build /dest /dest
38783894
OutputDir: destDir,
38793895
},
38803896
},
3897+
FrontendAttrs: map[string]string{
3898+
"build-arg:mode": "400",
3899+
},
38813900
LocalMounts: map[string]fsutil.FS{
38823901
dockerui.DefaultLocalNameDockerfile: dir,
38833902
dockerui.DefaultLocalNameContext: dir,
@@ -3887,7 +3906,7 @@ COPY --from=build /dest /dest
38873906

38883907
dt, err := os.ReadFile(filepath.Join(destDir, "dest"))
38893908
require.NoError(t, err)
3890-
require.Equal(t, []byte("0644\n0755\n0413\n"), dt)
3909+
require.Equal(t, []byte("0644\n0755\n0413\n0400\n"), dt)
38913910
}
38923911

38933912
func testAddInvalidChmod(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)