@oisincoveney/pipeline 3.24.2 → 4.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 (382) hide show
  1. package/README.md +14 -2
  2. package/defaults/pipeline.yaml +23 -5
  3. package/defaults/profiles.yaml +104 -21
  4. package/dist/argo-graph.js +90 -88
  5. package/dist/argo-submit.d.ts +110 -138
  6. package/dist/argo-submit.js +363 -378
  7. package/dist/argo-workflow.d.ts +156 -177
  8. package/dist/argo-workflow.js +96 -138
  9. package/dist/backlog.js +5 -4
  10. package/dist/bench/eval-report.js +21 -12
  11. package/dist/claude-settings-config.js +23 -31
  12. package/dist/claude-user-config.js +6 -16
  13. package/dist/cli/bootstrap-commands.js +3 -3
  14. package/dist/cli/doctor.d.ts +1 -1
  15. package/dist/cli/doctor.js +176 -171
  16. package/dist/cli/factory-commands.js +13 -13
  17. package/dist/cli/format.js +92 -86
  18. package/dist/cli/loop-commands.js +21 -21
  19. package/dist/cli/mcp-gateway-commands.js +12 -12
  20. package/dist/cli/plan-commands.js +85 -116
  21. package/dist/cli/program.d.ts +3 -3
  22. package/dist/cli/program.js +41 -43
  23. package/dist/cli/run-command.d.ts +1 -1
  24. package/dist/cli/run-command.js +25 -25
  25. package/dist/cli/run-commands.js +31 -29
  26. package/dist/cli/run-resolver.d.ts +1 -1
  27. package/dist/cli/run-resolver.js +30 -32
  28. package/dist/cli/run-service.d.ts +2 -3
  29. package/dist/cli/run-service.js +229 -239
  30. package/dist/cli/submit-options.js +85 -83
  31. package/dist/cluster-doctor.js +147 -175
  32. package/dist/codex-config.js +24 -30
  33. package/dist/commands/bench-command.js +9 -7
  34. package/dist/commands/coordinator-command.js +35 -0
  35. package/dist/commands/pipeline-command.js +13 -7
  36. package/dist/commands/runner-command-command.js +39 -24
  37. package/dist/commands/runner-node-command.js +31 -0
  38. package/dist/commands/ticket/complete.js +29 -33
  39. package/dist/commands/ticket/create.js +84 -82
  40. package/dist/commands/ticket/graph-check.js +11 -11
  41. package/dist/commands/ticket/next.js +36 -36
  42. package/dist/commands/ticket/sequence.js +11 -12
  43. package/dist/commands/ticket/shared.d.ts +5 -2
  44. package/dist/commands/ticket/shared.js +63 -66
  45. package/dist/commands/ticket/start.js +58 -67
  46. package/dist/commands/ticket-command.js +2 -2
  47. package/dist/config/defaults.d.ts +139 -140
  48. package/dist/config/defaults.js +81 -80
  49. package/dist/config/lint.js +52 -64
  50. package/dist/config/load.d.ts +4 -5
  51. package/dist/config/load.js +64 -74
  52. package/dist/config/schema/catalog.d.ts +2 -1
  53. package/dist/config/schema/catalog.js +3 -2
  54. package/dist/config/schema/mcp.js +46 -52
  55. package/dist/config/schemas.d.ts +382 -528
  56. package/dist/config/schemas.js +400 -398
  57. package/dist/config/validate.d.ts +1 -2
  58. package/dist/config/validate.js +236 -201
  59. package/dist/config.d.ts +2 -2
  60. package/dist/context/repo-map.js +105 -119
  61. package/dist/coordinator/composition.js +169 -0
  62. package/dist/coordinator/config.js +71 -0
  63. package/dist/coordinator/run-owner.js +64 -0
  64. package/dist/coordinator/wave-advance.js +148 -0
  65. package/dist/coordinator/wave-scheduler.js +50 -0
  66. package/dist/credentials/broker.d.ts +6 -8
  67. package/dist/credentials/broker.js +17 -16
  68. package/dist/credentials/codex-config.js +15 -19
  69. package/dist/credentials/file-targets.js +9 -15
  70. package/dist/credentials/local-codex-auth-sync.js +55 -58
  71. package/dist/credentials/opencode-config.js +28 -32
  72. package/dist/credentials/runner.js +13 -13
  73. package/dist/effect-sync-errors.js +28 -0
  74. package/dist/factory/create-experiment.js +285 -121
  75. package/dist/factory/exec.js +10 -12
  76. package/dist/factory/git-credentials.js +4 -4
  77. package/dist/factory/stamp-answers.js +10 -11
  78. package/dist/factory/template-update.js +65 -44
  79. package/dist/factory-lane.d.ts +26 -40
  80. package/dist/factory-lane.js +26 -25
  81. package/dist/gates.js +3 -3
  82. package/dist/git-remote-url.js +17 -19
  83. package/dist/hooks.d.ts +26 -26
  84. package/dist/hooks.js +20 -22
  85. package/dist/index.d.ts +4 -3
  86. package/dist/index.js +27 -36
  87. package/dist/install-commands/claude-code.js +100 -92
  88. package/dist/install-commands/host-selection.js +3 -6
  89. package/dist/install-commands/opencode.js +264 -259
  90. package/dist/install-commands/planner.js +163 -181
  91. package/dist/install-commands/result-format.js +1 -3
  92. package/dist/install-commands/shared.js +25 -42
  93. package/dist/install-commands/writer.js +22 -25
  94. package/dist/install-commands.js +8 -8
  95. package/dist/jscpd-output.js +29 -0
  96. package/dist/json-config-merge.js +14 -20
  97. package/dist/json-line-values.js +17 -6
  98. package/dist/loop/argo-poll.d.ts +0 -1
  99. package/dist/loop/argo-poll.js +15 -95
  100. package/dist/loop/backlog-records.js +1 -3
  101. package/dist/loop/controller-deps.js +150 -161
  102. package/dist/loop/controller.js +164 -186
  103. package/dist/loop/gh-checks.js +62 -61
  104. package/dist/loop/gh-runner.js +22 -25
  105. package/dist/loop/loop-command.js +66 -58
  106. package/dist/loop/loop-controller-entrypoint.js +29 -30
  107. package/dist/loop/merge.js +36 -40
  108. package/dist/loop/run-terminal-poll.js +69 -0
  109. package/dist/mcp/gateway-config.js +25 -29
  110. package/dist/mcp/gateway-doctor.js +77 -119
  111. package/dist/mcp/gateway-reconcile.js +17 -22
  112. package/dist/mcp/gateway-runtime.js +1 -3
  113. package/dist/mcp/host-config.js +37 -40
  114. package/dist/mcp/host-renderers.js +10 -18
  115. package/dist/mcp/repo-local-backends.js +51 -54
  116. package/dist/mcp/toolhive-vmcp.js +39 -39
  117. package/dist/model-resolver.js +29 -33
  118. package/dist/moka-global-config.d.ts +78 -55
  119. package/dist/moka-global-config.js +93 -92
  120. package/dist/moka-submit.d.ts +2179 -866
  121. package/dist/moka-submit.js +97 -99
  122. package/dist/opencode-project-config.js +34 -40
  123. package/dist/package-assets.js +1 -3
  124. package/dist/path-refs.js +2 -2
  125. package/dist/pipeline-init.js +25 -25
  126. package/dist/pipeline-runtime.d.ts +15 -14
  127. package/dist/pipeline-runtime.js +51 -50
  128. package/dist/planned-node.js +6 -3
  129. package/dist/planning/compile.d.ts +5 -5
  130. package/dist/planning/compile.js +140 -139
  131. package/dist/planning/dependency-refs.js +5 -5
  132. package/dist/planning/generate.d.ts +1296 -1296
  133. package/dist/planning/generate.js +307 -314
  134. package/dist/planning/graph.d.ts +0 -1
  135. package/dist/planning/graph.js +131 -149
  136. package/dist/remote/argo/model.d.ts +104 -122
  137. package/dist/remote/argo/model.js +205 -197
  138. package/dist/remote/argo/policy.js +39 -47
  139. package/dist/remote/argo/storage.js +81 -85
  140. package/dist/remote/jobs/execution-identity.js +70 -0
  141. package/dist/remote/jobs/job-outcome.js +108 -0
  142. package/dist/remote/jobs/manifest.js +96 -0
  143. package/dist/remote/jobs/model.d.ts +158 -0
  144. package/dist/remote/jobs/model.js +162 -0
  145. package/dist/remote/jobs/node-bootstrap.js +213 -0
  146. package/dist/remote/jobs/policy.js +123 -0
  147. package/dist/remote/jobs/reconcile.js +100 -0
  148. package/dist/remote/jobs/run-spec-client.js +64 -0
  149. package/dist/remote/jobs/run-spec-path.js +31 -0
  150. package/dist/remote/jobs/run-spec-server.d.ts +34 -0
  151. package/dist/remote/jobs/run-spec-server.js +116 -0
  152. package/dist/remote/jobs/submit.d.ts +23 -0
  153. package/dist/remote/jobs/submit.js +116 -0
  154. package/dist/remote/jobs/watch.js +59 -0
  155. package/dist/remote/submit/argo-submission.d.ts +3 -1
  156. package/dist/remote/submit/argo-submission.js +53 -58
  157. package/dist/remote/submit/compilation.d.ts +2 -0
  158. package/dist/remote/submit/compilation.js +46 -49
  159. package/dist/remote/submit/event-boundary.js +62 -76
  160. package/dist/remote/submit/hook-events.d.ts +6 -0
  161. package/dist/remote/submit/io.d.ts +7 -1
  162. package/dist/remote/submit/io.js +40 -43
  163. package/dist/remote/submit/jobs-submission.d.ts +59 -0
  164. package/dist/remote/submit/jobs-submission.js +97 -0
  165. package/dist/remote/submit/jobs-submit-result.d.ts +25 -0
  166. package/dist/remote/submit/jobs-submit-result.js +34 -0
  167. package/dist/remote/submit/options.d.ts +49 -0
  168. package/dist/remote/submit/options.js +27 -0
  169. package/dist/remote/submit/service.d.ts +40 -1
  170. package/dist/remote/submit/service.js +67 -49
  171. package/dist/run-control/command-context.js +6 -8
  172. package/dist/run-control/commands.js +10 -10
  173. package/dist/run-control/contracts.d.ts +52 -101
  174. package/dist/run-control/contracts.js +83 -69
  175. package/dist/run-control/detach.js +66 -72
  176. package/dist/run-control/execution-store.js +0 -0
  177. package/dist/run-control/file-errors.js +1 -3
  178. package/dist/run-control/logical-segment.js +3 -3
  179. package/dist/run-control/next-node.js +67 -78
  180. package/dist/run-control/postgres/postgres-run-control-store.js +196 -225
  181. package/dist/run-control/resume-command.js +34 -41
  182. package/dist/run-control/run-artifacts-command.js +84 -105
  183. package/dist/run-control/run-command-domain.js +7 -11
  184. package/dist/run-control/run-control-store.js +9 -9
  185. package/dist/run-control/run-query-command.js +73 -100
  186. package/dist/run-control/run-record.js +5 -3
  187. package/dist/run-control/run-state-lock.js +5 -5
  188. package/dist/run-control/runtime-event-projection.js +38 -50
  189. package/dist/run-control/runtime-reporter.js +86 -102
  190. package/dist/run-control/stop-command.js +42 -53
  191. package/dist/run-control/store-fs-effects.js +3 -1
  192. package/dist/run-control/store-manifest.js +38 -13
  193. package/dist/run-control/store-paths.js +3 -3
  194. package/dist/run-control/store.js +1 -1
  195. package/dist/run-control/submit-result.js +21 -21
  196. package/dist/run-control/supervisor.js +78 -68
  197. package/dist/run-control/workspace.js +2 -2
  198. package/dist/run-state/git-refs.js +258 -307
  199. package/dist/runner/opencode-excludes.js +4 -4
  200. package/dist/runner/subprocess-result.js +28 -37
  201. package/dist/runner/subprocess.js +41 -41
  202. package/dist/runner/timeouts.js +14 -13
  203. package/dist/runner-command/dynamic-command.js +46 -39
  204. package/dist/runner-command/environment-commands.js +91 -0
  205. package/dist/runner-command/finalize.js +174 -153
  206. package/dist/runner-command/lifecycle-context.js +115 -130
  207. package/dist/runner-command/lifecycle.js +78 -72
  208. package/dist/runner-command/pre-schedule.js +203 -223
  209. package/dist/runner-command/run.js +450 -448
  210. package/dist/runner-command/schedule-source-options.js +8 -10
  211. package/dist/runner-command/select-ready-wave.js +39 -30
  212. package/dist/runner-command/task-descriptor.js +11 -17
  213. package/dist/runner-command-contract.d.ts +147 -157
  214. package/dist/runner-command-contract.js +403 -411
  215. package/dist/runner-event-schema.d.ts +364 -505
  216. package/dist/runner-event-schema.js +187 -175
  217. package/dist/runner-event-sink.js +37 -43
  218. package/dist/runner-output.js +6 -6
  219. package/dist/runner.d.ts +57 -37
  220. package/dist/runner.js +176 -127
  221. package/dist/runtime/actor-ids.d.ts +1 -0
  222. package/dist/runtime/actor-ids.js +2 -2
  223. package/dist/runtime/agent-node/agent-node.js +99 -110
  224. package/dist/runtime/agent-node/handoff-finalization.js +23 -24
  225. package/dist/runtime/agent-node/model-selection.js +19 -22
  226. package/dist/runtime/agent-node/output-finalization.js +174 -204
  227. package/dist/runtime/agent-node/prompt-rendering.js +208 -251
  228. package/dist/runtime/agent-node/session-execution.js +43 -39
  229. package/dist/runtime/builtins/builtins.js +218 -284
  230. package/dist/runtime/changed-files/changed-files.js +29 -34
  231. package/dist/runtime/command-executor/command-executor.js +31 -23
  232. package/dist/runtime/config-error.js +1 -3
  233. package/dist/runtime/context/context.js +35 -37
  234. package/dist/runtime/contracts/contracts.d.ts +3 -0
  235. package/dist/runtime/contracts/index.d.ts +1 -1
  236. package/dist/runtime/detached-race.js +11 -14
  237. package/dist/runtime/drain-merge/drain-merge.js +139 -164
  238. package/dist/runtime/durable-store/acquisition.js +5 -3
  239. package/dist/runtime/durable-store/durable-store.d.ts +3 -1
  240. package/dist/runtime/durable-store/postgres/client.js +29 -0
  241. package/dist/runtime/durable-store/postgres/migrate-substrate.js +34 -29
  242. package/dist/runtime/durable-store/postgres/postgres-store.js +18 -20
  243. package/dist/runtime/events/events.js +273 -331
  244. package/dist/runtime/events/index.js +2 -2
  245. package/dist/runtime/execution-envelope.js +44 -0
  246. package/dist/runtime/gates/adjudication/llm-judge.js +21 -24
  247. package/dist/runtime/gates/adjudication/structured-claim.js +15 -16
  248. package/dist/runtime/gates/adjudicator/adjudicator.js +27 -27
  249. package/dist/runtime/gates/adjudicator/index.js +2 -2
  250. package/dist/runtime/gates/contract.js +5 -9
  251. package/dist/runtime/gates/gates.js +9 -8
  252. package/dist/runtime/gates/kinds/acceptance/acceptance.js +68 -71
  253. package/dist/runtime/gates/kinds/acceptance/index.js +2 -2
  254. package/dist/runtime/gates/kinds/artifact/artifact.js +4 -4
  255. package/dist/runtime/gates/kinds/artifact/index.js +2 -2
  256. package/dist/runtime/gates/kinds/builtin/builtin.js +4 -4
  257. package/dist/runtime/gates/kinds/builtin/index.js +2 -2
  258. package/dist/runtime/gates/kinds/changed-files/changed-files.js +31 -35
  259. package/dist/runtime/gates/kinds/changed-files/index.js +2 -2
  260. package/dist/runtime/gates/kinds/command/command.js +3 -3
  261. package/dist/runtime/gates/kinds/command/index.js +2 -2
  262. package/dist/runtime/gates/kinds/json-schema/index.js +2 -2
  263. package/dist/runtime/gates/kinds/json-schema/json-schema.js +7 -6
  264. package/dist/runtime/gates/kinds/verdict/index.js +2 -2
  265. package/dist/runtime/gates/kinds/verdict/verdict.js +3 -3
  266. package/dist/runtime/gates/orchestrator.js +72 -86
  267. package/dist/runtime/gates/registry.js +1 -3
  268. package/dist/runtime/handoff.d.ts +2 -1
  269. package/dist/runtime/handoff.js +43 -46
  270. package/dist/runtime/hooks/command-hook.js +57 -71
  271. package/dist/runtime/hooks/context.js +21 -25
  272. package/dist/runtime/hooks/events.js +84 -100
  273. package/dist/runtime/hooks/execution.js +6 -12
  274. package/dist/runtime/hooks/hooks.js +34 -23
  275. package/dist/runtime/hooks/invocation.js +23 -29
  276. package/dist/runtime/hooks/module-hook.js +36 -35
  277. package/dist/runtime/hooks/policy.js +32 -29
  278. package/dist/runtime/hooks/results.js +56 -66
  279. package/dist/runtime/journal-acquisition.d.ts +3 -2
  280. package/dist/runtime/journal-acquisition.js +14 -14
  281. package/dist/runtime/json-validation/json-validation.js +51 -72
  282. package/dist/runtime/launch-plan-args.js +39 -0
  283. package/dist/runtime/local-scheduler.js +46 -48
  284. package/dist/runtime/node-execution.js +376 -445
  285. package/dist/runtime/node-protocol/node-protocol.js +36 -79
  286. package/dist/runtime/node-state-store.d.ts +4 -1
  287. package/dist/runtime/node-state-store.js +13 -57
  288. package/dist/runtime/node-state-tracker.js +46 -54
  289. package/dist/runtime/open-pull-request/open-pull-request.js +201 -187
  290. package/dist/runtime/opencode-adapter.js +23 -24
  291. package/dist/runtime/opencode-agent-name.js +6 -6
  292. package/dist/runtime/opencode-runtime.js +115 -93
  293. package/dist/runtime/opencode-server.js +39 -53
  294. package/dist/runtime/opencode-session-executor.js +312 -344
  295. package/dist/runtime/parallel-node/parallel-node.js +123 -134
  296. package/dist/runtime/parallel-worktrees/parallel-worktrees.js +90 -73
  297. package/dist/runtime/protected-paths/protected-paths.js +70 -71
  298. package/dist/runtime/remediation/remediation.js +202 -231
  299. package/dist/runtime/retry.js +8 -10
  300. package/dist/runtime/run-journal.d.ts +2 -0
  301. package/dist/runtime/run-journal.js +7 -7
  302. package/dist/runtime/runtime-results.js +54 -69
  303. package/dist/runtime/scheduled-dependencies.d.ts +2 -1
  304. package/dist/runtime/scheduled-dependencies.js +61 -75
  305. package/dist/runtime/scheduler.js +179 -202
  306. package/dist/runtime/services/agent-node-runtime-service.js +3 -3
  307. package/dist/runtime/services/backlog-service.d.ts +1 -2
  308. package/dist/runtime/services/backlog-service.js +8 -14
  309. package/dist/runtime/services/command-executor-service.js +1 -1
  310. package/dist/runtime/services/config-io-service.js +24 -21
  311. package/dist/runtime/services/drain-merge-git-service.js +1 -1
  312. package/dist/runtime/services/file-system-service.js +9 -7
  313. package/dist/runtime/services/git-porcelain-service.js +6 -6
  314. package/dist/runtime/services/kubernetes-argo-service.d.ts +10 -3
  315. package/dist/runtime/services/kubernetes-argo-service.js +90 -84
  316. package/dist/runtime/services/kubernetes-jobs-read-service.js +115 -0
  317. package/dist/runtime/services/kubernetes-jobs-service.d.ts +37 -0
  318. package/dist/runtime/services/kubernetes-jobs-service.js +45 -0
  319. package/dist/runtime/services/kubernetes-jobs-watch-service.js +61 -0
  320. package/dist/runtime/services/kubernetes-lease-service.js +21 -0
  321. package/dist/runtime/services/mcp-gateway-service.js +143 -94
  322. package/dist/runtime/services/open-pull-request-git-service.js +1 -3
  323. package/dist/runtime/services/opencode-runtime-server-service.js +10 -12
  324. package/dist/runtime/services/opencode-sdk-service.js +7 -7
  325. package/dist/runtime/services/repo-io-service.js +10 -12
  326. package/dist/runtime/services/run-journal-file-service.js +2 -2
  327. package/dist/runtime/services/runner-command-io-service.js +48 -52
  328. package/dist/runtime/services/runner-event-sink-http-service.js +32 -39
  329. package/dist/runtime/step/step-node.js +15 -15
  330. package/dist/runtime/workflow-execution.js +56 -57
  331. package/dist/runtime/workflow-lifecycle.js +82 -101
  332. package/dist/runtime/yeet-event-record.js +104 -0
  333. package/dist/runtime/yeet-executor.js +184 -0
  334. package/dist/safe-json.js +16 -16
  335. package/dist/schedule/backlog-context.js +122 -116
  336. package/dist/schedule/baseline.js +249 -255
  337. package/dist/schedule/passes/coverage.js +63 -68
  338. package/dist/schedule/passes/drain-merge.js +34 -40
  339. package/dist/schedule/passes/ids.js +15 -17
  340. package/dist/schedule/passes/models.js +40 -37
  341. package/dist/schedule/passes/open-pull-request.js +16 -20
  342. package/dist/schedule/passes/references.js +18 -22
  343. package/dist/schedule/prompts.js +135 -141
  344. package/dist/schedule/scheduling-roles.js +8 -14
  345. package/dist/schema-boundary.d.ts +4 -0
  346. package/dist/schema-boundary.js +145 -0
  347. package/dist/serialized-write-queue.js +2 -2
  348. package/dist/standard-output-schemas.js +61 -59
  349. package/dist/strings.js +12 -12
  350. package/dist/task-ref.js +5 -5
  351. package/dist/tickets/apply-ticket-plan.js +52 -61
  352. package/dist/tickets/backlog-task-store.d.ts +15 -23
  353. package/dist/tickets/backlog-task-store.js +82 -94
  354. package/dist/tickets/completion/complete-ticket.js +53 -59
  355. package/dist/tickets/ticket-graph-dto.d.ts +24 -48
  356. package/dist/tickets/ticket-graph-dto.js +40 -40
  357. package/dist/tickets/ticket-graph.d.ts +7 -2
  358. package/dist/tickets/ticket-graph.js +36 -50
  359. package/dist/tickets/ticket-plan-command-args.js +6 -10
  360. package/dist/tickets/ticket-plan-render.js +10 -16
  361. package/dist/tickets/ticket-plan.d.ts +32 -41
  362. package/dist/tickets/ticket-plan.js +97 -77
  363. package/dist/tickets/ticket-selection.d.ts +3 -1
  364. package/dist/tickets/ticket-selection.js +37 -52
  365. package/dist/tickets/ticket-task-index.js +13 -17
  366. package/dist/tickets/validation-error-format.js +3 -10
  367. package/dist/token-estimator.js +12 -7
  368. package/dist/unknown-fields.js +21 -0
  369. package/dist/workflow-submit-contract.d.ts +9 -10
  370. package/dist/workflow-submit-contract.js +10 -9
  371. package/docs/adr-moka-postgres-schema-isolation.md +48 -0
  372. package/docs/adr-opencode-first-goal-loop-runtime.md +11 -11
  373. package/docs/config-architecture.md +13 -13
  374. package/docs/mcp-host-isolation.md +1 -0
  375. package/docs/moka-orchestrator-design.md +3 -3
  376. package/docs/operator-guide.md +1 -1
  377. package/docs/pipeline-console-runner-contract.md +10 -6
  378. package/docs/runtime-actor-model.md +18 -18
  379. package/docs/runtime-test-subsystems.md +200 -0
  380. package/docs/slash-command-adapter-contract.md +3 -3
  381. package/package.json +49 -85
  382. package/dist/config/schema/reference-validation.js +0 -83
