Skip to content

Commit 43bcd08

Browse files
committed
fix(webapp): resolve effective default region in workers API + compute templates
Two callers still read the project-level default directly, which the UI no longer updates. Use resolveEffectiveDefaultWorkerGroupId (env -> project -> global) in: - api.v1.workers isDefault flag - computeTemplateCreation.resolveMode (MICROVM template decision)
1 parent 1d8807c commit 43bcd08

2 files changed

Lines changed: 41 additions & 9 deletions

File tree

apps/webapp/app/routes/api.v1.workers.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@ import {
44
WorkersCreateResponseBody,
55
WorkersListResponseBody,
66
} from "@trigger.dev/core/v3";
7+
import { $replica } from "~/db.server";
78
import {
89
createActionApiRoute,
910
createLoaderApiRoute,
1011
} from "~/services/routeBuilders/apiBuilder.server";
12+
import { FEATURE_FLAG } from "~/v3/featureFlags";
13+
import { makeFlag } from "~/v3/featureFlags.server";
14+
import { resolveEffectiveDefaultWorkerGroupId } from "~/v3/regionAccess.server";
1115
import { WorkerGroupService } from "~/v3/services/worker/workerGroupService.server";
1216

1317
export const loader = createLoaderApiRoute(
@@ -27,12 +31,23 @@ export const loader = createLoaderApiRoute(
2731
projectId: authentication.environment.projectId,
2832
});
2933

34+
const globalDefaultWorkerGroupId = await makeFlag($replica)({
35+
key: FEATURE_FLAG.defaultWorkerInstanceGroupId,
36+
});
37+
38+
// env default -> project default -> global default
39+
const effectiveDefaultWorkerGroupId = resolveEffectiveDefaultWorkerGroupId({
40+
environmentDefaultWorkerGroupId: authentication.environment.defaultWorkerGroupId,
41+
projectDefaultWorkerGroupId: authentication.environment.project.defaultWorkerGroupId,
42+
globalDefaultWorkerGroupId,
43+
});
44+
3045
return json(
3146
workers.map((w) => ({
3247
type: w.type,
3348
name: w.name,
3449
description: w.description,
35-
isDefault: w.id === authentication.environment.project.defaultWorkerGroupId,
50+
isDefault: w.id === effectiveDefaultWorkerGroupId,
3651
updatedAt: w.updatedAt,
3752
}))
3853
);

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import type { PrismaClientOrTransaction } from "~/db.server";
88
import type { AuthenticatedEnvironment } from "~/services/apiAuth.server";
99
import { ServiceValidationError } from "./baseService.server";
1010
import { FailDeploymentService } from "./failDeployment.server";
11-
import { resolveComputeAccess } from "../regionAccess.server";
11+
import { resolveComputeAccess, resolveEffectiveDefaultWorkerGroupId } from "../regionAccess.server";
12+
import { FEATURE_FLAG } from "../featureFlags";
13+
import { makeFlag } from "../featureFlags.server";
1214

1315
type TemplateCreationMode = "required" | "shadow" | "skip";
1416

@@ -56,7 +58,7 @@ export class ComputeTemplateCreationService {
5658
prisma: PrismaClientOrTransaction;
5759
writer?: WritableStreamDefaultWriter;
5860
}): Promise<void> {
59-
const mode = await this.resolveMode(options.projectId, options.prisma);
61+
const mode = await this.resolveMode(options.authenticatedEnv, options.prisma);
6062

6163
if (mode === "skip") {
6264
return;
@@ -134,19 +136,17 @@ export class ComputeTemplateCreationService {
134136
}
135137

136138
async resolveMode(
137-
projectId: string,
139+
authenticatedEnv: AuthenticatedEnvironment,
138140
prisma: PrismaClientOrTransaction
139141
): Promise<TemplateCreationMode> {
140142
if (!this.client) {
141143
return "skip";
142144
}
143145

144146
const project = await prisma.project.findFirst({
145-
where: { id: projectId },
147+
where: { id: authenticatedEnv.projectId },
146148
select: {
147-
defaultWorkerGroup: {
148-
select: { workloadType: true },
149-
},
149+
defaultWorkerGroupId: true,
150150
organization: {
151151
select: { featureFlags: true },
152152
},
@@ -157,7 +157,24 @@ export class ComputeTemplateCreationService {
157157
return "skip";
158158
}
159159

160-
if (project.defaultWorkerGroup?.workloadType === "MICROVM") {
160+
// Resolve the region this env actually deploys to: env default -> project default -> global default.
161+
const globalDefaultWorkerGroupId = await makeFlag(prisma)({
162+
key: FEATURE_FLAG.defaultWorkerInstanceGroupId,
163+
});
164+
const effectiveDefaultWorkerGroupId = resolveEffectiveDefaultWorkerGroupId({
165+
environmentDefaultWorkerGroupId: authenticatedEnv.defaultWorkerGroupId,
166+
projectDefaultWorkerGroupId: project.defaultWorkerGroupId,
167+
globalDefaultWorkerGroupId,
168+
});
169+
170+
const defaultWorkerGroup = effectiveDefaultWorkerGroupId
171+
? await prisma.workerInstanceGroup.findFirst({
172+
where: { id: effectiveDefaultWorkerGroupId },
173+
select: { workloadType: true },
174+
})
175+
: null;
176+
177+
if (defaultWorkerGroup?.workloadType === "MICROVM") {
161178
return "required";
162179
}
163180

0 commit comments

Comments
 (0)