From f61159e1a80b7bb3dac7108796ec06f752b76541 Mon Sep 17 00:00:00 2001 From: Saadi Myftija Date: Fri, 12 Dec 2025 09:20:16 +0100 Subject: [PATCH] Avoid breaking the `DequeuedMessage` schema --- apps/supervisor/src/index.ts | 10 ++++++++-- apps/supervisor/src/workloadManager/docker.ts | 2 +- apps/supervisor/src/workloadManager/kubernetes.ts | 2 +- apps/supervisor/src/workloadManager/types.ts | 2 +- .../run-engine/src/engine/systems/dequeueSystem.ts | 7 +++---- packages/core/src/v3/schemas/runEngine.ts | 5 ++--- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/apps/supervisor/src/index.ts b/apps/supervisor/src/index.ts index 7a4a93a96..0e274b303 100644 --- a/apps/supervisor/src/index.ts +++ b/apps/supervisor/src/index.ts @@ -244,6 +244,12 @@ class ManagedSupervisor { } try { + if (!message.deployment.friendlyId) { + // mostly a type guard, deployments always exists for deployed environments + // a proper fix would be to use a discriminated union schema to differentiate between dequeued runs in dev and in deployed environments. + throw new Error("Deployment is missing"); + } + await this.workloadManager.create({ dequeuedAt: message.dequeuedAt, envId: message.environment.id, @@ -252,8 +258,8 @@ class ManagedSupervisor { machine: message.run.machine, orgId: message.organization.id, projectId: message.project.id, - deploymentId: message.deployment.friendlyId, - deploymentVersion: message.deployment.version, + deploymentFriendlyId: message.deployment.friendlyId, + deploymentVersion: message.backgroundWorker.version, runId: message.run.id, runFriendlyId: message.run.friendlyId, version: message.version, diff --git a/apps/supervisor/src/workloadManager/docker.ts b/apps/supervisor/src/workloadManager/docker.ts index 666d7fdb1..d6651d325 100644 --- a/apps/supervisor/src/workloadManager/docker.ts +++ b/apps/supervisor/src/workloadManager/docker.ts @@ -72,7 +72,7 @@ export class DockerWorkloadManager implements WorkloadManager { `TRIGGER_DEQUEUED_AT_MS=${opts.dequeuedAt.getTime()}`, `TRIGGER_POD_SCHEDULED_AT_MS=${Date.now()}`, `TRIGGER_ENV_ID=${opts.envId}`, - `TRIGGER_DEPLOYMENT_ID=${opts.deploymentId}`, + `TRIGGER_DEPLOYMENT_ID=${opts.deploymentFriendlyId}`, `TRIGGER_DEPLOYMENT_VERSION=${opts.deploymentVersion}`, `TRIGGER_RUN_ID=${opts.runFriendlyId}`, `TRIGGER_SNAPSHOT_ID=${opts.snapshotFriendlyId}`, diff --git a/apps/supervisor/src/workloadManager/kubernetes.ts b/apps/supervisor/src/workloadManager/kubernetes.ts index 56854e623..96fbd7a27 100644 --- a/apps/supervisor/src/workloadManager/kubernetes.ts +++ b/apps/supervisor/src/workloadManager/kubernetes.ts @@ -125,7 +125,7 @@ export class KubernetesWorkloadManager implements WorkloadManager { }, { name: "TRIGGER_DEPLOYMENT_ID", - value: opts.deploymentId, + value: opts.deploymentFriendlyId, }, { name: "TRIGGER_DEPLOYMENT_VERSION", diff --git a/apps/supervisor/src/workloadManager/types.ts b/apps/supervisor/src/workloadManager/types.ts index e4350f164..90b619577 100644 --- a/apps/supervisor/src/workloadManager/types.ts +++ b/apps/supervisor/src/workloadManager/types.ts @@ -29,7 +29,7 @@ export interface WorkloadManagerCreateOptions { envType: EnvironmentType; orgId: string; projectId: string; - deploymentId: string; + deploymentFriendlyId: string; deploymentVersion: string; runId: string; runFriendlyId: string; diff --git a/internal-packages/run-engine/src/engine/systems/dequeueSystem.ts b/internal-packages/run-engine/src/engine/systems/dequeueSystem.ts index 45c821291..5a951a645 100644 --- a/internal-packages/run-engine/src/engine/systems/dequeueSystem.ts +++ b/internal-packages/run-engine/src/engine/systems/dequeueSystem.ts @@ -562,10 +562,9 @@ export class DequeueSystem { // TODO: use a discriminated union schema to differentiate between dequeued runs in dev and in deployed environments. // Would help make the typechecking stricter deployment: { - id: result.deployment?.id ?? "NO_DEPLOYMENT_DEV_ENV", - friendlyId: result.deployment?.friendlyId ?? "NO_DEPLOYMENT_DEV_ENV", - version: result.deployment?.version ?? "NO_DEPLOYMENT_DEV_ENV", - imagePlatform: result.deployment?.imagePlatform ?? "NO_DEPLOYMENT_DEV_ENV", + id: result.deployment?.id, + friendlyId: result.deployment?.friendlyId, + imagePlatform: result.deployment?.imagePlatform, }, run: { id: lockedTaskRun.id, diff --git a/packages/core/src/v3/schemas/runEngine.ts b/packages/core/src/v3/schemas/runEngine.ts index ece184d76..376a8522d 100644 --- a/packages/core/src/v3/schemas/runEngine.ts +++ b/packages/core/src/v3/schemas/runEngine.ts @@ -246,9 +246,8 @@ export const DequeuedMessage = z.object({ version: z.string(), }), deployment: z.object({ - id: z.string(), - friendlyId: z.string(), - version: z.string(), + id: z.string().optional(), + friendlyId: z.string().optional(), imagePlatform: z.string().optional(), }), run: z.object({