trigger.dev 3.0.0-beta.43 → 3.0.0-beta.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ import { ZodMessageSender } from "@trigger.dev/core/v3/zodMessageHandler";
8
8
  import "source-map-support/register.js";
9
9
 
10
10
  // package.json
11
- var version = "3.0.0-beta.43";
11
+ var version = "3.0.0-beta.45";
12
12
 
13
13
  // src/workers/dev/worker-setup.ts
14
14
  __SETUP_IMPORTED_PROJECT_CONFIG__;
@@ -3,7 +3,8 @@ import {
3
3
  CoordinatorToProdWorkerMessages,
4
4
  PostStartCauses,
5
5
  PreStopCauses,
6
- ProdWorkerToCoordinatorMessages
6
+ ProdWorkerToCoordinatorMessages,
7
+ TaskRunErrorCodes as TaskRunErrorCodes2
7
8
  } from "@trigger.dev/core/v3";
8
9
  import { ZodSocketConnection } from "@trigger.dev/core/v3/zodSocket";
9
10
 
@@ -65,6 +66,10 @@ var SimpleLogger = class {
65
66
  }
66
67
  };
67
68
 
69
+ // ../core-apps/src/process.ts
70
+ var EXIT_CODE_ALREADY_HANDLED = 111;
71
+ var EXIT_CODE_CHILD_NONZERO = 112;
72
+
68
73
  // src/workers/prod/entry-point.ts
69
74
  import { readFile } from "node:fs/promises";
70
75
  import { createServer } from "node:http";
@@ -99,9 +104,11 @@ var TaskMetadataParseError = class extends Error {
99
104
  }
100
105
  };
101
106
  var UnexpectedExitError = class extends Error {
102
- constructor(code) {
107
+ constructor(code, signal, stderr) {
103
108
  super(`Unexpected exit with code ${code}`);
104
109
  this.code = code;
110
+ this.signal = signal;
111
+ this.stderr = stderr;
105
112
  this.name = "UnexpectedExitError";
106
113
  }
107
114
  };
@@ -129,6 +136,32 @@ var GracefulExitTimeoutError = class extends Error {
129
136
  this.name = "GracefulExitTimeoutError";
130
137
  }
131
138
  };
139
+ function getFriendlyErrorMessage(code, signal, stderr, dockerMode = true) {
140
+ const message = (text) => {
141
+ if (signal) {
142
+ return `[${signal}] ${text}`;
143
+ } else {
144
+ return text;
145
+ }
146
+ };
147
+ if (code === 137) {
148
+ if (dockerMode) {
149
+ return message(
150
+ "Process ran out of memory! Try choosing a machine preset with more memory for this task."
151
+ );
152
+ } else {
153
+ return message(
154
+ "Process most likely ran out of memory, but we can't be certain. Try choosing a machine preset with more memory for this task."
155
+ );
156
+ }
157
+ }
158
+ if (stderr?.includes("OOMErrorHandler")) {
159
+ return message(
160
+ "Process ran out of memory! Try choosing a machine preset with more memory for this task."
161
+ );
162
+ }
163
+ return message(`Process exited with code ${code}.`);
164
+ }
132
165
 
133
166
  // src/workers/prod/backgroundWorker.ts
134
167
  var ProdBackgroundWorker = class {
@@ -455,7 +488,9 @@ var ProdBackgroundWorker = class {
455
488
  retry: void 0,
456
489
  error: {
457
490
  type: "INTERNAL_ERROR",
458
- code: TaskRunErrorCodes.TASK_PROCESS_EXITED_WITH_NON_ZERO_CODE
491
+ code: TaskRunErrorCodes.TASK_PROCESS_EXITED_WITH_NON_ZERO_CODE,
492
+ message: getFriendlyErrorMessage(e.code, e.signal, e.stderr),
493
+ stackTrace: e.stderr
459
494
  }
460
495
  };
461
496
  }
@@ -553,6 +588,7 @@ var TaskRunProcess = class {
553
588
  _isBeingKilled = false;
554
589
  _isBeingCancelled = false;
555
590
  _gracefulExitTimeoutElapsed = false;
591
+ _stderr = [];
556
592
  /**
557
593
  * @deprecated use onTaskRunHeartbeat instead
558
594
  */
@@ -760,7 +796,13 @@ var TaskRunProcess = class {
760
796
  } else if (this._isBeingKilled) {
761
797
  rejecter(new CleanupProcessError());
762
798
  } else {
763
- rejecter(new UnexpectedExitError(code ?? -1));
799
+ rejecter(
800
+ new UnexpectedExitError(
801
+ code ?? -1,
802
+ signal,
803
+ this._stderr.length ? this._stderr.join("\n") : void 0
804
+ )
805
+ );
764
806
  }
765
807
  }
