Skip to content

Commit ab5dac9

Browse files
committed
fix: top arg only on from include before stage
1 parent 71483c1 commit ab5dac9

20 files changed

+121
-77
lines changed

src/core/generateIncluded.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ module.exports = function generateIncluded({
22
includePathRelative,
33
relativeFilePath,
44
includedContent,
5+
includingInstruction,
56
}) {
67
const attrs = {
78
file: includePathRelative,
89
includedBy: relativeFilePath,
10+
includeType: includingInstruction,
911
}
1012
const attrsStr = Object.entries(attrs)
1113
.reduce((acc, [key, value]) => {

src/instruction/from.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ module.exports = ({
4242
includePathRelative,
4343
relativeFilePath,
4444
includedContent,
45+
includingInstruction: "from",
4546
}),
4647
)
4748
const asMatch = instruction.args.match(asMatchRegex)

src/instruction/fromParam.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ module.exports = ({
4141
includePathRelative,
4242
relativeFilePath,
4343
includedContent,
44+
includingInstruction: "fromParam",
4445
}),
4546
)
4647

src/instruction/include.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ module.exports = ({
4141
includePathRelative,
4242
relativeFilePath,
4343
includedContent,
44+
includingInstruction: "include",
4445
}),
4546
)
4647

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module.exports = function parseDockerfileXStartComment(line) {
2+
const prefix = "# DOCKERFILE-X:START "
3+
4+
if (!line.startsWith(prefix)) {
5+
return null
6+
}
7+
8+
const keyValueString = line.slice(prefix.length)
9+
const keyValuePairs = keyValueString.split(/\s+/)
10+
const map = {}
11+
12+
keyValuePairs.forEach((pair) => {
13+
const [key, value] = pair.split("=")
14+
if (key && value) {
15+
const cleanedValue = value.replace(/^["']|["']$/g, "")
16+
map[key] = cleanedValue
17+
}
18+
})
19+
return map
20+
}

src/lib/redeclareArgTop.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
const parseDockerfile = require("../lib/parseDockerfile")
2+
const parseDockerfileXStartComment = require("../lib/parseDockerfileXStartComment")
23

34
module.exports = function redeclareArgTop(dockerContent) {
45
const instructions = parseDockerfile(dockerContent)
56

67
const allArgs = new Set()
78
let inGlobalTop = true
8-
let inLocalTop = true
9+
let inLocalTop = false
910
for (let i = 0; i < instructions.length; i++) {
1011
const instruction = instructions[i]
1112
switch (instruction.name) {
@@ -16,7 +17,10 @@ module.exports = function redeclareArgTop(dockerContent) {
1617
}
1718
case "COMMENT": {
1819
if (instruction.raw.startsWith("# DOCKERFILE-X:START")) {
19-
inLocalTop = true
20+
const { includeType } = parseDockerfileXStartComment(instruction.raw)
21+
if (includeType === "from" || includeType === "fromParam") {
22+
inLocalTop = true
23+
}
2024
}
2125
break
2226
}
@@ -26,8 +30,6 @@ module.exports = function redeclareArgTop(dockerContent) {
2630
}
2731
if (inLocalTop) {
2832
allArgs.add("ARG " + instruction.args[0])
29-
} else {
30-
allArgs.add("ARG " + instruction.args[0].split("=")[0])
3133
}
3234
break
3335
}
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
ARG NODE_VERSION
2-
ARG NODE_PACKAGE
31
ARG UBUNTU_VERSION=22.04
4-
# DOCKERFILE-X:START file="./inc/node.dockerfile" includedBy="copyFrom.dockerfile"
5-
# DOCKERFILE-X:START file="./downloader.dockerfile" includedBy="inc/node.dockerfile"
6-
# DOCKERFILE-X:START file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile"
2+
# DOCKERFILE-X:START file="./inc/node.dockerfile" includedBy="copyFrom.dockerfile" includeType="fromParam"
3+
# DOCKERFILE-X:START file="./downloader.dockerfile" includedBy="inc/node.dockerfile" includeType="from"
4+
# DOCKERFILE-X:START file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile" includeType="include"
75
ARG UBUNTU_VERSION=22.04
86
FROM ubuntu:$UBUNTU_VERSION AS nodee5203c--downlo550515--ubuntu9e4275--final-stage
97
FROM nodee5203c--downlo550515--ubuntu9e4275--final-stage AS nodee5203c--downlo550515--ubuntu9e4275
@@ -12,23 +10,23 @@ RUN groupadd -g 1000 ubuntu && useradd -rm -d /home/ubuntu -s /bin/bash -g ubunt
1210
ENV HOME=/home/ubuntu
1311
RUN chmod 0777 /home/ubuntu
1412
RUN mkdir /app && chown 1000:1000 /app
15-
# DOCKERFILE-X:END file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile"
13+
# DOCKERFILE-X:END file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile" includeType="include"
1614
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends curl ca-certificates wget git && rm -rf /var/lib/apt/lists/*
17-
# DOCKERFILE-X:END file="./downloader.dockerfile" includedBy="inc/node.dockerfile"
15+
# DOCKERFILE-X:END file="./downloader.dockerfile" includedBy="inc/node.dockerfile" includeType="from"
1816
FROM nodee5203c--downlo550515 AS nodee5203c--build-node
1917
# renovate: datasource=node depName=node versioning=node
2018
ARG NODE_VERSION=20.3.0
2119
ARG NODE_PACKAGE=node-v$NODE_VERSION-linux-x64
2220
RUN curl https://nodejs.org/dist/v$NODE_VERSION/$NODE_PACKAGE.tar.gz | tar -xzC /opt/ && mv /opt/$NODE_PACKAGE /opt/node
23-
# DOCKERFILE-X:START file="./ubuntu.dockerfile" includedBy="inc/node.dockerfile"
21+
# DOCKERFILE-X:START file="./ubuntu.dockerfile" includedBy="inc/node.dockerfile" includeType="from"
2422
ARG UBUNTU_VERSION=22.04
2523
FROM ubuntu:$UBUNTU_VERSION AS nodee5203c--ubuntu9e4275--final-stage
2624
FROM nodee5203c--ubuntu9e4275--final-stage AS nodee5203c--ubuntu9e4275
2725
RUN groupadd -g 1000 ubuntu && useradd -rm -d /home/ubuntu -s /bin/bash -g ubuntu -G sudo -u 1000 ubuntu
2826
ENV HOME=/home/ubuntu
2927
RUN chmod 0777 /home/ubuntu
3028
RUN mkdir /app && chown 1000:1000 /app
31-
# DOCKERFILE-X:END file="./ubuntu.dockerfile" includedBy="inc/node.dockerfile"
29+
# DOCKERFILE-X:END file="./ubuntu.dockerfile" includedBy="inc/node.dockerfile" includeType="from"
3230
FROM nodee5203c--ubuntu9e4275 AS nodee5203c--final-stage
3331
FROM nodee5203c--final-stage AS nodee5203c
3432
COPY --from=nodee5203c--build-node /opt/node /opt/node
@@ -40,6 +38,6 @@ RUN chown 1000:1000 /yarn
4038
ENV YARN_CACHE_FOLDER /yarn
4139
WORKDIR /app
4240
USER 1000
43-
# DOCKERFILE-X:END file="./inc/node.dockerfile" includedBy="copyFrom.dockerfile"
41+
# DOCKERFILE-X:END file="./inc/node.dockerfile" includedBy="copyFrom.dockerfile" includeType="fromParam"
4442
FROM ubuntu:22.04
4543
COPY --from=nodee5203c --chown=1000:1000 /opt /opt/
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
ARG NODE_VERSION
2-
ARG NODE_PACKAGE
31
ARG UBUNTU_VERSION=22.04
4-
# DOCKERFILE-X:START file="./inc/node.dockerfile" includedBy="copyFromStage.dockerfile"
5-
# DOCKERFILE-X:START file="./downloader.dockerfile" includedBy="inc/node.dockerfile"
6-
# DOCKERFILE-X:START file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile"
2+
# DOCKERFILE-X:START file="./inc/node.dockerfile" includedBy="copyFromStage.dockerfile" includeType="fromParam"
3+
# DOCKERFILE-X:START file="./downloader.dockerfile" includedBy="inc/node.dockerfile" includeType="from"
4+
# DOCKERFILE-X:START file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile" includeType="include"
75
ARG UBUNTU_VERSION=22.04
86
FROM ubuntu:$UBUNTU_VERSION AS nodee5203c--downlo550515--ubuntu9e4275--final-stage
97
FROM nodee5203c--downlo550515--ubuntu9e4275--final-stage AS nodee5203c--downlo550515--ubuntu9e4275
@@ -12,24 +10,24 @@ RUN groupadd -g 1000 ubuntu && useradd -rm -d /home/ubuntu -s /bin/bash -g ubunt
1210
ENV HOME=/home/ubuntu
1311
RUN chmod 0777 /home/ubuntu
1412
RUN mkdir /app && chown 1000:1000 /app
15-
# DOCKERFILE-X:END file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile"
13+
# DOCKERFILE-X:END file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile" includeType="include"
1614
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends curl ca-certificates wget git && rm -rf /var/lib/apt/lists/*
17-
# DOCKERFILE-X:END file="./downloader.dockerfile" includedBy="inc/node.dockerfile"
15+
# DOCKERFILE-X:END file="./downloader.dockerfile" includedBy="inc/node.dockerfile" includeType="from"
1816
FROM nodee5203c--downlo550515 AS nodee5203c--build-node
1917
FROM nodee5203c--build-node AS nodee5203c
2018
# renovate: datasource=node depName=node versioning=node
2119
ARG NODE_VERSION=20.3.0
2220
ARG NODE_PACKAGE=node-v$NODE_VERSION-linux-x64
2321
RUN curl https://nodejs.org/dist/v$NODE_VERSION/$NODE_PACKAGE.tar.gz | tar -xzC /opt/ && mv /opt/$NODE_PACKAGE /opt/node
24-
# DOCKERFILE-X:START file="./ubuntu.dockerfile" includedBy="inc/node.dockerfile"
22+
# DOCKERFILE-X:START file="./ubuntu.dockerfile" includedBy="inc/node.dockerfile" includeType="from"
2523
ARG UBUNTU_VERSION=22.04
2624
FROM ubuntu:$UBUNTU_VERSION AS nodee5203c--ubuntu9e4275--final-stage
2725
FROM nodee5203c--ubuntu9e4275--final-stage AS nodee5203c--ubuntu9e4275
2826
RUN groupadd -g 1000 ubuntu && useradd -rm -d /home/ubuntu -s /bin/bash -g ubuntu -G sudo -u 1000 ubuntu
2927
ENV HOME=/home/ubuntu
3028
RUN chmod 0777 /home/ubuntu
3129
RUN mkdir /app && chown 1000:1000 /app
32-
# DOCKERFILE-X:END file="./ubuntu.dockerfile" includedBy="inc/node.dockerfile"
30+
# DOCKERFILE-X:END file="./ubuntu.dockerfile" includedBy="inc/node.dockerfile" includeType="from"
3331
FROM nodee5203c--ubuntu9e4275 AS nodee5203c--final-stage
3432
COPY --from=nodee5203c--build-node /opt/node /opt/node
3533
ENV NODE_PATH /opt/node/lib/node_modules
@@ -40,6 +38,6 @@ RUN chown 1000:1000 /yarn
4038
ENV YARN_CACHE_FOLDER /yarn
4139
WORKDIR /app
4240
USER 1000
43-
# DOCKERFILE-X:END file="./inc/node.dockerfile" includedBy="copyFromStage.dockerfile"
41+
# DOCKERFILE-X:END file="./inc/node.dockerfile" includedBy="copyFromStage.dockerfile" includeType="fromParam"
4442
FROM ubuntu:22.04
4543
COPY --from=nodee5203c --chown=1000:1000 /opt/node /opt/node

test/__snapshots__/FROM/from.expected.dockerfile

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
ARG NODE_VERSION
2-
ARG NODE_PACKAGE
3-
# DOCKERFILE-X:START file="./inc/downloader.dockerfile" includedBy="from.dockerfile"
4-
# DOCKERFILE-X:START file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile"
1+
# DOCKERFILE-X:START file="./inc/downloader.dockerfile" includedBy="from.dockerfile" includeType="from"
2+
# DOCKERFILE-X:START file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile" includeType="include"
53
ARG UBUNTU_VERSION=22.04
64
FROM ubuntu:$UBUNTU_VERSION AS downlo550515--ubuntu9e4275--final-stage
75
FROM downlo550515--ubuntu9e4275--final-stage AS downlo550515--ubuntu9e4275
@@ -10,9 +8,9 @@ RUN groupadd -g 1000 ubuntu && useradd -rm -d /home/ubuntu -s /bin/bash -g ubunt
108
ENV HOME=/home/ubuntu
119
RUN chmod 0777 /home/ubuntu
1210
RUN mkdir /app && chown 1000:1000 /app
13-
# DOCKERFILE-X:END file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile"
11+
# DOCKERFILE-X:END file="ubuntu.dockerfile" includedBy="inc/downloader.dockerfile" includeType="include"
1412
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends curl ca-certificates wget git && rm -rf /var/lib/apt/lists/*
15-
# DOCKERFILE-X:END file="./inc/downloader.dockerfile" includedBy="from.dockerfile"
13+
# DOCKERFILE-X:END file="./inc/downloader.dockerfile" includedBy="from.dockerfile" includeType="from"
1614
FROM downlo550515 AS final-stage
1715
ARG NODE_VERSION=20.3.0
1816
ARG NODE_PACKAGE=node-v$NODE_VERSION-linux-x64
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
ARG UBUNTU_VERSION=22.04
2+
FROM debian AS node
3+
ARG NODE_VERSION=20.3.0
4+
ARG NODE_PACKAGE=node-v$NODE_VERSION-linux-x64
5+
RUN curl https://nodejs.org/dist/v$NODE_VERSION/$NODE_PACKAGE.tar.gz | tar -xzC /opt/ && mv /opt/$NODE_PACKAGE /opt/node
6+
# DOCKERFILE-X:START file="./inc/ubuntu.dockerfile" includedBy="fromIncludeArg.dockerfile" includeType="from"
7+
ARG UBUNTU_VERSION=22.04
8+
FROM ubuntu:$UBUNTU_VERSION AS ubuntu9e4275--final-stage
9+
FROM ubuntu9e4275--final-stage AS ubuntu9e4275
10+
RUN groupadd -g 1000 ubuntu && useradd -rm -d /home/ubuntu -s /bin/bash -g ubuntu -G sudo -u 1000 ubuntu
11+
ENV HOME=/home/ubuntu
12+
RUN chmod 0777 /home/ubuntu
13+
RUN mkdir /app && chown 1000:1000 /app
14+
# DOCKERFILE-X:END file="./inc/ubuntu.dockerfile" includedBy="fromIncludeArg.dockerfile" includeType="from"
15+
FROM ubuntu9e4275 AS final-stage
16+
COPY --from=node /opt/node /opt/node

0 commit comments

Comments
 (0)