🐛 fix(ci): la guardia Dockerfile vede le ARG ereditate da uno stage padre
- una ARG passa agli stage che derivano da quello che la dichiara (FROM <stage>), come le ENV: lo prova il log BuildKit di nuxt-vue-components-docs v1.0.13, dove deps espande la NPM_VERSION di base - prima era un falso avviso su ogni Dockerfile con la ARG in uno stage base - nomi di stage confrontati senza distinzione di maiuscole, come in Docker - collaudo su un Dockerfile sintetico (ARG globale, padre, fratello, nipote, ENV, predefinite, commenti nelle continuazioni): segnala solo i due casi attesi Fixes #10 @25m refs PZeta_Touch/flux-repo#133
This commit is contained in:
@@ -167,9 +167,11 @@ jobs:
|
|||||||
"
|
"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# (b) ARG fuori scope: una ARG vale solo nello stage che la dichiara (o,
|
# (b) ARG fuori scope: una ARG vale nello stage che la dichiara e in
|
||||||
# prima del primo FROM, solo nelle righe FROM). Le ENV passano agli stage
|
# quelli che ne derivano (FROM <stage>), come le ENV; quelle dichiarate
|
||||||
# che derivano da quello che le definisce; le ARG no.
|
# prima del primo FROM valgono solo nelle righe FROM. Verificato sul
|
||||||
|
# log di BuildKit di nuxt-vue-components-docs v1.0.13: `FROM base AS
|
||||||
|
# deps` vede la NPM_VERSION dichiarata in `base`.
|
||||||
args=$(${AWK:-awk} '
|
args=$(${AWK:-awk} '
|
||||||
function trim(s) { sub(/^[ \t]+/, "", s); sub(/[ \t]+$/, "", s); return s }
|
function trim(s) { sub(/^[ \t]+/, "", s); sub(/[ \t]+$/, "", s); return s }
|
||||||
# Nomi dichiarati da ARG/ENV: "A", "A=1", "A=1 B=2", "A valore".
|
# Nomi dichiarati da ARG/ENV: "A", "A=1", "A=1 B=2", "A valore".
|
||||||
@@ -189,17 +191,17 @@ jobs:
|
|||||||
if (kw == "FROM") {
|
if (kw == "FROM") {
|
||||||
n = split(trim(rest), t, /[ \t]+/); i = 1
|
n = split(trim(rest), t, /[ \t]+/); i = 1
|
||||||
while (i <= n && t[i] ~ /^--/) i++
|
while (i <= n && t[i] ~ /^--/) i++
|
||||||
base = t[i]; alias = ""
|
base = tolower(t[i]); alias = ""
|
||||||
if (i + 2 <= n && toupper(t[i + 1]) == "AS") alias = t[i + 2]
|
if (i + 2 <= n && toupper(t[i + 1]) == "AS") alias = tolower(t[i + 2])
|
||||||
stages++
|
stages++
|
||||||
stage = (alias != "" ? alias : "#" stages)
|
stage = (alias != "" ? alias : "#" stages)
|
||||||
split("", scope); split("", inh)
|
split("", scope); split("", inh)
|
||||||
for (k in envof) { split(k, p, SUBSEP); if (p[1] == base) inh[p[2]] = 1 }
|
for (k in varof) { split(k, p, SUBSEP); if (p[1] == base) inh[p[2]] = 1 }
|
||||||
for (k in inh) { scope[k] = 1; envof[stage, k] = 1 }
|
for (k in inh) { scope[k] = 1; varof[stage, k] = 1 }
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (stage == "") return
|
if (stage == "") return
|
||||||
if (kw == "ARG") { declared(rest, d); for (k in d) scope[k] = 1; return }
|
if (kw == "ARG") { declared(rest, d); for (k in d) { scope[k] = 1; varof[stage, k] = 1 }; return }
|
||||||
s = rest
|
s = rest
|
||||||
while (match(s, /\$\{?[A-Za-z_][A-Za-z0-9_]*/)) {
|
while (match(s, /\$\{?[A-Za-z_][A-Za-z0-9_]*/)) {
|
||||||
v = substr(s, RSTART, RLENGTH); sub(/^\$\{?/, "", v)
|
v = substr(s, RSTART, RLENGTH); sub(/^\$\{?/, "", v)
|
||||||
@@ -209,7 +211,7 @@ jobs:
|
|||||||
printf "%d\t%s\t%s\n", ln, v, stage
|
printf "%d\t%s\t%s\n", ln, v, stage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (kw == "ENV") { declared(rest, d); for (k in d) { scope[k] = 1; envof[stage, k] = 1 } }
|
if (kw == "ENV") { declared(rest, d); for (k in d) { scope[k] = 1; varof[stage, k] = 1 } }
|
||||||
}
|
}
|
||||||
function flush() {
|
function flush() {
|
||||||
if (buf != "" && match(buf, /^[ \t]*[A-Za-z]+/)) {
|
if (buf != "" && match(buf, /^[ \t]*[A-Za-z]+/)) {
|
||||||
@@ -222,7 +224,7 @@ jobs:
|
|||||||
np = split("TARGETPLATFORM TARGETOS TARGETARCH TARGETVARIANT BUILDPLATFORM BUILDOS BUILDARCH BUILDVARIANT HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY ALL_PROXY http_proxy https_proxy ftp_proxy no_proxy all_proxy", pp, " ")
|
np = split("TARGETPLATFORM TARGETOS TARGETARCH TARGETVARIANT BUILDPLATFORM BUILDOS BUILDARCH BUILDVARIANT HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY ALL_PROXY http_proxy https_proxy ftp_proxy no_proxy all_proxy", pp, " ")
|
||||||
for (i = 1; i <= np; i++) predefined[pp[i]] = 1
|
for (i = 1; i <= np; i++) predefined[pp[i]] = 1
|
||||||
}
|
}
|
||||||
FNR == 1 { pass++; buf = ""; stage = ""; stages = 0; split("", scope); split("", envof) }
|
FNR == 1 { pass++; buf = ""; stage = ""; stages = 0; split("", scope); split("", varof) }
|
||||||
{
|
{
|
||||||
line = $0; sub(/\r$/, "", line)
|
line = $0; sub(/\r$/, "", line)
|
||||||
if (line ~ /^[ \t]*#/) next # commenti, anche dentro una continuazione
|
if (line ~ /^[ \t]*#/) next # commenti, anche dentro una continuazione
|
||||||
|
|||||||
Reference in New Issue
Block a user