fix(ci): dispatch the remaining pipelines by deploy target #692

Merged
k.renner merged 1 commits from woodpecker-deployment-dispatch-rest into master 2026-08-28 08:32:20 +00:00
Member

Rollout des security-scan-Pilots auf die übrigen dreizehn. Closes #582.

Die Umstellung

Jedes Workflow-Root-Gate der Form

- event: manual
  evaluate: 'PIPELINE == "x"'

wird zu

- event: deployment
  evaluate: 'CI_PIPELINE_DEPLOY_TARGET == "x"'

Der Target kommt aus den Pipeline-Metadaten statt aus der Manual-Run-Variablen-Map und erreicht damit den Workflow-Root-Filter, was PIPELINE unter 3.18 nicht tut.

Am Piloten belegt: Pipeline 7004 (Event deployment, Target security-scan) hat genau den security-scan-Workflow selektiert und keinen anderen.

Zwei Dateien mit Step-level-Gates mussten mit

Sonst wären daraus Pipelines geworden, die zwar laufen, aber ihre Aufgabe nicht erledigen können:

deploy-infrastructure — der Apply-Step gated auf TOFU_APPLY. Auf event: manual stehengelassen hätte er nie wieder gefeuert: die Pipeline hätte geplant und stillschweigend nie appliziert. TOFU_APPLY kommt jetzt über --param, was in derselben Nicht-Plugin-Umgebung landet, gegen die step-level when auswertet. Kein Step in .woodpecker/ benutzt settings:, also ist keiner ein Plugin — dieser Pfad trägt.

build-ci-images — acht Pro-Image-Steps gaten auf manual-oder-push, um zu entscheiden, ob neu gebaut wird. Alle acht folgen dem Root (9 Vorkommen insgesamt, verifiziert).

Cron-Gates unangetastet

Die matchten überall schon namentlich — außer bei security-scan, was der Pilot behoben hat.

Korrigierte Dokumentation

Unter anderem eine Behauptung in update-audit.yml, die anderen Pipelines würden auf „an injected PIPELINE var set at cron-create time in the UI" gaten. Crons können überhaupt keine Variablen tragen — repo cron add nimmt name, branch, schedule, enabled. Der Satz beschrieb einen Mechanismus, den es nie gab, und war dasselbe Missverständnis, das den täglichen Security-Scan still nicht laufen ließ.

Ebenfalls korrigiert: MIGRATION-namespace.md:308, ein aktives Verifikations-Runbook, dessen Trigger-Befehl sonst ins Leere gelaufen wäre.

Neue Bedienung

woodpecker-cli pipeline deploy k.renner/homelab <pipeline-nr> <target>
woodpecker-cli pipeline deploy k.renner/homelab <pipeline-nr> deploy-infrastructure -p TOFU_APPLY=true

Voraussetzung ist allow_deploy auf dem Repo — von dir gesetzt, sonst 403 aus server/api/pipeline.go:583.

Geprüft

woodpecker-cli lint .woodpecker/ — alle 17 Dateien valide. Die vier deploy-*-Dateien werfen eine Warnung wegen timeout: 30 auf Root-Ebene; die ist vorbestehend und bleibt unangetastet.

Was ich nicht getestet habe

Nur security-scan ist real getriggert. Die anderen dreizehn sind eine mechanische, gleichförmige Ersetzung desselben Musters — aber getriggert habe ich sie nicht, und bei deploy-infrastructure würde ich den ersten Lauf bewusst mit Plan-only machen, bevor jemand -p TOFU_APPLY=true dranhängt.

Closes #582