@@ -1,186 +1,165 @@
1
1
  import { WorkflowExecutionPlan } from "./planning/compile.js";
2
2
  import { buildDynamicRunnerArgoWorkflowOptionsSchema, buildRunnerArgoWorkflowOptionsSchema } from "./remote/argo/model.js";
3
- import { z } from "zod";
4
-
5
3
  //#region src/argo-workflow.d.ts
6
- declare const runnerArgoWorkflowManifestSchema: z.ZodObject<{
7
- apiVersion: z.ZodLiteral<"argoproj.io/v1alpha1">;
8
- kind: z.ZodLiteral<"Workflow">;
9
- metadata: z.ZodObject<{
10
- annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
11
- generateName: z.ZodOptional<z.ZodString>;
12
- labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
13
- name: z.ZodOptional<z.ZodString>;
14
- namespace: z.ZodString;
15
- }, z.core.$strict>;
16
- spec: z.ZodObject<{
17
- activeDeadlineSeconds: z.ZodOptional<z.ZodNumber>;
18
- entrypoint: z.ZodLiteral<"pipeline">;
19
- imagePullSecrets: z.ZodOptional<z.ZodArray<z.ZodObject<{
20
- name: z.ZodString;
21
- }, z.core.$strict>>>;
22
- podMetadata: z.ZodOptional<z.ZodObject<{
23
- labels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
24
- }, z.core.$strict>>;
25
- serviceAccountName: z.ZodString;
26
- onExit: z.ZodOptional<z.ZodString>;
27
- templates: z.ZodArray<z.ZodObject<{
28
- container: z.ZodOptional<z.ZodObject<{
29
- args: z.ZodArray<z.ZodString>;
30
- command: z.ZodOptional<z.ZodArray<z.ZodString>>;
31
- env: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
32
- name: z.ZodString;
33
- value: z.ZodString;
34
- }, z.core.$strict>, z.ZodObject<{
35
- name: z.ZodString;
36
- valueFrom: z.ZodObject<{
37
- secretKeyRef: z.ZodObject<{
38
- key: z.ZodString;
39
- name: z.ZodString;
40
- }, z.core.$strict>;
41
- }, z.core.$strict>;
42
- }, z.core.$strict>]>>>;
43
- image: z.ZodString;
44
- imagePullPolicy: z.ZodEnum<{
45
- Always: "Always";
46
- IfNotPresent: "IfNotPresent";
47
- Never: "Never";
48
- }>;
49
- name: z.ZodOptional<z.ZodString>;
50
- resources: z.ZodOptional<z.ZodObject<{
51
- limits: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
52
- requests: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
53
- }, z.core.$strict>>;
54
- volumeMounts: z.ZodArray<z.ZodObject<{
55
- mountPath: z.ZodString;
56
- name: z.ZodString;
57
- readOnly: z.ZodOptional<z.ZodBoolean>;
58
- subPath: z.ZodOptional<z.ZodString>;
59
- }, z.core.$strict>>;
60
- }, z.core.$strict>>;
61
- dag: z.ZodOptional<z.ZodObject<{
62
- tasks: z.ZodArray<z.ZodObject<{
63
- arguments: z.ZodOptional<z.ZodObject<{
64
- artifacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
65
- from: z.ZodOptional<z.ZodString>;
66
- name: z.ZodString;
67
- path: z.ZodOptional<z.ZodString>;
68
- }, z.core.$strict>>>;
69
- parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
70
- name: z.ZodString;
71
- value: z.ZodString;
72
- }, z.core.$strict>>>;
73
- }, z.core.$strict>>;
74
- dependencies: z.ZodOptional<z.ZodArray<z.ZodString>>;
75
- name: z.ZodString;
76
- template: z.ZodString;
77
- when: z.ZodOptional<z.ZodString>;
78
- withParam: z.ZodOptional<z.ZodString>;
79
- }, z.core.$strict>>;
80
- }, z.core.$strict>>;
81
- inputs: z.ZodOptional<z.ZodObject<{
82
- artifacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
83
- from: z.ZodOptional<z.ZodString>;
84
- name: z.ZodString;
85
- path: z.ZodOptional<z.ZodString>;
86
- }, z.core.$strict>>>;
87
- parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
88
- name: z.ZodString;
89
- }, z.core.$strict>>>;
90
- }, z.core.$strict>>;
91
- outputs: z.ZodOptional<z.ZodObject<{
92
- artifacts: z.ZodOptional<z.ZodArray<z.ZodObject<{
93
- from: z.ZodOptional<z.ZodString>;
94
- name: z.ZodString;
95
- path: z.ZodOptional<z.ZodString>;
96
- }, z.core.$strict>>>;
97
- parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
98
- name: z.ZodString;
99
- valueFrom: z.ZodObject<{
100
- path: z.ZodString;
101
- }, z.core.$strict>;
102
- }, z.core.$strict>>>;
103
- }, z.core.$strict>>;
104
- steps: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodObject<{
105
- arguments: z.ZodOptional<z.ZodObject<{
106
- parameters: z.ZodOptional<z.ZodArray<z.ZodObject<{
107
- name: z.ZodString;
108
- value: z.ZodString;
109
- }, z.core.$strict>>>;
110
- }, z.core.$strict>>;
111
- name: z.ZodString;
112
- template: z.ZodString;
113
- when: z.ZodOptional<z.ZodString>;
114
- withParam: z.ZodOptional<z.ZodString>;
115
- }, z.core.$strict>>>>;
116
- activeDeadlineSeconds: z.ZodOptional<z.ZodNumber>;
117
- name: z.ZodString;
118
- retryStrategy: z.ZodOptional<z.ZodObject<{
119
- expression: z.ZodOptional<z.ZodString>;
120
- limit: z.ZodOptional<z.ZodString>;
121
- retryPolicy: z.ZodEnum<{
122
- Always: "Always";
123
- OnError: "OnError";
124
- OnFailure: "OnFailure";
125
- OnTransientError: "OnTransientError";
126
- }>;
127
- }, z.core.$strict>>;
128
- }, z.core.$strict>>;
129
- podGC: z.ZodOptional<z.ZodObject<{
130
- deleteDelayDuration: z.ZodOptional<z.ZodString>;
131
- labelSelector: z.ZodOptional<z.ZodObject<{
132
- matchExpressions: z.ZodOptional<z.ZodArray<z.ZodObject<{
133
- key: z.ZodString;
134
- operator: z.ZodEnum<{
135
- DoesNotExist: "DoesNotExist";
136
- Exists: "Exists";
137
- In: "In";
138
- NotIn: "NotIn";
4
+ declare const runnerArgoWorkflowManifestSchema: import("effect/Schema").Struct<{
5
+ readonly apiVersion: import("effect/Schema").Literal<"argoproj.io/v1alpha1">;
6
+ readonly kind: import("effect/Schema").Literal<"Workflow">;
7
+ readonly metadata: import("effect/Schema").Struct<{
8
+ readonly annotations: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").String>>;
9
+ readonly generateName: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
10
+ readonly labels: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").NonEmptyString, import("effect/Schema").NonEmptyString>>;
11
+ readonly name: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
12
+ readonly namespace: import("effect/Schema").NonEmptyString;
13
+ }>;
14
+ readonly spec: import("effect/Schema").Struct<{
15
+ readonly activeDeadlineSeconds: import("effect/Schema").optional<import("effect/Schema").Number>;
16
+ readonly entrypoint: import("effect/Schema").Literal<"pipeline">;
17
+ readonly imagePullSecrets: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
18
+ readonly name: import("effect/Schema").NonEmptyString;
19
+ }>>>>;
20
+ readonly onExit: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
21
+ readonly podGC: import("effect/Schema").optional<import("effect/Schema").Struct<{
22
+ readonly deleteDelayDuration: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
23
+ readonly labelSelector: import("effect/Schema").optional<import("effect/Schema").Struct<{
24
+ readonly matchExpressions: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
25
+ readonly key: import("effect/Schema").NonEmptyString;
26
+ readonly operator: import("effect/Schema").Literals<readonly ["In", "NotIn", "Exists", "DoesNotExist"]>;
27
+ readonly values: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").String>>>;
28
+ }>>>>;
29
+ readonly matchLabels: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").NonEmptyString, import("effect/Schema").String>>;
30
+ }>>;
31
+ readonly strategy: import("effect/Schema").optional<import("effect/Schema").Literals<readonly ["OnPodCompletion", "OnPodSuccess", "OnWorkflowCompletion", "OnWorkflowSuccess"]>>;
32
+ }>>;
33
+ readonly podMetadata: import("effect/Schema").optional<import("effect/Schema").Struct<{
34
+ readonly labels: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").NonEmptyString, import("effect/Schema").NonEmptyString>>;
35
+ }>>;
36
+ readonly serviceAccountName: import("effect/Schema").NonEmptyString;
37
+ readonly templates: import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
38
+ readonly activeDeadlineSeconds: import("effect/Schema").optional<import("effect/Schema").Number>;
39
+ readonly container: import("effect/Schema").optional<import("effect/Schema").Struct<{
40
+ readonly args: import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").NonEmptyString>>;
41
+ readonly command: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").NonEmptyString>>>;
42
+ readonly env: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Union<readonly [import("effect/Schema").Struct<{
43
+ readonly name: import("effect/Schema").NonEmptyString;
44
+ readonly value: import("effect/Schema").String;
45
+ }>, import("effect/Schema").Struct<{
46
+ readonly name: import("effect/Schema").NonEmptyString;
47
+ readonly valueFrom: import("effect/Schema").Struct<{
48
+ readonly secretKeyRef: import("effect/Schema").Struct<{
49
+ readonly key: import("effect/Schema").NonEmptyString;
50
+ readonly name: import("effect/Schema").NonEmptyString;
51
+ }>;
52
+ }>;
53
+ }>]>>>>;
54
+ readonly image: import("effect/Schema").NonEmptyString;
55
+ readonly imagePullPolicy: import("effect/Schema").Literals<readonly ["Always", "IfNotPresent", "Never"]>;
56
+ readonly name: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
57
+ readonly resources: import("effect/Schema").optional<import("effect/Schema").Struct<{
58
+ readonly limits: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").String>>;
59
+ readonly requests: import("effect/Schema").optional<import("effect/Schema").$Record<import("effect/Schema").String, import("effect/Schema").String>>;
60
+ }>>;
61
+ readonly volumeMounts: import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
62
+ readonly mountPath: import("effect/Schema").NonEmptyString;
63
+ readonly name: import("effect/Schema").NonEmptyString;
64
+ readonly readOnly: import("effect/Schema").optional<import("effect/Schema").Boolean>;
65
+ readonly subPath: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
66
+ }>>>;
67
+ }>>;
68
+ readonly dag: import("effect/Schema").optional<import("effect/Schema").Struct<{
69
+ readonly tasks: import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
70
+ readonly arguments: import("effect/Schema").optional<import("effect/Schema").Struct<{
71
+ readonly artifacts: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
72
+ readonly from: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
73
+ readonly name: import("effect/Schema").NonEmptyString;
74
+ readonly path: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
75
+ }>>>>;
76
+ readonly parameters: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
77
+ readonly name: import("effect/Schema").NonEmptyString;
78
+ readonly value: import("effect/Schema").String;
79
+ }>>>>;
80
+ }>>;
81
+ readonly dependencies: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").NonEmptyString>>>;
82
+ readonly name: import("effect/Schema").NonEmptyString;
83
+ readonly template: import("effect/Schema").NonEmptyString;
84
+ readonly when: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
85
+ readonly withParam: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
86
+ }>>>;
87
+ }>>;
88
+ readonly inputs: import("effect/Schema").optional<import("effect/Schema").Struct<{
89
+ readonly artifacts: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
90
+ readonly from: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
91
+ readonly name: import("effect/Schema").NonEmptyString;
92
+ readonly path: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
93
+ }>>>>;
94
+ readonly parameters: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
95
+ readonly name: import("effect/Schema").NonEmptyString;
96
+ }>>>>;
97
+ }>>;
98
+ readonly name: import("effect/Schema").NonEmptyString;
99
+ readonly outputs: import("effect/Schema").optional<import("effect/Schema").Struct<{
100
+ readonly artifacts: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
101
+ readonly from: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
102
+ readonly name: import("effect/Schema").NonEmptyString;
103
+ readonly path: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
104
+ }>>>>;
105
+ readonly parameters: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
106
+ readonly name: import("effect/Schema").NonEmptyString;
107
+ readonly valueFrom: import("effect/Schema").Struct<{
108
+ readonly path: import("effect/Schema").NonEmptyString;
139
109
  }>;
