diff --git a/.gitea/workflows/quality-gates.yml b/.gitea/workflows/quality-gates.yml index d7fb908..03798ba 100644 --- a/.gitea/workflows/quality-gates.yml +++ b/.gitea/workflows/quality-gates.yml @@ -167,9 +167,11 @@ jobs: " fi - # (b) ARG fuori scope: una ARG vale solo nello stage che la dichiara (o, - # prima del primo FROM, solo nelle righe FROM). Le ENV passano agli stage - # che derivano da quello che le definisce; le ARG no. + # (b) ARG fuori scope: una ARG vale nello stage che la dichiara e in + # quelli che ne derivano (FROM ), 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`. args=$(${AWK:-awk} ' 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". @@ -189,17 +191,17 @@ jobs: if (kw == "FROM") { n = split(trim(rest), t, /[ \t]+/); i = 1 while (i <= n && t[i] ~ /^--/) i++ - base = t[i]; alias = "" - if (i + 2 <= n && toupper(t[i + 1]) == "AS") alias = t[i + 2] + base = tolower(t[i]); alias = "" + 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 envof) { 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 varof) { split(k, p, SUBSEP); if (p[1] == base) inh[p[2]] = 1 } + for (k in inh) { scope[k] = 1; varof[stage, k] = 1 } 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 while (match(s, /\$\{?[A-Za-z_][A-Za-z0-9_]*/)) { v = substr(s, RSTART, RLENGTH); sub(/^\$\{?/, "", v) @@ -209,7 +211,7 @@ jobs: 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() { 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, " ") 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) if (line ~ /^[ \t]*#/) next # commenti, anche dentro una continuazione