Skip to content

Commit c0b442a

Browse files
committed
Add ability to globally configure the task machine preset
1 parent 8235238 commit c0b442a

File tree

9 files changed

+46
-12
lines changed

9 files changed

+46
-12
lines changed

apps/webapp/app/env.server.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,13 +193,14 @@ const EnvironmentSchema = z.object({
193193
USAGE_EVENT_URL: z.string().optional(),
194194
PROD_USAGE_HEARTBEAT_INTERVAL_MS: z.coerce.number().int().optional(),
195195

196-
CENTS_PER_HOUR_MICRO: z.coerce.number().positive().default(0),
197-
CENTS_PER_HOUR_SMALL_1X: z.coerce.number().positive().default(0),
198-
CENTS_PER_HOUR_SMALL_2X: z.coerce.number().positive().default(0),
199-
CENTS_PER_HOUR_MEDIUM_1X: z.coerce.number().positive().default(0),
200-
CENTS_PER_HOUR_MEDIUM_2X: z.coerce.number().positive().default(0),
201-
CENTS_PER_HOUR_LARGE_1X: z.coerce.number().positive().default(0),
202-
BASE_RUN_COST_IN_CENTS: z.coerce.number().positive().default(0),
196+
CENTS_PER_HOUR_MICRO: z.coerce.number().default(0),
197+
CENTS_PER_HOUR_SMALL_1X: z.coerce.number().default(0),
198+
CENTS_PER_HOUR_SMALL_2X: z.coerce.number().default(0),
199+
CENTS_PER_HOUR_MEDIUM_1X: z.coerce.number().default(0),
200+
CENTS_PER_HOUR_MEDIUM_2X: z.coerce.number().default(0),
201+
CENTS_PER_HOUR_LARGE_1X: z.coerce.number().default(0),
202+
CENTS_PER_HOUR_LARGE_2X: z.coerce.number().default(0),
203+
BASE_RUN_COST_IN_CENTS: z.coerce.number().default(0),
203204

204205
USAGE_OPEN_METER_API_KEY: z.string().optional(),
205206
USAGE_OPEN_METER_BASE_URL: z.string().optional(),

apps/webapp/app/v3/machinePresets.server.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ export const presets = {
3333
memory: 8,
3434
centsPerMs: env.CENTS_PER_HOUR_LARGE_1X / 3_600_000,
3535
},
36+
"large-2x": {
37+
cpu: 8,
38+
memory: 16,
39+
centsPerMs: env.CENTS_PER_HOUR_LARGE_2X / 3_600_000,
40+
},
3641
};
3742

3843
export function machinePresetFromConfig(config: unknown): MachinePreset {

apps/webapp/app/v3/marqs/sharedQueueConsumer.server.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,7 @@ export class SharedQueueConsumer {
413413
lockedToVersionId: deployment.worker.id,
414414
startedAt: existingTaskRun.startedAt ?? new Date(),
415415
baseCostInCents: env.BASE_RUN_COST_IN_CENTS,
416+
machinePreset: machinePresetFromConfig(backgroundTask.machineConfig ?? {}).name,
416417
},
417418
include: {
418419
runtimeEnvironment: true,

packages/cli-v3/src/workers/prod/worker-facade.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,27 @@ const prodRuntimeManager = new ProdRuntimeManager(zodIpc, {
223223

224224
runtime.setGlobalRuntimeManager(prodRuntimeManager);
225225

226-
const TASK_METADATA = taskCatalog.getAllTaskMetadata();
226+
let taskMetadata = taskCatalog.getAllTaskMetadata();
227+
228+
if (typeof importedConfig?.machine === "string") {
229+
// Set the machine preset on all tasks that don't have it
230+
taskMetadata = taskMetadata.map((task) => {
231+
if (typeof task.machine?.preset !== "string") {
232+
return {
233+
...task,
234+
machine: {
235+
preset: importedConfig.machine,
236+
},
237+
};
238+
}
239+
240+
return task;
241+
});
242+
}
227243

228-
zodIpc.send("TASKS_READY", { tasks: TASK_METADATA }).catch((err) => {
244+
zodIpc.send("TASKS_READY", { tasks: taskMetadata }).catch((err) => {
229245
if (err instanceof ZodSchemaParsedError) {
230-
zodIpc.send("TASKS_FAILED_TO_PARSE", { zodIssues: err.error.issues, tasks: TASK_METADATA });
246+
zodIpc.send("TASKS_FAILED_TO_PARSE", { zodIssues: err.error.issues, tasks: taskMetadata });
231247
} else {
232248
console.error("Failed to send TASKS_READY message", err);
233249
}

packages/core/src/v3/schemas/common.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export const MachinePresetName = z.enum([
3131
"medium-1x",
3232
"medium-2x",
3333
"large-1x",
34+
"large-2x",
3435
]);
3536

3637
export type MachinePresetName = z.infer<typeof MachinePresetName>;

packages/core/src/v3/types/config.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { FailureFnParams, InitFnParams, StartFnParams, SuccessFnParams } from ".";
22
import { LogLevel } from "../logger/taskLogger";
3-
import { RetryOptions } from "../schemas";
3+
import { MachinePresetName, RetryOptions } from "../schemas";
44
import type { InstrumentationOption } from "@opentelemetry/instrumentation";
55

66
export interface ProjectConfig {
@@ -13,6 +13,12 @@ export interface ProjectConfig {
1313
};
1414
additionalPackages?: string[];
1515

16+
/**
17+
* The default machine preset to use for your deployed trigger.dev tasks. You can override this on a per-task basis.
18+
* @default "small-1x"
19+
*/
20+
machine?: MachinePresetName;
21+
1622
/**
1723
* List of additional files to include in your trigger.dev bundle. e.g. ["./prisma/schema.prisma"]
1824
*
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- AlterTable
2+
ALTER TABLE "TaskRun" ADD COLUMN "machinePreset" TEXT;

packages/database/prisma/schema.prisma

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1644,7 +1644,8 @@ model TaskRun {
16441644
tags TaskTag[]
16451645
checkpoints Checkpoint[]
16461646
1647-
startedAt DateTime?
1647+
startedAt DateTime?
1648+
machinePreset String?
16481649
16491650
usageDurationMs Int @default(0)
16501651
costInCents Float @default(0)

references/v3-catalog/trigger.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export const resolveEnvVars: ResolveEnvironmentVariablesFunction = async ({
3434

3535
export const config: TriggerConfig = {
3636
project: "yubjwjsfkxnylobaqvqz",
37+
machine: "small-2x",
3738
retries: {
3839
enabledInDev: true,
3940
default: {

0 commit comments

Comments
 (0)