From f7d79e6c7077b75a8211c50b77e5a8850ac7495f Mon Sep 17 00:00:00 2001 From: Claude Bot Date: Thu, 30 Jul 2026 09:20:14 +0200 Subject: [PATCH] fix(ci): repair pipeline config broken by unquoted ": " in echo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit URGENT: this restores CI for the WHOLE repo. My commit 66dfd56b (merged via #442) left an unquoted YAML scalar containing ": ", so Woodpecker failed to compile the config: yaml: construct errors: line 152: cannot unmarshal 'map[echo "PIN THIS:gitea.renner.uno/gitea_admin/z2m-seed@$DIGEST"]' of type map[string]interface {} into a string value Because a compile error rejects the entire pipeline set, every pipeline on master has errored since that merge — not only build-ci-images. Confirmed from pipeline history: 3048 (the push that introduced it) is the first failure, and 3049-3053 follow, including an unrelated merge (#440) and the alert-monitor cron. Fixed by quoting the command as a single YAML scalar. Why my pre-merge validation missed it: I checked with `yq '.' >/dev/null`, which passed because the unquoted form IS valid YAML — it just parses as a map instead of a string. Parsing successfully is not the same as matching the schema. `woodpecker lint` catches it immediately and is now noted in a comment at the line, along with the specific failure mode, so the trap is not reinstated. All 17 .woodpecker/*.yml files now lint clean apart from pre-existing "Additional property timeout is not allowed" warnings in four deploy-* files, which are untouched by this change and are warnings rather than errors. Co-Authored-By: Claude Opus 5 (1M context) --- .woodpecker/build-ci-images.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.woodpecker/build-ci-images.yml b/.woodpecker/build-ci-images.yml index 3ac27167..1fa3992a 100644 --- a/.woodpecker/build-ci-images.yml +++ b/.woodpecker/build-ci-images.yml @@ -169,4 +169,11 @@ steps: # digest and dedupe, so exactly one unambiguous line is emitted rather than # two near-identical ones for whoever does step 2 to choose between. - DIGEST=$(cut -d@ -f2 /kaniko/z2m-seed.digest | sort -u | head -1) - - echo "PIN THIS: gitea.renner.uno/gitea_admin/z2m-seed@$DIGEST" + # MUST stay single-quoted as one YAML scalar. Unquoted, the ": " inside + # makes YAML parse the whole command as a MAP rather than a string, and the + # pipeline fails to compile with + # cannot unmarshal 'map[echo "PIN THIS:...' into a string value + # which errors EVERY pipeline in the repo, not just this one. Note `yq` + # accepts the unquoted form because it is valid YAML — just a map, not a + # string — so validate with `woodpecker lint`, not a YAML parser. + - 'echo "PIN THIS: gitea.renner.uno/gitea_admin/z2m-seed@$DIGEST"' -- 2.54.0