Rollout des security-scan-Pilots auf die übrigen dreizehn. Closes #582. ## Die Umstellung Jedes Workflow-Root-Gate der Form ```yaml - event: manual evaluate: 'PIPELINE == "x"' ``` wird zu ```yaml - event: deployment evaluate: 'CI_PIPELINE_DEPLOY_TARGET == "x"' ``` Der Target kommt aus den Pipeline-Metadaten statt aus der Manual-Run-Variablen-Map und erreicht damit den Workflow-Root-Filter, was `PIPELINE` unter 3.18 nicht tut. **Am Piloten belegt:** Pipeline 7004 (Event `deployment`, Target `security-scan`) hat genau den `security-scan`-Workflow selektiert und keinen anderen. ## Zwei Dateien mit Step-level-Gates mussten mit Sonst wären daraus Pipelines geworden, die zwar laufen, aber ihre Aufgabe nicht erledigen können: **`deploy-infrastructure`** — der Apply-Step gated auf `TOFU_APPLY`. Auf `event: manual` stehengelassen hätte er nie wieder gefeuert: die Pipeline hätte geplant und stillschweigend nie appliziert. `TOFU_APPLY` kommt jetzt über `--param`, was in derselben Nicht-Plugin-Umgebung landet, gegen die step-level `when` auswertet. Kein Step in `.woodpecker/` benutzt `settings:`, also ist keiner ein Plugin — dieser Pfad trägt. **`build-ci-images`** — acht Pro-Image-Steps gaten auf manual-oder-push, um zu entscheiden, ob neu gebaut wird. Alle acht folgen dem Root (9 Vorkommen insgesamt, verifiziert). ## Cron-Gates unangetastet Die matchten überall schon namentlich — außer bei `security-scan`, was der Pilot behoben hat. ## Korrigierte Dokumentation Unter anderem eine Behauptung in `update-audit.yml`, die anderen Pipelines würden auf „an injected `PIPELINE` var set at cron-create time in the UI" gaten. **Crons können überhaupt keine Variablen tragen** — `repo cron add` nimmt name, branch, schedule, enabled. Der Satz beschrieb einen Mechanismus, den es nie gab, und war dasselbe Missverständnis, das den täglichen Security-Scan still nicht laufen ließ. Ebenfalls korrigiert: `MIGRATION-namespace.md:308`, ein aktives Verifikations-Runbook, dessen Trigger-Befehl sonst ins Leere gelaufen wäre. ## Neue Bedienung ``` woodpecker-cli pipeline deploy k.renner/homelab <pipeline-nr> <target> woodpecker-cli pipeline deploy k.renner/homelab <pipeline-nr> deploy-infrastructure -p TOFU_APPLY=true ``` Voraussetzung ist `allow_deploy` auf dem Repo — von dir gesetzt, sonst 403 aus `server/api/pipeline.go:583`. ## Geprüft `woodpecker-cli lint .woodpecker/` — alle 17 Dateien valide. Die vier `deploy-*`-Dateien werfen eine Warnung wegen `timeout: 30` auf Root-Ebene; die ist vorbestehend und bleibt unangetastet. ## Was ich nicht getestet habe Nur `security-scan` ist real getriggert. Die anderen dreizehn sind eine mechanische, gleichförmige Ersetzung desselben Musters — aber getriggert habe ich sie nicht, und bei `deploy-infrastructure` würde ich den ersten Lauf bewusst mit Plan-only machen, bevor jemand `-p TOFU_APPLY=true` dranhängt. Closes #582
claude-bot added 1 commit 2026-08-28 08:07:39 +00:00
fix(ci): dispatch the remaining pipelines by deploy target
ci/woodpecker/push/build-ci-images Pipeline was successful
ci/woodpecker/pr/ci-manifests-test Pipeline was successful
ci/woodpecker/pr/ci-scripts-test Pipeline was successful
ci/woodpecker/pr/pr-review Pipeline was successful
ce86f7dc7f
Rolls the security-scan pilot out to the other thirteen. Every workflow-root
gate of the form

    - event: manual
      evaluate: 'PIPELINE == "x"'

becomes

    - event: deployment
      evaluate: 'CI_PIPELINE_DEPLOY_TARGET == "x"'

The target rides in pipeline metadata rather than in the manual-run variable
map, so it reaches the workflow-root filter on Woodpecker 3.18 where PIPELINE
does not. Verified on the pilot: pipeline 7004 selected the security-scan
workflow and nothing else.

Two files also carry step-level manual gates, and those had to move with the
root or the pipelines would have converted into something that runs but cannot
do its job:

  deploy-infrastructure  the apply step gates on TOFU_APPLY. Left on
                         `event: manual` it would never fire again, so the
                         pipeline would plan and silently never apply.
                         TOFU_APPLY now arrives via `--param`, which lands in
                         the same non-plugin environment step-level `when`
                         evaluates against. No step here is a plugin — nothing
                         in .woodpecker uses `settings:` — so that path holds.

  build-ci-images        eight per-image steps gate on manual-or-push to decide
                         whether to rebuild. All eight follow the root.

Cron gates are untouched. They already matched by name everywhere except
security-scan, which the pilot fixed.

Also corrects the trigger documentation, including a claim in update-audit.yml
that the other pipelines gate on "an injected PIPELINE var set at cron-create
time in the UI". Crons cannot carry variables at all — `repo cron add` takes
name, branch, schedule and enabled. That sentence described a mechanism that
never existed and was the same misunderstanding that left the daily security
scan silently not running.

The `timeout: 30` lint warning on the four deploy-* files predates this and is
left alone.
review-bot left a comment
Member

🤖 Automated review — model CLI default (complexity: complex), commit ce86f7dc7f6e41b108585e282533a4545c2d4b72.

Advisory review by the review-bot pipeline. It never approves; a human merges. Push new commits to get a fresh review.


Summary

