From b978832991a7ded95c92a50e2113229eac0553e1 Mon Sep 17 00:00:00 2001 From: Jack Cheng Date: Fri, 13 Mar 2026 16:50:41 -0700 Subject: [PATCH 1/2] feat(webapp): allow version downgrades via promote API --- ....deployments.$deploymentVersion.promote.ts | 5 +- .../changeCurrentDeployment.server.ts | 50 ++++++++++++------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/apps/webapp/app/routes/api.v1.deployments.$deploymentVersion.promote.ts b/apps/webapp/app/routes/api.v1.deployments.$deploymentVersion.promote.ts index 24f8e74a5ed..893b260dc82 100644 --- a/apps/webapp/app/routes/api.v1.deployments.$deploymentVersion.promote.ts +++ b/apps/webapp/app/routes/api.v1.deployments.$deploymentVersion.promote.ts @@ -32,6 +32,9 @@ export async function action({ request, params }: ActionFunctionArgs) { const authenticatedEnv = authenticationResult.environment; + const url = new URL(request.url); + const allowRollbacks = url.searchParams.get("allowRollbacks") === "true"; + const { deploymentVersion } = parsedParams.data; const deployment = await prisma.workerDeployment.findFirst({ @@ -47,7 +50,7 @@ export async function action({ request, params }: ActionFunctionArgs) { try { const service = new ChangeCurrentDeploymentService(); - await service.call(deployment, "promote"); + await service.call(deployment, "promote", allowRollbacks); return json( { diff --git a/apps/webapp/app/v3/services/changeCurrentDeployment.server.ts b/apps/webapp/app/v3/services/changeCurrentDeployment.server.ts index bc0dd04eaa5..00360df946c 100644 --- a/apps/webapp/app/v3/services/changeCurrentDeployment.server.ts +++ b/apps/webapp/app/v3/services/changeCurrentDeployment.server.ts @@ -7,7 +7,11 @@ import { CURRENT_DEPLOYMENT_LABEL } from "@trigger.dev/core/v3/isomorphic"; export type ChangeCurrentDeploymentDirection = "promote" | "rollback"; export class ChangeCurrentDeploymentService extends BaseService { - public async call(deployment: WorkerDeployment, direction: ChangeCurrentDeploymentDirection) { + public async call( + deployment: WorkerDeployment, + direction: ChangeCurrentDeploymentDirection, + disableVersionCheck?: boolean + ) { if (!deployment.workerId) { throw new ServiceValidationError( direction === "promote" @@ -42,26 +46,34 @@ export class ChangeCurrentDeploymentService extends BaseService { } // if there is a current promotion, we have to validate we are moving in the right direction based on the deployment versions - switch (direction) { - case "promote": { - if ( - compareDeploymentVersions(currentPromotion.deployment.version, deployment.version) >= 0 - ) { - throw new ServiceValidationError( - "Cannot promote a deployment that is older than the current deployment." - ); + if (!disableVersionCheck) { + switch (direction) { + case "promote": { + if ( + compareDeploymentVersions( + currentPromotion.deployment.version, + deployment.version + ) >= 0 + ) { + throw new ServiceValidationError( + "Cannot promote a deployment that is older than the current deployment." + ); + } + break; } - break; - } - case "rollback": { - if ( - compareDeploymentVersions(currentPromotion.deployment.version, deployment.version) <= 0 - ) { - throw new ServiceValidationError( - "Cannot rollback to a deployment that is newer than the current deployment." - ); + case "rollback": { + if ( + compareDeploymentVersions( + currentPromotion.deployment.version, + deployment.version + ) <= 0 + ) { + throw new ServiceValidationError( + "Cannot rollback to a deployment that is newer than the current deployment." + ); + } + break; } - break; } } } From b3fc567eeb7e2cd7d1e2c5a3b825b13177871273 Mon Sep 17 00:00:00 2001 From: Jack Cheng Date: Fri, 13 Mar 2026 16:58:35 -0700 Subject: [PATCH 2/2] Add .server-changes update --- .server-changes/allow-rollbacks-promote-api.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .server-changes/allow-rollbacks-promote-api.md diff --git a/.server-changes/allow-rollbacks-promote-api.md b/.server-changes/allow-rollbacks-promote-api.md new file mode 100644 index 00000000000..fc03fa114ff --- /dev/null +++ b/.server-changes/allow-rollbacks-promote-api.md @@ -0,0 +1,6 @@ +--- +area: webapp +type: feature +--- + +Add allowRollbacks query param to the promote deployment API to enable version downgrades