766
808
  }
@@ -770,7 +812,12 @@ var TaskRunProcess = class {
770
812
  console.log(data.toString());
771
813
  }
772
814
  #handleStdErr(data) {
773
- console.error(data.toString());
815
+ const text = data.toString();
816
+ console.error(text);
817
+ if (this._stderr.length > 100) {
818
+ this._stderr.shift();
819
+ }
820
+ this._stderr.push(text);
774
821
  }
775
822
  async kill(signal, timeoutInMs) {
776
823
  this._isBeingKilled = true;
@@ -846,10 +893,10 @@ var ProdWorker = class {
846
893
  }
847
894
  logger.log("Unhandled signal", { signal });
848
895
  }
849
- async #exitGracefully(gracefulExitTimeoutElapsed = false) {
896
+ async #exitGracefully(gracefulExitTimeoutElapsed = false, exitCode = 0) {
850
897
  await this.#backgroundWorker.close(gracefulExitTimeoutElapsed);
851
898
  if (!gracefulExitTimeoutElapsed) {
852
- process.exit(0);
899
+ process.exit(exitCode);
853
900
  }
854
901
  }
855
902
  async #reconnect(isPostStart = false, reconnectImmediately = false) {
@@ -1012,13 +1059,13 @@ var ProdWorker = class {
1012
1059
  }
1013
1060
  }
1014
1061
  }
1015
- async #prepareForRetry(willCheckpointAndRestore, shouldExit) {
1062
+ async #prepareForRetry(willCheckpointAndRestore, shouldExit, exitCode) {
1016
1063
  logger.log("prepare for retry", { willCheckpointAndRestore, shouldExit });
1017
1064
  if (shouldExit) {
1018
1065
  if (willCheckpointAndRestore) {
1019
1066
  logger.log("WARNING: Will checkpoint but also requested exit. This won't end well.");
1020
1067
  }
1021
- await this.#exitGracefully();
1068
+ await this.#exitGracefully(false, exitCode);
1022
1069
  return;
1023
1070
  }
1024
1071
  this.paused = false;
@@ -1164,7 +1211,8 @@ var ProdWorker = class {
1164
1211
  completion
1165
1212
  });
1166
1213
  logger.log("completion acknowledged", { willCheckpointAndRestore, shouldExit });