140
- values: z.ZodOptional<z.ZodArray<z.ZodString>>;
141
- }, z.core.$strict>>>;
142
- matchLabels: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
143
- }, z.core.$strict>>;
144
- strategy: z.ZodOptional<z.ZodEnum<{
145
- OnPodCompletion: "OnPodCompletion";
146
- OnPodSuccess: "OnPodSuccess";
147
- OnWorkflowCompletion: "OnWorkflowCompletion";
148
- OnWorkflowSuccess: "OnWorkflowSuccess";
110
+ }>>>>;
111
+ }>>;
112
+ readonly retryStrategy: import("effect/Schema").optional<import("effect/Schema").Struct<{
113
+ readonly expression: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
114
+ readonly limit: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
115
+ readonly retryPolicy: import("effect/Schema").Literals<readonly ["Always", "OnError", "OnFailure", "OnTransientError"]>;
116
+ }>>;
117
+ readonly steps: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
118
+ readonly arguments: import("effect/Schema").optional<import("effect/Schema").Struct<{
119
+ readonly parameters: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
120
+ readonly name: import("effect/Schema").NonEmptyString;
121
+ readonly value: import("effect/Schema").String;
122
+ }>>>>;
123
+ }>>;
124
+ readonly name: import("effect/Schema").NonEmptyString;
125
+ readonly template: import("effect/Schema").NonEmptyString;
126
+ readonly when: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
127
+ readonly withParam: import("effect/Schema").optional<import("effect/Schema").NonEmptyString>;
128
+ }>>>>>>;
129
+ }>>>;
130
+ readonly ttlStrategy: import("effect/Schema").optional<import("effect/Schema").Struct<{
131
+ readonly secondsAfterCompletion: import("effect/Schema").optional<import("effect/Schema").Number>;
132
+ readonly secondsAfterFailure: import("effect/Schema").optional<import("effect/Schema").Number>;
133
+ readonly secondsAfterSuccess: import("effect/Schema").optional<import("effect/Schema").Number>;
134
+ }>>;
135
+ readonly volumes: import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
136
+ readonly configMap: import("effect/Schema").optional<import("effect/Schema").Struct<{
137
+ readonly items: import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
138
+ readonly key: import("effect/Schema").NonEmptyString;
139
+ readonly path: import("effect/Schema").NonEmptyString;
140
+ }>>>;
141
+ readonly name: import("effect/Schema").NonEmptyString;
142
+ }>>;
143
+ readonly name: import("effect/Schema").NonEmptyString;
144
+ readonly secret: import("effect/Schema").optional<import("effect/Schema").Struct<{
145
+ readonly defaultMode: import("effect/Schema").optional<import("effect/Schema").Number>;
146
+ readonly items: import("effect/Schema").optional<import("effect/Schema").mutable<import("effect/Schema").$Array<import("effect/Schema").Struct<{
147
+ readonly key: import("effect/Schema").NonEmptyString;
148
+ readonly path: import("effect/Schema").NonEmptyString;
149
+ }>>>>;
150
+ readonly optional: import("effect/Schema").optional<import("effect/Schema").Boolean>;
151
+ readonly secretName: import("effect/Schema").NonEmptyString;
149
152
  }>>;
