duron 0.3.0-beta.4 → 0.3.0-beta.6
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/adapters/postgres/base.d.ts.map +1 -1
- package/dist/adapters/postgres/base.js +5 -2
- package/dist/adapters/postgres/schema.d.ts.map +1 -1
- package/dist/adapters/postgres/schema.js +1 -1
- package/dist/client.d.ts +25 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +102 -2
- package/dist/step-manager.d.ts.map +1 -1
- package/dist/step-manager.js +3 -2
- package/migrations/postgres/{20251203223656_conscious_johnny_blaze → 20260119153838_flimsy_thor_girl}/migration.sql +29 -2
- package/migrations/postgres/{20260118202533_wealthy_mysterio → 20260119153838_flimsy_thor_girl}/snapshot.json +39 -15
- package/package.json +1 -1
- package/src/adapters/postgres/base.ts +5 -2
- package/src/adapters/postgres/schema.ts +3 -2
- package/src/client.ts +187 -8
- package/src/step-manager.ts +5 -3
- package/migrations/postgres/20251203223656_conscious_johnny_blaze/snapshot.json +0 -941
- package/migrations/postgres/20260117231749_clumsy_penance/migration.sql +0 -3
- package/migrations/postgres/20260117231749_clumsy_penance/snapshot.json +0 -988
- package/migrations/postgres/20260118202533_wealthy_mysterio/migration.sql +0 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/base.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -539,7 +539,9 @@ export class PostgresBaseAdapter extends Adapter {
|
|
|
539
539
|
step_existed AS (
|
|
540
540
|
SELECT EXISTS(
|
|
541
541
|
SELECT 1 FROM ${this.tables.jobStepsTable} s
|
|
542
|
-
WHERE s.job_id = ${jobId}
|
|
542
|
+
WHERE s.job_id = ${jobId}
|
|
543
|
+
AND s.name = ${name}
|
|
544
|
+
AND s.parent_step_id IS NOT DISTINCT FROM ${parentStepId}
|
|
543
545
|
) AS existed
|
|
544
546
|
),
|
|
545
547
|
upserted_step AS (
|
|
@@ -569,7 +571,7 @@ export class PostgresBaseAdapter extends Adapter {
|
|
|
569
571
|
0,
|
|
570
572
|
NULL
|
|
571
573
|
WHERE EXISTS (SELECT 1 FROM job_check)
|
|
572
|
-
ON CONFLICT (job_id, name) DO UPDATE
|
|
574
|
+
ON CONFLICT (job_id, name, parent_step_id) DO UPDATE
|
|
573
575
|
SET
|
|
574
576
|
timeout_ms = ${timeoutMs},
|
|
575
577
|
expires_at = now() + interval '${sql.raw(timeoutMs.toString())} milliseconds',
|
|
@@ -609,6 +611,7 @@ export class PostgresBaseAdapter extends Adapter {
|
|
|
609
611
|
INNER JOIN job_check jc ON s.job_id = jc.id
|
|
610
612
|
WHERE s.job_id = ${jobId}
|
|
611
613
|
AND s.name = ${name}
|
|
614
|
+
AND s.parent_step_id IS NOT DISTINCT FROM ${parentStepId}
|
|
612
615
|
AND NOT EXISTS (SELECT 1 FROM final_upserted)
|
|
613
616
|
)
|
|
614
617
|
SELECT * FROM final_upserted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA4Eb,IAAI;uBAAS,iBAAiB;2BAAa,MAAM;;;;;;8BAAjD,IAAI;2BAAS,iBAAiB;+BAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA4Eb,IAAI;uBAAS,iBAAiB;2BAAa,MAAM;;;;;;8BAAjD,IAAI;2BAAS,iBAAiB;+BAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyE1F"}
|
|
@@ -79,7 +79,7 @@ export default function createSchema(schemaName) {
|
|
|
79
79
|
index('idx_job_steps_job_status').on(table.job_id, table.status),
|
|
80
80
|
index('idx_job_steps_job_name').on(table.job_id, table.name),
|
|
81
81
|
index('idx_job_steps_output_fts').using('gin', sql `to_tsvector('english', ${table.output}::text)`),
|
|
82
|
-
unique('
|
|
82
|
+
unique('unique_job_step_name_parent').on(table.job_id, table.name, table.parent_step_id).nullsNotDistinct(),
|
|
83
83
|
check('job_steps_status_check', sql `${table.status} IN ${sql.raw(`(${STEP_STATUSES.map((s) => `'${s}'`).join(',')})`)}`),
|
|
84
84
|
]);
|
|
85
85
|
const metricsTable = schema.table('metrics', {
|
package/dist/client.d.ts
CHANGED
|
@@ -3,7 +3,27 @@ import * as z from 'zod';
|
|
|
3
3
|
import type { Action } from './action.js';
|
|
4
4
|
import type { Adapter, GetActionsResult, GetJobStepsOptions, GetJobStepsResult, GetJobsOptions, GetJobsResult, GetMetricsOptions, GetMetricsResult, Job, JobStep } from './adapters/adapter.js';
|
|
5
5
|
import type { JobStatusResult, JobStepStatusResult } from './adapters/schemas.js';
|
|
6
|
+
import { type JobStatus } from './constants.js';
|
|
6
7
|
import { type TelemetryAdapter } from './telemetry/index.js';
|
|
8
|
+
type InferActionSchema<T> = T extends z.ZodTypeAny ? z.infer<T> : Record<string, unknown>;
|
|
9
|
+
export interface JobResult {
|
|
10
|
+
jobId: string;
|
|
11
|
+
actionName: string;
|
|
12
|
+
status: JobStatus;
|
|
13
|
+
groupKey: string;
|
|
14
|
+
input: unknown;
|
|
15
|
+
output: unknown;
|
|
16
|
+
error: Job['error'];
|
|
17
|
+
}
|
|
18
|
+
export interface TypedJobResult<TAction extends Action<any, any, any>> {
|
|
19
|
+
jobId: string;
|
|
20
|
+
actionName: string;
|
|
21
|
+
status: JobStatus;
|
|
22
|
+
groupKey: string;
|
|
23
|
+
input: InferActionSchema<NonNullable<TAction['input']>>;
|
|
24
|
+
output: InferActionSchema<NonNullable<TAction['output']>>;
|
|
25
|
+
error: Job['error'];
|
|
26
|
+
}
|
|
7
27
|
declare const BaseOptionsSchema: z.ZodObject<{
|
|
8
28
|
id: z.ZodOptional<z.ZodString>;
|
|
9
29
|
syncPattern: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"pull">, z.ZodLiteral<"push">, z.ZodLiteral<"hybrid">, z.ZodLiteral<false>]>>;
|
|
@@ -48,6 +68,10 @@ export declare class Client<TActions extends Record<string, Action<any, any, TVa
|
|
|
48
68
|
id?: string | undefined;
|
|
49
69
|
};
|
|
50
70
|
runAction<TActionName extends keyof TActions>(actionName: TActionName, input?: NonNullable<TActions[TActionName]['input']> extends z.ZodObject ? z.input<NonNullable<TActions[TActionName]['input']>> : never): Promise<string>;
|
|
71
|
+
runActionAndWait<TActionName extends keyof TActions>(actionName: TActionName, input?: NonNullable<TActions[TActionName]['input']> extends z.ZodObject ? z.input<NonNullable<TActions[TActionName]['input']>> : never, options?: {
|
|
72
|
+
signal?: AbortSignal;
|
|
73
|
+
timeout?: number;
|
|
74
|
+
}): Promise<TypedJobResult<TActions[TActionName]>>;
|
|
51
75
|
fetch(options: FetchOptions): Promise<{
|
|
52
76
|
id: string;
|
|
53
77
|
actionName: string;
|
|
@@ -79,7 +103,7 @@ export declare class Client<TActions extends Record<string, Action<any, any, TVa
|
|
|
79
103
|
waitForJob(jobId: string, options?: {
|
|
80
104
|
timeout?: number;
|
|
81
105
|
signal?: AbortSignal;
|
|
82
|
-
}): Promise<
|
|
106
|
+
}): Promise<JobResult | null>;
|
|
83
107
|
getActions(): Promise<GetActionsResult>;
|
|
84
108
|
getMetrics(options: GetMetricsOptions): Promise<GetMetricsResult>;
|
|
85
109
|
getActionsMetadata(): Promise<Array<{
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,OAAO,KAAK,EAAE,MAAM,EAA6B,MAAM,aAAa,CAAA;AAEpE,OAAO,KAAK,EACV,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,GAAG,EACH,OAAO,EACR,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -117,6 +117,87 @@ export class Client {
|
|
|
117
117
|
this.#logger.debug({ jobId, actionName: String(actionName), groupKey }, '[Duron] Action sent/created');
|
|
118
118
|
return jobId;
|
|
119
119
|
}
|
|
120
|
+
async runActionAndWait(actionName, input, options) {
|
|
121
|
+
if (options?.signal?.aborted) {
|
|
122
|
+
throw new Error('Operation was aborted');
|
|
123
|
+
}
|
|
124
|
+
const jobId = await this.runAction(actionName, input);
|
|
125
|
+
let abortHandler;
|
|
126
|
+
if (options?.signal) {
|
|
127
|
+
abortHandler = () => {
|
|
128
|
+
this.cancelJob(jobId).catch((err) => {
|
|
129
|
+
this.#logger.error({ err, jobId }, '[Duron] Error cancelling job on abort');
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
options.signal.addEventListener('abort', abortHandler, { once: true });
|
|
133
|
+
}
|
|
134
|
+
let timeoutId;
|
|
135
|
+
let timeoutAbortController;
|
|
136
|
+
if (options?.timeout) {
|
|
137
|
+
timeoutAbortController = new AbortController();
|
|
138
|
+
timeoutId = setTimeout(() => {
|
|
139
|
+
timeoutAbortController.abort();
|
|
140
|
+
this.cancelJob(jobId).catch((err) => {
|
|
141
|
+
this.#logger.error({ err, jobId }, '[Duron] Error cancelling job on timeout');
|
|
142
|
+
});
|
|
143
|
+
}, options.timeout);
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
let waitSignal;
|
|
147
|
+
if (options?.signal && timeoutAbortController) {
|
|
148
|
+
waitSignal = AbortSignal.any([options.signal, timeoutAbortController.signal]);
|
|
149
|
+
}
|
|
150
|
+
else if (options?.signal) {
|
|
151
|
+
waitSignal = options.signal;
|
|
152
|
+
}
|
|
153
|
+
else if (timeoutAbortController) {
|
|
154
|
+
waitSignal = timeoutAbortController.signal;
|
|
155
|
+
}
|
|
156
|
+
const job = await this.waitForJob(jobId, { signal: waitSignal });
|
|
157
|
+
if (timeoutId) {
|
|
158
|
+
clearTimeout(timeoutId);
|
|
159
|
+
}
|
|
160
|
+
if (options?.signal && abortHandler) {
|
|
161
|
+
options.signal.removeEventListener('abort', abortHandler);
|
|
162
|
+
}
|
|
163
|
+
if (!job) {
|
|
164
|
+
if (options?.signal?.aborted) {
|
|
165
|
+
throw new Error('Operation was aborted');
|
|
166
|
+
}
|
|
167
|
+
if (timeoutAbortController?.signal.aborted) {
|
|
168
|
+
throw new Error('Operation timed out');
|
|
169
|
+
}
|
|
170
|
+
throw new Error('Job not found');
|
|
171
|
+
}
|
|
172
|
+
if (job.status === JOB_STATUS_CANCELLED) {
|
|
173
|
+
if (options?.signal?.aborted) {
|
|
174
|
+
throw new Error('Operation was aborted');
|
|
175
|
+
}
|
|
176
|
+
if (timeoutAbortController?.signal.aborted) {
|
|
177
|
+
throw new Error('Operation timed out');
|
|
178
|
+
}
|
|
179
|
+
throw new Error('Job was cancelled');
|
|
180
|
+
}
|
|
181
|
+
if (job.status === JOB_STATUS_FAILED) {
|
|
182
|
+
const errorMessage = job.error?.message ?? 'Job failed';
|
|
183
|
+
const error = new Error(errorMessage);
|
|
184
|
+
if (job.error?.stack) {
|
|
185
|
+
error.stack = job.error.stack;
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
return job;
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
if (timeoutId) {
|
|
193
|
+
clearTimeout(timeoutId);
|
|
194
|
+
}
|
|
195
|
+
if (options?.signal && abortHandler) {
|
|
196
|
+
options.signal.removeEventListener('abort', abortHandler);
|
|
197
|
+
}
|
|
198
|
+
throw err;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
120
201
|
async fetch(options) {
|
|
121
202
|
await this.start();
|
|
122
203
|
if (!this.#actions) {
|
|
@@ -194,7 +275,15 @@ export class Client {
|
|
|
194
275
|
if (!job) {
|
|
195
276
|
return null;
|
|
196
277
|
}
|
|
197
|
-
return
|
|
278
|
+
return {
|
|
279
|
+
jobId: job.id,
|
|
280
|
+
actionName: job.actionName,
|
|
281
|
+
status: job.status,
|
|
282
|
+
groupKey: job.groupKey,
|
|
283
|
+
input: job.input,
|
|
284
|
+
output: job.output,
|
|
285
|
+
error: job.error,
|
|
286
|
+
};
|
|
198
287
|
}
|
|
199
288
|
}
|
|
200
289
|
this.#setupJobStatusListener();
|
|
@@ -347,6 +436,17 @@ export class Client {
|
|
|
347
436
|
return;
|
|
348
437
|
}
|
|
349
438
|
const job = await this.getJobById(event.jobId);
|
|
439
|
+
const result = job
|
|
440
|
+
? {
|
|
441
|
+
jobId: job.id,
|
|
442
|
+
actionName: job.actionName,
|
|
443
|
+
status: job.status,
|
|
444
|
+
groupKey: job.groupKey,
|
|
445
|
+
input: job.input,
|
|
446
|
+
output: job.output,
|
|
447
|
+
error: job.error,
|
|
448
|
+
}
|
|
449
|
+
: null;
|
|
350
450
|
const waitsToResolve = Array.from(pendingWaits);
|
|
351
451
|
this.#pendingJobWaits.delete(event.jobId);
|
|
352
452
|
for (const wait of waitsToResolve) {
|
|
@@ -356,7 +456,7 @@ export class Client {
|
|
|
356
456
|
if (wait.signal && wait.abortHandler) {
|
|
357
457
|
wait.signal.removeEventListener('abort', wait.abortHandler);
|
|
358
458
|
}
|
|
359
|
-
wait.resolve(
|
|
459
|
+
wait.resolve(result);
|
|
360
460
|
}
|
|
361
461
|
});
|
|
362
462
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"step-manager.d.ts","sourceRoot":"","sources":["../src/step-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,OAAO,EACL,KAAK,MAAM,EACX,KAAK,oBAAoB,EAGzB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,OAAO,EAAgC,MAAM,uBAAuB,CAAA;AAClF,OAAO,EAAoE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAWlH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAIpF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7C,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAMD,qBAAa,SAAS;;gBAYR,OAAO,EAAE,OAAO;IAoBtB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,QAAQ,GAAE,OAAe;;;;;;;;;;IAyBrB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7F,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAG3E;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,gBAAgB,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAMD,qBAAa,WAAW;;gBAyBV,OAAO,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"step-manager.d.ts","sourceRoot":"","sources":["../src/step-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,OAAO,EACL,KAAK,MAAM,EACX,KAAK,oBAAoB,EAGzB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAEjB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,OAAO,EAAgC,MAAM,uBAAuB,CAAA;AAClF,OAAO,EAAoE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAWlH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAIpF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7C,OAAO,EAAE,WAAW,CAAA;IACpB,WAAW,EAAE,WAAW,CAAA;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAMD,qBAAa,SAAS;;gBAYR,OAAO,EAAE,OAAO;IAoBtB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,YAAY,GAAE,MAAM,GAAG,IAAW,EAClC,QAAQ,GAAE,OAAe;;;;;;;;;;IAyBrB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB7F,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;CAG3E;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,gBAAgB,CAAA;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAMD,qBAAa,WAAW;;gBAyBV,OAAO,EAAE,kBAAkB;IAqBvC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAU5B,eAAe,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,WAAW,KAAK,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI;IAoBpH,mBAAmB,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/G,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAC3C,SAAS,EAAE,UAAU,EACrB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,GAC7B,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC;IAO3C,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IA6BlD,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAQlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAkT7B"}
|
package/dist/step-manager.js
CHANGED
|
@@ -58,10 +58,11 @@ export class StepManager {
|
|
|
58
58
|
this.#telemetry = options.telemetry;
|
|
59
59
|
this.#stepStore = new StepStore(options.adapter);
|
|
60
60
|
this.#queue = fastq.promise(async (task) => {
|
|
61
|
-
|
|
61
|
+
const stepKey = `${task.parentStepId ?? 'root'}:${task.name}`;
|
|
62
|
+
if (this.#historySteps.has(stepKey)) {
|
|
62
63
|
throw new StepAlreadyExecutedError(task.name, this.#jobId, this.#actionName);
|
|
63
64
|
}
|
|
64
|
-
this.#historySteps.add(
|
|
65
|
+
this.#historySteps.add(stepKey);
|
|
65
66
|
return this.#executeStep(task.name, task.cb, task.options, task.abortSignal, task.parentStepId, task.parallel);
|
|
66
67
|
}, options.concurrencyLimit);
|
|
67
68
|
}
|
|
@@ -3,6 +3,8 @@ CREATE SCHEMA IF NOT EXISTS "duron";
|
|
|
3
3
|
CREATE TABLE "duron"."job_steps" (
|
|
4
4
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
5
5
|
"job_id" uuid NOT NULL,
|
|
6
|
+
"parent_step_id" uuid,
|
|
7
|
+
"branch" boolean DEFAULT false NOT NULL,
|
|
6
8
|
"name" text NOT NULL,
|
|
7
9
|
"status" text DEFAULT 'active' NOT NULL,
|
|
8
10
|
"output" jsonb,
|
|
@@ -17,7 +19,7 @@ CREATE TABLE "duron"."job_steps" (
|
|
|
17
19
|
"history_failed_attempts" jsonb DEFAULT '{}' NOT NULL,
|
|
18
20
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
19
21
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
20
|
-
CONSTRAINT "
|
|
22
|
+
CONSTRAINT "unique_job_step_name_parent" UNIQUE NULLS NOT DISTINCT("job_id","name","parent_step_id"),
|
|
21
23
|
CONSTRAINT "job_steps_status_check" CHECK ("status" IN ('active','completed','failed','cancelled'))
|
|
22
24
|
);
|
|
23
25
|
--> statement-breakpoint
|
|
@@ -41,10 +43,24 @@ CREATE TABLE "duron"."jobs" (
|
|
|
41
43
|
CONSTRAINT "jobs_status_check" CHECK ("status" IN ('created','active','completed','failed','cancelled'))
|
|
42
44
|
);
|
|
43
45
|
--> statement-breakpoint
|
|
46
|
+
CREATE TABLE "duron"."metrics" (
|
|
47
|
+
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
48
|
+
"job_id" uuid NOT NULL,
|
|
49
|
+
"step_id" uuid,
|
|
50
|
+
"name" text NOT NULL,
|
|
51
|
+
"value" double precision NOT NULL,
|
|
52
|
+
"attributes" jsonb DEFAULT '{}' NOT NULL,
|
|
53
|
+
"type" text NOT NULL,
|
|
54
|
+
"timestamp" timestamp with time zone DEFAULT now() NOT NULL,
|
|
55
|
+
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
56
|
+
CONSTRAINT "metrics_type_check" CHECK ("type" IN ('metric', 'span_event', 'span_attribute'))
|
|
57
|
+
);
|
|
58
|
+
--> statement-breakpoint
|
|
44
59
|
CREATE INDEX "idx_job_steps_job_id" ON "duron"."job_steps" ("job_id");--> statement-breakpoint
|
|
45
60
|
CREATE INDEX "idx_job_steps_status" ON "duron"."job_steps" ("status");--> statement-breakpoint
|
|
46
61
|
CREATE INDEX "idx_job_steps_name" ON "duron"."job_steps" ("name");--> statement-breakpoint
|
|
47
62
|
CREATE INDEX "idx_job_steps_expires_at" ON "duron"."job_steps" ("expires_at");--> statement-breakpoint
|
|
63
|
+
CREATE INDEX "idx_job_steps_parent_step_id" ON "duron"."job_steps" ("parent_step_id");--> statement-breakpoint
|
|
48
64
|
CREATE INDEX "idx_job_steps_job_status" ON "duron"."job_steps" ("job_id","status");--> statement-breakpoint
|
|
49
65
|
CREATE INDEX "idx_job_steps_job_name" ON "duron"."job_steps" ("job_id","name");--> statement-breakpoint
|
|
50
66
|
CREATE INDEX "idx_job_steps_output_fts" ON "duron"."job_steps" USING gin (to_tsvector('english', "output"::text));--> statement-breakpoint
|
|
@@ -61,4 +77,15 @@ CREATE INDEX "idx_jobs_action_status" ON "duron"."jobs" ("action_name","status")
|
|
|
61
77
|
CREATE INDEX "idx_jobs_action_group" ON "duron"."jobs" ("action_name","group_key");--> statement-breakpoint
|
|
62
78
|
CREATE INDEX "idx_jobs_input_fts" ON "duron"."jobs" USING gin (to_tsvector('english', "input"::text));--> statement-breakpoint
|
|
63
79
|
CREATE INDEX "idx_jobs_output_fts" ON "duron"."jobs" USING gin (to_tsvector('english', "output"::text));--> statement-breakpoint
|
|
64
|
-
|
|
80
|
+
CREATE INDEX "idx_metrics_job_id" ON "duron"."metrics" ("job_id");--> statement-breakpoint
|
|
81
|
+
CREATE INDEX "idx_metrics_step_id" ON "duron"."metrics" ("step_id");--> statement-breakpoint
|
|
82
|
+
CREATE INDEX "idx_metrics_name" ON "duron"."metrics" ("name");--> statement-breakpoint
|
|
83
|
+
CREATE INDEX "idx_metrics_type" ON "duron"."metrics" ("type");--> statement-breakpoint
|
|
84
|
+
CREATE INDEX "idx_metrics_timestamp" ON "duron"."metrics" ("timestamp");--> statement-breakpoint
|
|
85
|
+
CREATE INDEX "idx_metrics_job_step" ON "duron"."metrics" ("job_id","step_id");--> statement-breakpoint
|
|
86
|
+
CREATE INDEX "idx_metrics_job_name" ON "duron"."metrics" ("job_id","name");--> statement-breakpoint
|
|
87
|
+
CREATE INDEX "idx_metrics_job_type" ON "duron"."metrics" ("job_id","type");--> statement-breakpoint
|
|
88
|
+
CREATE INDEX "idx_metrics_attributes" ON "duron"."metrics" USING gin ("attributes");--> statement-breakpoint
|
|
89
|
+
ALTER TABLE "duron"."job_steps" ADD CONSTRAINT "job_steps_job_id_jobs_id_fkey" FOREIGN KEY ("job_id") REFERENCES "duron"."jobs"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
90
|
+
ALTER TABLE "duron"."metrics" ADD CONSTRAINT "metrics_job_id_jobs_id_fkey" FOREIGN KEY ("job_id") REFERENCES "duron"."jobs"("id") ON DELETE CASCADE;--> statement-breakpoint
|
|
91
|
+
ALTER TABLE "duron"."metrics" ADD CONSTRAINT "metrics_step_id_job_steps_id_fkey" FOREIGN KEY ("step_id") REFERENCES "duron"."job_steps"("id") ON DELETE CASCADE;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "8",
|
|
3
3
|
"dialect": "postgres",
|
|
4
|
-
"id": "
|
|
5
|
-
"prevIds": [
|
|
4
|
+
"id": "4e93c0bf-b135-40b4-b130-0cf0968bffe3",
|
|
5
|
+
"prevIds": [
|
|
6
|
+
"00000000-0000-0000-0000-000000000000"
|
|
7
|
+
],
|
|
6
8
|
"ddl": [
|
|
7
9
|
{
|
|
8
10
|
"name": "duron",
|
|
@@ -1266,10 +1268,14 @@
|
|
|
1266
1268
|
},
|
|
1267
1269
|
{
|
|
1268
1270
|
"nameExplicit": false,
|
|
1269
|
-
"columns": [
|
|
1271
|
+
"columns": [
|
|
1272
|
+
"job_id"
|
|
1273
|
+
],
|
|
1270
1274
|
"schemaTo": "duron",
|
|
1271
1275
|
"tableTo": "jobs",
|
|
1272
|
-
"columnsTo": [
|
|
1276
|
+
"columnsTo": [
|
|
1277
|
+
"id"
|
|
1278
|
+
],
|
|
1273
1279
|
"onUpdate": "NO ACTION",
|
|
1274
1280
|
"onDelete": "CASCADE",
|
|
1275
1281
|
"name": "job_steps_job_id_jobs_id_fkey",
|
|
@@ -1279,10 +1285,14 @@
|
|
|
1279
1285
|
},
|
|
1280
1286
|
{
|
|
1281
1287
|
"nameExplicit": false,
|
|
1282
|
-
"columns": [
|
|
1288
|
+
"columns": [
|
|
1289
|
+
"job_id"
|
|
1290
|
+
],
|
|
1283
1291
|
"schemaTo": "duron",
|
|
1284
1292
|
"tableTo": "jobs",
|
|
1285
|
-
"columnsTo": [
|
|
1293
|
+
"columnsTo": [
|
|
1294
|
+
"id"
|
|
1295
|
+
],
|
|
1286
1296
|
"onUpdate": "NO ACTION",
|
|
1287
1297
|
"onDelete": "CASCADE",
|
|
1288
1298
|
"name": "metrics_job_id_jobs_id_fkey",
|
|
@@ -1292,10 +1302,14 @@
|
|
|
1292
1302
|
},
|
|
1293
1303
|
{
|
|
1294
1304
|
"nameExplicit": false,
|
|
1295
|
-
"columns": [
|
|
1305
|
+
"columns": [
|
|
1306
|
+
"step_id"
|
|
1307
|
+
],
|
|
1296
1308
|
"schemaTo": "duron",
|
|
1297
1309
|
"tableTo": "job_steps",
|
|
1298
|
-
"columnsTo": [
|
|
1310
|
+
"columnsTo": [
|
|
1311
|
+
"id"
|
|
1312
|
+
],
|
|
1299
1313
|
"onUpdate": "NO ACTION",
|
|
1300
1314
|
"onDelete": "CASCADE",
|
|
1301
1315
|
"name": "metrics_step_id_job_steps_id_fkey",
|
|
@@ -1304,7 +1318,9 @@
|
|
|
1304
1318
|
"table": "metrics"
|
|
1305
1319
|
},
|
|
1306
1320
|
{
|
|
1307
|
-
"columns": [
|
|
1321
|
+
"columns": [
|
|
1322
|
+
"id"
|
|
1323
|
+
],
|
|
1308
1324
|
"nameExplicit": false,
|
|
1309
1325
|
"name": "job_steps_pkey",
|
|
1310
1326
|
"schema": "duron",
|
|
@@ -1312,7 +1328,9 @@
|
|
|
1312
1328
|
"entityType": "pks"
|
|
1313
1329
|
},
|
|
1314
1330
|
{
|
|
1315
|
-
"columns": [
|
|
1331
|
+
"columns": [
|
|
1332
|
+
"id"
|
|
1333
|
+
],
|
|
1316
1334
|
"nameExplicit": false,
|
|
1317
1335
|
"name": "jobs_pkey",
|
|
1318
1336
|
"schema": "duron",
|
|
@@ -1320,7 +1338,9 @@
|
|
|
1320
1338
|
"entityType": "pks"
|
|
1321
1339
|
},
|
|
1322
1340
|
{
|
|
1323
|
-
"columns": [
|
|
1341
|
+
"columns": [
|
|
1342
|
+
"id"
|
|
1343
|
+
],
|
|
1324
1344
|
"nameExplicit": false,
|
|
1325
1345
|
"name": "metrics_pkey",
|
|
1326
1346
|
"schema": "duron",
|
|
@@ -1329,9 +1349,13 @@
|
|
|
1329
1349
|
},
|
|
1330
1350
|
{
|
|
1331
1351
|
"nameExplicit": true,
|
|
1332
|
-
"columns": [
|
|
1333
|
-
|
|
1334
|
-
|
|
1352
|
+
"columns": [
|
|
1353
|
+
"job_id",
|
|
1354
|
+
"name",
|
|
1355
|
+
"parent_step_id"
|
|
1356
|
+
],
|
|
1357
|
+
"nullsNotDistinct": true,
|
|
1358
|
+
"name": "unique_job_step_name_parent",
|
|
1335
1359
|
"entityType": "uniques",
|
|
1336
1360
|
"schema": "duron",
|
|
1337
1361
|
"table": "job_steps"
|
|
@@ -1359,4 +1383,4 @@
|
|
|
1359
1383
|
}
|
|
1360
1384
|
],
|
|
1361
1385
|
"renames": []
|
|
1362
|
-
}
|
|
1386
|
+
}
|
package/package.json
CHANGED
|
@@ -788,7 +788,9 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
788
788
|
step_existed AS (
|
|
789
789
|
SELECT EXISTS(
|
|
790
790
|
SELECT 1 FROM ${this.tables.jobStepsTable} s
|
|
791
|
-
WHERE s.job_id = ${jobId}
|
|
791
|
+
WHERE s.job_id = ${jobId}
|
|
792
|
+
AND s.name = ${name}
|
|
793
|
+
AND s.parent_step_id IS NOT DISTINCT FROM ${parentStepId}
|
|
792
794
|
) AS existed
|
|
793
795
|
),
|
|
794
796
|
upserted_step AS (
|
|
@@ -818,7 +820,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
818
820
|
0,
|
|
819
821
|
NULL
|
|
820
822
|
WHERE EXISTS (SELECT 1 FROM job_check)
|
|
821
|
-
ON CONFLICT (job_id, name) DO UPDATE
|
|
823
|
+
ON CONFLICT (job_id, name, parent_step_id) DO UPDATE
|
|
822
824
|
SET
|
|
823
825
|
timeout_ms = ${timeoutMs},
|
|
824
826
|
expires_at = now() + interval '${sql.raw(timeoutMs.toString())} milliseconds',
|
|
@@ -858,6 +860,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
858
860
|
INNER JOIN job_check jc ON s.job_id = jc.id
|
|
859
861
|
WHERE s.job_id = ${jobId}
|
|
860
862
|
AND s.name = ${name}
|
|
863
|
+
AND s.parent_step_id IS NOT DISTINCT FROM ${parentStepId}
|
|
861
864
|
AND NOT EXISTS (SELECT 1 FROM final_upserted)
|
|
862
865
|
)
|
|
863
866
|
SELECT * FROM final_upserted
|
|
@@ -117,8 +117,9 @@ export default function createSchema(schemaName: string) {
|
|
|
117
117
|
index('idx_job_steps_job_status').on(table.job_id, table.status),
|
|
118
118
|
index('idx_job_steps_job_name').on(table.job_id, table.name),
|
|
119
119
|
index('idx_job_steps_output_fts').using('gin', sql`to_tsvector('english', ${table.output}::text)`),
|
|
120
|
-
// Unique constraint
|
|
121
|
-
|
|
120
|
+
// Unique constraint - step name is unique within a parent (name + parentStepId)
|
|
121
|
+
// nullsNotDistinct ensures NULL parent_step_id values are treated as equal for uniqueness
|
|
122
|
+
unique('unique_job_step_name_parent').on(table.job_id, table.name, table.parent_step_id).nullsNotDistinct(),
|
|
122
123
|
check(
|
|
123
124
|
'job_steps_status_check',
|
|
124
125
|
sql`${table.status} IN ${sql.raw(`(${STEP_STATUSES.map((s) => `'${s}'`).join(',')})`)}`,
|