1167
- this.#prepareForRetry(willCheckpointAndRestore, shouldExit);
1214
+ const exitCode = !completion.ok && completion.error.type === "INTERNAL_ERROR" && completion.error.code === TaskRunErrorCodes2.TASK_PROCESS_EXITED_WITH_NON_ZERO_CODE ? EXIT_CODE_CHILD_NONZERO : 0;
1215
+ this.#prepareForRetry(willCheckpointAndRestore, shouldExit, exitCode);
1168
1216
  } catch (error) {
1169
1217
  const completion = {
1170
1218
  ok: false,
@@ -1246,6 +1294,13 @@ var ProdWorker = class {
1246
1294
  return;
1247
1295
  }
1248
1296
  if (process.env.INDEX_TASKS === "true") {
1297
+ const failIndex = (error) => {
1298
+ socket.emit("INDEXING_FAILED", {
1299
+ version: "v1",
1300
+ deploymentId: this.deploymentId,
1301
+ error
1302
+ });
1303
+ };
1249
1304
  try {
1250
1305
  const taskResources = await this.#initializeWorker();
1251
1306
  const { success } = await socket.emitWithAck("INDEX_TASKS", {
@@ -1268,15 +1323,11 @@ var ProdWorker = class {
1268
1323
  zodIssues: e.zodIssues,
1269
1324
  tasks: e.tasks
1270
1325
  });
1271
- socket.emit("INDEXING_FAILED", {
1272
- version: "v1",
1273
- deploymentId: this.deploymentId,
1274
- error: {
1275
- name: "TaskMetadataParseError",
1276
- message: "There was an error parsing the task metadata",
1277
- stack: JSON.stringify({ zodIssues: e.zodIssues, tasks: e.tasks }),
1278
- stderr
1279
- }
1326
+ failIndex({
1327
+ name: "TaskMetadataParseError",
1328
+ message: "There was an error parsing the task metadata",
1329
+ stack: JSON.stringify({ zodIssues: e.zodIssues, tasks: e.tasks }),
1330
+ stderr
1280
1331
  });
1281
1332
  } else if (e instanceof UncaughtExceptionError) {
1282
1333
  const error = {
@@ -1286,11 +1337,7 @@ var ProdWorker = class {
1286
1337
  stderr
1287
1338
  };
1288
1339
  logger2.error("uncaught exception", { originalError: error });
1289
- socket.emit("INDEXING_FAILED", {
1290
- version: "v1",
1291
- deploymentId: this.deploymentId,
1292
- error
1293
- });
1340
+ failIndex(error);
1294
1341
  } else if (e instanceof Error) {
1295
1342
  const error = {
1296
1343
  name: e.name,
@@ -1299,36 +1346,24 @@ var ProdWorker = class {
1299
1346
  stderr
1300
1347
  };
1301
1348
  logger2.error("error", { error });
1302
- socket.emit("INDEXING_FAILED", {
1303
- version: "v1",
1304
- deploymentId: this.deploymentId,
1305
- error
1306
- });
1349
+ failIndex(error);
1307
1350
  } else if (typeof e === "string") {
1308
1351
  logger2.error("string error", { error: { message: e } });
1309
- socket.emit("INDEXING_FAILED", {
1310
- version: "v1",
1311
- deploymentId: this.deploymentId,
1312
- error: {
1313
- name: "Error",
1314
- message: e,
1315
- stderr
1316
- }
1352
+ failIndex({
1353
+ name: "Error",
1354
+ message: e,
1355
+ stderr
1317
1356
  });
1318
1357
  } else {
1319
1358
  logger2.error("unknown error", { error: e });
1320
- socket.emit("INDEXING_FAILED", {
1321
- version: "v1",
1322
- deploymentId: this.deploymentId,
1323
- error: {
1324
- name: "Error",
1325
- message: "Unknown error",
1326
- stderr
1327
- }
1359
+ failIndex({
1360
+ name: "Error",
1361
+ message: "Unknown error",
1362
+ stderr
1328
1363
  });
1329
1364
  }
1330
1365
  await setTimeout2(200);
1331
- process.exit(111);
1366
+ process.exit(EXIT_CODE_ALREADY_HANDLED);
1332
1367
  }
1333
1368
  }
1334
1369
  if (this.executing) {
@@ -1,5 +1,5 @@
1
1
  // package.json
2
- var version = "3.0.0-beta.43";
2
+ var version = "3.0.0-beta.45";
3
3
 
4
4
  // src/workers/prod/worker-setup.ts
5
5
  import { taskCatalog } from "@trigger.dev/core/v3";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trigger.dev",
3
- "version": "3.0.0-beta.43",
3
+ "version": "3.0.0-beta.45",
4
4
  "description": "A Command-Line Interface for Trigger.dev (v3) projects",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -47,13 +47,13 @@
47
47
  "npm-run-all": "^4.1.5",
48
48
  "open": "^10.0.3",
49
49
  "p-retry": "^6.1.0",
50
- "rimraf": "^3.0.2",
50
+ "rimraf": "^5.0.7",
51
51
  "tsup": "^8.0.1",
52
52
  "type-fest": "^3.6.0",
53
53
  "typescript": "^5.3.3",
54
54
  "vitest": "^1.6.0",
55
55
  "xdg-app-paths": "^8.3.0",
56
- "@trigger.dev/core-apps": "3.0.0-beta.43",
56
+ "@trigger.dev/core-apps": "3.0.0-beta.45",
57
57
  "@trigger.dev/tsconfig": "0.0.0"
58
58
  },
59
59
  "dependencies": {
@@ -72,7 +72,7 @@
72
72
  "@opentelemetry/sdk-trace-base": "^1.22.0",
73
73
  "@opentelemetry/sdk-trace-node": "^1.22.0",
74
74
  "@opentelemetry/semantic-conventions": "^1.22.0",
75
- "@trigger.dev/core": "3.0.0-beta.43",
75
+ "@trigger.dev/core": "3.0.0-beta.45",
76
76
  "@types/degit": "^2.8.3",
77
77
  "chalk": "^5.2.0",
78
78
  "chokidar": "^3.5.3",
@@ -107,12 +107,12 @@
107
107
  "terminal-link": "^3.0.0",
108
108
  "tiny-invariant": "^1.2.0",
109
109
  "tsconfig-paths": "^4.2.0",
110
+ "typescript": "^5.4.0",
110
111
  "update-check": "^1.5.4",
111
112
  "url": "^0.11.1",
112
113
  "ws": "^8.12.0",
113
114
  "zod": "3.22.3",
114
- "zod-validation-error": "^1.5.0",
115
- "typescript": "^5.4.0"
115
+ "zod-validation-error": "^1.5.0"
116
116
  },
117
117
  "engines": {
118
118
  "node": ">=18.0.0"