150
- }, z.core.$strict>>;
151
- ttlStrategy: z.ZodOptional<z.ZodObject<{
152
- secondsAfterCompletion: z.ZodOptional<z.ZodNumber>;
153
- secondsAfterFailure: z.ZodOptional<z.ZodNumber>;
154
- secondsAfterSuccess: z.ZodOptional<z.ZodNumber>;
155
- }, z.core.$strict>>;
156
- volumes: z.ZodArray<z.ZodObject<{
157
- configMap: z.ZodOptional<z.ZodObject<{
158
- items: z.ZodArray<z.ZodObject<{
159
- key: z.ZodString;
160
- path: z.ZodString;
161
- }, z.core.$strict>>;
162
- name: z.ZodString;
163
- }, z.core.$strict>>;
164
- name: z.ZodString;
165
- secret: z.ZodOptional<z.ZodObject<{
166
- defaultMode: z.ZodOptional<z.ZodNumber>;
167
- items: z.ZodOptional<z.ZodArray<z.ZodObject<{
168
- key: z.ZodString;
169
- path: z.ZodString;
170
- }, z.core.$strict>>>;
171
- optional: z.ZodOptional<z.ZodBoolean>;
172
- secretName: z.ZodString;
173
- }, z.core.$strict>>;
174
- }, z.core.$strict>>;
175
- }, z.core.$strict>;
176
- }, z.core.$strict>;
177
- type ArgoWorkflowManifest = z.infer<typeof runnerArgoWorkflowManifestSchema>;
178
- type BuildRunnerArgoWorkflowOptions = z.input<typeof buildRunnerArgoWorkflowOptionsSchema> & {
153
+ }>>>;
154
+ }>;
155
+ }>;
156
+ type ArgoWorkflowManifest = typeof runnerArgoWorkflowManifestSchema.Type;
157
+ type BuildRunnerArgoWorkflowOptions = typeof buildRunnerArgoWorkflowOptionsSchema.Encoded & {
179
158
  plan: WorkflowExecutionPlan;
180
159
  };