Mechanical rollout of the security-scan.yml pilot pattern (event: manual + PIPELINE == "x" → event: deployment + CI_PIPELINE_DEPLOY_TARGET == "x") to the remaining 13 pipeline files, plus two step-level gate fixups (deploy-infrastructure's Tofu apply step, build-ci-images's 8 per-image steps) and doc corrections. I read every changed .woodpecker/*.yml in the checkout and cross-checked against the already-converted security-scan.yml; the substitution is complete and consistent — no leftover event: manual or PIPELINE == references remain anywhere in .woodpecker/, and the per-file evaluate target string always matches the file's own pipeline name. No blocking issues found.

🟡 Suggestions

  • .woodpecker/deploy-infrastructure.yml:86-88 — the apply step's when (event: deployment + evaluate: 'TOFU_APPLY == "true"') relies on a --param passed to pipeline deploy reaching the same non-plugin step environment that evaluate reads against. The PR body itself flags this as the one part of the rollout that was not exercised live (only the security-scan root-gate dispatch was verified against a real pipeline run). This step guards tofu apply with real infra credentials, so treat the "verified" language in the description with appropriate caution and confirm with a plan-only run before anyone passes -p TOFU_APPLY=true — which the PR body already recommends. Worth calling out explicitly in the PR discussion so it isn't lost before merge.

Tests

No automated tests apply here (Woodpecker pipeline YAML + docs). The PR states woodpecker-cli lint .woodpecker/ passed on all 17 files with only a pre-existing, unrelated timeout: 30 warning on the four deploy-* files. I independently verified the substitution's completeness via grep (no stale event: manual/PIPELINE == left) and confirmed the build-ci-images.yml step count (9 occurrences: 1 root + 8 per-image steps) matches what the PR body claims. I could not execute woodpecker-cli lint or trigger a real deployment myself in this environment, so I'm relying on static review plus the author's stated verification — the plan-only first run recommended in the PR body for deploy-infrastructure is the right next validation step given the point above.

Recommendation

Looks reasonable — no blocking issues; the suggestion above (verify TOFU_APPLY step-level gate with a plan-only first run) is already acknowledged by the author and worth keeping visible before anyone runs the real deploy.

🤖 **Automated review** — model `CLI default` (complexity: complex), commit `ce86f7dc7f6e41b108585e282533a4545c2d4b72`. > Advisory review by the `review-bot` pipeline. It never approves; a human merges. Push new commits to get a fresh review. --- ## Summary Mechanical rollout of the `security-scan.yml` pilot pattern (`event: manual` + `PIPELINE == "x"` → `event: deployment` + `CI_PIPELINE_DEPLOY_TARGET == "x"`) to the remaining 13 pipeline files, plus two step-level gate fixups (`deploy-infrastructure`'s Tofu apply step, `build-ci-images`'s 8 per-image steps) and doc corrections. I read every changed `.woodpecker/*.yml` in the checkout and cross-checked against the already-converted `security-scan.yml`; the substitution is complete and consistent — no leftover `event: manual` or `PIPELINE ==` references remain anywhere in `.woodpecker/`, and the per-file `evaluate` target string always matches the file's own pipeline name. No blocking issues found. ## 🟡 Suggestions - `.woodpecker/deploy-infrastructure.yml:86-88` — the `apply` step's `when` (`event: deployment` + `evaluate: 'TOFU_APPLY == "true"'`) relies on a `--param` passed to `pipeline deploy` reaching the same non-plugin step environment that `evaluate` reads against. The PR body itself flags this as the one part of the rollout that was *not* exercised live (only the `security-scan` root-gate dispatch was verified against a real pipeline run). This step guards `tofu apply` with real infra credentials, so treat the "verified" language in the description with appropriate caution and confirm with a plan-only run before anyone passes `-p TOFU_APPLY=true` — which the PR body already recommends. Worth calling out explicitly in the PR discussion so it isn't lost before merge. ## Tests No automated tests apply here (Woodpecker pipeline YAML + docs). The PR states `woodpecker-cli lint .woodpecker/` passed on all 17 files with only a pre-existing, unrelated `timeout: 30` warning on the four `deploy-*` files. I independently verified the substitution's completeness via grep (no stale `event: manual`/`PIPELINE ==` left) and confirmed the `build-ci-images.yml` step count (9 occurrences: 1 root + 8 per-image steps) matches what the PR body claims. I could not execute `woodpecker-cli lint` or trigger a real deployment myself in this environment, so I'm relying on static review plus the author's stated verification — the plan-only first run recommended in the PR body for `deploy-infrastructure` is the right next validation step given the point above. ## Recommendation Looks reasonable — no blocking issues; the suggestion above (verify `TOFU_APPLY` step-level gate with a plan-only first run) is already acknowledged by the author and worth keeping visible before anyone runs the real deploy. <!-- pr-review:sha=ce86f7dc7f6e41b108585e282533a4545c2d4b72 -->
k.renner merged commit fbf41d27cd into master 2026-08-28 08:32:20 +00:00
Sign in to join this conversation.