🔒 fix(ci): la guardia Dockerfile blocca, e le ARG valgono solo nel loro stage

- via `continue-on-error`: i 56 repo difettosi sono stati corretti (tappa 2
  di PZeta_Touch/flux-repo#133), e su 238 Dockerfile del portale ne restano
  due, che non sono repository git e non passano di qui
- le ARG non si ereditano da `FROM <stage>`, come dice la documentazione
  Docker: la versione precedente presumeva il contrario e lasciava passare
  proprio i casi come nuxt-vue-components-docs, cioè quelli che tirano
  dentro npm 12 e fanno fallire la build al tag
- messaggi da ::warning a ::error, e uscita 1 quando trova qualcosa

Fixes #14 @1h30m
This commit is contained in:
LucaZanni
2026-09-12 10:32:27 +02:00
parent 5973ec9fcc
commit b94bd6936a
2 changed files with 52 additions and 38 deletions
+26 -19
View File
@@ -46,12 +46,14 @@ jobs:
echo "@pzeta:registry=https://gitea.pzetatouch.it/api/packages/PZeta_Touch/npm/" >> ~/.npmrc
echo "//gitea.pzetatouch.it/api/packages/PZeta_Touch/npm/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc
- name: Dockerfile - registry @pzeta e ARG per stage (solo avviso)
- name: Dockerfile - registry @pzeta e ARG per stage
shell: bash
# Solo avviso finche' i ~46 repo con il registry in minuscolo non sono
# corretti: bloccante oggi li farebbe diventare rossi tutti insieme.
# Diventa bloccante con la tappa 2 di PZeta_Touch/flux-repo#133.
continue-on-error: true
# BLOCCANTE dal 12/09/2026, chiusa la tappa 2 di PZeta_Touch/flux-repo#133.
# Prima era solo un avviso, perche' 56 repo avevano ancora uno dei due
# difetti e bloccare li avrebbe fatti diventare rossi tutti insieme. Ora
# sono corretti: su 238 Dockerfile del portale ne restano difettosi due,
# `vue-conservazione` e `telegram-media-bot`, che non sono repository git
# e quindi non passano di qui.
run: |
# Due difetti che hanno rotto le release di node-xmlvalidation per due
# mesi senza che nessuno se ne accorgesse (PZeta_Touch/flux-repo#129,
@@ -78,11 +80,14 @@ jobs:
exit 0
fi
# (b) ARG fuori scope: una ARG vale nello stage che la dichiara e in
# quelli che ne derivano (FROM <stage>), come le ENV; quelle dichiarate
# 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`.
# (b) ARG fuori scope: una ARG vale SOLO nello stage che la dichiara.
# Quelle dichiarate prima del primo FROM valgono solo nelle righe FROM,
# e vanno ridichiarate dentro lo stage per essere viste dai RUN
# (documentazione Docker, "Scoping" in build/building/variables).
# Nessuna eredita' da `FROM <stage>`: le ENV si ereditano, le ARG no.
# Una versione precedente di questa guardia presumeva il contrario e
# lasciava passare proprio i casi come nuxt-vue-components-docs, dove
# la ARG dichiarata in `base` veniva usata in `deps` (#133).
arg_scope() {
${AWK:-awk} '
function trim(s) { sub(/^[ \t]+/, "", s); sub(/[ \t]+$/, "", s); return s }
@@ -107,9 +112,9 @@ jobs:
if (i + 2 <= n && toupper(t[i + 1]) == "AS") alias = tolower(t[i + 2])
stages++
stage = (alias != "" ? alias : "#" stages)
split("", scope); split("", inh)
for (k in varof) { split(k, p, SUBSEP); if (p[1] == base) inh[p[2]] = 1 }
for (k in inh) { scope[k] = 1; varof[stage, k] = 1 }
# Scope nuovo e vuoto: niente viene ereditato dallo stage di base.
# (Nessun apostrofo qui dentro: chiuderebbe la stringa awk.)
split("", scope)
return
}
if (stage == "") return
@@ -195,7 +200,7 @@ jobs:
exit 0
fi
summary="## ⚠️ Dockerfile: difetti della #133 (solo avviso)"$'\n\n'"| File | Riga | Difetto |"$'\n'"|---|---|---|"$'\n'
summary="## ❌ Dockerfile: difetti della #133"$'\n\n'"| File | Riga | Difetto |"$'\n'"|---|---|---|"$'\n'
count=0
while IFS=' ' read -r f n kind v st; do
[ -n "$f" ] || continue
@@ -208,19 +213,21 @@ jobs:
[ "$v" = "NPM_VERSION" ] && effetto="e' vuota, e 'npm install -g npm@' installa l'ultima ignorando il pin"
msg="ARG ${v} usata nello stage '${st}' senza dichiararla: li' ${effetto}. Aggiungere 'ARG ${v}' dopo il FROM dello stage."
fi
echo "::warning file=${f},line=${n}::${msg}"
echo "::error file=${f},line=${n}::${msg}"
summary="${summary}| \`${f}\` | ${n} | ${msg} |"$'\n'
done <<EOF
$findings
EOF
echo ""
parola="avvisi"; [ "$count" -eq 1 ] && parola="avviso"
echo "${count} ${parola}. Il controllo non blocca: diventera' bloccante con la tappa 2 di PZeta_Touch/flux-repo#133."
parola="difetti"; [ "$count" -eq 1 ] && parola="difetto"
echo "${count} ${parola}. Il job si ferma qui: con npm 12 la build dell'immagine"
echo "fallirebbe al tag, cioe' molto piu' tardi e su un log che nessuno guarda"
echo "(e' andata cosi' per due mesi con node-xmlvalidation, PZeta_Touch/flux-repo#129)."
if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then
printf '%s\n%s\n' "$summary" "Riferimento: PZeta_Touch/flux-repo#133 — per ora non blocca." >> "$GITHUB_STEP_SUMMARY" 2>/dev/null
printf '%s\n%s\n' "$summary" "Riferimento: PZeta_Touch/flux-repo#133" >> "$GITHUB_STEP_SUMMARY" 2>/dev/null
fi
exit 0
exit 1
- name: Check outdated packages
run: npm outdated || true
+26 -19
View File
@@ -125,12 +125,14 @@ jobs:
fi
echo "Nessun INSERT INTO auth.ruoli: contratto rispettato."
- name: Dockerfile - registry @pzeta e ARG per stage (solo avviso)
- name: Dockerfile - registry @pzeta e ARG per stage
shell: bash
# Solo avviso finche' i ~46 repo con il registry in minuscolo non sono
# corretti: bloccante oggi li farebbe diventare rossi tutti insieme.
# Diventa bloccante con la tappa 2 di PZeta_Touch/flux-repo#133.
continue-on-error: true
# BLOCCANTE dal 12/09/2026, chiusa la tappa 2 di PZeta_Touch/flux-repo#133.
# Prima era solo un avviso, perche' 56 repo avevano ancora uno dei due
# difetti e bloccare li avrebbe fatti diventare rossi tutti insieme. Ora
# sono corretti: su 238 Dockerfile del portale ne restano difettosi due,
# `vue-conservazione` e `telegram-media-bot`, che non sono repository git
# e quindi non passano di qui.
run: |
# Due difetti che hanno rotto le release di node-xmlvalidation per due
# mesi senza che nessuno se ne accorgesse (PZeta_Touch/flux-repo#129,
@@ -157,11 +159,14 @@ jobs:
exit 0
fi
# (b) ARG fuori scope: una ARG vale nello stage che la dichiara e in
# quelli che ne derivano (FROM <stage>), come le ENV; quelle dichiarate
# 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`.
# (b) ARG fuori scope: una ARG vale SOLO nello stage che la dichiara.
# Quelle dichiarate prima del primo FROM valgono solo nelle righe FROM,
# e vanno ridichiarate dentro lo stage per essere viste dai RUN
# (documentazione Docker, "Scoping" in build/building/variables).
# Nessuna eredita' da `FROM <stage>`: le ENV si ereditano, le ARG no.
# Una versione precedente di questa guardia presumeva il contrario e
# lasciava passare proprio i casi come nuxt-vue-components-docs, dove
# la ARG dichiarata in `base` veniva usata in `deps` (#133).
arg_scope() {
${AWK:-awk} '
function trim(s) { sub(/^[ \t]+/, "", s); sub(/[ \t]+$/, "", s); return s }
@@ -186,9 +191,9 @@ jobs:
if (i + 2 <= n && toupper(t[i + 1]) == "AS") alias = tolower(t[i + 2])
stages++
stage = (alias != "" ? alias : "#" stages)
split("", scope); split("", inh)
for (k in varof) { split(k, p, SUBSEP); if (p[1] == base) inh[p[2]] = 1 }
for (k in inh) { scope[k] = 1; varof[stage, k] = 1 }
# Scope nuovo e vuoto: niente viene ereditato dallo stage di base.
# (Nessun apostrofo qui dentro: chiuderebbe la stringa awk.)
split("", scope)
return
}
if (stage == "") return
@@ -274,7 +279,7 @@ jobs:
exit 0
fi
summary="## ⚠️ Dockerfile: difetti della #133 (solo avviso)"$'\n\n'"| File | Riga | Difetto |"$'\n'"|---|---|---|"$'\n'
summary="## ❌ Dockerfile: difetti della #133"$'\n\n'"| File | Riga | Difetto |"$'\n'"|---|---|---|"$'\n'
count=0
while IFS=' ' read -r f n kind v st; do
[ -n "$f" ] || continue
@@ -287,19 +292,21 @@ jobs:
[ "$v" = "NPM_VERSION" ] && effetto="e' vuota, e 'npm install -g npm@' installa l'ultima ignorando il pin"
msg="ARG ${v} usata nello stage '${st}' senza dichiararla: li' ${effetto}. Aggiungere 'ARG ${v}' dopo il FROM dello stage."
fi
echo "::warning file=${f},line=${n}::${msg}"
echo "::error file=${f},line=${n}::${msg}"
summary="${summary}| \`${f}\` | ${n} | ${msg} |"$'\n'
done <<EOF
$findings
EOF
echo ""
parola="avvisi"; [ "$count" -eq 1 ] && parola="avviso"
echo "${count} ${parola}. Il controllo non blocca: diventera' bloccante con la tappa 2 di PZeta_Touch/flux-repo#133."
parola="difetti"; [ "$count" -eq 1 ] && parola="difetto"
echo "${count} ${parola}. Il job si ferma qui: con npm 12 la build dell'immagine"
echo "fallirebbe al tag, cioe' molto piu' tardi e su un log che nessuno guarda"
echo "(e' andata cosi' per due mesi con node-xmlvalidation, PZeta_Touch/flux-repo#129)."
if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then
printf '%s\n%s\n' "$summary" "Riferimento: PZeta_Touch/flux-repo#133 — per ora non blocca." >> "$GITHUB_STEP_SUMMARY" 2>/dev/null
printf '%s\n%s\n' "$summary" "Riferimento: PZeta_Touch/flux-repo#133" >> "$GITHUB_STEP_SUMMARY" 2>/dev/null
fi
exit 0
exit 1
- name: Check outdated packages
run: npm outdated || true