181
- type BuildDynamicRunnerArgoWorkflowOptions = z.input<typeof buildDynamicRunnerArgoWorkflowOptionsSchema>;
182
- declare function buildRunnerArgoWorkflowManifest(rawOptions: BuildRunnerArgoWorkflowOptions): ArgoWorkflowManifest;
183
- declare function buildDynamicRunnerArgoWorkflowManifest(rawOptions: BuildDynamicRunnerArgoWorkflowOptions): ArgoWorkflowManifest;
184
- declare function stringifyRunnerArgoWorkflow(workflow: ArgoWorkflowManifest): string;
160
+ type BuildDynamicRunnerArgoWorkflowOptions = typeof buildDynamicRunnerArgoWorkflowOptionsSchema.Encoded;
161
+ declare const stringifyRunnerArgoWorkflow: (workflow: ArgoWorkflowManifest) => string;
162
+ declare const buildRunnerArgoWorkflowManifest: (rawOptions: BuildRunnerArgoWorkflowOptions) => ArgoWorkflowManifest;
163
+ declare const buildDynamicRunnerArgoWorkflowManifest: (rawOptions: BuildDynamicRunnerArgoWorkflowOptions) => ArgoWorkflowManifest;
185
164
  //#endregion
186
165
  export { ArgoWorkflowManifest, BuildDynamicRunnerArgoWorkflowOptions, BuildRunnerArgoWorkflowOptions, buildDynamicRunnerArgoWorkflowManifest, buildRunnerArgoWorkflowManifest, runnerArgoWorkflowManifestSchema, stringifyRunnerArgoWorkflow };
