trigger.dev 3.0.0-beta.12 → 3.0.0-beta.14

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.
@@ -1,11 +1,12 @@
1
1
  // src/workers/dev/worker-facade.ts
2
2
  import {
3
- TaskExecutor,
4
3
  DurableClock,
4
+ TaskExecutor,
5
+ ZodSchemaParsedError,
5
6
  clock,
6
- logLevels,
7
7
  getEnvVar,
8
- ZodSchemaParsedError
8
+ logLevels,
9
+ taskCatalog
9
10
  } from "@trigger.dev/core/v3";
10
11
  import {
11
12
  ConsoleInterceptor,
@@ -20,7 +21,7 @@ import {
20
21
  } from "@trigger.dev/core/v3";
21
22
 
22
23
  // package.json
23
- var version = "3.0.0-beta.12";
24
+ var version = "3.0.0-beta.14";
24
25
 
25
26
  // src/workers/dev/worker-facade.ts
26
27
  __WORKER_SETUP__;
@@ -30,7 +31,10 @@ var otelLogger = tracingSDK.getLogger("trigger-dev-worker", version);
30
31
  var durableClock = new DurableClock();
31
32
  clock.setGlobalClock(durableClock);
32
33
  var tracer = new TriggerTracer({ tracer: otelTracer, logger: otelLogger });
33
- var consoleInterceptor = new ConsoleInterceptor(otelLogger);
34
+ var consoleInterceptor = new ConsoleInterceptor(
35
+ otelLogger,
36
+ __PROJECT_CONFIG__.enableConsoleLogging ?? false
37
+ );
34
38
  var devRuntimeManager = new DevRuntimeManager();
35
39
  runtime.setGlobalRuntimeManager(devRuntimeManager);
36
40
  var triggerLogLevel = getEnvVar("TRIGGER_LOG_LEVEL");
@@ -44,50 +48,19 @@ logger.setGlobalTaskLogger(otelTaskLogger);
44
48
  var TaskFileImports = {};
45
49
  var TaskFiles = {};
46
50
  __TASKS__;
47
- function getTasks() {
48
- const result = [];
51
+ (() => {
49
52
  for (const [importName, taskFile] of Object.entries(TaskFiles)) {
50
53
  const fileImports = TaskFileImports[importName];
51
54
  for (const [exportName, task] of Object.entries(fileImports ?? {})) {
52
- if (task.__trigger) {
53
- result.push({
54
- id: task.__trigger.id,
55
+ if (typeof task === "object" && task !== null && "id" in task && typeof task.id === "string") {
56
+ taskCatalog.registerTaskFileMetadata(task.id, {
55
57
  exportName,
56
- packageVersion: task.__trigger.packageVersion,
57
- filePath: taskFile.filePath,
58
- queue: task.__trigger.queue,
59
- retry: task.__trigger.retry,
60
- machine: task.__trigger.machine,
61
- fns: task.__trigger.fns
58
+ filePath: taskFile.filePath
62
59
  });
63
60
  }
64
61
  }
65
62
  }
66
- return result;
67
- }
68
- function getTaskMetadata() {
69
- const result = getTasks();
70
- return result.map((task) => {
71
- const { fns, ...metadata } = task;
72
- return metadata;
73
- });
74
- }
75
- var tasks = getTasks();
76
- runtime.registerTasks(tasks);
77
- var taskExecutors = /* @__PURE__ */ new Map();
78
- for (const task of tasks) {
79
- taskExecutors.set(
80
- task.id,
81
- new TaskExecutor(task, {
82
- tracer,
83
- tracingSDK,
84
- consoleInterceptor,
85
- projectConfig: __PROJECT_CONFIG__,
86
- importedConfig,
87
- handleErrorFn: handleError
88
- })
89
- );
90
- }
63
+ })();
91
64
  var _execution;
92
65
  var _isRunning = false;
93
66
  var handler = new ZodMessageHandler({
@@ -110,9 +83,9 @@ var handler = new ZodMessageHandler({
110
83
  return;
111
84
  }
112
85
  process.title = `trigger-dev-worker: ${execution.task.id} ${execution.run.id}`;
113
- const executor = taskExecutors.get(execution.task.id);
114
- if (!executor) {
115
- console.error(`Could not find executor for task ${execution.task.id}`);
86
+ const task = taskCatalog.getTask(execution.task.id);
87
+ if (!task) {
88
+ console.error(`Could not find task ${execution.task.id}`);
116
89
  await sender.send("TASK_RUN_COMPLETED", {
117
90
  execution,
118
91
  result: {
@@ -126,6 +99,14 @@ var handler = new ZodMessageHandler({
126
99
  });
127
100
  return;
128
101
  }
102
+ const executor = new TaskExecutor(task, {
103
+ tracer,
104
+ tracingSDK,
105
+ consoleInterceptor,
106
+ projectConfig: __PROJECT_CONFIG__,
107
+ importedConfig,
108
+ handleErrorFn: handleError
109
+ });
129
110
  try {
130
111
  _execution = execution;
131
112
  _isRunning = true;
@@ -157,7 +138,7 @@ var handler = new ZodMessageHandler({
157
138
  process.on("message", async (msg) => {
158
139
  await handler.handleMessage(msg);
159
140
  });
160
- var TASK_METADATA = getTaskMetadata();
141
+ var TASK_METADATA = taskCatalog.getAllTaskMetadata();
161
142
  sender.send("TASKS_READY", { tasks: TASK_METADATA }).catch((err) => {
162
143
  if (err instanceof ZodSchemaParsedError) {
163
144
  sender.send("TASKS_FAILED_TO_PARSE", { zodIssues: err.error.issues, tasks: TASK_METADATA });
@@ -3,9 +3,11 @@ import "source-map-support/register.js";
3
3
  import { Resource } from "@opentelemetry/resources";
4
4
  import {
5
5
  SemanticInternalAttributes,
6
+ StandardTaskCatalog,
6
7
  TracingSDK,
7
8
  ZodMessageSender,
8
- childToWorkerMessages
9
+ childToWorkerMessages,
10
+ taskCatalog
9
11
  } from "@trigger.dev/core/v3";
10
12
  __SETUP_IMPORTED_PROJECT_CONFIG__;
11
13
  var tracingSDK = new TracingSDK({
@@ -34,6 +36,7 @@ process.on("uncaughtException", (error, origin) => {
34
36
  console.error("Failed to send UNCAUGHT_EXCEPTION message", err);
35
37
  });
36
38
  });
39
+ taskCatalog.setGlobalTaskCatalog(new StandardTaskCatalog());
37
40
  export {
38
41
  sender,
39
42
  tracingSDK
@@ -577,6 +577,7 @@ var logger2 = new SimpleLogger(`[${MACHINE_NAME2}][${SHORT_HASH}]`);
577
577
  var ProdWorker = class {
578
578
  constructor(port, host = "0.0.0.0") {
579
579
  this.host = host;
580
+ process.on("SIGTERM", this.#handleSignal.bind(this, "SIGTERM"));
580
581
  this.#coordinatorSocket = this.#createCoordinatorSocket(COORDINATOR_HOST);
581
582
  this.#backgroundWorker = new ProdBackgroundWorker("worker.js", {
582
583
  projectConfig: __PROJECT_CONFIG__,
@@ -669,6 +670,27 @@ var ProdWorker = class {
669
670
  #backgroundWorker;
670
671
  #httpServer;
671
672
  #coordinatorSocket;
673
+ async #handleSignal(signal) {
674
+ logger2.log("Received signal", { signal });
675
+ if (signal === "SIGTERM") {
676
+ if (this.executing) {
677
+ const terminationGracePeriodSeconds = 60 * 60;
678
+ logger2.log("Waiting for attempt to complete before exiting", {
679
+ terminationGracePeriodSeconds
680
+ });
681
+ await setTimeout2(terminationGracePeriodSeconds * 1e3 - 5e3);
682
+ logger2.log("Termination timeout reached, exiting gracefully.");
683
+ } else {
684
+ logger2.log("Not executing, exiting immediately.");
685
+ }
686
+ await this.#exitGracefully();
687
+ }
688
+ logger2.log("Unhandled signal", { signal });
689
+ }
690
+ async #exitGracefully() {
691
+ await this.#backgroundWorker.close();
692
+ process.exit(0);
693
+ }
672
694
  async #reconnect(isPostStart = false, reconnectImmediately = false) {
673
695
  if (isPostStart) {
674
696
  this.waitForPostStart = false;
@@ -713,8 +735,7 @@ var ProdWorker = class {
713
735
  if (willCheckpointAndRestore) {
714
736
  logger2.log("WARNING: Will checkpoint but also requested exit. This won't end well.");
715
737
  }
716
- await this.#backgroundWorker.close();
717
- process.exit(0);
738
+ await this.#exitGracefully();
718
739
  }
719
740
  this.executing = false;
720
741
  this.attemptFriendlyId = void 0;
@@ -1044,7 +1065,6 @@ var ProdWorker = class {
1044
1065
  break;
1045
1066
  }
1046
1067
  }
1047
- logger2.log("preStop", { url: req.url });
1048
1068
  return reply.text("preStop ok");
1049
1069
  }
1050
1070
  case "/postStart": {
@@ -1,14 +1,15 @@
1
1
  // src/workers/prod/worker-facade.ts
2
2
  import {
3
+ DurableClock,
3
4
  ProdChildToWorkerMessages,
4
5
  ProdWorkerToChildMessages,
5
6
  TaskExecutor,
6
7
  ZodIpcConnection,
7
- DurableClock,
8
+ ZodSchemaParsedError,
8
9
  clock,
9
10
  getEnvVar,
10
11
  logLevels,
11
- ZodSchemaParsedError
12
+ taskCatalog
12
13
  } from "@trigger.dev/core/v3";
13
14
  import "source-map-support/register.js";
14
15
  import {
@@ -22,7 +23,7 @@ import {
22
23
  } from "@trigger.dev/core/v3";
23
24
 
24
25
  // package.json
25
- var version = "3.0.0-beta.12";
26
+ var version = "3.0.0-beta.14";
26
27
 
27
28
  // src/workers/prod/worker-facade.ts
28
29
  __WORKER_SETUP__;
@@ -32,7 +33,7 @@ var otelLogger = tracingSDK.getLogger("trigger-prod-worker", version);
32
33
  var durableClock = new DurableClock();
33
34
  clock.setGlobalClock(durableClock);
34
35
  var tracer = new TriggerTracer({ tracer: otelTracer, logger: otelLogger });
35
- var consoleInterceptor = new ConsoleInterceptor(otelLogger);
36
+ var consoleInterceptor = new ConsoleInterceptor(otelLogger, false);
36
37
  var triggerLogLevel = getEnvVar("TRIGGER_LOG_LEVEL");
37
38
  var configLogLevel = triggerLogLevel ? triggerLogLevel : importedConfig ? importedConfig.logLevel : __PROJECT_CONFIG__.logLevel;
38
39
  var otelTaskLogger = new OtelTaskLogger({
@@ -44,50 +45,19 @@ logger.setGlobalTaskLogger(otelTaskLogger);
44
45
  var TaskFileImports = {};
45
46
  var TaskFiles = {};
46
47
  __TASKS__;
47
- function getTasks() {
48
- const result = [];
48
+ (() => {
49
49
  for (const [importName, taskFile] of Object.entries(TaskFiles)) {
50
50
  const fileImports = TaskFileImports[importName];
51
51
  for (const [exportName, task] of Object.entries(fileImports ?? {})) {
52
- if (task.__trigger) {
53
- result.push({
54
- id: task.__trigger.id,
52
+ if (typeof task === "object" && task !== null && "id" in task && typeof task.id === "string") {
53
+ taskCatalog.registerTaskFileMetadata(task.id, {
55
54
  exportName,
56
- packageVersion: task.__trigger.packageVersion,
57
- filePath: taskFile.filePath,
58
- queue: task.__trigger.queue,
59
- retry: task.__trigger.retry,
60
- machine: task.__trigger.machine,
61
- fns: task.__trigger.fns
55
+ filePath: taskFile.filePath
62
56
  });
63
57
  }
64
58
  }
65
59
  }
66
- return result;
67
- }
68
- function getTaskMetadata() {
69
- const result = getTasks();
70
- return result.map((task) => {
71
- const { fns, ...metadata } = task;
72
- return metadata;
73
- });
74
- }
75
- var tasks = getTasks();
76
- runtime.registerTasks(tasks);
77
- var taskExecutors = /* @__PURE__ */ new Map();
78
- for (const task of tasks) {
79
- taskExecutors.set(
80
- task.id,
81
- new TaskExecutor(task, {
82
- tracer,
83
- tracingSDK,
84
- consoleInterceptor,
85
- projectConfig: __PROJECT_CONFIG__,
86
- importedConfig,
87
- handleErrorFn: handleError
88
- })
89
- );
90
- }
60
+ })();
91
61
  var _execution;
92
62
  var _isRunning = false;
93
63
  var zodIpc = new ZodIpcConnection({
@@ -112,9 +82,9 @@ var zodIpc = new ZodIpcConnection({
112
82
  return;
113
83
  }
114
84
  process.title = `trigger-prod-worker: ${execution.task.id} ${execution.run.id}`;
115
- const executor = taskExecutors.get(execution.task.id);
116
- if (!executor) {
117
- console.error(`Could not find executor for task ${execution.task.id}`);
85
+ const task = taskCatalog.getTask(execution.task.id);
86
+ if (!task) {
87
+ console.error(`Could not find task ${execution.task.id}`);
118
88
  await sender.send("TASK_RUN_COMPLETED", {
119
89
  execution,
120
90
  result: {
@@ -128,6 +98,14 @@ var zodIpc = new ZodIpcConnection({
128
98
  });
129
99
  return;
130
100
  }
101
+ const executor = new TaskExecutor(task, {
102
+ tracer,
103
+ tracingSDK,
104
+ consoleInterceptor,
105
+ projectConfig: __PROJECT_CONFIG__,
106
+ importedConfig,
107
+ handleErrorFn: handleError
108
+ });
131
109
  try {
132
110
  _execution = execution;
133
111
  _isRunning = true;
@@ -150,6 +128,20 @@ var zodIpc = new ZodIpcConnection({
150
128
  CLEANUP: async ({ flush, kill }, sender) => {
151
129
  if (kill) {
152
130
  await tracingSDK.flush();
131
+ if (_execution) {
132
+ await sender.send("TASK_RUN_COMPLETED", {
133
+ execution: _execution,
134
+ result: {
135
+ ok: false,
136
+ id: _execution.attempt.id,
137
+ error: {
138
+ type: "INTERNAL_ERROR",
139
+ code: TaskRunErrorCodes.GRACEFUL_EXIT_TIMEOUT,
140
+ message: "Worker process killed while attempt in progress."
141
+ }
142
+ }
143
+ });
144
+ }
153
145
  await sender.send("READY_TO_DISPOSE", void 0);
154
146
  } else {
155
147
  if (flush) {
@@ -159,11 +151,13 @@ var zodIpc = new ZodIpcConnection({
159
151
  }
160
152
  }
161
153
  });
154
+ process.on("SIGTERM", async () => {
155
+ });
162
156
  var prodRuntimeManager = new ProdRuntimeManager(zodIpc, {
163
157
  waitThresholdInMs: parseInt(process.env.TRIGGER_RUNTIME_WAIT_THRESHOLD_IN_MS ?? "30000", 10)
164
158
  });
165
159
  runtime.setGlobalRuntimeManager(prodRuntimeManager);
166
- var TASK_METADATA = getTaskMetadata();
160
+ var TASK_METADATA = taskCatalog.getAllTaskMetadata();
167
161
  zodIpc.send("TASKS_READY", { tasks: TASK_METADATA }).catch((err) => {
168
162
  if (err instanceof ZodSchemaParsedError) {
169
163
  zodIpc.send("TASKS_FAILED_TO_PARSE", { zodIssues: err.error.issues, tasks: TASK_METADATA });
@@ -2,7 +2,9 @@
2
2
  import { Resource } from "@opentelemetry/resources";
3
3
  import {
4
4
  SemanticInternalAttributes,
5
- TracingSDK
5
+ StandardTaskCatalog,
6
+ TracingSDK,
7
+ taskCatalog
6
8
  } from "@trigger.dev/core/v3";
7
9
  __SETUP_IMPORTED_PROJECT_CONFIG__;
8
10
  var tracingSDK = new TracingSDK({
@@ -30,6 +32,7 @@ process.on("uncaughtException", (error, origin) => {
30
32
  }
31
33
  });
32
34
  });
35
+ taskCatalog.setGlobalTaskCatalog(new StandardTaskCatalog());
33
36
  export {
34
37
  tracingSDK
35
38
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trigger.dev",
3
- "version": "3.0.0-beta.12",
3
+ "version": "3.0.0-beta.14",
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",
@@ -53,7 +53,7 @@
53
53
  "typescript": "^5.3.3",
54
54
  "vitest": "^0.34.4",
55
55
  "xdg-app-paths": "^8.3.0",
56
- "@trigger.dev/core-apps": "3.0.0-beta.12",
56
+ "@trigger.dev/core-apps": "3.0.0-beta.14",
57
57
  "@trigger.dev/tsconfig": "0.0.0"
58
58
  },
59
59
  "dependencies": {
@@ -71,7 +71,7 @@
71
71
  "@opentelemetry/sdk-trace-base": "^1.22.0",
72
72
  "@opentelemetry/sdk-trace-node": "^1.22.0",
73
73
  "@opentelemetry/semantic-conventions": "^1.22.0",
74
- "@trigger.dev/core": "^3.0.0-beta.12",
74
+ "@trigger.dev/core": "^3.0.0-beta.14",
75
75
  "@types/degit": "^2.8.3",
76
76
  "chalk": "^5.2.0",
77
77
  "chokidar": "^3.5.3",