fix: report GitOps renderer rollout scope

This commit is contained in:
root
2026-07-21 11:10:20 +02:00
parent 72f595c7f1
commit b9415654cd
2 changed files with 48 additions and 9 deletions
+36 -2
View File
@@ -87,6 +87,35 @@ test("v03 planner keeps affected code rollouts out of catalog reuse", async () =
assert.equal(plan.artifactCatalog.serviceCount, 3);
});
test("v03 planner reports renderer changes as full rollout without image builds", async () => {
const selectedServices = ["hwlab-cloud-api", "hwlab-cloud-web", "hwlab-gateway"];
const repo = await createFixtureRepo({ serviceIds: selectedServices });
await mkdir(path.join(repo, "scripts/src/gitops-render"), { recursive: true });
await writeFile(path.join(repo, "scripts/src/gitops-render/runtime-manifests.mjs"), "export const renderer = 2;\n");
await git(repo, ["add", "scripts/src/gitops-render/runtime-manifests.mjs"]);
await git(repo, ["commit", "-m", "change runtime manifest renderer"]);
const plan = await createCiPlan({
repoRoot: repo,
lane: "v03",
baseRef: "HEAD~1",
targetRef: "HEAD",
artifactCatalogPath: "deploy/artifact-catalog.v03.json",
services: selectedServices
});
assert.equal(plan.changedPathSummary.gitopsOnly, true);
assert.deepEqual(plan.affectedServices, selectedServices);
assert.deepEqual(plan.rolloutServices, selectedServices);
assert.deepEqual(plan.buildServices, []);
assert.deepEqual(plan.rolloutWithoutImageBuildServices, selectedServices);
assert.deepEqual(plan.reusedServices, []);
assert.equal(plan.imageBuildRequired, false);
assert.equal(plan.services.every((service) => service.buildRequired === false), true);
assert.equal(plan.services.every((service) => service.reason.includes("gitops-render-input-changed")), true);
assert.equal(plan.ciCdPlan.noImageBuildReason, "gitops-render-only-change");
});
test("tracked PaC remote pipelines pass selected services to catalog restore", async () => {
const targets = [
{
@@ -390,7 +419,7 @@ test("artifact catalog restore rejects a non-bootstrap source catalog when GitOp
);
});
test("node CI planner rolls service runtime config changes without rebuilding image", async () => {
test("node CI planner reports runtime config rendering as full rollout without image builds", async () => {
const repo = await createFixtureRepo();
const deployPath = path.join(repo, "deploy/deploy.yaml");
const deploy = await readStructuredFile(repo, deployPath);
@@ -400,13 +429,18 @@ test("node CI planner rolls service runtime config changes without rebuilding im
await git(repo, ["commit", "-m", "change cloud api runtime env"]);
const plan = await planV02CoreServices(repo, { baseRef: "HEAD~1", targetRef: "HEAD" });
assert.deepEqual(plan.affectedServices, ["hwlab-cloud-api"]);
assert.deepEqual(plan.affectedServices, ["hwlab-cloud-api", "hwlab-cloud-web"]);
assert.deepEqual(plan.rolloutServices, ["hwlab-cloud-api", "hwlab-cloud-web"]);
assert.deepEqual(plan.buildServices, []);
assert.deepEqual(plan.rolloutWithoutImageBuildServices, ["hwlab-cloud-api", "hwlab-cloud-web"]);
assert.equal(plan.imageBuildRequired, false);
const cloudApi = plan.services.find((service) => service.serviceId === "hwlab-cloud-api");
const cloudWeb = plan.services.find((service) => service.serviceId === "hwlab-cloud-web");
assert.equal(cloudApi.runtimeConfigChanged, true);
assert.equal(cloudApi.envChanged, false);
assert.deepEqual(cloudApi.reason, ["runtime-config-changed"]);
assert.deepEqual(cloudWeb.reason, ["gitops-render-input-changed"]);
assert.equal(plan.ciCdPlan.noImageBuildReason, "gitops-render-only-change");
});
test("planner rebuilds when catalog digest is missing instead of blocking reuse", async () => {