ci: shard release validation reruns

This commit is contained in:
Peter Steinberger
2026-04-27 23:38:09 +01:00
parent d2320e4d4b
commit 39e3d8d31d
13 changed files with 295 additions and 58 deletions

View File

@@ -104,10 +104,25 @@ describe("scripts/lib/docker-e2e-plan", () => {
profile: RELEASE_PATH_PROFILE,
releaseChunk: "plugins-runtime-install-b",
});
const bundledChannels = planFor({
const bundledChannelsCore = planFor({
includeOpenWebUI: true,
profile: RELEASE_PATH_PROFILE,
releaseChunk: "bundled-channels",
releaseChunk: "bundled-channels-core",
});
const bundledChannelsUpdateA = planFor({
includeOpenWebUI: true,
profile: RELEASE_PATH_PROFILE,
releaseChunk: "bundled-channels-update-a",
});
const bundledChannelsUpdateB = planFor({
includeOpenWebUI: true,
profile: RELEASE_PATH_PROFILE,
releaseChunk: "bundled-channels-update-b",
});
const bundledChannelsContracts = planFor({
includeOpenWebUI: true,
profile: RELEASE_PATH_PROFILE,
releaseChunk: "bundled-channels-contracts",
});
expect(packageInstallOpenAi.lanes.map((lane) => lane.name)).toEqual(["install-e2e-openai"]);
@@ -142,15 +157,32 @@ describe("scripts/lib/docker-e2e-plan", () => {
"bundled-plugin-install-uninstall-6",
"bundled-plugin-install-uninstall-7",
]);
expect(bundledChannels.lanes.map((lane) => lane.name)).toEqual(
expect.arrayContaining([
"plugin-update",
"bundled-channel-telegram",
"bundled-channel-update-acpx",
]),
);
expect(bundledChannels.lanes.map((lane) => lane.name)).not.toContain("plugins");
expect(bundledChannels.lanes.map((lane) => lane.name)).not.toContain("openwebui");
expect(bundledChannelsCore.lanes.map((lane) => lane.name)).toEqual([
"plugin-update",
"bundled-channel-telegram",
"bundled-channel-discord",
"bundled-channel-slack",
"bundled-channel-feishu",
"bundled-channel-memory-lancedb",
]);
expect(bundledChannelsUpdateA.lanes.map((lane) => lane.name)).toEqual([
"bundled-channel-update-telegram",
"bundled-channel-update-discord",
"bundled-channel-update-memory-lancedb",
]);
expect(bundledChannelsUpdateB.lanes.map((lane) => lane.name)).toEqual([
"bundled-channel-update-slack",
"bundled-channel-update-feishu",
"bundled-channel-update-acpx",
]);
expect(bundledChannelsContracts.lanes.map((lane) => lane.name)).toEqual([
"bundled-channel-root-owned",
"bundled-channel-setup-entry",
"bundled-channel-load-failure",
"bundled-channel-disabled-config",
]);
expect(bundledChannelsCore.lanes.map((lane) => lane.name)).not.toContain("plugins");
expect(bundledChannelsUpdateA.lanes.map((lane) => lane.name)).not.toContain("openwebui");
});
it("keeps legacy release chunk names as aggregate aliases", () => {

View File

@@ -79,6 +79,10 @@ describe("package artifact reuse", () => {
expect(workflow).not.toContain("uses: ./.github/actions/docker-e2e-plan");
expect(workflow).toContain("node scripts/test-docker-all.mjs --plan-json");
expect(workflow).toContain("node scripts/docker-e2e.mjs github-outputs");
expect(workflow).toContain("plan_docker_lane_groups:");
expect(workflow).toContain("Docker E2E targeted lanes (${{ matrix.group.label }})");
expect(workflow).toContain("DOCKER_E2E_LANES: ${{ matrix.group.docker_lanes }}");
expect(workflow).toContain("name: docker-e2e-${{ steps.plan.outputs.artifact_suffix }}");
});
it("uses Blacksmith Docker build caching for prepared E2E images", () => {
@@ -126,7 +130,7 @@ describe("package artifact reuse", () => {
expect(workflow).toContain("package_acceptance_release_checks:");
expect(workflow).toContain(
"live_and_e2e_release_checks:\n needs: [resolve_target]\n permissions:\n actions: read",
'live_and_e2e_release_checks:\n needs: [resolve_target]\n if: contains(fromJSON(\'["all","live-e2e"]\'), needs.resolve_target.outputs.rerun_group)',
);
expect(workflow).toContain("uses: ./.github/workflows/package-acceptance.yml");
expect(workflow).toContain("package_ref: ${{ needs.resolve_target.outputs.ref }}");
@@ -141,6 +145,9 @@ describe("package artifact reuse", () => {
expect(workflow).toContain(
"OPENCLAW_QA_CONVEX_SECRET_CI: ${{ secrets.OPENCLAW_QA_CONVEX_SECRET_CI }}",
);
expect(workflow).toContain("rerun_group:");
expect(workflow).toContain("- live-e2e");
expect(workflow).toContain("- qa-live");
});
it("detects Matrix fail-fast support for older release refs", () => {
@@ -177,6 +184,9 @@ describe("package artifact reuse", () => {
'gh workflow run npm-telegram-beta-e2e.yml --ref "$CHILD_WORKFLOW_REF" "${args[@]}"',
);
expect(workflow).toContain('-f harness_ref="$TARGET_SHA"');
expect(workflow).toContain("child_rerun_group=all");
expect(workflow).toContain('-f rerun_group="$child_rerun_group"');
expect(workflow).toContain("NORMAL_CI_RESULT: ${{ needs.normal_ci.result }}");
expect(workflow).not.toContain("workflow_ref:");
expect(workflow).not.toContain("inputs.workflow_ref");
});