@@ -1,3 +1,4 @@
1
+ import { parseStrictWithSchema, parseWithSchema } from "./schema-boundary.js";
1
2
  import { compileArgoExecutionGraph } from "./argo-graph.js";
2
3
  import { RUNNER_WORKFLOW_ENTRYPOINT, RUNNER_WORKFLOW_START_TASK } from "./remote/argo/policy.js";
3
4
  import { buildDynamicRunnerArgoWorkflowOptionsSchema, buildRunnerArgoWorkflowOptionsSchema, createRunnerArgoWorkflowManifestSchema } from "./remote/argo/model.js";
@@ -6,144 +7,64 @@ import { READY_NODE_IDS_PARAMETER, dynamicPreScheduleTemplate, dynamicReadyWaveS
6
7
  import { stringify } from "yaml";
7
8
  //#region src/argo-workflow.ts
8
9
  const runnerArgoWorkflowManifestSchema = createRunnerArgoWorkflowManifestSchema();
9
- function buildRunnerArgoWorkflowManifest(rawOptions) {
10
- const options = parsedBuildOptions(rawOptions);
11
- const graph = compileArgoExecutionGraph(options.plan);
12
- const storage = runnerWorkflowStorage(options, graph.tasks);
13
- return runnerArgoWorkflowManifestSchema.parse({
14
- apiVersion: "argoproj.io/v1alpha1",
15
- kind: "Workflow",
16
- metadata: workflowMetadata(options),
17
- spec: workflowSpec(options, graph.tasks, storage)
18
- });
19
- }
20
- function buildDynamicRunnerArgoWorkflowManifest(rawOptions) {
21
- const options = buildDynamicRunnerArgoWorkflowOptionsSchema.parse(rawOptions);
22
- const storage = dynamicRunnerWorkflowStorage(options);
23
- return runnerArgoWorkflowManifestSchema.parse({
24
- apiVersion: "argoproj.io/v1alpha1",
25
- kind: "Workflow",
26
- metadata: dynamicWorkflowMetadata(options),
27
- spec: dynamicWorkflowSpec(options, storage)
28
- });
29
- }
30
- function stringifyRunnerArgoWorkflow(workflow) {
31
- return stringify(runnerArgoWorkflowManifestSchema.parse(workflow));
32
- }
33
- function parsedBuildOptions(rawOptions) {
10
+ const stringifyRunnerArgoWorkflow = (workflow) => stringify(parseWithSchema(runnerArgoWorkflowManifestSchema, workflow, { onExcessProperty: "preserve" }));
11
+ const parsedBuildOptions = (rawOptions) => {
34
12
  const { plan, ...schemaOptions } = rawOptions;
35
13
  return {
36
- ...buildRunnerArgoWorkflowOptionsSchema.parse(schemaOptions),
14
+ ...parseStrictWithSchema(buildRunnerArgoWorkflowOptionsSchema, schemaOptions),
37
15
  plan
38
16
  };
39
- }
40
- function workflowMetadata(options) {
41
- return {
42
- annotations: compactRecord(options.annotations),
43
- ...options.name ? { name: options.name } : {},
44
- ...options.generateName ? { generateName: options.generateName } : {},
45
- labels: compactRecord({
46
- "pipeline.oisin.dev/source": "argo-workflow",
47
- "pipeline.oisin.dev/workflow": options.plan.workflowId,
48
- ...options.labels
49
- }),
50
- namespace: options.namespace
51
- };
52
- }
53
- function dynamicWorkflowMetadata(options) {
54
- return {
55
- annotations: compactRecord(options.annotations),
56
- ...options.name ? { name: options.name } : {},
57
- ...options.generateName ? { generateName: options.generateName } : {},
58
- labels: compactRecord({
59
- "pipeline.oisin.dev/source": "argo-workflow",
60
- "pipeline.oisin.dev/workflow": options.workflowId,
61
- ...options.labels
62
- }),
63
- namespace: options.namespace
64
- };
65
- }
66
- function workflowSpec(options, tasks, storage) {
67
- return {
68
- ...options.activeDeadlineSeconds ? { activeDeadlineSeconds: options.activeDeadlineSeconds } : {},
69
- entrypoint: RUNNER_WORKFLOW_ENTRYPOINT,
70
- ...options.imagePullSecretName ? { imagePullSecrets: [{ name: options.imagePullSecretName }] } : {},
71
- serviceAccountName: options.serviceAccountName,
72
- onExit: "pipeline-finalizer",
73
- templates: workflowTemplates(options, tasks, storage.volumeMounts),
74
- ...options.ttlStrategy ? { ttlStrategy: options.ttlStrategy } : {},
75
- volumes: storage.volumes
76
- };
77
- }
78
- function dynamicWorkflowSpec(options, storage) {
79
- return {
80
- ...options.activeDeadlineSeconds ? { activeDeadlineSeconds: options.activeDeadlineSeconds } : {},
81
- entrypoint: RUNNER_WORKFLOW_ENTRYPOINT,
82
- ...options.imagePullSecretName ? { imagePullSecrets: [{ name: options.imagePullSecretName }] } : {},
83
- serviceAccountName: options.serviceAccountName,
84
- onExit: "pipeline-finalizer",
85
- templates: dynamicWorkflowTemplates(options, storage.volumeMounts),
86
- ...options.ttlStrategy ? { ttlStrategy: options.ttlStrategy } : {},
87
- volumes: storage.volumes
88
- };
89
- }
90
- function workflowTemplates(options, tasks, volumeMounts) {
91
- return [
92
- workflowDagTemplate(tasks),
93
- runnerLifecycleTemplate(options, volumeMounts),
94
- ...tasks.map((task) => runnerCommandTemplate(task, options, volumeMounts)),
95
- runnerFinalizerTemplate(options, volumeMounts)
96
- ];
97
- }
98
- function dynamicWorkflowTemplates(options, volumeMounts) {
99
- return [
100
- dynamicWorkflowEntrypointTemplate(),
101
- dynamicDrainTemplate(),
102
- dynamicPreScheduleTemplate("pre-research", options, volumeMounts),
103
- dynamicPreScheduleTemplate("pre-planning", options, volumeMounts),
104
- dynamicPreScheduleTemplate("generate-schedule", options, volumeMounts),
105
- dynamicReadyWaveSelectorTemplate(options, volumeMounts),
106
- dynamicRunnerCommandTemplate(options, volumeMounts),
107
- dynamicRunnerFinalizerTemplate(options, volumeMounts)
108
- ];
109
- }
110
- function workflowDagTemplate(tasks) {
111
- return {
112
- dag: { tasks: [{
113
- name: RUNNER_WORKFLOW_START_TASK,
114
- template: RUNNER_WORKFLOW_START_TASK
115
- }, ...tasks.map((task) => ({
116
- dependencies: [RUNNER_WORKFLOW_START_TASK, ...task.dependencies],
117
- name: task.taskName,
118
- template: task.templateName
119
- }))] },
120
- name: RUNNER_WORKFLOW_ENTRYPOINT
121
- };
122
- }
123
- function dynamicWorkflowEntrypointTemplate() {
124
- return {
125
- name: RUNNER_WORKFLOW_ENTRYPOINT,
126
- steps: [
127
- [{
128
- name: "pre-research",
129
- template: "pre-research"
130
- }],
131
- [{
132
- name: "pre-planning",
133
- template: "pre-planning"
134
- }],
135
- [{
136
- name: "generate-schedule",
137
- template: "generate-schedule"
138
- }],
139
- [{
140
- name: "drain-ready-waves",
141
- template: "drain-ready-waves"
142
- }]
143
- ]
144
- };
145
- }
146
- function dynamicDrainTemplate() {
17
+ };
18
+ const workflowDagTemplate = (tasks) => ({
19
+ dag: { tasks: [{
20
+ name: RUNNER_WORKFLOW_START_TASK,
21
+ template: RUNNER_WORKFLOW_START_TASK
22
+ }, ...tasks.map((task) => ({
23
+ dependencies: [RUNNER_WORKFLOW_START_TASK, ...task.dependencies],
24
+ name: task.taskName,
25
+ template: task.templateName
26
+ }))] },
27
+ name: RUNNER_WORKFLOW_ENTRYPOINT
28
+ });
29
+ const workflowTemplates = (options, tasks, volumeMounts) => [
30
+ workflowDagTemplate(tasks),
31
+ runnerLifecycleTemplate(options, volumeMounts),
32
+ ...tasks.map((task) => runnerCommandTemplate(task, options, volumeMounts)),
33
+ runnerFinalizerTemplate(options, volumeMounts)
34
+ ];
35
+ const workflowSpecBase = (options, storage, templates) => ({
36
+ ...options.activeDeadlineSeconds === void 0 ? {} : { activeDeadlineSeconds: options.activeDeadlineSeconds },
37
+ entrypoint: RUNNER_WORKFLOW_ENTRYPOINT,
38
+ ...options.imagePullSecretName !== void 0 && options.imagePullSecretName.length > 0 ? { imagePullSecrets: [{ name: options.imagePullSecretName }] } : {},
39
+ onExit: "pipeline-finalizer",
40
+ serviceAccountName: options.serviceAccountName,
41
+ templates,
42
+ ...options.ttlStrategy ? { ttlStrategy: options.ttlStrategy } : {},
43
+ volumes: storage.volumes
44
+ });
45
+ const workflowSpec = (options, tasks, storage) => workflowSpecBase(options, storage, workflowTemplates(options, tasks, storage.volumeMounts));
46
+ const dynamicWorkflowEntrypointTemplate = () => ({
47
+ name: RUNNER_WORKFLOW_ENTRYPOINT,
48
+ steps: [
49
+ [{
50
+ name: "pre-research",
51
+ template: "pre-research"
52
+ }],
53
+ [{
54
+ name: "pre-planning",
55
+ template: "pre-planning"
56
+ }],
57
+ [{
58
+ name: "generate-schedule",
59
+ template: "generate-schedule"
60
+ }],
61
+ [{
62
+ name: "drain-ready-waves",
63
+ template: "drain-ready-waves"
64
+ }]
65
+ ]
66
+ });
67
+ const dynamicDrainTemplate = () => {
147
68
  const readyExpression = `{{steps.select-ready-wave.outputs.parameters.${READY_NODE_IDS_PARAMETER}}} != []`;
148
69
  return {
149
70
  name: "drain-ready-waves",
@@ -169,9 +90,46 @@ function dynamicDrainTemplate() {
169
90
  }]
170
91
  ]
171
92
  };
172
- }
173
- function compactRecord(input) {
174
- return Object.fromEntries(Object.entries(input).filter((entry) => entry[1] !== void 0));
175
- }
93
+ };
94
+ const dynamicWorkflowTemplates = (options, volumeMounts) => [
95
+ dynamicWorkflowEntrypointTemplate(),
96
+ dynamicDrainTemplate(),
97
+ dynamicPreScheduleTemplate("pre-research", options, volumeMounts),
98
+ dynamicPreScheduleTemplate("pre-planning", options, volumeMounts),
99
+ dynamicPreScheduleTemplate("generate-schedule", options, volumeMounts),
100
+ dynamicReadyWaveSelectorTemplate(options, volumeMounts),
101
+ dynamicRunnerCommandTemplate(options, volumeMounts),
102
+ dynamicRunnerFinalizerTemplate(options, volumeMounts)
103
+ ];
104
+ const dynamicWorkflowSpec = (options, storage) => workflowSpecBase(options, storage, dynamicWorkflowTemplates(options, storage.volumeMounts));
105
+ const compactRecord = (input) => Object.fromEntries(Object.entries(input).filter((entry) => entry[1] !== void 0));
106
+ const workflowMetadata = (options, workflowId) => ({
107
+ annotations: compactRecord(options.annotations),
108
+ ...options.name !== void 0 && options.name.length > 0 ? { name: options.name } : {},
109
+ ...options.generateName !== void 0 && options.generateName.length > 0 ? { generateName: options.generateName } : {},
110
+ labels: compactRecord({
111
+ "pipeline.oisin.dev/source": "argo-workflow",
112
+ "pipeline.oisin.dev/workflow": workflowId,
113
+ ...options.labels
114
+ }),
115
+ namespace: options.namespace
116
+ });
117
+ const runnerArgoWorkflowManifest = (options, workflowId, spec) => parseStrictWithSchema(runnerArgoWorkflowManifestSchema, {
118
+ apiVersion: "argoproj.io/v1alpha1",
119
+ kind: "Workflow",
120
+ metadata: workflowMetadata(options, workflowId),
121
+ spec
122
+ });
123
+ const buildRunnerArgoWorkflowManifest = (rawOptions) => {
124
+ const options = parsedBuildOptions(rawOptions);
125
+ const graph = compileArgoExecutionGraph(options.plan);
126
+ const storage = runnerWorkflowStorage(options, graph.tasks);
127
+ return runnerArgoWorkflowManifest(options, options.plan.workflowId, workflowSpec(options, graph.tasks, storage));
128
+ };
129
+ const buildDynamicRunnerArgoWorkflowManifest = (rawOptions) => {
130
+ const options = parseStrictWithSchema(buildDynamicRunnerArgoWorkflowOptionsSchema, rawOptions);
131
+ const storage = dynamicRunnerWorkflowStorage(options);
132
+ return runnerArgoWorkflowManifest(options, options.workflowId, dynamicWorkflowSpec(options, storage));
133
+ };
176
134
  //#endregion
177
135
  export { buildDynamicRunnerArgoWorkflowManifest, buildRunnerArgoWorkflowManifest, runnerArgoWorkflowManifestSchema, stringifyRunnerArgoWorkflow };
package/dist/backlog.js CHANGED
@@ -1,13 +1,14 @@
1
+ import { Option } from "effect";
1
2
  //#region src/backlog.ts
2
3
  /**
3
4
  * `backlog task create` (with `--plain`) prints `Task <PREFIX>-<id> - <title>`
4
5
  * on the second non-blank line. We accept custom all-caps Backlog prefixes and
5
6
  * subtask ids like `PIPE-3.1`.
6
7
  */
7
- const TASK_ID_RE = /^Task\s+([A-Z]+-[\w.]+)\b/m;
8
- function parseBacklogTaskId(stdout) {
8
+ const TASK_ID_RE = /^Task\s+([A-Z]+-[\w.]+)\b/mu;
9
+ const parseBacklogTaskId = (stdout) => {
9
10
  const m = TASK_ID_RE.exec(stdout);
10
- return m ? m[1] : null;
11
- }
11
+ return m === null ? Option.none() : Option.some(m[1]);
12
+ };
12
13
  //#endregion
13
14
  export { parseBacklogTaskId };