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.
- package/dist/Containerfile.prod +22 -9
- package/dist/index.js +287 -111
- package/dist/index.js.map +1 -1
- package/dist/workers/dev/worker-setup.js +1 -1
- package/dist/workers/prod/entry-point.js +81 -46
- package/dist/workers/prod/worker-setup.js +1 -1
- package/package.json +6 -6
|
@@ -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.
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
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
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
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(
|
|
1366
|
+
process.exit(EXIT_CODE_ALREADY_HANDLED);
|
|
1332
1367
|
}
|
|
1333
1368
|
}
|
|
1334
1369
|
if (this.executing) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trigger.dev",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
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": "^
|
|
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.
|
|
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.
|
|
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"
|