🔒 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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user