mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-11 14:40:58 +00:00
refactor(producer): share plan execution builder (#2906)
## What Refactor distributed planning around one shared local execution-plan builder: - `buildLocalExecutionPlan()` now owns compile/probe/extract/audio/freeze. - Legacy `plan()` remains a deprecated v1 transport wrapper. - Plan v2 calls the shared builder directly and publishes through the existing manifest/CAS contract. - Add neutral `createPlanV2FromExecutionPlan()`, `publishPlanV2FromExecutionPlan()`, `getPlanV2ExecutionPlanHash()`, and `PLAN_PROTOCOL_V1` names. - Retain deprecated v1-named exports and wire aliases. - Recommend explicit Plan v2 opt-in for new producer, Lambda, and Cloud Run integrations. ## Why Plan v2 previously looked like it invoked a v1 planner even though v1 and v2 share the same frozen local execution representation. This removes that migration-era coupling while preserving the public minor-version compatibility contract. ## How The shared builder returns neutral internal execution-plan fields. The v1 wrapper maps those fields back to the existing `PlanResult`; the v2 publisher consumes them directly. Compatibility is intentional and covered by exact shape tests: - omitted `planProtocol` still serializes/selects `"v1"`; - v1 layouts, descriptor-less decoding, event unions, workflow branches, and exports remain; - the v1 descriptor JSON is byte-identical and `CURRENT_PLAN_PROTOCOL` is an identity-preserving alias; - v2 manifest bytes, key order, hash framing, and `sourcePlanV1Hash` wire key remain unchanged; - no enumerable neutral hash field was added to manifests or returned result objects; - v1/v2 result objects, cloud event payloads, and SDK handle key sets remain unchanged. ## Test plan - Focused Plan v1/v2/protocol/export/size compatibility: 141 passed - `@hyperframes/core`: 1,419 passed - `@hyperframes/producer` unit lane: 990 passed - `@hyperframes/aws-lambda`: 140 passed - `@hyperframes/gcp-cloud-run`: 101 passed - Producer, Lambda, and Cloud Run typechecks - Repository-wide lint, format check, workspace/package-subpath checks - Full workspace build - `git diff --check` - [x] Unit tests added/updated - [ ] Manual testing performed - [x] Documentation updated (if applicable)
This commit is contained in:
@@ -66,19 +66,30 @@ describe("renderToCloudRun", () => {
|
||||
);
|
||||
expect(handle.outputGcsUri).toBe("gs://b/renders/hf-render-fixed/output.mp4");
|
||||
expect(handle.projectGcsUri).toBe("gs://b/sites/abc/project.tar.gz");
|
||||
expect(Object.keys(handle)).toEqual([
|
||||
"renderId",
|
||||
"executionName",
|
||||
"bucketName",
|
||||
"workflowId",
|
||||
"outputGcsUri",
|
||||
"projectGcsUri",
|
||||
"startedAt",
|
||||
]);
|
||||
});
|
||||
|
||||
it("builds the workflow argument the YAML expects", async () => {
|
||||
const fake = new FakeExecutions();
|
||||
await renderToCloudRun(opts(fake));
|
||||
const arg = JSON.parse(fake.lastArgument ?? "{}");
|
||||
expect(arg.RenderId).toBe("hf-render-fixed");
|
||||
expect(arg.ProjectGcsUri).toBe("gs://b/sites/abc/project.tar.gz");
|
||||
expect(arg.PlanOutputGcsPrefix).toBe("gs://b/renders/hf-render-fixed/");
|
||||
expect(arg.OutputGcsUri).toBe("gs://b/renders/hf-render-fixed/output.mp4");
|
||||
expect(arg.ServiceUrl).toBe("https://render-abc.run.app");
|
||||
expect(arg.Config.format).toBe("mp4");
|
||||
expect(arg.PlanProtocol).toBe("v1");
|
||||
expect(arg).toEqual({
|
||||
RenderId: "hf-render-fixed",
|
||||
ProjectGcsUri: "gs://b/sites/abc/project.tar.gz",
|
||||
PlanOutputGcsPrefix: "gs://b/renders/hf-render-fixed/",
|
||||
OutputGcsUri: "gs://b/renders/hf-render-fixed/output.mp4",
|
||||
ServiceUrl: "https://render-abc.run.app",
|
||||
Config: config,
|
||||
PlanProtocol: "v1",
|
||||
});
|
||||
expect(fake.lastParent).toBe(
|
||||
"projects/proj/locations/us-central1/workflows/hyperframes-render",
|
||||
);
|
||||
@@ -88,7 +99,15 @@ describe("renderToCloudRun", () => {
|
||||
const fake = new FakeExecutions();
|
||||
await renderToCloudRun({ ...opts(fake), planProtocol: "v2" });
|
||||
const arg = JSON.parse(fake.lastArgument ?? "{}");
|
||||
expect(arg.PlanProtocol).toBe("v2");
|
||||
expect(arg).toEqual({
|
||||
RenderId: "hf-render-fixed",
|
||||
ProjectGcsUri: "gs://b/sites/abc/project.tar.gz",
|
||||
PlanOutputGcsPrefix: "gs://b/renders/hf-render-fixed/",
|
||||
OutputGcsUri: "gs://b/renders/hf-render-fixed/output.mp4",
|
||||
ServiceUrl: "https://render-abc.run.app",
|
||||
Config: config,
|
||||
PlanProtocol: "v2",
|
||||
});
|
||||
});
|
||||
|
||||
it("derives the output extension from the format", async () => {
|
||||
|
||||
Reference in New Issue
Block a user