Skip to content

Commit 0364c1b

Browse files
authored
Merge branch 'main' into ci/swap-buildjet-setup-node
2 parents b1d9a0b + 30bd567 commit 0364c1b

5 files changed

Lines changed: 130 additions & 31 deletions

File tree

.github/VOUCHED.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ samejr
1313
isshaddad
1414
# Bots
1515
devin-ai-integration[bot]
16+
dependabot[bot]
1617
# Outside contributors
1718
gautamsi
1819
capaj

.github/workflows/vouch-check-pr.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ jobs:
2828
github.event.pull_request.author_association != 'MEMBER' &&
2929
github.event.pull_request.author_association != 'OWNER' &&
3030
github.event.pull_request.author_association != 'COLLABORATOR' &&
31-
github.event.pull_request.user.login != 'devin-ai-integration[bot]'
31+
github.event.pull_request.user.login != 'devin-ai-integration[bot]' &&
32+
github.event.pull_request.user.login != 'dependabot[bot]'
3233
runs-on: ubuntu-latest
3334
steps:
3435
- name: Close non-draft PR
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
area: webapp
3+
type: fix
4+
---
5+
6+
Sync declarative schedules when rolling back or promoting deployments

apps/webapp/app/v3/services/changeCurrentDeployment.server.ts

Lines changed: 58 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { tryCatch } from "@trigger.dev/core/v3";
1+
import { BackgroundWorkerMetadata, tryCatch } from "@trigger.dev/core/v3";
22
import { CURRENT_DEPLOYMENT_LABEL } from "@trigger.dev/core/v3/isomorphic";
33
import { WorkerDeployment } from "@trigger.dev/database";
44
import { logger } from "~/services/logger.server";
55
import { syncTaskIdentifiers } from "~/services/taskIdentifierRegistry.server";
66
import { BaseService, ServiceValidationError } from "./baseService.server";
7+
import { syncDeclarativeSchedules } from "./createBackgroundWorker.server";
78
import { ExecuteTasksWaitingForDeployService } from "./executeTasksWaitingForDeploy";
89
import { compareDeploymentVersions } from "../utils/deploymentVersions";
910

@@ -53,10 +54,8 @@ export class ChangeCurrentDeploymentService extends BaseService {
5354
switch (direction) {
5455
case "promote": {
5556
if (
56-
compareDeploymentVersions(
57-
currentPromotion.deployment.version,
58-
deployment.version
59-
) >= 0
57+
compareDeploymentVersions(currentPromotion.deployment.version, deployment.version) >=
58+
0
6059
) {
6160
throw new ServiceValidationError(
6261
"Cannot promote a deployment that is older than the current deployment."
@@ -66,10 +65,8 @@ export class ChangeCurrentDeploymentService extends BaseService {
6665
}
6766
case "rollback": {
6867
if (
69-
compareDeploymentVersions(
70-
currentPromotion.deployment.version,
71-
deployment.version
72-
) <= 0
68+
compareDeploymentVersions(currentPromotion.deployment.version, deployment.version) <=
69+
0
7370
) {
7471
throw new ServiceValidationError(
7572
"Cannot rollback to a deployment that is newer than the current deployment."
@@ -118,6 +115,58 @@ export class ChangeCurrentDeploymentService extends BaseService {
118115
logger.error("Error syncing task identifiers on deployment change", { error: syncError });
119116
}
120117

118+
const [scheduleSyncError] = await tryCatch(this.#syncSchedulesForDeployment(deployment));
119+
120+
if (scheduleSyncError) {
121+
logger.error("Error syncing declarative schedules on deployment change", {
122+
error: scheduleSyncError,
123+
});
124+
}
125+
121126
await ExecuteTasksWaitingForDeployService.enqueue(deployment.workerId);
122127
}
128+
129+
async #syncSchedulesForDeployment(deployment: WorkerDeployment) {
130+
const worker = await this._prisma.backgroundWorker.findFirst({
131+
where: { id: deployment.workerId! },
132+
});
133+
134+
if (!worker) {
135+
logger.error("Worker not found for deployment schedule sync", {
136+
deploymentId: deployment.id,
137+
workerId: deployment.workerId,
138+
});
139+
return;
140+
}
141+
142+
const parsed = BackgroundWorkerMetadata.safeParse(worker.metadata);
143+
144+
if (!parsed.success) {
145+
logger.error("Failed to parse worker metadata for schedule sync", {
146+
deploymentId: deployment.id,
147+
workerId: deployment.workerId,
148+
error: parsed.error,
149+
});
150+
return;
151+
}
152+
153+
const environment = await this._prisma.runtimeEnvironment.findFirst({
154+
where: { id: deployment.environmentId },
155+
include: {
156+
project: true,
157+
organization: true,
158+
orgMember: true,
159+
},
160+
});
161+
162+
if (!environment) {
163+
logger.error("Environment not found for deployment schedule sync", {
164+
deploymentId: deployment.id,
165+
environmentId: deployment.environmentId,
166+
});
167+
return;
168+
}
169+
170+
await syncDeclarativeSchedules(parsed.data.tasks, worker, environment, this._prisma);
171+
}
123172
}

0 commit comments

Comments
 (0)