trigger.dev 0.0.0-re2-20250203135244 → 0.0.0-re2-20250312163355
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/README.md +31 -0
- package/dist/esm/apiClient.d.ts +39 -160
- package/dist/esm/apiClient.js +157 -35
- package/dist/esm/apiClient.js.map +1 -1
- package/dist/esm/build/buildWorker.d.ts +6 -6
- package/dist/esm/build/bundle.js +22 -4
- package/dist/esm/build/bundle.js.map +1 -1
- package/dist/esm/build/entryPoints.d.ts +2 -0
- package/dist/esm/build/entryPoints.js +27 -7
- package/dist/esm/build/entryPoints.js.map +1 -1
- package/dist/esm/build/packageModules.d.ts +0 -5
- package/dist/esm/build/packageModules.js +0 -45
- package/dist/esm/build/packageModules.js.map +1 -1
- package/dist/esm/cli/common.d.ts +2 -2
- package/dist/esm/cli/index.js +2 -0
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/commands/deploy.js +52 -10
- package/dist/esm/commands/deploy.js.map +1 -1
- package/dist/esm/commands/dev.d.ts +13 -4
- package/dist/esm/commands/dev.js +7 -1
- package/dist/esm/commands/dev.js.map +1 -1
- package/dist/esm/commands/list-profiles.d.ts +2 -2
- package/dist/esm/commands/login.d.ts +2 -2
- package/dist/esm/commands/logout.d.ts +2 -2
- package/dist/esm/commands/promote.d.ts +3 -0
- package/dist/esm/commands/promote.js +75 -0
- package/dist/esm/commands/promote.js.map +1 -0
- package/dist/esm/commands/switch.d.ts +2 -2
- package/dist/esm/commands/trigger.d.ts +4 -4
- package/dist/esm/commands/update.d.ts +2 -2
- package/dist/esm/commands/whoami.d.ts +2 -2
- package/dist/esm/config.js +15 -3
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/deploy/buildImage.d.ts +3 -1
- package/dist/esm/deploy/buildImage.js +10 -5
- package/dist/esm/deploy/buildImage.js.map +1 -1
- package/dist/esm/dev/backgroundWorker.d.ts +2 -240
- package/dist/esm/dev/backgroundWorker.js +8 -304
- package/dist/esm/dev/backgroundWorker.js.map +1 -1
- package/dist/esm/dev/devOutput.js +13 -5
- package/dist/esm/dev/devOutput.js.map +1 -1
- package/dist/esm/dev/devSession.js +14 -4
- package/dist/esm/dev/devSession.js.map +1 -1
- package/dist/esm/dev/devSupervisor.js +318 -38
- package/dist/esm/dev/devSupervisor.js.map +1 -1
- package/dist/esm/dev/mcpServer.d.ts +10 -0
- package/dist/esm/dev/mcpServer.js +201 -0
- package/dist/esm/dev/mcpServer.js.map +1 -0
- package/dist/esm/dev/workerRuntime.d.ts +0 -1
- package/dist/esm/dev/workerRuntime.js +1 -270
- package/dist/esm/dev/workerRuntime.js.map +1 -1
- package/dist/esm/entryPoints/dev-run-controller.d.ts +53 -0
- package/dist/esm/entryPoints/dev-run-controller.js +613 -0
- package/dist/esm/entryPoints/dev-run-controller.js.map +1 -0
- package/dist/esm/entryPoints/dev-run-worker.js +225 -164
- package/dist/esm/entryPoints/dev-run-worker.js.map +1 -1
- package/dist/esm/entryPoints/managed-run-controller.js +15 -31
- package/dist/esm/entryPoints/managed-run-controller.js.map +1 -1
- package/dist/esm/entryPoints/managed-run-worker.js +16 -8
- package/dist/esm/entryPoints/managed-run-worker.js.map +1 -1
- package/dist/esm/executions/taskRunProcess.d.ts +1 -69
- package/dist/esm/executions/taskRunProcess.js +7 -10
- package/dist/esm/executions/taskRunProcess.js.map +1 -1
- package/dist/esm/indexing/indexWorkerManifest.d.ts +6 -3
- package/dist/esm/indexing/registerTasks.js +3 -0
- package/dist/esm/indexing/registerTasks.js.map +1 -1
- package/dist/esm/utilities/eventBus.d.ts +8 -5
- package/dist/esm/utilities/eventBus.js.map +1 -1
- package/dist/esm/utilities/githubActions.d.ts +4 -0
- package/dist/esm/utilities/githubActions.js +18 -0
- package/dist/esm/utilities/githubActions.js.map +1 -0
- package/dist/esm/utilities/logger.d.ts +1 -1
- package/dist/esm/utilities/sanitizeEnvVars.d.ts +16 -3
- package/dist/esm/utilities/sanitizeEnvVars.js +15 -0
- package/dist/esm/utilities/sanitizeEnvVars.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +10 -6
- package/dist/esm/dev/backgroundWorkerEngine2.d.ts +0 -28
- package/dist/esm/dev/backgroundWorkerEngine2.js +0 -251
- package/dist/esm/dev/backgroundWorkerEngine2.js.map +0 -1
- package/dist/esm/entryPoints/deploy-index-controller.d.ts +0 -1
- package/dist/esm/entryPoints/deploy-index-controller.js +0 -86
- package/dist/esm/entryPoints/deploy-index-controller.js.map +0 -1
- package/dist/esm/entryPoints/deploy-index-worker.d.ts +0 -1
- package/dist/esm/entryPoints/deploy-index-worker.js +0 -142
- package/dist/esm/entryPoints/deploy-index-worker.js.map +0 -1
- package/dist/esm/entryPoints/deploy-run-controller.d.ts +0 -1
- package/dist/esm/entryPoints/deploy-run-controller.js +0 -1102
- package/dist/esm/entryPoints/deploy-run-controller.js.map +0 -1
- package/dist/esm/entryPoints/deploy-run-worker.d.ts +0 -1
- package/dist/esm/entryPoints/deploy-run-worker.js +0 -367
- package/dist/esm/entryPoints/deploy-run-worker.js.map +0 -1
- package/dist/esm/entryPoints/unmanaged-index-controller.d.ts +0 -1
- package/dist/esm/entryPoints/unmanaged-index-controller.js +0 -86
- package/dist/esm/entryPoints/unmanaged-index-controller.js.map +0 -1
- package/dist/esm/entryPoints/unmanaged-index-worker.d.ts +0 -1
- package/dist/esm/entryPoints/unmanaged-index-worker.js +0 -128
- package/dist/esm/entryPoints/unmanaged-index-worker.js.map +0 -1
- package/dist/esm/entryPoints/unmanaged-run-controller.d.ts +0 -1
- package/dist/esm/entryPoints/unmanaged-run-controller.js +0 -147
- package/dist/esm/entryPoints/unmanaged-run-controller.js.map +0 -1
- package/dist/esm/entryPoints/unmanaged-run-worker.d.ts +0 -1
- package/dist/esm/entryPoints/unmanaged-run-worker.js +0 -360
- package/dist/esm/entryPoints/unmanaged-run-worker.js.map +0 -1
|
@@ -55,24 +55,22 @@ export function startDevOutput(options) {
|
|
|
55
55
|
prettyError(`Build failed: ${errorText}`, stack);
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
|
-
const runStarted = (...[worker,
|
|
58
|
+
const runStarted = (...[worker, execution]) => {
|
|
59
59
|
if (!worker.serverWorker) {
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
|
-
const { execution } = payload;
|
|
63
62
|
// ○ Mar 27 09:17:25.653 -> View logs | 20240326.20 | create-avatar | run_slufhjdfiv8ejnrkw9dsj.1
|
|
64
63
|
const logsUrl = `${baseUrl}/runs/${execution.run.id}`;
|
|
65
64
|
const pipe = chalkGrey("|");
|
|
66
65
|
const bullet = chalkGrey("○");
|
|
67
66
|
const link = chalkLink(cliLink("View logs", logsUrl));
|
|
68
|
-
let timestampPrefix = chalkGrey(prettyPrintDate(
|
|
67
|
+
let timestampPrefix = chalkGrey(prettyPrintDate(execution.run.startedAt));
|
|
69
68
|
const workerPrefix = chalkWorker(worker.serverWorker.version);
|
|
70
69
|
const taskPrefix = chalkTask(execution.task.id);
|
|
71
70
|
const runId = chalkRun(`${execution.run.id}.${execution.attempt.number}`);
|
|
72
71
|
logger.log(`${bullet} ${timestampPrefix} ${chalkGrey("->")} ${isLinksSupported ? `${link} ${pipe}` : ""} ${workerPrefix} ${pipe} ${taskPrefix} ${pipe} ${runId}`);
|
|
73
72
|
};
|
|
74
|
-
const runCompleted = (...[worker,
|
|
75
|
-
const { execution } = payload;
|
|
73
|
+
const runCompleted = (...[worker, execution, completion, durationMs]) => {
|
|
76
74
|
const retryingText = chalkGrey(!completion.ok && completion.skippedRetrying
|
|
77
75
|
? " (retrying skipped)"
|
|
78
76
|
: !completion.ok && completion.retry !== undefined
|
|
@@ -101,6 +99,12 @@ export function startDevOutput(options) {
|
|
|
101
99
|
const runId = chalkRun(`${execution.run.id}.${execution.attempt.number}`);
|
|
102
100
|
logger.log(`${bullet} ${timestampPrefix} ${chalkGrey("->")} ${isLinksSupported ? `${link} ${pipe}` : ""} ${workerPrefix} ${pipe} ${taskPrefix} ${pipe} ${runId} ${pipe} ${resultText} ${elapsedText}${errorText}`);
|
|
103
101
|
};
|
|
102
|
+
const socketConnectionDisconnected = (reason) => {
|
|
103
|
+
logger.log(chalkGrey(`○ Connection was lost: ${reason}`));
|
|
104
|
+
};
|
|
105
|
+
const socketConnectionReconnected = (reason) => {
|
|
106
|
+
logger.log(chalkGrey(`○ Connection was restored`));
|
|
107
|
+
};
|
|
104
108
|
eventBus.on("rebuildStarted", rebuildStarted);
|
|
105
109
|
eventBus.on("buildStarted", buildStarted);
|
|
106
110
|
eventBus.on("workerSkipped", workerSkipped);
|
|
@@ -108,6 +112,8 @@ export function startDevOutput(options) {
|
|
|
108
112
|
eventBus.on("runStarted", runStarted);
|
|
109
113
|
eventBus.on("runCompleted", runCompleted);
|
|
110
114
|
eventBus.on("backgroundWorkerIndexingError", backgroundWorkerIndexingError);
|
|
115
|
+
eventBus.on("socketConnectionDisconnected", socketConnectionDisconnected);
|
|
116
|
+
eventBus.on("socketConnectionReconnected", socketConnectionReconnected);
|
|
111
117
|
return () => {
|
|
112
118
|
eventBus.off("rebuildStarted", rebuildStarted);
|
|
113
119
|
eventBus.off("buildStarted", buildStarted);
|
|
@@ -116,6 +122,8 @@ export function startDevOutput(options) {
|
|
|
116
122
|
eventBus.off("runStarted", runStarted);
|
|
117
123
|
eventBus.off("runCompleted", runCompleted);
|
|
118
124
|
eventBus.off("backgroundWorkerIndexingError", backgroundWorkerIndexingError);
|
|
125
|
+
eventBus.off("socketConnectionDisconnected", socketConnectionDisconnected);
|
|
126
|
+
eventBus.off("socketConnectionReconnected", socketConnectionReconnected);
|
|
119
127
|
};
|
|
120
128
|
}
|
|
121
129
|
function formatErrorLog(error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devOutput.js","sourceRoot":"","sources":["../../../src/dev/devOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,EACL,kCAAkC,EAClC,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAgB,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAE/E,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,eAAe,GAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAqB,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"devOutput.js","sourceRoot":"","sources":["../../../src/dev/devOutput.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { logger } from "../utilities/logger.js";
|
|
|
7
7
|
import { clearTmpDirs, getTmpDir } from "../utilities/tempDirectories.js";
|
|
8
8
|
import { startDevOutput } from "./devOutput.js";
|
|
9
9
|
import { startWorkerRuntime } from "./devSupervisor.js";
|
|
10
|
+
import { startMcpServer, stopMcpServer } from "./mcpServer.js";
|
|
10
11
|
export async function startDevSession({ rawConfig, name, rawArgs, client, dashboardUrl, keepTmpFiles, }) {
|
|
11
12
|
clearTmpDirs(rawConfig.workingDir);
|
|
12
13
|
const destination = getTmpDir(rawConfig.workingDir, "build", keepTmpFiles);
|
|
@@ -17,6 +18,16 @@ export async function startDevSession({ rawConfig, name, rawArgs, client, dashbo
|
|
|
17
18
|
client,
|
|
18
19
|
dashboardUrl,
|
|
19
20
|
});
|
|
21
|
+
if (rawArgs.mcp) {
|
|
22
|
+
await startMcpServer({
|
|
23
|
+
port: rawArgs.mcpPort,
|
|
24
|
+
cliApiClient: client,
|
|
25
|
+
devSession: {
|
|
26
|
+
dashboardUrl,
|
|
27
|
+
projectRef: rawConfig.project,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
20
31
|
const stopOutput = startDevOutput({
|
|
21
32
|
name,
|
|
22
33
|
dashboardUrl,
|
|
@@ -94,10 +105,8 @@ export async function startDevSession({ rawConfig, name, rawArgs, client, dashbo
|
|
|
94
105
|
// First bundle, no need to update bundle
|
|
95
106
|
bundled = true;
|
|
96
107
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
await updateBuild(result, workerDir);
|
|
100
|
-
}
|
|
108
|
+
const workerDir = getTmpDir(rawConfig.workingDir, "build", keepTmpFiles);
|
|
109
|
+
await updateBuild(result, workerDir);
|
|
101
110
|
});
|
|
102
111
|
},
|
|
103
112
|
};
|
|
@@ -128,6 +137,7 @@ export async function startDevSession({ rawConfig, name, rawArgs, client, dashbo
|
|
|
128
137
|
stopBundling?.().catch((error) => { });
|
|
129
138
|
runtime.shutdown().catch((error) => { });
|
|
130
139
|
stopOutput();
|
|
140
|
+
stopMcpServer();
|
|
131
141
|
},
|
|
132
142
|
};
|
|
133
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devSession.js","sourceRoot":"","sources":["../../../src/dev/devSession.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAEL,YAAY,EACZ,6BAA6B,EAC7B,wBAAwB,EACxB,eAAe,EACf,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE7F,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAsB,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"devSession.js","sourceRoot":"","sources":["../../../src/dev/devSession.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAEL,YAAY,EACZ,6BAA6B,EAC7B,wBAAwB,EACxB,eAAe,EACf,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE7F,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAsB,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAkB/D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,GACM;IAClB,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IAE3E,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC;QACvC,IAAI;QACJ,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,OAAO;QACb,MAAM;QACN,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,cAAc,CAAC;YACnB,IAAI,EAAE,OAAO,CAAC,OAAO;YACrB,YAAY,EAAE,MAAM;YACpB,UAAU,EAAE;gBACV,YAAY;gBACZ,UAAU,EAAE,SAAS,CAAC,OAAO;aAC9B;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC;QAChC,IAAI;QACJ,YAAY;QACZ,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,OAAO;KACd,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE3D,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE;QACnC,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,SAAS;QACT,cAAc;KACf,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,6BAA6B,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IAC3F,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1D,YAAY,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAClD,MAAM,2BAA2B,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,qBAAqB,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAErE,KAAK,UAAU,YAAY,CAAC,MAAoB,EAAE,SAA8B;QAC9E,IAAI,aAAa,GAAG,MAAM,6BAA6B,CAAC;YACtD,MAAM;YACN,WAAW,EAAE,WAAW,CAAC,IAAI;YAC7B,cAAc,EAAE,SAAS;YACzB,SAAS,EAAE,SAAS,EAAE,IAAI;YAC1B,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QAEtE,aAAa,GAAG,MAAM,8BAA8B,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;QAElF,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;YAE1D,MAAM,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC,+BAA+B,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,UAAU,WAAW,CAAC,KAA0B,EAAE,SAA6B;QAClF,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,KAAK,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAE7F,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,YAAY,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,KAAK,GAAG;QACZ,IAAI,EAAE,QAAQ;QACd,KAAK,CAAC,CAAsB;YAC1B,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBACb,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAEtC,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;gBACzC,CAAC;gBAED,MAAM,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;gBACvC,IAAI,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;oBAE5C,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,MAA2B,EAAE,EAAE;gBAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACjC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAClC,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC;gBAED,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,yCAAyC;oBACzC,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;gBAED,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;gBACzE,MAAM,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IAEF,KAAK,UAAU,SAAS;QACtB,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAErC,uCAAuC;QACvC,yEAAyE;QACzE,oFAAoF;QACpF,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC;YACtC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,SAAS,CAAC,UAAU;YACzB,WAAW,EAAE,WAAW,CAAC,IAAI;YAC7B,KAAK,EAAE,IAAI;YACX,cAAc,EAAE,SAAS;YACzB,OAAO,EAAE,CAAC,GAAG,qBAAqB,EAAE,KAAK,CAAC;YAC1C,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO;YACvC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ;YACzC,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS;SAC5C,CAAC,CAAC;QAEH,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QAEjC,OAAO,YAAY,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,SAAS,EAAE,CAAC;IAEvC,OAAO;QACL,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAErC,WAAW,CAAC,MAAM,EAAE,CAAC;YACrB,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;YACtC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,GAAE,CAAC,CAAC,CAAC;YACxC,UAAU,EAAE,CAAC;YACb,aAAa,EAAE,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,46 +1,72 @@
|
|
|
1
|
+
import { setTimeout as awaitTimeout } from "node:timers/promises";
|
|
1
2
|
import { SemanticInternalAttributes, } from "@trigger.dev/core/v3";
|
|
2
3
|
import { resolveDotEnvVars } from "../utilities/dotEnv.js";
|
|
3
4
|
import { eventBus } from "../utilities/eventBus.js";
|
|
4
5
|
import { logger } from "../utilities/logger.js";
|
|
5
6
|
import { sanitizeEnvVars } from "../utilities/sanitizeEnvVars.js";
|
|
6
7
|
import { resolveSourceFiles } from "../utilities/sourceFiles.js";
|
|
7
|
-
import {
|
|
8
|
-
import { chalkTask } from "../utilities/cliOutput.js";
|
|
8
|
+
import { BackgroundWorker } from "./backgroundWorker.js";
|
|
9
|
+
import { chalkTask, cliLink, prettyError } from "../utilities/cliOutput.js";
|
|
10
|
+
import { DevRunController } from "../entryPoints/dev-run-controller.js";
|
|
11
|
+
import { io } from "socket.io-client";
|
|
12
|
+
import pLimit from "p-limit";
|
|
9
13
|
export async function startWorkerRuntime(options) {
|
|
10
14
|
const runtime = new DevSupervisor(options);
|
|
11
15
|
await runtime.init();
|
|
12
16
|
return runtime;
|
|
13
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* The DevSupervisor is used when you run the `trigger.dev dev` command (with engine 2.0+)
|
|
20
|
+
* It's responsible for:
|
|
21
|
+
* - Creating/registering BackgroundWorkers
|
|
22
|
+
* - Pulling runs from the queue
|
|
23
|
+
* - Delegating executing the runs to DevRunController
|
|
24
|
+
* - Receiving snapshot update pings (via socket)
|
|
25
|
+
*/
|
|
14
26
|
class DevSupervisor {
|
|
15
27
|
options;
|
|
16
28
|
config;
|
|
17
29
|
disconnectPresence;
|
|
18
30
|
lastManifest;
|
|
19
31
|
latestWorkerId;
|
|
32
|
+
/** Receive notifications when runs change state */
|
|
33
|
+
socket;
|
|
34
|
+
socketIsReconnecting = false;
|
|
35
|
+
/** Workers are versions of the code */
|
|
20
36
|
workers = new Map();
|
|
37
|
+
/** Map of run friendly id to run controller. They process runs from start to finish. */
|
|
38
|
+
runControllers = new Map();
|
|
39
|
+
socketConnections = new Set();
|
|
40
|
+
runLimiter;
|
|
21
41
|
constructor(options) {
|
|
22
42
|
this.options = options;
|
|
23
43
|
}
|
|
24
44
|
async init() {
|
|
25
|
-
logger.debug("initialized worker runtime", { options: this.options });
|
|
45
|
+
logger.debug("[DevSupervisor] initialized worker runtime", { options: this.options });
|
|
26
46
|
//get the settings for dev
|
|
27
|
-
const settings = await this.options.client.
|
|
47
|
+
const settings = await this.options.client.dev.config();
|
|
28
48
|
if (!settings.success) {
|
|
29
49
|
throw new Error(`Failed to connect to ${this.options.client.apiURL}. Couldn't retrieve settings: ${settings.error}`);
|
|
30
50
|
}
|
|
31
|
-
logger.debug("Got dev settings", { settings: settings.data });
|
|
51
|
+
logger.debug("[DevSupervisor] Got dev settings", { settings: settings.data });
|
|
32
52
|
this.config = settings.data;
|
|
53
|
+
const maxConcurrentRuns = Math.min(this.config.maxConcurrentRuns, this.options.args.maxConcurrentRuns ?? this.config.maxConcurrentRuns);
|
|
54
|
+
logger.debug("[DevSupervisor] Using maxConcurrentRuns", { maxConcurrentRuns });
|
|
55
|
+
this.runLimiter = pLimit(maxConcurrentRuns);
|
|
56
|
+
this.#createSocket();
|
|
33
57
|
//start an SSE connection for presence
|
|
34
58
|
this.disconnectPresence = await this.#startPresenceConnection();
|
|
35
59
|
//start dequeuing
|
|
36
60
|
await this.#dequeueRuns();
|
|
37
|
-
//todo start dequeuing. Each time we dequeue:
|
|
38
|
-
// Before hitting the API we will see if there are enough resources to dequeue.
|
|
39
|
-
// 1. If there are messages we will wait a brief period of time and dequeue again
|
|
40
|
-
// 2. If there are no messages we will wait for a longer period of time and dequeue again
|
|
41
61
|
}
|
|
42
62
|
async shutdown() {
|
|
43
63
|
this.disconnectPresence?.();
|
|
64
|
+
try {
|
|
65
|
+
this.socket.close();
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
logger.debug("[DevSupervisor] shutdown, socket failed to close", { error });
|
|
69
|
+
}
|
|
44
70
|
}
|
|
45
71
|
async initializeWorker(manifest, stop) {
|
|
46
72
|
if (this.lastManifest && this.lastManifest.contentHash === manifest.contentHash) {
|
|
@@ -49,7 +75,7 @@ class DevSupervisor {
|
|
|
49
75
|
return;
|
|
50
76
|
}
|
|
51
77
|
const env = await this.#getEnvVars();
|
|
52
|
-
const backgroundWorker = new
|
|
78
|
+
const backgroundWorker = new BackgroundWorker(manifest, {
|
|
53
79
|
env,
|
|
54
80
|
cwd: this.options.config.workingDir,
|
|
55
81
|
stop,
|
|
@@ -59,9 +85,9 @@ class DevSupervisor {
|
|
|
59
85
|
stop();
|
|
60
86
|
throw new Error("Could not initialize worker");
|
|
61
87
|
}
|
|
62
|
-
const
|
|
63
|
-
if (
|
|
64
|
-
|
|
88
|
+
const validationIssue = validateWorkerManifest(backgroundWorker.manifest);
|
|
89
|
+
if (validationIssue) {
|
|
90
|
+
prettyError(generationValidationIssueHeader(validationIssue), generateValidationIssueMessage(validationIssue, backgroundWorker.manifest, manifest), generateValidationIssueFooter(validationIssue));
|
|
65
91
|
stop();
|
|
66
92
|
return;
|
|
67
93
|
}
|
|
@@ -96,62 +122,140 @@ class DevSupervisor {
|
|
|
96
122
|
async #dequeueRuns() {
|
|
97
123
|
if (!this.latestWorkerId) {
|
|
98
124
|
//try again later
|
|
125
|
+
logger.debug(`[DevSupervisor] dequeueRuns. No latest worker ID, trying again later`);
|
|
99
126
|
setTimeout(() => this.#dequeueRuns(), this.config.dequeueIntervalWithoutRun);
|
|
100
127
|
return;
|
|
101
128
|
}
|
|
129
|
+
if (this.runLimiter &&
|
|
130
|
+
this.runLimiter.activeCount + this.runLimiter.pendingCount > this.runLimiter.concurrency) {
|
|
131
|
+
logger.debug(`[DevSupervisor] dequeueRuns. Run limit reached, trying again later`);
|
|
132
|
+
setTimeout(() => this.#dequeueRuns(), this.config.dequeueIntervalWithoutRun);
|
|
133
|
+
}
|
|
102
134
|
//get relevant versions
|
|
103
135
|
//ignore deprecated and the latest worker
|
|
104
|
-
const oldWorkerIds =
|
|
105
|
-
.filter((worker) => !worker.deprecated && worker.serverWorker?.id !== this.latestWorkerId)
|
|
106
|
-
.map((worker) => worker.serverWorker?.id)
|
|
107
|
-
.filter((id) => id !== undefined);
|
|
136
|
+
const oldWorkerIds = this.#getActiveOldWorkers();
|
|
108
137
|
try {
|
|
109
|
-
logger.debug(`Dequeue runs for versions`, {
|
|
110
|
-
oldWorkerIds,
|
|
111
|
-
latestWorkerId: this.latestWorkerId,
|
|
112
|
-
});
|
|
113
138
|
//todo later we should track available resources and machines used, and pass them in here (it supports it)
|
|
114
|
-
const result = await this.options.client.
|
|
139
|
+
const result = await this.options.client.dev.dequeue({
|
|
115
140
|
currentWorker: this.latestWorkerId,
|
|
116
141
|
oldWorkers: oldWorkerIds,
|
|
117
142
|
});
|
|
118
143
|
if (!result.success) {
|
|
119
|
-
logger.
|
|
144
|
+
logger.debug(`[DevSupervisor] dequeueRuns. Failed to dequeue runs`, {
|
|
145
|
+
error: result.error,
|
|
146
|
+
});
|
|
120
147
|
setTimeout(() => this.#dequeueRuns(), this.config.dequeueIntervalWithoutRun);
|
|
121
148
|
return;
|
|
122
149
|
}
|
|
123
150
|
//no runs, try again later
|
|
124
151
|
if (result.data.dequeuedMessages.length === 0) {
|
|
125
|
-
logger.debug(`No runs
|
|
152
|
+
// logger.debug(`No dequeue runs for versions`, {
|
|
153
|
+
// oldWorkerIds,
|
|
154
|
+
// latestWorkerId: this.latestWorkerId,
|
|
155
|
+
// });
|
|
126
156
|
setTimeout(() => this.#dequeueRuns(), this.config.dequeueIntervalWithoutRun);
|
|
127
157
|
return;
|
|
128
158
|
}
|
|
129
|
-
logger.debug(`
|
|
159
|
+
logger.debug(`[DevSupervisor] dequeueRuns. Results`, {
|
|
160
|
+
dequeuedMessages: JSON.stringify(result.data.dequeuedMessages),
|
|
161
|
+
});
|
|
162
|
+
//start runs
|
|
163
|
+
for (const message of result.data.dequeuedMessages) {
|
|
164
|
+
const worker = this.workers.get(message.backgroundWorker.friendlyId);
|
|
165
|
+
if (!worker) {
|
|
166
|
+
logger.debug(`[DevSupervisor] dequeueRuns. Dequeued a run but there's no BackgroundWorker so we can't execute it`, {
|
|
167
|
+
run: message.run.friendlyId,
|
|
168
|
+
workerId: message.backgroundWorker.friendlyId,
|
|
169
|
+
});
|
|
170
|
+
//todo call the API to crash the run with a good message
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
let runController = this.runControllers.get(message.run.friendlyId);
|
|
174
|
+
if (runController) {
|
|
175
|
+
logger.debug(`[DevSupervisor] dequeueRuns. Dequeuing a run that already has a runController`, {
|
|
176
|
+
runController: message.run.friendlyId,
|
|
177
|
+
});
|
|
178
|
+
//todo, what do we do here?
|
|
179
|
+
//todo I think the run shouldn't exist and we should kill the process but TBC
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
if (!worker.serverWorker) {
|
|
183
|
+
logger.debug(`[DevSupervisor] dequeueRuns. Worker doesn't have a serverWorker`, {
|
|
184
|
+
run: message.run.friendlyId,
|
|
185
|
+
worker,
|
|
186
|
+
});
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (!worker.manifest) {
|
|
190
|
+
logger.debug(`[DevSupervisor] dequeueRuns. Worker doesn't have a manifest`, {
|
|
191
|
+
run: message.run.friendlyId,
|
|
192
|
+
worker,
|
|
193
|
+
});
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
//new run
|
|
197
|
+
runController = new DevRunController({
|
|
198
|
+
runFriendlyId: message.run.friendlyId,
|
|
199
|
+
worker: worker,
|
|
200
|
+
httpClient: this.options.client,
|
|
201
|
+
logLevel: this.options.args.logLevel,
|
|
202
|
+
onFinished: () => {
|
|
203
|
+
logger.debug("[DevSupervisor] Run finished", { runId: message.run.friendlyId });
|
|
204
|
+
//stop the run controller, and remove it
|
|
205
|
+
runController?.stop();
|
|
206
|
+
this.runControllers.delete(message.run.friendlyId);
|
|
207
|
+
this.#unsubscribeFromRunNotifications(message.run.friendlyId);
|
|
208
|
+
//stop the worker if it is deprecated and there are no more runs
|
|
209
|
+
if (worker.deprecated) {
|
|
210
|
+
this.#tryDeleteWorker(message.backgroundWorker.friendlyId).finally(() => { });
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
onSubscribeToRunNotifications: async (run, snapshot) => {
|
|
214
|
+
this.#subscribeToRunNotifications();
|
|
215
|
+
},
|
|
216
|
+
onUnsubscribeFromRunNotifications: async (run, snapshot) => {
|
|
217
|
+
this.#unsubscribeFromRunNotifications(run.friendlyId);
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
this.runControllers.set(message.run.friendlyId, runController);
|
|
221
|
+
if (this.runLimiter) {
|
|
222
|
+
this.runLimiter(() => runController.start(message)).then(() => {
|
|
223
|
+
logger.debug("[DevSupervisor] Run started", { runId: message.run.friendlyId });
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
//don't await for run completion, we want to dequeue more runs
|
|
228
|
+
runController.start(message).then(() => {
|
|
229
|
+
logger.debug("[DevSupervisor] Run started", { runId: message.run.friendlyId });
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
130
233
|
setTimeout(() => this.#dequeueRuns(), this.config.dequeueIntervalWithRun);
|
|
131
234
|
}
|
|
132
235
|
catch (error) {
|
|
236
|
+
logger.debug(`[DevSupervisor] dequeueRuns. Error thrown`, { error });
|
|
133
237
|
//dequeue again
|
|
134
238
|
setTimeout(() => this.#dequeueRuns(), this.config.dequeueIntervalWithoutRun);
|
|
135
239
|
}
|
|
136
240
|
}
|
|
137
241
|
async #startPresenceConnection() {
|
|
138
242
|
try {
|
|
139
|
-
const eventSource = await this.options.client.
|
|
243
|
+
const eventSource = await this.options.client.dev.presenceConnection();
|
|
140
244
|
// Regular "ping" messages
|
|
141
245
|
eventSource.addEventListener("presence", (event) => {
|
|
142
246
|
// logger.debug(`Presence ping received`, { event });
|
|
143
247
|
});
|
|
144
248
|
// Connection was lost and successfully reconnected
|
|
145
249
|
eventSource.addEventListener("reconnect", (event) => {
|
|
146
|
-
logger.
|
|
250
|
+
logger.debug("[DevSupervisor] Presence connection restored");
|
|
147
251
|
});
|
|
148
252
|
// Handle messages that might have been missed during disconnection
|
|
149
253
|
eventSource.addEventListener("missed_events", (event) => {
|
|
150
|
-
logger.
|
|
254
|
+
logger.debug("[DevSupervisor] Missed some presence events during disconnection");
|
|
151
255
|
});
|
|
152
256
|
// If you need to close it manually
|
|
153
257
|
return () => {
|
|
154
|
-
logger.info("Closing presence connection");
|
|
258
|
+
logger.info("[DevSupervisor] Closing presence connection");
|
|
155
259
|
eventSource.close();
|
|
156
260
|
};
|
|
157
261
|
}
|
|
@@ -187,9 +291,143 @@ class DevSupervisor {
|
|
|
187
291
|
continue;
|
|
188
292
|
}
|
|
189
293
|
existingWorker.deprecate();
|
|
294
|
+
this.#tryDeleteWorker(workerId).finally(() => { });
|
|
190
295
|
}
|
|
191
296
|
this.workers.set(worker.serverWorker.id, worker);
|
|
192
297
|
}
|
|
298
|
+
#createSocket() {
|
|
299
|
+
const wsUrl = new URL(this.options.client.apiURL);
|
|
300
|
+
wsUrl.pathname = "/dev-worker";
|
|
301
|
+
this.socket = io(wsUrl.href, {
|
|
302
|
+
transports: ["websocket"],
|
|
303
|
+
extraHeaders: {
|
|
304
|
+
Authorization: `Bearer ${this.options.client.accessToken}`,
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
this.socket.on("run:notify", async ({ version, run }) => {
|
|
308
|
+
logger.debug("[DevSupervisor] Received run notification", { version, run });
|
|
309
|
+
this.options.client.dev.sendDebugLog(run.friendlyId, {
|
|
310
|
+
time: new Date(),
|
|
311
|
+
message: "run:notify received by runner",
|
|
312
|
+
});
|
|
313
|
+
const controller = this.runControllers.get(run.friendlyId);
|
|
314
|
+
if (!controller) {
|
|
315
|
+
logger.debug("[DevSupervisor] Ignoring notification, no local run ID", {
|
|
316
|
+
runId: run.friendlyId,
|
|
317
|
+
});
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
await controller.getLatestSnapshot();
|
|
321
|
+
});
|
|
322
|
+
this.socket.on("connect", () => {
|
|
323
|
+
logger.debug("[DevSupervisor] Connected to supervisor");
|
|
324
|
+
if (this.socket.recovered || this.socketIsReconnecting) {
|
|
325
|
+
logger.debug("[DevSupervisor] Socket recovered");
|
|
326
|
+
eventBus.emit("socketConnectionReconnected", `Connection was recovered`);
|
|
327
|
+
}
|
|
328
|
+
this.socketIsReconnecting = false;
|
|
329
|
+
for (const controller of this.runControllers.values()) {
|
|
330
|
+
controller.resubscribeToRunNotifications();
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
this.socket.on("connect_error", (error) => {
|
|
334
|
+
logger.debug("[DevSupervisor] Connection error", { error });
|
|
335
|
+
});
|
|
336
|
+
this.socket.on("disconnect", (reason, description) => {
|
|
337
|
+
logger.debug("[DevSupervisor] socket was disconnected", {
|
|
338
|
+
reason,
|
|
339
|
+
description,
|
|
340
|
+
active: this.socket.active,
|
|
341
|
+
});
|
|
342
|
+
if (reason === "io server disconnect") {
|
|
343
|
+
// the disconnection was initiated by the server, you need to manually reconnect
|
|
344
|
+
this.socket.connect();
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
this.socketIsReconnecting = true;
|
|
348
|
+
eventBus.emit("socketConnectionDisconnected", reason);
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
const interval = setInterval(() => {
|
|
352
|
+
logger.debug("[DevSupervisor] Socket connections", {
|
|
353
|
+
connections: Array.from(this.socketConnections),
|
|
354
|
+
});
|
|
355
|
+
}, 5000);
|
|
356
|
+
}
|
|
357
|
+
#subscribeToRunNotifications() {
|
|
358
|
+
const runFriendlyIds = Array.from(this.runControllers.keys());
|
|
359
|
+
if (!this.socket) {
|
|
360
|
+
logger.debug("[DevSupervisor] Socket not connected");
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
for (const id of runFriendlyIds) {
|
|
364
|
+
this.socketConnections.add(id);
|
|
365
|
+
}
|
|
366
|
+
logger.debug("[DevSupervisor] Subscribing to run notifications", {
|
|
367
|
+
runFriendlyIds,
|
|
368
|
+
connections: Array.from(this.socketConnections),
|
|
369
|
+
});
|
|
370
|
+
this.socket.emit("run:subscribe", { version: "1", runFriendlyIds });
|
|
371
|
+
}
|
|
372
|
+
#unsubscribeFromRunNotifications(friendlyId) {
|
|
373
|
+
if (!this.socket) {
|
|
374
|
+
logger.debug("[DevSupervisor] Socket not connected");
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
this.socketConnections.delete(friendlyId);
|
|
378
|
+
logger.debug("[DevSupervisor] Unsubscribing from run notifications", {
|
|
379
|
+
runFriendlyId: friendlyId,
|
|
380
|
+
connections: Array.from(this.socketConnections),
|
|
381
|
+
});
|
|
382
|
+
this.socket.emit("run:unsubscribe", { version: "1", runFriendlyIds: [friendlyId] });
|
|
383
|
+
}
|
|
384
|
+
#getActiveOldWorkers() {
|
|
385
|
+
return Array.from(this.workers.values())
|
|
386
|
+
.filter((worker) => {
|
|
387
|
+
//exclude the latest
|
|
388
|
+
if (worker.serverWorker?.id === this.latestWorkerId) {
|
|
389
|
+
return false;
|
|
390
|
+
}
|
|
391
|
+
//if it's deprecated AND there are no executing runs, then filter it out
|
|
392
|
+
if (worker.deprecated && worker.serverWorker?.id) {
|
|
393
|
+
return this.#workerHasInProgressRuns(worker.serverWorker.id);
|
|
394
|
+
}
|
|
395
|
+
return true;
|
|
396
|
+
})
|
|
397
|
+
.map((worker) => worker.serverWorker?.id)
|
|
398
|
+
.filter((id) => id !== undefined);
|
|
399
|
+
}
|
|
400
|
+
#workerHasInProgressRuns(friendlyId) {
|
|
401
|
+
for (const controller of this.runControllers.values()) {
|
|
402
|
+
logger.debug("[DevSupervisor] Checking controller", {
|
|
403
|
+
controllerFriendlyId: controller.workerFriendlyId,
|
|
404
|
+
friendlyId,
|
|
405
|
+
});
|
|
406
|
+
if (controller.workerFriendlyId === friendlyId) {
|
|
407
|
+
return true;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
/** Deletes the worker if there are no active runs, after a delay */
|
|
413
|
+
async #tryDeleteWorker(friendlyId) {
|
|
414
|
+
await awaitTimeout(1_000);
|
|
415
|
+
this.#deleteWorker(friendlyId);
|
|
416
|
+
}
|
|
417
|
+
#deleteWorker(friendlyId) {
|
|
418
|
+
logger.debug("[DevSupervisor] Delete worker (if relevant)", {
|
|
419
|
+
workerId: friendlyId,
|
|
420
|
+
});
|
|
421
|
+
const worker = this.workers.get(friendlyId);
|
|
422
|
+
if (!worker) {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
if (this.#workerHasInProgressRuns(friendlyId)) {
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
worker.stop();
|
|
429
|
+
this.workers.delete(friendlyId);
|
|
430
|
+
}
|
|
193
431
|
}
|
|
194
432
|
function gatherProcessEnv() {
|
|
195
433
|
const $env = {
|
|
@@ -202,15 +440,63 @@ function gatherProcessEnv() {
|
|
|
202
440
|
function validateWorkerManifest(manifest) {
|
|
203
441
|
const issues = [];
|
|
204
442
|
if (!manifest.tasks || manifest.tasks.length === 0) {
|
|
205
|
-
|
|
443
|
+
return { type: "noTasksDefined" };
|
|
206
444
|
}
|
|
207
445
|
// Check for any duplicate task ids
|
|
208
446
|
const taskIds = manifest.tasks.map((task) => task.id);
|
|
209
447
|
const duplicateTaskIds = taskIds.filter((id, index) => taskIds.indexOf(id) !== index);
|
|
210
448
|
if (duplicateTaskIds.length > 0) {
|
|
211
|
-
|
|
449
|
+
return { type: "duplicateTaskId", duplicationTaskIds: duplicateTaskIds };
|
|
450
|
+
}
|
|
451
|
+
return undefined;
|
|
452
|
+
}
|
|
453
|
+
function generationValidationIssueHeader(issue) {
|
|
454
|
+
switch (issue.type) {
|
|
455
|
+
case "duplicateTaskId": {
|
|
456
|
+
return `Duplicate task ids detected`;
|
|
457
|
+
}
|
|
458
|
+
case "noTasksDefined": {
|
|
459
|
+
return `No tasks exported from your trigger files`;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
function generateValidationIssueFooter(issue) {
|
|
464
|
+
switch (issue.type) {
|
|
465
|
+
case "duplicateTaskId": {
|
|
466
|
+
return cliLink("View the task docs", "https://trigger.dev/docs/tasks/overview");
|
|
467
|
+
}
|
|
468
|
+
case "noTasksDefined": {
|
|
469
|
+
return cliLink("View the task docs", "https://trigger.dev/docs/tasks/overview");
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
function generateValidationIssueMessage(issue, manifest, buildManifest) {
|
|
474
|
+
switch (issue.type) {
|
|
475
|
+
case "duplicateTaskId": {
|
|
476
|
+
return createDuplicateTaskIdOutputErrorMessage(issue.duplicationTaskIds, manifest.tasks);
|
|
477
|
+
}
|
|
478
|
+
case "noTasksDefined": {
|
|
479
|
+
return `
|
|
480
|
+
Files:
|
|
481
|
+
${buildManifest.files.map((file) => file.entry).join("\n")}
|
|
482
|
+
Make sure you have at least one task exported from your trigger files.
|
|
483
|
+
You may have defined a task and forgot to add the export statement:
|
|
484
|
+
\`\`\`ts
|
|
485
|
+
import { task } from "@trigger.dev/sdk/v3";
|
|
486
|
+
👇 Don't forget this
|
|
487
|
+
export const myTask = task({
|
|
488
|
+
id: "myTask",
|
|
489
|
+
async run() {
|
|
490
|
+
// Your task logic here
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
\`\`\`
|
|
494
|
+
`.replace(/^ {8}/gm, "");
|
|
495
|
+
}
|
|
496
|
+
default: {
|
|
497
|
+
return `Unknown validation issue: ${issue}`;
|
|
498
|
+
}
|
|
212
499
|
}
|
|
213
|
-
return issues;
|
|
214
500
|
}
|
|
215
501
|
function createDuplicateTaskIdOutputErrorMessage(duplicateTaskIds, tasks) {
|
|
216
502
|
const duplicateTable = duplicateTaskIds
|
|
@@ -223,10 +509,4 @@ function createDuplicateTaskIdOutputErrorMessage(duplicateTaskIds, tasks) {
|
|
|
223
509
|
.join("");
|
|
224
510
|
return `Duplicate ${chalkTask("task id")} detected:${duplicateTable}`;
|
|
225
511
|
}
|
|
226
|
-
//todo ignore the dev queue pulling route in the rate limiter
|
|
227
|
-
//todo the queue pull endpoint should just update the presence
|
|
228
|
-
//todo ignore the dev presence
|
|
229
|
-
//we will need to hit the presence endpoint if we aren't going to dequeue because of CPU/RAM
|
|
230
|
-
//CLI hits an SSE endpoint, it will periodically update a last seen value in Redis. Look at how to do presence Redis.
|
|
231
|
-
//Frontend will subscribe to Redis for this.
|
|
232
512
|
//# sourceMappingURL=devSupervisor.js.map
|