@shipfox/api-workflows 13.1.0 → 15.0.0

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.
Files changed (94) hide show
  1. package/.turbo/turbo-build.log +4 -4
  2. package/CHANGELOG.md +61 -0
  3. package/README.md +12 -5
  4. package/dist/core/checkout.d.ts +4 -2
  5. package/dist/core/checkout.d.ts.map +1 -1
  6. package/dist/core/checkout.js +7 -2
  7. package/dist/core/checkout.js.map +1 -1
  8. package/dist/core/entities/job.d.ts +1 -1
  9. package/dist/core/entities/job.d.ts.map +1 -1
  10. package/dist/core/entities/job.js.map +1 -1
  11. package/dist/core/entities/workflow-run.d.ts +25 -6
  12. package/dist/core/entities/workflow-run.d.ts.map +1 -1
  13. package/dist/core/entities/workflow-run.js.map +1 -1
  14. package/dist/core/index.d.ts +2 -2
  15. package/dist/core/index.d.ts.map +1 -1
  16. package/dist/core/index.js +1 -1
  17. package/dist/core/index.js.map +1 -1
  18. package/dist/core/run-workflow.d.ts +26 -1
  19. package/dist/core/run-workflow.d.ts.map +1 -1
  20. package/dist/core/run-workflow.js +27 -1
  21. package/dist/core/run-workflow.js.map +1 -1
  22. package/dist/db/db.d.ts +72 -0
  23. package/dist/db/db.d.ts.map +1 -1
  24. package/dist/db/schema/workflow-runs.d.ts +45 -1
  25. package/dist/db/schema/workflow-runs.d.ts.map +1 -1
  26. package/dist/db/schema/workflow-runs.js +42 -1
  27. package/dist/db/schema/workflow-runs.js.map +1 -1
  28. package/dist/db/workflow-runs/jobs.d.ts +3 -1
  29. package/dist/db/workflow-runs/jobs.d.ts.map +1 -1
  30. package/dist/db/workflow-runs/jobs.js +12 -3
  31. package/dist/db/workflow-runs/jobs.js.map +1 -1
  32. package/dist/db/workflow-runs/queries.d.ts +3 -2
  33. package/dist/db/workflow-runs/queries.d.ts.map +1 -1
  34. package/dist/db/workflow-runs/queries.js +3 -0
  35. package/dist/db/workflow-runs/queries.js.map +1 -1
  36. package/dist/db/workflow-runs/run-create.d.ts +4 -1
  37. package/dist/db/workflow-runs/run-create.d.ts.map +1 -1
  38. package/dist/db/workflow-runs/run-create.js +14 -1
  39. package/dist/db/workflow-runs/run-create.js.map +1 -1
  40. package/dist/presentation/dto/workflow-run.d.ts.map +1 -1
  41. package/dist/presentation/dto/workflow-run.js +14 -0
  42. package/dist/presentation/dto/workflow-run.js.map +1 -1
  43. package/dist/presentation/inter-module.d.ts +1 -0
  44. package/dist/presentation/inter-module.d.ts.map +1 -1
  45. package/dist/presentation/inter-module.js +41 -4
  46. package/dist/presentation/inter-module.js.map +1 -1
  47. package/dist/presentation/routes/checkout-token.d.ts.map +1 -1
  48. package/dist/presentation/routes/checkout-token.js +2 -1
  49. package/dist/presentation/routes/checkout-token.js.map +1 -1
  50. package/dist/presentation/routes/get-run-aggregates.d.ts.map +1 -1
  51. package/dist/presentation/routes/get-run-aggregates.js +2 -1
  52. package/dist/presentation/routes/get-run-aggregates.js.map +1 -1
  53. package/dist/presentation/routes/leased-step.d.ts +3 -1
  54. package/dist/presentation/routes/leased-step.d.ts.map +1 -1
  55. package/dist/presentation/routes/leased-step.js +2 -1
  56. package/dist/presentation/routes/leased-step.js.map +1 -1
  57. package/dist/presentation/routes/list-runs.d.ts.map +1 -1
  58. package/dist/presentation/routes/list-runs.js +2 -1
  59. package/dist/presentation/routes/list-runs.js.map +1 -1
  60. package/dist/presentation/routes/project-access.d.ts +1 -0
  61. package/dist/presentation/routes/project-access.d.ts.map +1 -1
  62. package/dist/tsconfig.test.tsbuildinfo +1 -1
  63. package/drizzle/0004_dev_run_origin.sql +12 -0
  64. package/drizzle/meta/0004_snapshot.json +1773 -0
  65. package/drizzle/meta/_journal.json +7 -0
  66. package/package.json +16 -16
  67. package/src/core/checkout.test.ts +198 -1
  68. package/src/core/checkout.ts +18 -5
  69. package/src/core/entities/job.ts +1 -1
  70. package/src/core/entities/workflow-run.ts +26 -6
  71. package/src/core/index.ts +2 -2
  72. package/src/core/job-transition/decide-job-activation.test.ts +2 -0
  73. package/src/core/run-workflow.test.ts +151 -3
  74. package/src/core/run-workflow.ts +59 -3
  75. package/src/core/workflow-run-creation.test.ts +2 -0
  76. package/src/db/job-listeners.test.ts +17 -0
  77. package/src/db/schema/workflow-runs.ts +58 -0
  78. package/src/db/workflow-runs/jobs.ts +17 -3
  79. package/src/db/workflow-runs/queries.ts +6 -1
  80. package/src/db/workflow-runs/run-create.test.ts +87 -0
  81. package/src/db/workflow-runs/run-create.ts +23 -1
  82. package/src/presentation/dto/workflow-run.ts +23 -1
  83. package/src/presentation/inter-module.test.ts +131 -1
  84. package/src/presentation/inter-module.ts +48 -3
  85. package/src/presentation/routes/checkout-token.test.ts +45 -0
  86. package/src/presentation/routes/checkout-token.ts +2 -1
  87. package/src/presentation/routes/get-run-aggregates.test.ts +56 -0
  88. package/src/presentation/routes/get-run-aggregates.ts +2 -0
  89. package/src/presentation/routes/get-step-secrets.test.ts +1 -0
  90. package/src/presentation/routes/leased-step.ts +7 -1
  91. package/src/presentation/routes/list-runs.test.ts +152 -0
  92. package/src/presentation/routes/list-runs.ts +2 -0
  93. package/test/factories/workflow-run.ts +2 -0
  94. package/tsconfig.build.tsbuildinfo +1 -1
package/dist/db/db.d.ts CHANGED
@@ -140,6 +140,42 @@ export declare const schema: {
140
140
  identity: undefined;
141
141
  generated: undefined;
142
142
  }, {}, {}>;
