From a944d75ece079f6855763644f019ed3c7d9d7f79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Weberru=C3=9F?= Date: Wed, 21 Oct 2026 07:22:30 +0000 Subject: [PATCH] fix(configurator): allow room for runner droplet staging Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../app/tests/plan-routes.test.ts | 1 + .../deploy/cloud-foundry/README.de.md | 7 +++++-- .../deploy/cloud-foundry/README.md | 7 +++++-- .../deploy/runner/README.de.md | 3 +++ landing-zone-configurator/deploy/runner/README.md | 2 ++ .../deploy/runner/manifest.yml | 2 +- .../infra/ci/image-staging.test.mjs | 14 +++++--------- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/landing-zone-configurator/app/tests/plan-routes.test.ts b/landing-zone-configurator/app/tests/plan-routes.test.ts index 7ae9ce96..8ae44fd1 100644 --- a/landing-zone-configurator/app/tests/plan-routes.test.ts +++ b/landing-zone-configurator/app/tests/plan-routes.test.ts @@ -212,6 +212,7 @@ it.each(["platform", "application"] as const)( expect(JSON.stringify(body)).not.toContain("operator-"); expect(calls.some((c) => c.url.includes("routes"))).toBe(false); const task = JSON.parse(String(calls.at(-1)?.init?.body)); + expect(task).toMatchObject({ memory_in_mb: 1024, disk_in_mb: 4096 }); expect(task.command).toBe("./runtime/bin/node apps/worker/dist/main.js"); expect(task.command).not.toContain("job-ticket"); expect(calls.every((c) => c.init?.redirect === "error")).toBe(true); diff --git a/landing-zone-configurator/deploy/cloud-foundry/README.de.md b/landing-zone-configurator/deploy/cloud-foundry/README.de.md index a6a82def..a2365dc8 100644 --- a/landing-zone-configurator/deploy/cloud-foundry/README.de.md +++ b/landing-zone-configurator/deploy/cloud-foundry/README.de.md @@ -132,8 +132,11 @@ Dies vermeidet den beobachteten CF-API-Uploadfehler: HTTP 502 nach 900 Sekunden zu teilen oder ein konfiguriertes höheres Uploadlimit zu behaupten. Die Web-/API-App verwendet 6144 MiB Festplatte: Ihre zusätzliche Inspektionskopie erschöpfte bei der Droplet-Komprimierung die vorherigen 4096 MiB Staging-Festplatte selbst nach Entfernung -des redundanten Image-Caches. Runner-Template und isolierte Job-/Task-Budgets bleiben bei -4096 MiB; das gemessene native Runner-Runtime-Budget bleibt unverändert. +des redundanten Image-Caches. Auch das Runner-Template mit null Instanzen verwendet +6144 MiB: Sein 4096-MiB-Staging-Dateisystem lief bei der gzip-Droplet-Komprimierung voll. +Dies ist Staging-Kapazität; isolierte Jobs, Validierungstasks und warme Runner-Prozesse +behalten ausdrücklich ihr 4096-MiB-Laufzeitbudget. Das Template betreibt keine dauerhaften +Instanzen; das gemessene native Laufzeitbudget bleibt unverändert. Scheitert Runner-Staging, meldet der Release zusätzlich Status und Fehler des neuesten V3-Builds sowie aktuelle Runner-Logs, weiterhin auf den isolierten Runner-Space begrenzt. Runner- und Web-/API-Diagnosen lesen beide das mit dem fehlgeschlagenen Build verknüpfte Droplet, diff --git a/landing-zone-configurator/deploy/cloud-foundry/README.md b/landing-zone-configurator/deploy/cloud-foundry/README.md index 7aa73f31..25044b30 100644 --- a/landing-zone-configurator/deploy/cloud-foundry/README.md +++ b/landing-zone-configurator/deploy/cloud-foundry/README.md @@ -123,8 +123,11 @@ This avoids the observed CF API upload failure: HTTP 502 after 900 seconds at files or claiming that a larger upload limit was configured. The Web/API app uses 6144 MiB of disk: its additional inspection copy exhausted the former 4096-MiB staging disk during droplet compression even after removing -the redundant image cache. Runner template and isolated job/task budgets remain -4096 MiB; the measured native Runner runtime budget is unchanged. +the redundant image cache. The zero-instance Runner template also uses 6144 MiB: +its 4096-MiB staging filesystem exhausted disk during gzip droplet compression. +This is staging capacity; isolated jobs, validation tasks and warm Runner +processes explicitly retain their 4096-MiB runtime disk budget. The template +runs no permanent instances, and the measured native runtime budget is unchanged. If Runner staging fails, the release also reports the latest V3 build's state and error and recent Runner logs while still targeting the isolated Runner space. Both Runner and Web/API diagnostics read the droplet linked to that failed build, diff --git a/landing-zone-configurator/deploy/runner/README.de.md b/landing-zone-configurator/deploy/runner/README.de.md index df10941b..b61ff61b 100644 --- a/landing-zone-configurator/deploy/runner/README.de.md +++ b/landing-zone-configurator/deploy/runner/README.de.md @@ -22,6 +22,9 @@ gepinnt, dies ist kein Signaturnachweis dieses Providers. `package.sh` baut ein separates Binary-Paket mit Node, OpenTofu und Provider-Mirror; `manifest.yml` staged ein task-only CF-Template ohne Bindings. +Das Template mit null Instanzen verwendet 6144 MiB Festplatte für Staging und +Droplet-Komprimierung. Tasks pro Auftrag und warme Prozesse behalten ihr explizites +4096-MiB-Laufzeitlimit. Der finale Image-Buildpack wird über `LZC_IMAGE_BUILDPACK` auf den freigegebenen Release-Commit gepinnt; die geschützte Pipeline liefert die Runner-Variablendatei. Hosted-Archive enthalten die qualifizierte Image-SHA statt der großen QCOW2-Datei. diff --git a/landing-zone-configurator/deploy/runner/README.md b/landing-zone-configurator/deploy/runner/README.md index 31adeeba..0316fee1 100644 --- a/landing-zone-configurator/deploy/runner/README.md +++ b/landing-zone-configurator/deploy/runner/README.md @@ -22,6 +22,8 @@ checksums are pinned, but this is not proof of that provider's signature. `package.sh` builds a separate binary package with Node, OpenTofu and a provider mirror; `manifest.yml` stages a task-only CF template without bindings. +The zero-instance template uses 6144 MiB disk for staging and droplet compression. +Per-job tasks and warm processes retain an explicit 4096-MiB runtime disk limit. The final image buildpack is pinned to the approved release commit through `LZC_IMAGE_BUILDPACK`; the protected pipeline supplies the Runner variables file. Hosted archives contain the qualified image SHA instead of the large QCOW2 file. diff --git a/landing-zone-configurator/deploy/runner/manifest.yml b/landing-zone-configurator/deploy/runner/manifest.yml index 66be05f2..78fb0ae2 100644 --- a/landing-zone-configurator/deploy/runner/manifest.yml +++ b/landing-zone-configurator/deploy/runner/manifest.yml @@ -3,7 +3,7 @@ applications: - name: lzc-plan-template instances: 0 memory: 1024M - disk_quota: 4096M + disk_quota: 6144M stack: cflinuxfs4 buildpacks: [((LZC_IMAGE_BUILDPACK))] no-route: true diff --git a/landing-zone-configurator/infra/ci/image-staging.test.mjs b/landing-zone-configurator/infra/ci/image-staging.test.mjs index 03cc6b4c..a9923245 100644 --- a/landing-zone-configurator/infra/ci/image-staging.test.mjs +++ b/landing-zone-configurator/infra/ci/image-staging.test.mjs @@ -267,16 +267,12 @@ test("release pins the final buildpack to the approved source and excludes image ), /disk_quota: 6144M/, ); - assert.match( - await readFile( - resolve( - repository, - "landing-zone-configurator/deploy/runner/manifest.yml", - ), - "utf8", - ), - /disk_quota: 4096M/, + const runnerManifest = await readFile( + resolve(repository, "landing-zone-configurator/deploy/runner/manifest.yml"), + "utf8", ); + assert.match(runnerManifest, /disk_quota: 6144M/); + assert.match(runnerManifest, /instances: 0/); assert.ok( workflow.includes("if: failure() && steps.push.outcome == 'failure'"), );