143
+ origin: import("drizzle-orm/pg-core").PgColumn<{
144
+ name: "origin";
145
+ tableName: "workflow_runs";
146
+ dataType: "string";
147
+ columnType: "PgText";
148
+ data: string;
149
+ driverParam: string;
150
+ notNull: true;
151
+ hasDefault: true;
152
+ isPrimaryKey: false;
153
+ isAutoincrement: false;
154
+ hasRuntimeDefault: false;
155
+ enumValues: [string, ...string[]];
156
+ baseColumn: never;
157
+ identity: undefined;
158
+ generated: undefined;
159
+ }, {}, {}>;
160
+ devSource: import("drizzle-orm/pg-core").PgColumn<{
161
+ name: "dev_source";
162
+ tableName: "workflow_runs";
163
+ dataType: "json";
164
+ columnType: "PgJsonb";
165
+ data: import("./schema/workflow-runs.js").WorkflowRunDevSourceDb;
166
+ driverParam: unknown;
167
+ notNull: false;
168
+ hasDefault: false;
169
+ isPrimaryKey: false;
170
+ isAutoincrement: false;
171
+ hasRuntimeDefault: false;
172
+ enumValues: undefined;
173
+ baseColumn: never;
174
+ identity: undefined;
175
+ generated: undefined;
176
+ }, {}, {
177
+ $type: import("./schema/workflow-runs.js").WorkflowRunDevSourceDb;
178
+ }>;
143
179
  currentAttempt: import("drizzle-orm/pg-core").PgColumn<{
144
180
  name: "current_attempt";
145
181
  tableName: "workflow_runs";
@@ -2774,6 +2810,42 @@ export declare function db(): NodePgDatabase<{
2774
2810
  identity: undefined;
2775
2811
  generated: undefined;
2776
2812
  }, {}, {}>;
2813
+ origin: import("drizzle-orm/pg-core").PgColumn<{
2814
+ name: "origin";
2815
+ tableName: "workflow_runs";
2816
+ dataType: "string";
2817
+ columnType: "PgText";
2818
+ data: string;
2819
+ driverParam: string;
2820
+ notNull: true;
2821
+ hasDefault: true;
2822
+ isPrimaryKey: false;
2823
+ isAutoincrement: false;
2824
+ hasRuntimeDefault: false;
2825
+ enumValues: [string, ...string[]];
2826
+ baseColumn: never;
2827
+ identity: undefined;
2828
+ generated: undefined;
2829
+ }, {}, {}>;
2830
+ devSource: import("drizzle-orm/pg-core").PgColumn<{
2831
+ name: "dev_source";
2832
+ tableName: "workflow_runs";
2833
+ dataType: "json";
2834
+ columnType: "PgJsonb";
2835
+ data: import("./schema/workflow-runs.js").WorkflowRunDevSourceDb;
2836
+ driverParam: unknown;
2837
+ notNull: false;
2838
+ hasDefault: false;
2839
+ isPrimaryKey: false;
2840
+ isAutoincrement: false;
2841
+ hasRuntimeDefault: false;
2842
+ enumValues: undefined;
2843
+ baseColumn: never;
2844
+ identity: undefined;
2845
+ generated: undefined;
2846
+ }, {}, {
2847
+ $type: import("./schema/workflow-runs.js").WorkflowRunDevSourceDb;
2848
+ }>;
2777
2849
  currentAttempt: import("drizzle-orm/pg-core").PgColumn<{
2778
2850
  name: "current_attempt";
2779
2851
  tableName: "workflow_runs";
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAYnE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUlB,CAAC;AAIF,wBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAGjB;AAED,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAI5F,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzE"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/db/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,cAAc,EAAC,MAAM,uBAAuB,CAAC;AAYnE,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAUlB,CAAC;AAIF,wBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAGjB;AAED,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,MAAM,MAAM,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAI5F,wBAAgB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEzE"}
@@ -1,6 +1,13 @@
1
- import type { TriggerPayload, WorkflowRun, WorkflowRunTriggerReference, WorkflowSourceSnapshot } from '#core/entities/workflow-run.js';
1
+ import type { TriggerPayload, WorkflowRun, WorkflowRunOriginState, WorkflowRunTriggerReference, WorkflowSourceSnapshot } from '#core/entities/workflow-run.js';
2
2
  export declare const workflowRunStatusEnum: import("drizzle-orm/pg-core").PgEnum<["pending", "running", "succeeded", "failed", "cancelled"]>;
3
3
  export declare const workflowRunRerunModeEnum: import("drizzle-orm/pg-core").PgEnum<["all", "failed"]>;
4
+ export interface WorkflowRunDevSourceDb {
5
+ ref: string;
6
+ commit: string;
7
+ config_path: string;
8
+ initiated_by_user_id: string;
9
+ replay_of_event_id: string | null;
10
+ }
4
11
  export declare const workflowRuns: import("drizzle-orm/pg-core").PgTableWithColumns<{
5
12
  name: "workflow_runs";
6
13
  schema: undefined;
@@ -141,6 +148,42 @@ export declare const workflowRuns: import("drizzle-orm/pg-core").PgTableWithColu
141
148
  identity: undefined;
142
149
  generated: undefined;
143
150
  }, {}, {}>;
151
+ origin: import("drizzle-orm/pg-core").PgColumn<{
152
+ name: "origin";
153
+ tableName: "workflow_runs";
154
+ dataType: "string";
155
+ columnType: "PgText";
156
+ data: string;
157
+ driverParam: string;
158
+ notNull: true;
159
+ hasDefault: true;
160
+ isPrimaryKey: false;
161
+ isAutoincrement: false;
162
+ hasRuntimeDefault: false;
163
+ enumValues: [string, ...string[]];
164
+ baseColumn: never;
165
+ identity: undefined;
166
+ generated: undefined;
167
+ }, {}, {}>;
168
+ devSource: import("drizzle-orm/pg-core").PgColumn<{
169
+ name: "dev_source";
170
+ tableName: "workflow_runs";
171
+ dataType: "json";
172
+ columnType: "PgJsonb";
173
+ data: WorkflowRunDevSourceDb;
174
+ driverParam: unknown;
175
+ notNull: false;
176
+ hasDefault: false;
177
+ isPrimaryKey: false;
178
+ isAutoincrement: false;
179
+ hasRuntimeDefault: false;
180
+ enumValues: undefined;
181
+ baseColumn: never;
182
+ identity: undefined;
183
+ generated: undefined;
184
+ }, {}, {
185
+ $type: WorkflowRunDevSourceDb;
186
+ }>;
144
187
  currentAttempt: import("drizzle-orm/pg-core").PgColumn<{
145
188
  name: "current_attempt";
146
189
  tableName: "workflow_runs";
@@ -410,4 +453,5 @@ export declare const workflowRuns: import("drizzle-orm/pg-core").PgTableWithColu
410
453
  export type WorkflowRunDb = typeof workflowRuns.$inferSelect;
411
454
  export type WorkflowRunCreateDb = typeof workflowRuns.$inferInsert;
412
455
  export declare function toWorkflowRun(row: WorkflowRunDb): WorkflowRun;
456
+ export declare function toWorkflowRunOriginState(row: Pick<WorkflowRunDb, 'origin' | 'devSource'>): WorkflowRunOriginState;
413
457
  //# sourceMappingURL=workflow-runs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-runs.d.ts","sourceRoot":"","sources":["../../../src/db/schema/workflow-runs.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,2BAA2B,EAC3B,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AAGxC,eAAO,MAAM,qBAAqB,kGAMhC,CAAC;AAEH,eAAO,MAAM,wBAAwB,yDAAoD,CAAC;AAE1F,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuDxB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC7D,MAAM,MAAM,mBAAmB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAEnE,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,WAAW,CA2B7D"}
1
+ {"version":3,"file":"workflow-runs.d.ts","sourceRoot":"","sources":["../../../src/db/schema/workflow-runs.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AAGxC,eAAO,MAAM,qBAAqB,kGAMhC,CAAC;AAEH,eAAO,MAAM,wBAAwB,yDAAoD,CAAC;AAE1F,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2ExB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC7D,MAAM,MAAM,mBAAmB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAEnE,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,WAAW,CA6B7D;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,WAAW,CAAC,GAC/C,sBAAsB,CAuBxB"}
@@ -23,6 +23,8 @@ export const workflowRuns = pgTable('workflow_runs', {
23
23
  name: text('name'),
24
24
  workflowName: text('workflow_name').notNull(),
25
25
  status: workflowRunStatusEnum('status').notNull().default('pending'),
26
+ origin: text('origin').notNull().default('synced'),
27
+ devSource: jsonb('dev_source').$type(),
26
28
  currentAttempt: integer('current_attempt').notNull().default(1),
27
29
  triggerProvider: text('trigger_provider'),
28
30
  triggerSource: text('trigger_source').notNull(),
@@ -52,6 +54,7 @@ export const workflowRuns = pgTable('workflow_runs', {
52
54
  uniqueIndex('workflows_wr_trigger_idempotency_key_unique').on(table.triggerIdempotencyKey),
53
55
  uniqueIndex('workflows_wr_definition_number_unique').on(table.definitionId, table.number),
54
56
  index('workflows_wr_project_created_id_idx').on(table.projectId, table.createdAt, table.id),
57
+ index('workflows_wr_project_origin_created_id_idx').on(table.projectId, table.origin, table.createdAt, table.id),
55
58
  index('workflows_wr_project_status_created_id_idx').on(table.projectId, table.status, table.createdAt, table.id),
56
59
  index('workflows_wr_project_definition_created_id_idx').on(table.projectId, table.definitionId, table.createdAt, table.id),
57
60
  index('workflows_wr_project_trigger_created_id_idx').on(table.projectId, table.triggerSource, table.createdAt, table.id),
@@ -59,9 +62,19 @@ export const workflowRuns = pgTable('workflow_runs', {
59
62
  // Prometheus scrape. Indexes only active rows so the count stays cheap as the
60
63
  // historical table grows.
61
64
  index('workflows_wr_running_idx').on(table.status).where(sql`${table.status} = 'running'`),
62
- check('workflows_wr_current_attempt_positive_ck', sql`${table.currentAttempt} > 0`)
65
+ check('workflows_wr_current_attempt_positive_ck', sql`${table.currentAttempt} > 0`),
66
+ check('workflows_wr_origin_ck', sql`${table.origin} in ('synced', 'dev')`),
67
+ check('workflows_wr_dev_source_ck', sql`(
68
+ (${table.origin} = 'synced' and ${table.devSource} is null)
69
+ or (
70
+ ${table.origin} = 'dev'
71
+ and ${table.devSource} is not null
72
+ and jsonb_typeof(${table.devSource}) = 'object'
73
+ )
74
+ )`)
63
75
  ]);
64
76
  export function toWorkflowRun(row) {
77
+ const originState = toWorkflowRunOriginState(row);
65
78
  return {
66
79
  id: row.id,
67
80
  workspaceId: row.workspaceId,
@@ -72,6 +85,7 @@ export function toWorkflowRun(row) {
72
85
  workflowName: row.workflowName,
73
86
  nameOverride: row.name,
74
87
  status: row.status,
88
+ ...originState,
75
89
  currentAttempt: row.currentAttempt,
76
90
  triggerProvider: row.triggerProvider,
77
91
  triggerSource: row.triggerSource,
@@ -89,5 +103,32 @@ export function toWorkflowRun(row) {
89
103
  finishedAt: row.finishedAt
90
104
  };
91
105
  }
106
+ export function toWorkflowRunOriginState(row) {
107
+ if (row.origin === 'synced') {
108
+ if (row.devSource !== null) {
109
+ throw new Error(`Synced workflow run has unexpected dev source`);
110
+ }
111
+ return {
112
+ origin: 'synced',
113
+ devSource: null
114
+ };
115
+ }
116
+ if (row.origin !== 'dev') {
117
+ throw new Error(`Unknown workflow run origin: ${row.origin}`);
118
+ }
119
+ if (!row.devSource) {
120
+ throw new Error('Dev workflow run is missing its source');
121
+ }
122
+ return {
123
+ origin: 'dev',
124
+ devSource: {
125
+ ref: row.devSource.ref,
126
+ commit: row.devSource.commit,
127
+ configPath: row.devSource.config_path,
128
+ initiatedByUserId: row.devSource.initiated_by_user_id,
129
+ replayOfEventId: row.devSource.replay_of_event_id
130
+ }
131
+ };
132
+ }
92
133
 
93
134
  //# sourceMappingURL=workflow-runs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/db/schema/workflow-runs.ts"],"sourcesContent":["import {DEFAULT_RUN_TIMEOUT_MS} from '@shipfox/api-definitions-dto';\nimport {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {sql} from 'drizzle-orm';\nimport {\n bigint,\n check,\n index,\n integer,\n jsonb,\n pgEnum,\n text,\n timestamp,\n uniqueIndex,\n uuid,\n} from 'drizzle-orm/pg-core';\nimport type {\n TriggerPayload,\n WorkflowRun,\n WorkflowRunTriggerReference,\n WorkflowSourceSnapshot,\n} from '#core/entities/workflow-run.js';\nimport {pgTable} from './common.js';\n\nexport const workflowRunStatusEnum = pgEnum('workflows_run_status', [\n 'pending',\n 'running',\n 'succeeded',\n 'failed',\n 'cancelled',\n]);\n\nexport const workflowRunRerunModeEnum = pgEnum('workflows_rerun_mode', ['all', 'failed']);\n\nexport const workflowRuns = pgTable(\n 'workflow_runs',\n {\n id: uuidv7PrimaryKey(),\n workspaceId: uuid('workspace_id').notNull(),\n projectId: uuid('project_id').notNull(),\n definitionId: uuid('definition_id').notNull(),\n number: integer('number').notNull(),\n name: text('name'),\n workflowName: text('workflow_name').notNull(),\n status: workflowRunStatusEnum('status').notNull().default('pending'),\n currentAttempt: integer('current_attempt').notNull().default(1),\n triggerProvider: text('trigger_provider'),\n triggerSource: text('trigger_source').notNull(),\n triggerEvent: text('trigger_event').notNull(),\n triggerPayload: jsonb('trigger_payload').notNull().$type<TriggerPayload>(),\n triggerReference: jsonb('trigger_reference').$type<WorkflowRunTriggerReference>(),\n inputs: jsonb('inputs').$type<Record<string, unknown>>(),\n sourceSnapshot: jsonb('source_snapshot').$type<WorkflowSourceSnapshot>(),\n triggerIdempotencyKey: text('trigger_idempotency_key'),\n timeoutMs: bigint('timeout_ms', {mode: 'number'}).notNull().default(DEFAULT_RUN_TIMEOUT_MS),\n version: integer('version').notNull().default(1),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n startedAt: timestamp('started_at', {withTimezone: true}),\n finishedAt: timestamp('finished_at', {withTimezone: true}),\n },\n (table) => [\n uniqueIndex('workflows_wr_trigger_idempotency_key_unique').on(table.triggerIdempotencyKey),\n uniqueIndex('workflows_wr_definition_number_unique').on(table.definitionId, table.number),\n index('workflows_wr_project_created_id_idx').on(table.projectId, table.createdAt, table.id),\n index('workflows_wr_project_status_created_id_idx').on(\n table.projectId,\n table.status,\n table.createdAt,\n table.id,\n ),\n index('workflows_wr_project_definition_created_id_idx').on(\n table.projectId,\n table.definitionId,\n table.createdAt,\n table.id,\n ),\n index('workflows_wr_project_trigger_created_id_idx').on(\n table.projectId,\n table.triggerSource,\n table.createdAt,\n table.id,\n ),\n // Partial index backing the running-runs depth gauge, which counts on every\n // Prometheus scrape. Indexes only active rows so the count stays cheap as the\n // historical table grows.\n index('workflows_wr_running_idx').on(table.status).where(sql`${table.status} = 'running'`),\n check('workflows_wr_current_attempt_positive_ck', sql`${table.currentAttempt} > 0`),\n ],\n);\n\nexport type WorkflowRunDb = typeof workflowRuns.$inferSelect;\nexport type WorkflowRunCreateDb = typeof workflowRuns.$inferInsert;\n\nexport function toWorkflowRun(row: WorkflowRunDb): WorkflowRun {\n return {\n id: row.id,\n workspaceId: row.workspaceId,\n projectId: row.projectId,\n definitionId: row.definitionId,\n number: row.number,\n name: row.name ?? row.workflowName,\n workflowName: row.workflowName,\n nameOverride: row.name,\n status: row.status,\n currentAttempt: row.currentAttempt,\n triggerProvider: row.triggerProvider,\n triggerSource: row.triggerSource,\n triggerEvent: row.triggerEvent,\n triggerPayload: row.triggerPayload as TriggerPayload,\n triggerReference: row.triggerReference ?? null,\n inputs: row.inputs ?? null,\n sourceSnapshot: row.sourceSnapshot ?? null,\n triggerIdempotencyKey: row.triggerIdempotencyKey,\n timeoutMs: row.timeoutMs,\n version: row.version,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n startedAt: row.startedAt,\n finishedAt: row.finishedAt,\n };\n}\n"],"names":["DEFAULT_RUN_TIMEOUT_MS","uuidv7PrimaryKey","sql","bigint","check","index","integer","jsonb","pgEnum","text","timestamp","uniqueIndex","uuid","pgTable","workflowRunStatusEnum","workflowRunRerunModeEnum","workflowRuns","id","workspaceId","notNull","projectId","definitionId","number","name","workflowName","status","default","currentAttempt","triggerProvider","triggerSource","triggerEvent","triggerPayload","$type","triggerReference","inputs","sourceSnapshot","triggerIdempotencyKey","timeoutMs","mode","version","createdAt","withTimezone","defaultNow","updatedAt","startedAt","finishedAt","table","on","where","toWorkflowRun","row","nameOverride"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/db/schema/workflow-runs.ts"],"sourcesContent":["import {DEFAULT_RUN_TIMEOUT_MS} from '@shipfox/api-definitions-dto';\nimport {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {sql} from 'drizzle-orm';\nimport {\n bigint,\n check,\n index,\n integer,\n jsonb,\n pgEnum,\n text,\n timestamp,\n uniqueIndex,\n uuid,\n} from 'drizzle-orm/pg-core';\nimport type {\n TriggerPayload,\n WorkflowRun,\n WorkflowRunOriginState,\n WorkflowRunTriggerReference,\n WorkflowSourceSnapshot,\n} from '#core/entities/workflow-run.js';\nimport {pgTable} from './common.js';\n\nexport const workflowRunStatusEnum = pgEnum('workflows_run_status', [\n 'pending',\n 'running',\n 'succeeded',\n 'failed',\n 'cancelled',\n]);\n\nexport const workflowRunRerunModeEnum = pgEnum('workflows_rerun_mode', ['all', 'failed']);\n\nexport interface WorkflowRunDevSourceDb {\n ref: string;\n commit: string;\n config_path: string;\n initiated_by_user_id: string;\n replay_of_event_id: string | null;\n}\n\nexport const workflowRuns = pgTable(\n 'workflow_runs',\n {\n id: uuidv7PrimaryKey(),\n workspaceId: uuid('workspace_id').notNull(),\n projectId: uuid('project_id').notNull(),\n definitionId: uuid('definition_id').notNull(),\n number: integer('number').notNull(),\n name: text('name'),\n workflowName: text('workflow_name').notNull(),\n status: workflowRunStatusEnum('status').notNull().default('pending'),\n origin: text('origin').notNull().default('synced'),\n devSource: jsonb('dev_source').$type<WorkflowRunDevSourceDb>(),\n currentAttempt: integer('current_attempt').notNull().default(1),\n triggerProvider: text('trigger_provider'),\n triggerSource: text('trigger_source').notNull(),\n triggerEvent: text('trigger_event').notNull(),\n triggerPayload: jsonb('trigger_payload').notNull().$type<TriggerPayload>(),\n triggerReference: jsonb('trigger_reference').$type<WorkflowRunTriggerReference>(),\n inputs: jsonb('inputs').$type<Record<string, unknown>>(),\n sourceSnapshot: jsonb('source_snapshot').$type<WorkflowSourceSnapshot>(),\n triggerIdempotencyKey: text('trigger_idempotency_key'),\n timeoutMs: bigint('timeout_ms', {mode: 'number'}).notNull().default(DEFAULT_RUN_TIMEOUT_MS),\n version: integer('version').notNull().default(1),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n updatedAt: timestamp('updated_at', {withTimezone: true}).notNull().defaultNow(),\n startedAt: timestamp('started_at', {withTimezone: true}),\n finishedAt: timestamp('finished_at', {withTimezone: true}),\n },\n (table) => [\n uniqueIndex('workflows_wr_trigger_idempotency_key_unique').on(table.triggerIdempotencyKey),\n uniqueIndex('workflows_wr_definition_number_unique').on(table.definitionId, table.number),\n index('workflows_wr_project_created_id_idx').on(table.projectId, table.createdAt, table.id),\n index('workflows_wr_project_origin_created_id_idx').on(\n table.projectId,\n table.origin,\n table.createdAt,\n table.id,\n ),\n index('workflows_wr_project_status_created_id_idx').on(\n table.projectId,\n table.status,\n table.createdAt,\n table.id,\n ),\n index('workflows_wr_project_definition_created_id_idx').on(\n table.projectId,\n table.definitionId,\n table.createdAt,\n table.id,\n ),\n index('workflows_wr_project_trigger_created_id_idx').on(\n table.projectId,\n table.triggerSource,\n table.createdAt,\n table.id,\n ),\n // Partial index backing the running-runs depth gauge, which counts on every\n // Prometheus scrape. Indexes only active rows so the count stays cheap as the\n // historical table grows.\n index('workflows_wr_running_idx').on(table.status).where(sql`${table.status} = 'running'`),\n check('workflows_wr_current_attempt_positive_ck', sql`${table.currentAttempt} > 0`),\n check('workflows_wr_origin_ck', sql`${table.origin} in ('synced', 'dev')`),\n check(\n 'workflows_wr_dev_source_ck',\n sql`(\n (${table.origin} = 'synced' and ${table.devSource} is null)\n or (\n ${table.origin} = 'dev'\n and ${table.devSource} is not null\n and jsonb_typeof(${table.devSource}) = 'object'\n )\n )`,\n ),\n ],\n);\n\nexport type WorkflowRunDb = typeof workflowRuns.$inferSelect;\nexport type WorkflowRunCreateDb = typeof workflowRuns.$inferInsert;\n\nexport function toWorkflowRun(row: WorkflowRunDb): WorkflowRun {\n const originState = toWorkflowRunOriginState(row);\n return {\n id: row.id,\n workspaceId: row.workspaceId,\n projectId: row.projectId,\n definitionId: row.definitionId,\n number: row.number,\n name: row.name ?? row.workflowName,\n workflowName: row.workflowName,\n nameOverride: row.name,\n status: row.status,\n ...originState,\n currentAttempt: row.currentAttempt,\n triggerProvider: row.triggerProvider,\n triggerSource: row.triggerSource,\n triggerEvent: row.triggerEvent,\n triggerPayload: row.triggerPayload as TriggerPayload,\n triggerReference: row.triggerReference ?? null,\n inputs: row.inputs ?? null,\n sourceSnapshot: row.sourceSnapshot ?? null,\n triggerIdempotencyKey: row.triggerIdempotencyKey,\n timeoutMs: row.timeoutMs,\n version: row.version,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n startedAt: row.startedAt,\n finishedAt: row.finishedAt,\n };\n}\n\nexport function toWorkflowRunOriginState(\n row: Pick<WorkflowRunDb, 'origin' | 'devSource'>,\n): WorkflowRunOriginState {\n if (row.origin === 'synced') {\n if (row.devSource !== null) {\n throw new Error(`Synced workflow run has unexpected dev source`);\n }\n return {origin: 'synced', devSource: null};\n }\n if (row.origin !== 'dev') {\n throw new Error(`Unknown workflow run origin: ${row.origin}`);\n }\n if (!row.devSource) {\n throw new Error('Dev workflow run is missing its source');\n }\n return {\n origin: 'dev',\n devSource: {\n ref: row.devSource.ref,\n commit: row.devSource.commit,\n configPath: row.devSource.config_path,\n initiatedByUserId: row.devSource.initiated_by_user_id,\n replayOfEventId: row.devSource.replay_of_event_id,\n },\n };\n}\n"],"names":["DEFAULT_RUN_TIMEOUT_MS","uuidv7PrimaryKey","sql","bigint","check","index","integer","jsonb","pgEnum","text","timestamp","uniqueIndex","uuid","pgTable","workflowRunStatusEnum","workflowRunRerunModeEnum","workflowRuns","id","workspaceId","notNull","projectId","definitionId","number","name","workflowName","status","default","origin","devSource","$type","currentAttempt","triggerProvider","triggerSource","triggerEvent","triggerPayload","triggerReference","inputs","sourceSnapshot","triggerIdempotencyKey","timeoutMs","mode","version","createdAt","withTimezone","defaultNow","updatedAt","startedAt","finishedAt","table","on","where","toWorkflowRun","row","originState","toWorkflowRunOriginState","nameOverride","Error","ref","commit","configPath","config_path","initiatedByUserId","initiated_by_user_id","replayOfEventId","replay_of_event_id"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type Job, type JobStatus, type JobStatusReason } from '#core/entities/job.js';
2
2
  import type { PersistedEvaluationTraceEntry } from '#core/entities/step.js';
3
- import type { WorkflowRunTriggerReference } from '#core/entities/workflow-run.js';
3
+ import type { WorkflowRunOriginState, WorkflowRunTriggerReference } from '#core/entities/workflow-run.js';
4
4
  import { type DeriveJobSuccessResult, deriveJobSuccess } from '#core/job-transition/index.js';
5
5
  import type { JobContextInput } from '#core/step-config/assemble-run-context.js';
6
6
  import type { RuntimeCompletionStatus } from '#core/workflow-scheduling/runtime-dag.js';
@@ -12,6 +12,8 @@ export interface JobScope {
12
12
  workspaceId: string;
13
13
  projectId: string;
14
14
  triggerReference: WorkflowRunTriggerReference | null;
15
+ /** The run's origin state, so checkout fallbacks can read the dev source. */
16
+ run: WorkflowRunOriginState;
15
17
  }
16
18
  export declare function getJobScope(jobId: string): Promise<JobScope | undefined>;
17
19
  export declare function getDirectDependencyJobContexts(jobId: string, tx?: Tx): Promise<JobContextInput[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/jobs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/jobs.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { writeWorkflowsOutboxEvent } from '../outbox-writes.js';
10
10
  import { jobExecutions, toJobExecution } from '../schema/job-executions.js';
11
11
  import { jobs, toJob } from '../schema/jobs.js';
12
12
  import { workflowRunAttempts } from '../schema/workflow-run-attempts.js';
13
- import { toWorkflowRun, workflowRuns } from '../schema/workflow-runs.js';
13
+ import { toWorkflowRun, toWorkflowRunOriginState, workflowRuns } from '../schema/workflow-runs.js';
14
14
  import { getWorkflowRunById } from './queries.js';
15
15
  import { getWorkflowContextForJob, optimisticLockRetry, TERMINAL_JOB_STATUSES } from './shared.js';
16
16
  function outputTypesByJobKey(model) {
@@ -41,9 +41,18 @@ export async function getJobScope(jobId) {
41
41
  const rows = await db().select({
42
42
  workspaceId: workflowRuns.workspaceId,
43
43
  projectId: workflowRuns.projectId,
44
- triggerReference: workflowRuns.triggerReference
44
+ triggerReference: workflowRuns.triggerReference,
45
+ origin: workflowRuns.origin,
46
+ devSource: workflowRuns.devSource
45
47
  }).from(jobs).innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id)).innerJoin(workflowRuns, eq(workflowRunAttempts.workflowRunId, workflowRuns.id)).where(eq(jobs.id, jobId)).limit(1);
46
- return rows[0];
48
+ const row = rows[0];
49
+ if (!row) return undefined;
50
+ return {
51
+ workspaceId: row.workspaceId,
52
+ projectId: row.projectId,
53
+ triggerReference: row.triggerReference,
54
+ run: toWorkflowRunOriginState(row)
55
+ };
47
56
  }
48
57
  export async function getDirectDependencyJobContexts(jobId, tx) {
49
58
  const targetRows = await (tx ?? db()).select({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/db/workflow-runs/jobs.ts"],"sourcesContent":["import {readPersistedWorkflowModel} from '@shipfox/api-definitions-dto';\nimport {WORKFLOWS_JOB_TERMINATED} from '@shipfox/api-workflows-dto';\nimport type {ExpressionType} from '@shipfox/expression';\nimport {and, asc, desc, eq, inArray, notInArray, sql} from 'drizzle-orm';\nimport {isJobTerminal, type Job, type JobStatus, type JobStatusReason} from '#core/entities/job.js';\nimport type {JobExecution} from '#core/entities/job-execution.js';\nimport type {PersistedEvaluationTraceEntry} from '#core/entities/step.js';\nimport type {WorkflowRunTriggerReference} from '#core/entities/workflow-run.js';\nimport {JobNotFoundError} from '#core/errors.js';\nimport {\n type DeriveJobSuccessResult,\n decideJobActivation,\n deriveJobSuccess,\n runtimeCompletionStatusForJob,\n} from '#core/job-transition/index.js';\nimport type {JobContextInput} from '#core/step-config/assemble-run-context.js';\nimport type {RuntimeCompletionStatus} from '#core/workflow-scheduling/runtime-dag.js';\nimport {recordWorkflowJobStatusChanged} from '#metrics/instance.js';\nimport {db, type Tx} from '../db.js';\nimport {writeWorkflowsOutboxEvent} from '../outbox-writes.js';\nimport {jobExecutions, toJobExecution} from '../schema/job-executions.js';\nimport {jobs, toJob} from '../schema/jobs.js';\nimport {workflowRunAttempts} from '../schema/workflow-run-attempts.js';\nimport {toWorkflowRun, workflowRuns} from '../schema/workflow-runs.js';\nimport {getWorkflowRunById} from './queries.js';\nimport {getWorkflowContextForJob, optimisticLockRetry, TERMINAL_JOB_STATUSES} from './shared.js';\n\nfunction outputTypesByJobKey(\n model: ReturnType<typeof readPersistedWorkflowModel> | null,\n): ReadonlyMap<string, Readonly<Record<string, ExpressionType>>> {\n return new Map(\n (model?.jobs ?? []).flatMap((job) =>\n job.outputTypes === undefined ? [] : [[job.key, job.outputTypes] as const],\n ),\n );\n}\n\nexport async function getJobsByWorkflowRunAttemptId(workflowRunAttemptId: string): Promise<Job[]> {\n const rows = await db()\n .select()\n .from(jobs)\n .where(eq(jobs.workflowRunAttemptId, workflowRunAttemptId))\n .orderBy(asc(jobs.position));\n return rows.map(toJob);\n}\n\nexport async function getJobsByWorkflowRunId(workflowRunId: string): Promise<Job[]> {\n const run = await getWorkflowRunById(workflowRunId);\n if (!run) return [];\n const [attempt] = await db()\n .select()\n .from(workflowRunAttempts)\n .where(\n and(\n eq(workflowRunAttempts.workflowRunId, run.id),\n eq(workflowRunAttempts.attempt, run.currentAttempt),\n ),\n )\n .limit(1);\n return attempt ? getJobsByWorkflowRunAttemptId(attempt.id) : [];\n}\n\nexport async function getJobById(id: string): Promise<Job | undefined> {\n const rows = await db().select().from(jobs).where(eq(jobs.id, id)).limit(1);\n const row = rows[0];\n if (!row) return undefined;\n return toJob(row);\n}\n\nexport interface JobScope {\n workspaceId: string;\n projectId: string;\n triggerReference: WorkflowRunTriggerReference | null;\n}\n\nexport async function getJobScope(jobId: string): Promise<JobScope | undefined> {\n const rows = await db()\n .select({\n workspaceId: workflowRuns.workspaceId,\n projectId: workflowRuns.projectId,\n triggerReference: workflowRuns.triggerReference,\n })\n .from(jobs)\n .innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id))\n .innerJoin(workflowRuns, eq(workflowRunAttempts.workflowRunId, workflowRuns.id))\n .where(eq(jobs.id, jobId))\n .limit(1);\n return rows[0];\n}\n\nexport async function getDirectDependencyJobContexts(\n jobId: string,\n tx?: Tx,\n): Promise<JobContextInput[]> {\n const targetRows = await (tx ?? db())\n .select({job: jobs, attempt: workflowRunAttempts})\n .from(jobs)\n .innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id))\n .where(eq(jobs.id, jobId))\n .limit(1);\n const target = targetRows[0];\n if (!target || target.job.dependencies.length === 0) return [];\n const model =\n target.attempt.model === null ? null : readPersistedWorkflowModel(target.attempt.model);\n const outputTypes = outputTypesByJobKey(model);\n\n const rows = await (tx ?? db())\n .select({job: jobs, execution: jobExecutions})\n .from(jobs)\n .leftJoin(jobExecutions, eq(jobExecutions.jobId, jobs.id))\n .where(\n and(\n eq(jobs.workflowRunAttemptId, target.job.workflowRunAttemptId),\n inArray(jobs.key, target.job.dependencies),\n ),\n )\n .orderBy(asc(jobs.position), asc(jobs.id), asc(jobExecutions.sequence), asc(jobExecutions.id));\n\n const contextsByJobId = new Map<string, JobContextInput & {executions: JobExecution[]}>();\n for (const row of rows) {\n let context = contextsByJobId.get(row.job.id);\n if (!context) {\n const jobOutputTypes = outputTypes.get(row.job.key);\n context = {\n job: toJob(row.job),\n ...(jobOutputTypes === undefined ? {} : {outputTypes: jobOutputTypes}),\n executions: [],\n };\n contextsByJobId.set(row.job.id, context);\n }\n if (row.execution)\n context.executions.push(toJobExecution(row.execution, row.job.name ?? row.job.key));\n }\n\n return [...contextsByJobId.values()];\n}\n\nexport interface EvaluateJobActivationsParams {\n runAttemptId: string;\n jobs: readonly {\n jobId: string;\n expectedVersion: number;\n }[];\n}\n\nexport type JobActivationDecision =\n | {\n kind: 'start-job';\n jobId: string;\n }\n | {\n kind: 'terminal-job';\n jobId: string;\n status: RuntimeCompletionStatus;\n jobVersion: number;\n };\n\ntype InternalJobActivationDecision = JobActivationDecision & {changed?: boolean};\n\nexport async function evaluateJobActivations(\n params: EvaluateJobActivationsParams,\n): Promise<JobActivationDecision[]> {\n if (params.jobs.length === 0) return [];\n\n const result = await db().transaction(async (tx) => {\n const expectedVersions = new Map(\n params.jobs.map((job) => [job.jobId, job.expectedVersion] as const),\n );\n const jobIds = params.jobs.map((job) => job.jobId);\n const targets = await tx\n .select({job: jobs, attempt: workflowRunAttempts, run: workflowRuns})\n .from(jobs)\n .innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id))\n .innerJoin(workflowRuns, eq(workflowRunAttempts.workflowRunId, workflowRuns.id))\n .where(and(eq(jobs.workflowRunAttemptId, params.runAttemptId), inArray(jobs.id, jobIds)))\n .for('update');\n\n if (targets.length !== jobIds.length) {\n const found = new Set(targets.map((target) => target.job.id));\n const missing = jobIds.filter((jobId) => !found.has(jobId));\n throw new Error(`Cannot evaluate missing activation jobs: ${missing.join(', ')}`);\n }\n\n const contextsByJobKey = await directDependencyContextsByJobKey(\n tx,\n params.runAttemptId,\n targets.map((target) => toJob(target.job)),\n );\n const targetsByJobId = new Map(targets.map((target) => [target.job.id, target]));\n const decisions: InternalJobActivationDecision[] = [];\n\n for (const input of params.jobs) {\n const target = targetsByJobId.get(input.jobId);\n if (!target) throw new Error(`Cannot evaluate missing activation job: ${input.jobId}`);\n const job = toJob(target.job);\n const model =\n target.attempt.model === null ? null : readPersistedWorkflowModel(target.attempt.model);\n const modelJob = model?.jobs.find((item) => item.key === target.job.key);\n const decision = decideJobActivation({\n run: toWorkflowRun(target.run),\n job,\n condition: modelJob?.if,\n vars: target.attempt.vars ?? undefined,\n dependencies: job.dependencies.flatMap((key) => {\n const dependency = contextsByJobKey.get(key);\n return dependency === undefined ? [] : [dependency];\n }),\n });\n\n if (decision.kind === 'terminal-job' || decision.kind === 'start-job') {\n decisions.push(decision);\n continue;\n }\n\n const expectedVersion = expectedVersions.get(job.id);\n if (expectedVersion === undefined) {\n throw new Error(`Missing expected version for activation job ${job.id}`);\n }\n const updated = await updateJobStatusAtVersion(tx, {\n jobId: job.id,\n status: decision.status,\n expectedVersion,\n statusReason: decision.statusReason,\n evaluationTrace: decision.evaluationTrace,\n });\n if (updated) {\n decisions.push({\n kind: 'terminal-job',\n jobId: job.id,\n status: 'skipped',\n jobVersion: updated.job.version,\n changed: updated.changed,\n });\n continue;\n }\n\n const [existing] = await tx.select().from(jobs).where(eq(jobs.id, job.id)).limit(1);\n if (existing && isJobTerminal(existing.status)) {\n decisions.push({\n kind: 'terminal-job',\n jobId: job.id,\n status: runtimeCompletionStatusForJob(existing.status),\n jobVersion: existing.version,\n });\n continue;\n }\n throw new Error(`Optimistic lock failure evaluating activation for job ${job.id}`);\n }\n\n return decisions;\n });\n\n for (const decision of result) {\n if (decision.kind === 'terminal-job' && decision.changed) {\n recordWorkflowJobStatusChanged(decision.status);\n }\n }\n\n return result.map(({changed: _changed, ...decision}) => decision);\n}\n\nasync function directDependencyContextsByJobKey(\n tx: Tx,\n runAttemptId: string,\n targetJobs: readonly Job[],\n): Promise<ReadonlyMap<string, JobContextInput>> {\n const dependencyKeys = new Set(targetJobs.flatMap((job) => job.dependencies));\n if (dependencyKeys.size === 0) return new Map();\n\n const [attempt] = await tx\n .select({model: workflowRunAttempts.model})\n .from(workflowRunAttempts)\n .where(eq(workflowRunAttempts.id, runAttemptId))\n .limit(1);\n const model =\n attempt === undefined || attempt.model === null\n ? null\n : readPersistedWorkflowModel(attempt.model);\n const outputTypes = outputTypesByJobKey(model);\n\n const rows = await tx\n .select({job: jobs, execution: jobExecutions})\n .from(jobs)\n .leftJoin(jobExecutions, eq(jobExecutions.jobId, jobs.id))\n .where(and(eq(jobs.workflowRunAttemptId, runAttemptId), inArray(jobs.key, [...dependencyKeys])))\n .orderBy(asc(jobs.position), asc(jobs.id), asc(jobExecutions.sequence), asc(jobExecutions.id));\n\n const contextsByJobKey = new Map<string, JobContextInput & {executions: JobExecution[]}>();\n for (const row of rows) {\n let context = contextsByJobKey.get(row.job.key);\n if (!context) {\n const jobOutputTypes = outputTypes.get(row.job.key);\n context = {\n job: toJob(row.job),\n ...(jobOutputTypes === undefined ? {} : {outputTypes: jobOutputTypes}),\n executions: [],\n };\n contextsByJobKey.set(row.job.key, context);\n }\n if (row.execution)\n context.executions.push(toJobExecution(row.execution, row.job.name ?? row.job.key));\n }\n\n return contextsByJobKey;\n}\n\nexport interface UpdateJobStatusAtVersionParams {\n jobId: string;\n status: JobStatus;\n expectedVersion: number;\n statusReason?: JobStatusReason | null | undefined;\n evaluationTrace?: readonly PersistedEvaluationTraceEntry[] | null | undefined;\n}\n\n// Returns null on version mismatch so callers can choose throw vs treat-as-success.\nexport async function updateJobStatusAtVersion(\n tx: Tx,\n params: UpdateJobStatusAtVersionParams,\n): Promise<{job: Job; changed: boolean} | null> {\n const outputs = isJobTerminal(params.status)\n ? await reduceJobOutputs(tx, {jobId: params.jobId, status: params.status})\n : undefined;\n const rows = await tx\n .update(jobs)\n .set({\n status: params.status,\n statusReason: params.statusReason ?? null,\n ...(outputs === undefined ? {} : {outputs}),\n ...(params.evaluationTrace === undefined ? {} : {evaluationTrace: params.evaluationTrace}),\n version: sql`${jobs.version} + 1`,\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(jobs.id, params.jobId),\n eq(jobs.version, params.expectedVersion),\n notInArray(jobs.status, TERMINAL_JOB_STATUSES),\n ),\n )\n .returning();\n\n const row = rows[0];\n if (!row) return null;\n const job = toJob(row);\n\n // Every terminal job-status write funnels through this one guarded UPDATE, where the\n // version match lets a single caller win. Emitting here, in the same transaction,\n // makes the terminal fact fire exactly once across all paths.\n if (isJobTerminal(job.status)) {\n const [currentExecution] = await tx\n .select({\n id: jobExecutions.id,\n statusReasonMessage: jobExecutions.statusReasonMessage,\n })\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, job.id))\n .orderBy(desc(jobExecutions.sequence), desc(jobExecutions.id))\n .limit(1);\n const identity = await getWorkflowContextForJob(job.id, tx);\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_TERMINATED,\n payload: {\n jobId: job.id,\n jobExecutionId: currentExecution?.id ?? null,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: job.status,\n statusReason: job.statusReason,\n statusReasonMessage: currentExecution?.statusReasonMessage ?? null,\n },\n });\n }\n\n return {job, changed: true};\n}\n\nasync function reduceJobOutputs(\n tx: Tx,\n params: {jobId: string; status: JobStatus},\n): Promise<Record<string, unknown> | null> {\n if (params.status !== 'succeeded') return null;\n\n const [row] = await tx\n .select({outputs: jobExecutions.outputs})\n .from(jobExecutions)\n .where(and(eq(jobExecutions.jobId, params.jobId), eq(jobExecutions.status, 'succeeded')))\n .orderBy(desc(jobExecutions.sequence), desc(jobExecutions.id))\n .limit(1);\n\n return row?.outputs ? {...row.outputs} : null;\n}\n\nexport interface UpdateJobStatusParams {\n jobId: string;\n status: JobStatus;\n expectedVersion: number;\n statusReason?: JobStatusReason | null | undefined;\n evaluationTrace?: readonly PersistedEvaluationTraceEntry[] | null | undefined;\n}\n\nexport async function updateJobStatus(params: UpdateJobStatusParams): Promise<Job> {\n const statusReason = params.statusReason ?? null;\n const result = await db().transaction(async (tx) => {\n return await optimisticLockRetry({\n updateFn: () =>\n updateJobStatusAtVersion(tx, {\n jobId: params.jobId,\n status: params.status,\n expectedVersion: params.expectedVersion,\n statusReason,\n evaluationTrace: params.evaluationTrace,\n }),\n fetchFn: async () => {\n const row = (await tx.select().from(jobs).where(eq(jobs.id, params.jobId)).limit(1))[0];\n return row ? toJob(row) : undefined;\n },\n matchFn: (job) =>\n (job.status === params.status && job.statusReason === statusReason) ||\n isJobTerminal(job.status)\n ? {job, changed: false}\n : null,\n failureMessage: `Optimistic lock failure: job ${params.jobId} version ${params.expectedVersion}`,\n });\n });\n\n if (result.changed) recordWorkflowJobStatusChanged(result.job.status);\n\n return result.job;\n}\n\nexport type EvaluateJobSuccessResult = DeriveJobSuccessResult;\nexport const evaluateJobSuccess = deriveJobSuccess;\n\nexport async function resolveJobStatusFromJobExecutions(params: {\n jobId: string;\n}): Promise<{status: RuntimeCompletionStatus; jobVersion: number}> {\n const result = await db().transaction(async (tx) => {\n const jobRow = (await tx.select().from(jobs).where(eq(jobs.id, params.jobId)).limit(1))[0];\n if (!jobRow) throw new JobNotFoundError(params.jobId);\n\n const jobExecutionRows = await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, params.jobId))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id));\n const workflowContext = await getWorkflowContextForJob(params.jobId, tx);\n\n if (jobExecutionRows.length === 0) {\n throw new Error(`Cannot resolve job ${params.jobId}: no job executions found`);\n }\n\n const {status, statusReason, trace} = evaluateJobSuccess({\n success: jobRow.success,\n executions: jobExecutionRows.map((execution) =>\n toJobExecution(execution, jobRow.name ?? jobRow.key),\n ),\n jobs: await getDirectDependencyJobContexts(params.jobId, tx),\n vars: workflowContext.vars ?? undefined,\n });\n\n return optimisticLockRetry({\n updateFn: () =>\n updateJobStatusAtVersion(tx, {\n jobId: params.jobId,\n status,\n expectedVersion: jobRow.version,\n statusReason,\n evaluationTrace: trace,\n }),\n fetchFn: async () => {\n const row = (await tx.select().from(jobs).where(eq(jobs.id, params.jobId)).limit(1))[0];\n if (!row) throw new JobNotFoundError(params.jobId);\n return toJob(row);\n },\n matchFn: (job) => ({job, changed: false}),\n failureMessage: `Optimistic lock failure: job ${params.jobId} version ${jobRow.version}`,\n });\n });\n\n if (result.changed) recordWorkflowJobStatusChanged(result.job.status);\n return {\n status: result.job.status === 'succeeded' ? 'succeeded' : 'failed',\n jobVersion: result.job.version,\n };\n}\n"],"names":["readPersistedWorkflowModel","WORKFLOWS_JOB_TERMINATED","and","asc","desc","eq","inArray","notInArray","sql","isJobTerminal","JobNotFoundError","decideJobActivation","deriveJobSuccess","runtimeCompletionStatusForJob","recordWorkflowJobStatusChanged","db","writeWorkflowsOutboxEvent","jobExecutions","toJobExecution","jobs","toJob","workflowRunAttempts","toWorkflowRun","workflowRuns","getWorkflowRunById","getWorkflowContextForJob","optimisticLockRetry","TERMINAL_JOB_STATUSES","outputTypesByJobKey","model","Map","flatMap","job","outputTypes","undefined","key","getJobsByWorkflowRunAttemptId","workflowRunAttemptId","rows","select","from","where","orderBy","position","map","getJobsByWorkflowRunId","workflowRunId","run","attempt","id","currentAttempt","limit","getJobById","row","getJobScope","jobId","workspaceId","projectId","triggerReference","innerJoin","getDirectDependencyJobContexts","tx","targetRows","target","dependencies","length","execution","leftJoin","sequence","contextsByJobId","context","get","jobOutputTypes","executions","set","push","name","values","evaluateJobActivations","params","result","transaction","expectedVersions","expectedVersion","jobIds","targets","runAttemptId","for","found","Set","missing","filter","has","Error","join","contextsByJobKey","directDependencyContextsByJobKey","targetsByJobId","decisions","input","modelJob","find","item","decision","condition","if","vars","dependency","kind","updated","updateJobStatusAtVersion","status","statusReason","evaluationTrace","jobVersion","version","changed","existing","_changed","targetJobs","dependencyKeys","size","outputs","reduceJobOutputs","update","updatedAt","Date","returning","currentExecution","statusReasonMessage","identity","type","payload","jobExecutionId","updateJobStatus","updateFn","fetchFn","matchFn","failureMessage","evaluateJobSuccess","resolveJobStatusFromJobExecutions","jobRow","jobExecutionRows","workflowContext","trace","success"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/db/workflow-runs/jobs.ts"],"sourcesContent":["import {readPersistedWorkflowModel} from '@shipfox/api-definitions-dto';\nimport {WORKFLOWS_JOB_TERMINATED} from '@shipfox/api-workflows-dto';\nimport type {ExpressionType} from '@shipfox/expression';\nimport {and, asc, desc, eq, inArray, notInArray, sql} from 'drizzle-orm';\nimport {isJobTerminal, type Job, type JobStatus, type JobStatusReason} from '#core/entities/job.js';\nimport type {JobExecution} from '#core/entities/job-execution.js';\nimport type {PersistedEvaluationTraceEntry} from '#core/entities/step.js';\nimport type {\n WorkflowRunOriginState,\n WorkflowRunTriggerReference,\n} from '#core/entities/workflow-run.js';\nimport {JobNotFoundError} from '#core/errors.js';\nimport {\n type DeriveJobSuccessResult,\n decideJobActivation,\n deriveJobSuccess,\n runtimeCompletionStatusForJob,\n} from '#core/job-transition/index.js';\nimport type {JobContextInput} from '#core/step-config/assemble-run-context.js';\nimport type {RuntimeCompletionStatus} from '#core/workflow-scheduling/runtime-dag.js';\nimport {recordWorkflowJobStatusChanged} from '#metrics/instance.js';\nimport {db, type Tx} from '../db.js';\nimport {writeWorkflowsOutboxEvent} from '../outbox-writes.js';\nimport {jobExecutions, toJobExecution} from '../schema/job-executions.js';\nimport {jobs, toJob} from '../schema/jobs.js';\nimport {workflowRunAttempts} from '../schema/workflow-run-attempts.js';\nimport {toWorkflowRun, toWorkflowRunOriginState, workflowRuns} from '../schema/workflow-runs.js';\nimport {getWorkflowRunById} from './queries.js';\nimport {getWorkflowContextForJob, optimisticLockRetry, TERMINAL_JOB_STATUSES} from './shared.js';\n\nfunction outputTypesByJobKey(\n model: ReturnType<typeof readPersistedWorkflowModel> | null,\n): ReadonlyMap<string, Readonly<Record<string, ExpressionType>>> {\n return new Map(\n (model?.jobs ?? []).flatMap((job) =>\n job.outputTypes === undefined ? [] : [[job.key, job.outputTypes] as const],\n ),\n );\n}\n\nexport async function getJobsByWorkflowRunAttemptId(workflowRunAttemptId: string): Promise<Job[]> {\n const rows = await db()\n .select()\n .from(jobs)\n .where(eq(jobs.workflowRunAttemptId, workflowRunAttemptId))\n .orderBy(asc(jobs.position));\n return rows.map(toJob);\n}\n\nexport async function getJobsByWorkflowRunId(workflowRunId: string): Promise<Job[]> {\n const run = await getWorkflowRunById(workflowRunId);\n if (!run) return [];\n const [attempt] = await db()\n .select()\n .from(workflowRunAttempts)\n .where(\n and(\n eq(workflowRunAttempts.workflowRunId, run.id),\n eq(workflowRunAttempts.attempt, run.currentAttempt),\n ),\n )\n .limit(1);\n return attempt ? getJobsByWorkflowRunAttemptId(attempt.id) : [];\n}\n\nexport async function getJobById(id: string): Promise<Job | undefined> {\n const rows = await db().select().from(jobs).where(eq(jobs.id, id)).limit(1);\n const row = rows[0];\n if (!row) return undefined;\n return toJob(row);\n}\n\nexport interface JobScope {\n workspaceId: string;\n projectId: string;\n triggerReference: WorkflowRunTriggerReference | null;\n /** The run's origin state, so checkout fallbacks can read the dev source. */\n run: WorkflowRunOriginState;\n}\n\nexport async function getJobScope(jobId: string): Promise<JobScope | undefined> {\n const rows = await db()\n .select({\n workspaceId: workflowRuns.workspaceId,\n projectId: workflowRuns.projectId,\n triggerReference: workflowRuns.triggerReference,\n origin: workflowRuns.origin,\n devSource: workflowRuns.devSource,\n })\n .from(jobs)\n .innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id))\n .innerJoin(workflowRuns, eq(workflowRunAttempts.workflowRunId, workflowRuns.id))\n .where(eq(jobs.id, jobId))\n .limit(1);\n const row = rows[0];\n if (!row) return undefined;\n return {\n workspaceId: row.workspaceId,\n projectId: row.projectId,\n triggerReference: row.triggerReference,\n run: toWorkflowRunOriginState(row),\n };\n}\n\nexport async function getDirectDependencyJobContexts(\n jobId: string,\n tx?: Tx,\n): Promise<JobContextInput[]> {\n const targetRows = await (tx ?? db())\n .select({job: jobs, attempt: workflowRunAttempts})\n .from(jobs)\n .innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id))\n .where(eq(jobs.id, jobId))\n .limit(1);\n const target = targetRows[0];\n if (!target || target.job.dependencies.length === 0) return [];\n const model =\n target.attempt.model === null ? null : readPersistedWorkflowModel(target.attempt.model);\n const outputTypes = outputTypesByJobKey(model);\n\n const rows = await (tx ?? db())\n .select({job: jobs, execution: jobExecutions})\n .from(jobs)\n .leftJoin(jobExecutions, eq(jobExecutions.jobId, jobs.id))\n .where(\n and(\n eq(jobs.workflowRunAttemptId, target.job.workflowRunAttemptId),\n inArray(jobs.key, target.job.dependencies),\n ),\n )\n .orderBy(asc(jobs.position), asc(jobs.id), asc(jobExecutions.sequence), asc(jobExecutions.id));\n\n const contextsByJobId = new Map<string, JobContextInput & {executions: JobExecution[]}>();\n for (const row of rows) {\n let context = contextsByJobId.get(row.job.id);\n if (!context) {\n const jobOutputTypes = outputTypes.get(row.job.key);\n context = {\n job: toJob(row.job),\n ...(jobOutputTypes === undefined ? {} : {outputTypes: jobOutputTypes}),\n executions: [],\n };\n contextsByJobId.set(row.job.id, context);\n }\n if (row.execution)\n context.executions.push(toJobExecution(row.execution, row.job.name ?? row.job.key));\n }\n\n return [...contextsByJobId.values()];\n}\n\nexport interface EvaluateJobActivationsParams {\n runAttemptId: string;\n jobs: readonly {\n jobId: string;\n expectedVersion: number;\n }[];\n}\n\nexport type JobActivationDecision =\n | {\n kind: 'start-job';\n jobId: string;\n }\n | {\n kind: 'terminal-job';\n jobId: string;\n status: RuntimeCompletionStatus;\n jobVersion: number;\n };\n\ntype InternalJobActivationDecision = JobActivationDecision & {changed?: boolean};\n\nexport async function evaluateJobActivations(\n params: EvaluateJobActivationsParams,\n): Promise<JobActivationDecision[]> {\n if (params.jobs.length === 0) return [];\n\n const result = await db().transaction(async (tx) => {\n const expectedVersions = new Map(\n params.jobs.map((job) => [job.jobId, job.expectedVersion] as const),\n );\n const jobIds = params.jobs.map((job) => job.jobId);\n const targets = await tx\n .select({job: jobs, attempt: workflowRunAttempts, run: workflowRuns})\n .from(jobs)\n .innerJoin(workflowRunAttempts, eq(jobs.workflowRunAttemptId, workflowRunAttempts.id))\n .innerJoin(workflowRuns, eq(workflowRunAttempts.workflowRunId, workflowRuns.id))\n .where(and(eq(jobs.workflowRunAttemptId, params.runAttemptId), inArray(jobs.id, jobIds)))\n .for('update');\n\n if (targets.length !== jobIds.length) {\n const found = new Set(targets.map((target) => target.job.id));\n const missing = jobIds.filter((jobId) => !found.has(jobId));\n throw new Error(`Cannot evaluate missing activation jobs: ${missing.join(', ')}`);\n }\n\n const contextsByJobKey = await directDependencyContextsByJobKey(\n tx,\n params.runAttemptId,\n targets.map((target) => toJob(target.job)),\n );\n const targetsByJobId = new Map(targets.map((target) => [target.job.id, target]));\n const decisions: InternalJobActivationDecision[] = [];\n\n for (const input of params.jobs) {\n const target = targetsByJobId.get(input.jobId);\n if (!target) throw new Error(`Cannot evaluate missing activation job: ${input.jobId}`);\n const job = toJob(target.job);\n const model =\n target.attempt.model === null ? null : readPersistedWorkflowModel(target.attempt.model);\n const modelJob = model?.jobs.find((item) => item.key === target.job.key);\n const decision = decideJobActivation({\n run: toWorkflowRun(target.run),\n job,\n condition: modelJob?.if,\n vars: target.attempt.vars ?? undefined,\n dependencies: job.dependencies.flatMap((key) => {\n const dependency = contextsByJobKey.get(key);\n return dependency === undefined ? [] : [dependency];\n }),\n });\n\n if (decision.kind === 'terminal-job' || decision.kind === 'start-job') {\n decisions.push(decision);\n continue;\n }\n\n const expectedVersion = expectedVersions.get(job.id);\n if (expectedVersion === undefined) {\n throw new Error(`Missing expected version for activation job ${job.id}`);\n }\n const updated = await updateJobStatusAtVersion(tx, {\n jobId: job.id,\n status: decision.status,\n expectedVersion,\n statusReason: decision.statusReason,\n evaluationTrace: decision.evaluationTrace,\n });\n if (updated) {\n decisions.push({\n kind: 'terminal-job',\n jobId: job.id,\n status: 'skipped',\n jobVersion: updated.job.version,\n changed: updated.changed,\n });\n continue;\n }\n\n const [existing] = await tx.select().from(jobs).where(eq(jobs.id, job.id)).limit(1);\n if (existing && isJobTerminal(existing.status)) {\n decisions.push({\n kind: 'terminal-job',\n jobId: job.id,\n status: runtimeCompletionStatusForJob(existing.status),\n jobVersion: existing.version,\n });\n continue;\n }\n throw new Error(`Optimistic lock failure evaluating activation for job ${job.id}`);\n }\n\n return decisions;\n });\n\n for (const decision of result) {\n if (decision.kind === 'terminal-job' && decision.changed) {\n recordWorkflowJobStatusChanged(decision.status);\n }\n }\n\n return result.map(({changed: _changed, ...decision}) => decision);\n}\n\nasync function directDependencyContextsByJobKey(\n tx: Tx,\n runAttemptId: string,\n targetJobs: readonly Job[],\n): Promise<ReadonlyMap<string, JobContextInput>> {\n const dependencyKeys = new Set(targetJobs.flatMap((job) => job.dependencies));\n if (dependencyKeys.size === 0) return new Map();\n\n const [attempt] = await tx\n .select({model: workflowRunAttempts.model})\n .from(workflowRunAttempts)\n .where(eq(workflowRunAttempts.id, runAttemptId))\n .limit(1);\n const model =\n attempt === undefined || attempt.model === null\n ? null\n : readPersistedWorkflowModel(attempt.model);\n const outputTypes = outputTypesByJobKey(model);\n\n const rows = await tx\n .select({job: jobs, execution: jobExecutions})\n .from(jobs)\n .leftJoin(jobExecutions, eq(jobExecutions.jobId, jobs.id))\n .where(and(eq(jobs.workflowRunAttemptId, runAttemptId), inArray(jobs.key, [...dependencyKeys])))\n .orderBy(asc(jobs.position), asc(jobs.id), asc(jobExecutions.sequence), asc(jobExecutions.id));\n\n const contextsByJobKey = new Map<string, JobContextInput & {executions: JobExecution[]}>();\n for (const row of rows) {\n let context = contextsByJobKey.get(row.job.key);\n if (!context) {\n const jobOutputTypes = outputTypes.get(row.job.key);\n context = {\n job: toJob(row.job),\n ...(jobOutputTypes === undefined ? {} : {outputTypes: jobOutputTypes}),\n executions: [],\n };\n contextsByJobKey.set(row.job.key, context);\n }\n if (row.execution)\n context.executions.push(toJobExecution(row.execution, row.job.name ?? row.job.key));\n }\n\n return contextsByJobKey;\n}\n\nexport interface UpdateJobStatusAtVersionParams {\n jobId: string;\n status: JobStatus;\n expectedVersion: number;\n statusReason?: JobStatusReason | null | undefined;\n evaluationTrace?: readonly PersistedEvaluationTraceEntry[] | null | undefined;\n}\n\n// Returns null on version mismatch so callers can choose throw vs treat-as-success.\nexport async function updateJobStatusAtVersion(\n tx: Tx,\n params: UpdateJobStatusAtVersionParams,\n): Promise<{job: Job; changed: boolean} | null> {\n const outputs = isJobTerminal(params.status)\n ? await reduceJobOutputs(tx, {jobId: params.jobId, status: params.status})\n : undefined;\n const rows = await tx\n .update(jobs)\n .set({\n status: params.status,\n statusReason: params.statusReason ?? null,\n ...(outputs === undefined ? {} : {outputs}),\n ...(params.evaluationTrace === undefined ? {} : {evaluationTrace: params.evaluationTrace}),\n version: sql`${jobs.version} + 1`,\n updatedAt: new Date(),\n })\n .where(\n and(\n eq(jobs.id, params.jobId),\n eq(jobs.version, params.expectedVersion),\n notInArray(jobs.status, TERMINAL_JOB_STATUSES),\n ),\n )\n .returning();\n\n const row = rows[0];\n if (!row) return null;\n const job = toJob(row);\n\n // Every terminal job-status write funnels through this one guarded UPDATE, where the\n // version match lets a single caller win. Emitting here, in the same transaction,\n // makes the terminal fact fire exactly once across all paths.\n if (isJobTerminal(job.status)) {\n const [currentExecution] = await tx\n .select({\n id: jobExecutions.id,\n statusReasonMessage: jobExecutions.statusReasonMessage,\n })\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, job.id))\n .orderBy(desc(jobExecutions.sequence), desc(jobExecutions.id))\n .limit(1);\n const identity = await getWorkflowContextForJob(job.id, tx);\n await writeWorkflowsOutboxEvent(tx, {\n type: WORKFLOWS_JOB_TERMINATED,\n payload: {\n jobId: job.id,\n jobExecutionId: currentExecution?.id ?? null,\n workflowRunId: identity.workflowRunId,\n workflowRunAttemptId: identity.workflowRunAttemptId,\n status: job.status,\n statusReason: job.statusReason,\n statusReasonMessage: currentExecution?.statusReasonMessage ?? null,\n },\n });\n }\n\n return {job, changed: true};\n}\n\nasync function reduceJobOutputs(\n tx: Tx,\n params: {jobId: string; status: JobStatus},\n): Promise<Record<string, unknown> | null> {\n if (params.status !== 'succeeded') return null;\n\n const [row] = await tx\n .select({outputs: jobExecutions.outputs})\n .from(jobExecutions)\n .where(and(eq(jobExecutions.jobId, params.jobId), eq(jobExecutions.status, 'succeeded')))\n .orderBy(desc(jobExecutions.sequence), desc(jobExecutions.id))\n .limit(1);\n\n return row?.outputs ? {...row.outputs} : null;\n}\n\nexport interface UpdateJobStatusParams {\n jobId: string;\n status: JobStatus;\n expectedVersion: number;\n statusReason?: JobStatusReason | null | undefined;\n evaluationTrace?: readonly PersistedEvaluationTraceEntry[] | null | undefined;\n}\n\nexport async function updateJobStatus(params: UpdateJobStatusParams): Promise<Job> {\n const statusReason = params.statusReason ?? null;\n const result = await db().transaction(async (tx) => {\n return await optimisticLockRetry({\n updateFn: () =>\n updateJobStatusAtVersion(tx, {\n jobId: params.jobId,\n status: params.status,\n expectedVersion: params.expectedVersion,\n statusReason,\n evaluationTrace: params.evaluationTrace,\n }),\n fetchFn: async () => {\n const row = (await tx.select().from(jobs).where(eq(jobs.id, params.jobId)).limit(1))[0];\n return row ? toJob(row) : undefined;\n },\n matchFn: (job) =>\n (job.status === params.status && job.statusReason === statusReason) ||\n isJobTerminal(job.status)\n ? {job, changed: false}\n : null,\n failureMessage: `Optimistic lock failure: job ${params.jobId} version ${params.expectedVersion}`,\n });\n });\n\n if (result.changed) recordWorkflowJobStatusChanged(result.job.status);\n\n return result.job;\n}\n\nexport type EvaluateJobSuccessResult = DeriveJobSuccessResult;\nexport const evaluateJobSuccess = deriveJobSuccess;\n\nexport async function resolveJobStatusFromJobExecutions(params: {\n jobId: string;\n}): Promise<{status: RuntimeCompletionStatus; jobVersion: number}> {\n const result = await db().transaction(async (tx) => {\n const jobRow = (await tx.select().from(jobs).where(eq(jobs.id, params.jobId)).limit(1))[0];\n if (!jobRow) throw new JobNotFoundError(params.jobId);\n\n const jobExecutionRows = await tx\n .select()\n .from(jobExecutions)\n .where(eq(jobExecutions.jobId, params.jobId))\n .orderBy(asc(jobExecutions.sequence), asc(jobExecutions.id));\n const workflowContext = await getWorkflowContextForJob(params.jobId, tx);\n\n if (jobExecutionRows.length === 0) {\n throw new Error(`Cannot resolve job ${params.jobId}: no job executions found`);\n }\n\n const {status, statusReason, trace} = evaluateJobSuccess({\n success: jobRow.success,\n executions: jobExecutionRows.map((execution) =>\n toJobExecution(execution, jobRow.name ?? jobRow.key),\n ),\n jobs: await getDirectDependencyJobContexts(params.jobId, tx),\n vars: workflowContext.vars ?? undefined,\n });\n\n return optimisticLockRetry({\n updateFn: () =>\n updateJobStatusAtVersion(tx, {\n jobId: params.jobId,\n status,\n expectedVersion: jobRow.version,\n statusReason,\n evaluationTrace: trace,\n }),\n fetchFn: async () => {\n const row = (await tx.select().from(jobs).where(eq(jobs.id, params.jobId)).limit(1))[0];\n if (!row) throw new JobNotFoundError(params.jobId);\n return toJob(row);\n },\n matchFn: (job) => ({job, changed: false}),\n failureMessage: `Optimistic lock failure: job ${params.jobId} version ${jobRow.version}`,\n });\n });\n\n if (result.changed) recordWorkflowJobStatusChanged(result.job.status);\n return {\n status: result.job.status === 'succeeded' ? 'succeeded' : 'failed',\n jobVersion: result.job.version,\n };\n}\n"],"names":["readPersistedWorkflowModel","WORKFLOWS_JOB_TERMINATED","and","asc","desc","eq","inArray","notInArray","sql","isJobTerminal","JobNotFoundError","decideJobActivation","deriveJobSuccess","runtimeCompletionStatusForJob","recordWorkflowJobStatusChanged","db","writeWorkflowsOutboxEvent","jobExecutions","toJobExecution","jobs","toJob","workflowRunAttempts","toWorkflowRun","toWorkflowRunOriginState","workflowRuns","getWorkflowRunById","getWorkflowContextForJob","optimisticLockRetry","TERMINAL_JOB_STATUSES","outputTypesByJobKey","model","Map","flatMap","job","outputTypes","undefined","key","getJobsByWorkflowRunAttemptId","workflowRunAttemptId","rows","select","from","where","orderBy","position","map","getJobsByWorkflowRunId","workflowRunId","run","attempt","id","currentAttempt","limit","getJobById","row","getJobScope","jobId","workspaceId","projectId","triggerReference","origin","devSource","innerJoin","getDirectDependencyJobContexts","tx","targetRows","target","dependencies","length","execution","leftJoin","sequence","contextsByJobId","context","get","jobOutputTypes","executions","set","push","name","values","evaluateJobActivations","params","result","transaction","expectedVersions","expectedVersion","jobIds","targets","runAttemptId","for","found","Set","missing","filter","has","Error","join","contextsByJobKey","directDependencyContextsByJobKey","targetsByJobId","decisions","input","modelJob","find","item","decision","condition","if","vars","dependency","kind","updated","updateJobStatusAtVersion","status","statusReason","evaluationTrace","jobVersion","version","changed","existing","_changed","targetJobs","dependencyKeys","size","outputs","reduceJobOutputs","update","updatedAt","Date","returning","currentExecution","statusReasonMessage","identity","type","payload","jobExecutionId","updateJobStatus","updateFn","fetchFn","matchFn","failureMessage","evaluateJobSuccess","resolveJobStatusFromJobExecutions","jobRow","jobExecutionRows","workflowContext","trace","success"],"mappings":"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"}
@@ -2,12 +2,13 @@ import { type TimestampIdCursor } from '@shipfox/node-drizzle';
2
2
  import { type SQL } from 'drizzle-orm';
3
3
  import type { JobMode, JobStatus, ListenerStatus } from '#core/entities/job.js';
4
4
  import type { JobExecutionStatus } from '#core/entities/job-execution.js';
5
- import type { JobExecutionDetail, WorkflowRun, WorkflowRunDetail, WorkflowRunStatus } from '#core/entities/workflow-run.js';
5
+ import type { JobExecutionDetail, WorkflowRun, WorkflowRunDetail, WorkflowRunOrigin, WorkflowRunStatus } from '#core/entities/workflow-run.js';
6
6
  export type WorkflowRunCursor = TimestampIdCursor;
7
7
  export interface WorkflowRunFilters {
8
8
  status?: WorkflowRunStatus | undefined;
9
9
  definitionId?: string | undefined;
10
10
  triggerSource?: string | undefined;
11
+ origin?: WorkflowRunOrigin | undefined;
11
12
  createdFrom?: Date | undefined;
12
13
  createdTo?: Date | undefined;
13
14
  }
@@ -70,7 +71,7 @@ export declare function buildWorkflowRunListConditions(params: {
70
71
  projectId: string;
71
72
  filters?: WorkflowRunFilters | undefined;
72
73
  cursor?: WorkflowRunCursor | undefined;
73
- omit?: 'status' | 'definitionId' | 'triggerSource' | undefined;
74
+ omit?: 'status' | 'definitionId' | 'triggerSource' | 'origin' | undefined;
74
75
  }): SQL[];
75
76
  export declare function listWorkflowRuns(params: ListWorkflowRunsParams): Promise<ListWorkflowRunsResult>;
76
77
  /** The run whose jobs to fetch, pinned to the attempt the caller already read. */
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/db/workflow-runs/queries.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,9 @@ export function buildWorkflowRunListConditions(params) {
57
57
  if (filters?.triggerSource && params.omit !== 'triggerSource') {
58
58
  conditions.push(eq(workflowRuns.triggerSource, filters.triggerSource));
59
59
  }
60
+ if (filters?.origin && params.omit !== 'origin') {
61
+ conditions.push(eq(workflowRuns.origin, filters.origin));
62
+ }
60
63
  if (filters?.createdFrom) {
61
64
  conditions.push(gte(workflowRuns.createdAt, filters.createdFrom));
62
65
  }