@trebired/git-host 2.2.0 → 3.1.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 (286) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +103 -11
  3. package/dist/api/forge/actions/filters.d.ts +10 -0
  4. package/dist/api/forge/actions/filters.d.ts.map +1 -0
  5. package/dist/api/forge/actions/filters.js +63 -0
  6. package/dist/api/forge/actions/filters.js.map +1 -0
  7. package/dist/api/forge/actions/run.d.ts +8 -0
  8. package/dist/api/forge/actions/run.d.ts.map +1 -0
  9. package/dist/api/forge/actions/run.js +129 -0
  10. package/dist/api/forge/actions/run.js.map +1 -0
  11. package/dist/api/forge/actions.d.ts +3 -12
  12. package/dist/api/forge/actions.d.ts.map +1 -1
  13. package/dist/api/forge/actions.js +2 -216
  14. package/dist/api/forge/actions.js.map +1 -1
  15. package/dist/api/handler/response.d.ts.map +1 -1
  16. package/dist/api/handler/response.js +55 -1
  17. package/dist/api/handler/response.js.map +1 -1
  18. package/dist/core/actions/environment.d.ts +9 -0
  19. package/dist/core/actions/environment.d.ts.map +1 -0
  20. package/dist/core/actions/environment.js +64 -0
  21. package/dist/core/actions/environment.js.map +1 -0
  22. package/dist/core/actions/expressions/read.d.ts +7 -0
  23. package/dist/core/actions/expressions/read.d.ts.map +1 -0
  24. package/dist/core/actions/expressions/read.js +148 -0
  25. package/dist/core/actions/expressions/read.js.map +1 -0
  26. package/dist/core/actions/expressions/tokenize.d.ts +4 -0
  27. package/dist/core/actions/expressions/tokenize.d.ts.map +1 -0
  28. package/dist/core/actions/expressions/tokenize.js +112 -0
  29. package/dist/core/actions/expressions/tokenize.js.map +1 -0
  30. package/dist/core/actions/expressions/types.d.ts +38 -0
  31. package/dist/core/actions/expressions/types.d.ts.map +1 -0
  32. package/dist/core/actions/expressions/types.js +2 -0
  33. package/dist/core/actions/expressions/types.js.map +1 -0
  34. package/dist/core/actions/expressions.d.ts +2 -9
  35. package/dist/core/actions/expressions.d.ts.map +1 -1
  36. package/dist/core/actions/expressions.js +2 -256
  37. package/dist/core/actions/expressions.js.map +1 -1
  38. package/dist/core/actions/local_runner.d.ts +5 -0
  39. package/dist/core/actions/local_runner.d.ts.map +1 -1
  40. package/dist/core/actions/local_runner.js +70 -18
  41. package/dist/core/actions/local_runner.js.map +1 -1
  42. package/dist/core/actions/node_runner.d.ts.map +1 -1
  43. package/dist/core/actions/node_runner.js +2 -1
  44. package/dist/core/actions/node_runner.js.map +1 -1
  45. package/dist/core/actions/normalize/finalize.d.ts +7 -0
  46. package/dist/core/actions/normalize/finalize.d.ts.map +1 -0
  47. package/dist/core/actions/normalize/finalize.js +70 -0
  48. package/dist/core/actions/normalize/finalize.js.map +1 -0
  49. package/dist/core/actions/normalize/shared.d.ts +19 -0
  50. package/dist/core/actions/normalize/shared.d.ts.map +1 -0
  51. package/dist/core/actions/normalize/shared.js +289 -0
  52. package/dist/core/actions/normalize/shared.js.map +1 -0
  53. package/dist/core/actions/normalize.d.ts +1 -3
  54. package/dist/core/actions/normalize.d.ts.map +1 -1
  55. package/dist/core/actions/normalize.js +2 -354
  56. package/dist/core/actions/normalize.js.map +1 -1
  57. package/dist/core/actions/redaction.d.ts +13 -2
  58. package/dist/core/actions/redaction.d.ts.map +1 -1
  59. package/dist/core/actions/redaction.js +20 -5
  60. package/dist/core/actions/redaction.js.map +1 -1
  61. package/dist/core/actions/release_assets.d.ts.map +1 -1
  62. package/dist/core/actions/release_assets.js.map +1 -1
  63. package/dist/core/actions/runner/launch.d.ts.map +1 -1
  64. package/dist/core/actions/runner/launch.js +12 -8
  65. package/dist/core/actions/runner/launch.js.map +1 -1
  66. package/dist/core/actions/sandbox.d.ts +4 -0
  67. package/dist/core/actions/sandbox.d.ts.map +1 -0
  68. package/dist/core/actions/sandbox.js +46 -0
  69. package/dist/core/actions/sandbox.js.map +1 -0
  70. package/dist/core/archive/commit.d.ts +6 -0
  71. package/dist/core/archive/commit.d.ts.map +1 -0
  72. package/dist/core/archive/commit.js +34 -0
  73. package/dist/core/archive/commit.js.map +1 -0
  74. package/dist/core/archive/context.d.ts +32 -0
  75. package/dist/core/archive/context.d.ts.map +1 -0
  76. package/dist/core/archive/context.js +61 -0
  77. package/dist/core/archive/context.js.map +1 -0
  78. package/dist/core/archive/generation.d.ts +11 -0
  79. package/dist/core/archive/generation.d.ts.map +1 -0
  80. package/dist/core/archive/generation.js +62 -0
  81. package/dist/core/archive/generation.js.map +1 -0
  82. package/dist/core/archive/links.d.ts +5 -0
  83. package/dist/core/archive/links.d.ts.map +1 -0
  84. package/dist/core/archive/links.js +62 -0
  85. package/dist/core/archive/links.js.map +1 -0
  86. package/dist/core/archive/open.d.ts +15 -0
  87. package/dist/core/archive/open.d.ts.map +1 -0
  88. package/dist/core/archive/open.js +159 -0
  89. package/dist/core/archive/open.js.map +1 -0
  90. package/dist/core/archive/read.d.ts +19 -0
  91. package/dist/core/archive/read.d.ts.map +1 -0
  92. package/dist/core/archive/read.js +62 -0
  93. package/dist/core/archive/read.js.map +1 -0
  94. package/dist/core/archive/resolve.d.ts +8 -0
  95. package/dist/core/archive/resolve.d.ts.map +1 -0
  96. package/dist/core/archive/resolve.js +67 -0
  97. package/dist/core/archive/resolve.js.map +1 -0
  98. package/dist/core/archive/shared.d.ts +50 -0
  99. package/dist/core/archive/shared.d.ts.map +1 -0
  100. package/dist/core/archive/shared.js +119 -0
  101. package/dist/core/archive/shared.js.map +1 -0
  102. package/dist/core/archive.d.ts +2 -18
  103. package/dist/core/archive.d.ts.map +1 -1
  104. package/dist/core/archive.js +16 -556
  105. package/dist/core/archive.js.map +1 -1
  106. package/dist/core/create/git/forge/base_methods.d.ts +5 -0
  107. package/dist/core/create/git/forge/base_methods.d.ts.map +1 -0
  108. package/dist/core/create/git/forge/base_methods.js +59 -0
  109. package/dist/core/create/git/forge/base_methods.js.map +1 -0
  110. package/dist/core/create/git/forge/context.d.ts +38 -0
  111. package/dist/core/create/git/forge/context.d.ts.map +1 -0
  112. package/dist/core/create/git/forge/context.js +174 -0
  113. package/dist/core/create/git/forge/context.js.map +1 -0
  114. package/dist/core/create/git/forge/fork_methods.d.ts +5 -0
  115. package/dist/core/create/git/forge/fork_methods.d.ts.map +1 -0
  116. package/dist/core/create/git/forge/fork_methods.js +133 -0
  117. package/dist/core/create/git/forge/fork_methods.js.map +1 -0
  118. package/dist/core/create/git/forge/release_methods.d.ts +5 -0
  119. package/dist/core/create/git/forge/release_methods.d.ts.map +1 -0
  120. package/dist/core/create/git/forge/release_methods.js +116 -0
  121. package/dist/core/create/git/forge/release_methods.js.map +1 -0
  122. package/dist/core/create/git/forge/shared.d.ts +9 -0
  123. package/dist/core/create/git/forge/shared.d.ts.map +1 -0
  124. package/dist/core/create/git/forge/shared.js +80 -0
  125. package/dist/core/create/git/forge/shared.js.map +1 -0
  126. package/dist/core/create/git/forge/social_methods.d.ts +5 -0
  127. package/dist/core/create/git/forge/social_methods.d.ts.map +1 -0
  128. package/dist/core/create/git/forge/social_methods.js +31 -0
  129. package/dist/core/create/git/forge/social_methods.js.map +1 -0
  130. package/dist/core/create/git/forge.d.ts.map +1 -1
  131. package/dist/core/create/git/forge.js +10 -594
  132. package/dist/core/create/git/forge.js.map +1 -1
  133. package/dist/core/create/git/host.d.ts.map +1 -1
  134. package/dist/core/create/git/host.js +139 -114
  135. package/dist/core/create/git/host.js.map +1 -1
  136. package/dist/core/create_git_host/remote_methods.d.ts.map +1 -1
  137. package/dist/core/create_git_host/remote_methods.js +92 -97
  138. package/dist/core/create_git_host/remote_methods.js.map +1 -1
  139. package/dist/core/forge_actions/job/release_asset.d.ts +17 -0
  140. package/dist/core/forge_actions/job/release_asset.d.ts.map +1 -0
  141. package/dist/core/forge_actions/job/release_asset.js +62 -0
  142. package/dist/core/forge_actions/job/release_asset.js.map +1 -0
  143. package/dist/core/forge_actions/job/steps.d.ts +37 -0
  144. package/dist/core/forge_actions/job/steps.d.ts.map +1 -0
  145. package/dist/core/forge_actions/job/steps.js +228 -0
  146. package/dist/core/forge_actions/job/steps.js.map +1 -0
  147. package/dist/core/forge_actions/runtime/api.d.ts +26 -0
  148. package/dist/core/forge_actions/runtime/api.d.ts.map +1 -0
  149. package/dist/core/forge_actions/runtime/api.js +210 -0
  150. package/dist/core/forge_actions/runtime/api.js.map +1 -0
  151. package/dist/core/forge_actions/runtime/engine.d.ts +25 -0
  152. package/dist/core/forge_actions/runtime/engine.d.ts.map +1 -0
  153. package/dist/core/forge_actions/runtime/engine.js +28 -0
  154. package/dist/core/forge_actions/runtime/engine.js.map +1 -0
  155. package/dist/core/forge_actions/runtime/job/execute.d.ts +19 -0
  156. package/dist/core/forge_actions/runtime/job/execute.d.ts.map +1 -0
  157. package/dist/core/forge_actions/runtime/job/execute.js +191 -0
  158. package/dist/core/forge_actions/runtime/job/execute.js.map +1 -0
  159. package/dist/core/forge_actions/runtime/job/step/execute.d.ts +7 -0
  160. package/dist/core/forge_actions/runtime/job/step/execute.d.ts.map +1 -0
  161. package/dist/core/forge_actions/runtime/job/step/execute.js +176 -0
  162. package/dist/core/forge_actions/runtime/job/step/execute.js.map +1 -0
  163. package/dist/core/forge_actions/runtime/queue.d.ts +11 -0
  164. package/dist/core/forge_actions/runtime/queue.d.ts.map +1 -0
  165. package/dist/core/forge_actions/runtime/queue.js +144 -0
  166. package/dist/core/forge_actions/runtime/queue.js.map +1 -0
  167. package/dist/core/forge_actions/runtime/run/execute.d.ts +9 -0
  168. package/dist/core/forge_actions/runtime/run/execute.d.ts.map +1 -0
  169. package/dist/core/forge_actions/runtime/run/execute.js +191 -0
  170. package/dist/core/forge_actions/runtime/run/execute.js.map +1 -0
  171. package/dist/core/forge_actions/runtime/types.d.ts +24 -0
  172. package/dist/core/forge_actions/runtime/types.d.ts.map +1 -0
  173. package/dist/core/forge_actions/runtime/types.js +2 -0
  174. package/dist/core/forge_actions/runtime/types.js.map +1 -0
  175. package/dist/core/forge_actions/runtime_support.d.ts +57 -0
  176. package/dist/core/forge_actions/runtime_support.d.ts.map +1 -0
  177. package/dist/core/forge_actions/runtime_support.js +276 -0
  178. package/dist/core/forge_actions/runtime_support.js.map +1 -0
  179. package/dist/core/forge_actions/shared.d.ts +92 -0
  180. package/dist/core/forge_actions/shared.d.ts.map +1 -0
  181. package/dist/core/forge_actions/shared.js +204 -0
  182. package/dist/core/forge_actions/shared.js.map +1 -0
  183. package/dist/core/forge_actions.d.ts +17 -24
  184. package/dist/core/forge_actions.d.ts.map +1 -1
  185. package/dist/core/forge_actions.js +33 -1459
  186. package/dist/core/forge_actions.js.map +1 -1
  187. package/dist/core/git_forge/storage_memory/actions.d.ts +5 -0
  188. package/dist/core/git_forge/storage_memory/actions.d.ts.map +1 -0
  189. package/dist/core/git_forge/storage_memory/actions.js +155 -0
  190. package/dist/core/git_forge/storage_memory/actions.js.map +1 -0
  191. package/dist/core/git_forge/storage_memory/adapter.d.ts +4 -0
  192. package/dist/core/git_forge/storage_memory/adapter.d.ts.map +1 -0
  193. package/dist/core/git_forge/storage_memory/adapter.js +118 -0
  194. package/dist/core/git_forge/storage_memory/adapter.js.map +1 -0
  195. package/dist/core/git_forge/storage_memory/state.d.ts +27 -0
  196. package/dist/core/git_forge/storage_memory/state.d.ts.map +1 -0
  197. package/dist/core/git_forge/storage_memory/state.js +53 -0
  198. package/dist/core/git_forge/storage_memory/state.js.map +1 -0
  199. package/dist/core/git_forge/storage_memory.d.ts +1 -3
  200. package/dist/core/git_forge/storage_memory.d.ts.map +1 -1
  201. package/dist/core/git_forge/storage_memory.js +1 -352
  202. package/dist/core/git_forge/storage_memory.js.map +1 -1
  203. package/dist/core/inspect/history.d.ts +13 -0
  204. package/dist/core/inspect/history.d.ts.map +1 -0
  205. package/dist/core/inspect/history.js +176 -0
  206. package/dist/core/inspect/history.js.map +1 -0
  207. package/dist/core/inspect/linguist.d.ts +12 -0
  208. package/dist/core/inspect/linguist.d.ts.map +1 -0
  209. package/dist/core/inspect/linguist.js +128 -0
  210. package/dist/core/inspect/linguist.js.map +1 -0
  211. package/dist/core/inspect/search_archive.d.ts +16 -0
  212. package/dist/core/inspect/search_archive.d.ts.map +1 -0
  213. package/dist/core/inspect/search_archive.js +88 -0
  214. package/dist/core/inspect/search_archive.js.map +1 -0
  215. package/dist/core/inspect/shared.d.ts +5 -0
  216. package/dist/core/inspect/shared.d.ts.map +1 -0
  217. package/dist/core/inspect/shared.js +47 -0
  218. package/dist/core/inspect/shared.js.map +1 -0
  219. package/dist/core/inspect/tree_blob.d.ts +16 -0
  220. package/dist/core/inspect/tree_blob.d.ts.map +1 -0
  221. package/dist/core/inspect/tree_blob.js +80 -0
  222. package/dist/core/inspect/tree_blob.js.map +1 -0
  223. package/dist/core/inspect.d.ts +3 -46
  224. package/dist/core/inspect.d.ts.map +1 -1
  225. package/dist/core/inspect.js +3 -546
  226. package/dist/core/inspect.js.map +1 -1
  227. package/dist/core/inspection/analysis.d.ts +4 -0
  228. package/dist/core/inspection/analysis.d.ts.map +1 -0
  229. package/dist/core/inspection/analysis.js +25 -0
  230. package/dist/core/inspection/analysis.js.map +1 -0
  231. package/dist/core/inspection/shared.d.ts +18 -0
  232. package/dist/core/inspection/shared.d.ts.map +1 -0
  233. package/dist/core/inspection/shared.js +112 -0
  234. package/dist/core/inspection/shared.js.map +1 -0
  235. package/dist/core/inspection/snapshots.d.ts +6 -0
  236. package/dist/core/inspection/snapshots.d.ts.map +1 -0
  237. package/dist/core/inspection/snapshots.js +270 -0
  238. package/dist/core/inspection/snapshots.js.map +1 -0
  239. package/dist/core/inspection/target.d.ts +4 -0
  240. package/dist/core/inspection/target.d.ts.map +1 -0
  241. package/dist/core/inspection/target.js +97 -0
  242. package/dist/core/inspection/target.js.map +1 -0
  243. package/dist/core/inspection/tree.d.ts +6 -0
  244. package/dist/core/inspection/tree.d.ts.map +1 -0
  245. package/dist/core/inspection/tree.js +103 -0
  246. package/dist/core/inspection/tree.js.map +1 -0
  247. package/dist/core/inspection.d.ts +6 -10
  248. package/dist/core/inspection.d.ts.map +1 -1
  249. package/dist/core/inspection.js +6 -592
  250. package/dist/core/inspection.js.map +1 -1
  251. package/dist/http/handler.d.ts.map +1 -1
  252. package/dist/http/handler.js +157 -133
  253. package/dist/http/handler.js.map +1 -1
  254. package/dist/index.d.ts +2 -1
  255. package/dist/index.d.ts.map +1 -1
  256. package/dist/index.js +1 -0
  257. package/dist/index.js.map +1 -1
  258. package/dist/ssh/server.d.ts.map +1 -1
  259. package/dist/ssh/server.js +171 -243
  260. package/dist/ssh/server.js.map +1 -1
  261. package/dist/types/forge/workflows/actions.d.ts +70 -0
  262. package/dist/types/forge/workflows/actions.d.ts.map +1 -0
  263. package/dist/types/forge/workflows/actions.js +3 -0
  264. package/dist/types/forge/workflows/actions.js.map +1 -0
  265. package/dist/types/forge/workflows/definition.d.ts +115 -0
  266. package/dist/types/forge/workflows/definition.d.ts.map +1 -0
  267. package/dist/types/forge/workflows/definition.js +2 -0
  268. package/dist/types/forge/workflows/definition.js.map +1 -0
  269. package/dist/types/forge/workflows/runs.d.ts +184 -0
  270. package/dist/types/forge/workflows/runs.d.ts.map +1 -0
  271. package/dist/types/forge/workflows/runs.js +2 -0
  272. package/dist/types/forge/workflows/runs.js.map +1 -0
  273. package/dist/types/forge/workflows.d.ts +3 -331
  274. package/dist/types/forge/workflows.d.ts.map +1 -1
  275. package/dist/types/index.d.ts +1 -1
  276. package/dist/types/index.d.ts.map +1 -1
  277. package/{bin → native}/git-host-actions-runner-darwin-arm64 +0 -0
  278. package/{bin → native}/git-host-actions-runner-darwin-x64 +0 -0
  279. package/{bin → native}/git-host-actions-runner-linux-arm64-gnu +0 -0
  280. package/{bin → native}/git-host-actions-runner-linux-x64-gnu +0 -0
  281. package/package.json +63 -11
  282. package/dist/frontend/js/utils/text.d.ts +0 -2
  283. package/dist/frontend/js/utils/text.d.ts.map +0 -1
  284. package/dist/frontend/js/utils/text.js +0 -4
  285. package/dist/frontend/js/utils/text.js.map +0 -1
  286. /package/{bin → native}/.gitkeep +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../src/core/forge_actions/runtime/engine.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,iBAAS,mBAAmB,CAAC,OAAO,EAAE,cAAc;;;;;;;;;;;aAuBw1L,CAAC;cAAgB,CAAC;;;;gBAA0oB,CAAC;YAAc,CAAC;;;2CAAt/I,4DAAiC;EAHlmE;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { createJobExecutor } from "./job/execute.js";
2
+ import { createQueueSupport } from "./queue.js";
3
+ import { createRuntimeApi } from "./api.js";
4
+ import { createRunExecutor } from "./run/execute.js";
5
+ function createRuntimeEngine(context) {
6
+ const executeJob = createJobExecutor(context);
7
+ const { processQueue } = createRunExecutor(context, executeJob);
8
+ const cancelWorkflowRunRef = {
9
+ current: null,
10
+ };
11
+ const scheduleQueueProcessing = () => {
12
+ if (context.processingRef.value)
13
+ return;
14
+ queueMicrotask(() => {
15
+ void processQueue();
16
+ });
17
+ };
18
+ const queueWorkflowRun = createQueueSupport({
19
+ cancelWorkflowRunRef,
20
+ context,
21
+ scheduleQueueProcessing,
22
+ });
23
+ const runtime = createRuntimeApi(context, queueWorkflowRun);
24
+ cancelWorkflowRunRef.current = runtime.cancelWorkflowRun;
25
+ return runtime;
26
+ }
27
+ export { createRuntimeEngine };
28
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/core/forge_actions/runtime/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMrD,SAAS,mBAAmB,CAAC,OAAuB;IAClD,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,EAAE,YAAY,EAAE,GAAG,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAChE,MAAM,oBAAoB,GAAG;QAC3B,OAAO,EAAE,IAAgC;KAC1C,CAAC;IACF,MAAM,uBAAuB,GAAG,GAAG,EAAE;QACnC,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK;YAAE,OAAO;QACxC,cAAc,CAAC,GAAG,EAAE;YAClB,KAAK,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;QAC1C,oBAAoB;QACpB,OAAO;QACP,uBAAuB;KACxB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC5D,oBAAoB,CAAC,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACzD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { GitForgeWorkflow, GitForgeWorkflowRun, GitForgeWorkflowRunJob, GitForgeWorkflowRunJobStatus } from "../../../../types.js";
2
+ import type { ActiveRunState, ResolvedExecutionContext } from "../../shared.js";
3
+ import type { RuntimeContext } from "../types.js";
4
+ type ExecuteJobInput = {
5
+ activeState: ActiveRunState;
6
+ artifactsRoot: string;
7
+ execution: ResolvedExecutionContext;
8
+ jobRun: GitForgeWorkflowRunJob;
9
+ needs: Record<string, {
10
+ result: GitForgeWorkflowRunJobStatus;
11
+ }>;
12
+ repositoryPath: string;
13
+ run: GitForgeWorkflowRun;
14
+ workflow: GitForgeWorkflow;
15
+ };
16
+ declare function createJobExecutor(context: RuntimeContext): (input: ExecuteJobInput) => Promise<GitForgeWorkflowRunJob>;
17
+ export type { ExecuteJobInput };
18
+ export { createJobExecutor };
19
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../../src/core/forge_actions/runtime/job/execute.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,4BAA4B,EAE7B,MAAM,eAAe,CAAC;AAgBvB,OAAO,KAAK,EACV,cAAc,EACd,wBAAwB,EACzB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,KAAK,eAAe,GAAG;IACrB,WAAW,EAAE,cAAc,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,wBAAwB,CAAC;IACpC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,4BAA4B,CAAA;KAAE,CAAC,CAAC;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,mBAAmB,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC;AAqOF,iBAAS,iBAAiB,CAAC,OAAO,EAAE,cAAc,IAClC,OAAO,eAAe,qCAarC;AAED,YAAY,EAAE,eAAe,EAAE,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,191 @@
1
+ import path from "node:path";
2
+ import { GitHostError } from "../../../../errors.js";
3
+ import { text } from "../../../../utils/text.js";
4
+ import { resolveWorkflowBoolean, resolveWorkflowString } from "../../../actions/expressions.js";
5
+ import { materializeJobWorkspace } from "../../../actions/local_runner.js";
6
+ import { normalizeEnv } from "../../../actions/normalize.js";
7
+ import { createRunRedactor } from "../../../actions/redaction.js";
8
+ import { resolveActionsWorkspaceRoot } from "../../../actions/workspace.js";
9
+ import { buildExpressionContext, isTerminalJobStatus, mergeRuntimeEnv, normalizeTriggerContext, nowIso, } from "../../shared.js";
10
+ import { executeStartedStep } from "./step/execute.js";
11
+ function readWorkflowJob(workflow, jobId) {
12
+ const workflowJob = workflow.jobs.find((entry) => entry.id === jobId);
13
+ if (!workflowJob) {
14
+ throw new GitHostError("forge_invalid_workflow_definition", `Workflow job "${jobId}" no longer exists.`, {
15
+ jobId,
16
+ workflowId: workflow.id,
17
+ });
18
+ }
19
+ return workflowJob;
20
+ }
21
+ function buildBaseContext(input) {
22
+ return buildExpressionContext({
23
+ execution: input.execution,
24
+ ...(input.jobRun.matrix ? { matrix: input.jobRun.matrix } : {}),
25
+ needs: input.needs,
26
+ run: input.run,
27
+ triggerContext: normalizeTriggerContext(input.run.trigger_context),
28
+ workflow: input.workflow,
29
+ });
30
+ }
31
+ async function failUnsupportedJob(context, run, jobRun, summary) {
32
+ await context.runtimeSupport.markQueuedStepsForJob(run.id, jobRun.id, "skipped");
33
+ const failedJob = await context.runtimeSupport.updateJob(run.id, jobRun.id, {
34
+ finished_at: nowIso(),
35
+ status: "failed",
36
+ summary,
37
+ });
38
+ await context.jobStepSupport.emitJobFinished(run, failedJob);
39
+ return failedJob;
40
+ }
41
+ async function resolvePreExecutionResult(context, input, workflowJob, baseContext) {
42
+ const dependencyStatus = Object.values(input.needs).map((entry) => entry.result);
43
+ if (!workflowJob.if && dependencyStatus.some((status) => status !== "success")) {
44
+ return await context.jobStepSupport.skipJob(input.run, input.jobRun, "Skipped because a dependency did not complete successfully.");
45
+ }
46
+ if (workflowJob.if && !resolveWorkflowBoolean(workflowJob.if, baseContext, true)) {
47
+ return await context.jobStepSupport.skipJob(input.run, input.jobRun, `Skipped by if condition for job ${input.jobRun.name}.`);
48
+ }
49
+ if (input.activeState.cancelRequested) {
50
+ return await context.jobStepSupport.cancelJob(input.run, input.jobRun, "Cancelled before job start.");
51
+ }
52
+ try {
53
+ context.jobStepSupport.assertJobRunnerSupported(input.jobRun);
54
+ return null;
55
+ }
56
+ catch (error) {
57
+ return await failUnsupportedJob(context, input.run, input.jobRun, error instanceof Error ? error.message : `Job ${input.jobRun.name} failed before start.`);
58
+ }
59
+ }
60
+ async function startJobExecution(context, input) {
61
+ const workspaceRoot = resolveActionsWorkspaceRoot(context.options.actions, input.run.repository_id, input.run.id);
62
+ const workspacePath = path.join(workspaceRoot, "jobs", input.jobRun.id, "workspace");
63
+ await materializeJobWorkspace({
64
+ commitHash: input.run.commit_hash,
65
+ repositoryPath: input.repositoryPath,
66
+ workspacePath,
67
+ });
68
+ const jobRun = await context.runtimeSupport.updateJob(input.run.id, input.jobRun.id, {
69
+ runner: context.runner,
70
+ started_at: nowIso(),
71
+ status: "running",
72
+ summary: `Running job ${input.jobRun.name}.`,
73
+ });
74
+ await context.runtimeSupport.updateRun(input.run.repository_id, input.run.id, {
75
+ current_job: jobRun.name,
76
+ current_job_id: jobRun.id,
77
+ status: "running",
78
+ summary: `Running job ${jobRun.name}.`,
79
+ });
80
+ await context.jobStepSupport.emitJobStarted(input.run, jobRun);
81
+ return { jobRun, workspacePath };
82
+ }
83
+ function buildStepContext(context, input, workflowJob, jobRun, baseContext, stepRun) {
84
+ return {
85
+ ...baseContext,
86
+ env: mergeRuntimeEnv({
87
+ actions: context.options.actions,
88
+ execution: input.execution,
89
+ jobEnv: workflowJob.env,
90
+ ...(input.jobRun.matrix ? { matrix: input.jobRun.matrix } : {}),
91
+ run: input.run,
92
+ stepEnv: normalizeEnv(stepRun.metadata?.env),
93
+ triggerContext: normalizeTriggerContext(input.run.trigger_context),
94
+ workflow: input.workflow,
95
+ }),
96
+ job: { status: jobRun.status },
97
+ };
98
+ }
99
+ async function startStepExecution(context, run, jobRun, stepRun) {
100
+ const startedStep = await context.runtimeSupport.updateStep(run.id, stepRun.id, {
101
+ started_at: nowIso(),
102
+ status: "running",
103
+ });
104
+ const nextJobRun = await context.runtimeSupport.updateJob(run.id, jobRun.id, {
105
+ current_step: startedStep.name,
106
+ current_step_index: startedStep.index,
107
+ });
108
+ await context.runtimeSupport.updateRun(run.repository_id, run.id, {
109
+ current_job: jobRun.name,
110
+ current_job_id: jobRun.id,
111
+ current_step: startedStep.name,
112
+ current_step_index: startedStep.index,
113
+ status: "running",
114
+ summary: `Running ${jobRun.name} / ${startedStep.name}.`,
115
+ });
116
+ return { jobRun: nextJobRun, stepRun: startedStep };
117
+ }
118
+ async function emitStepStarted(context, run, jobRun, stepRun, resolvedCommand, redactor) {
119
+ await context.runtimeSupport.emitRunEvent(run, {
120
+ command: await redactor(resolvedCommand),
121
+ job_id: jobRun.job_id,
122
+ job_name: jobRun.name,
123
+ job_run_id: jobRun.id,
124
+ status: "running",
125
+ step_id: stepRun.id,
126
+ step_index: stepRun.index,
127
+ step_name: stepRun.name,
128
+ type: "step.started",
129
+ });
130
+ }
131
+ async function executeJobStep(context, input, workflowJob, baseContext, jobRun, stepRun, workspacePath) {
132
+ if (input.activeState.cancelRequested) {
133
+ await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
134
+ status: "cancelled",
135
+ summary: `Cancelled before step ${stepRun.name}.`,
136
+ });
137
+ return jobRun;
138
+ }
139
+ const stepContext = buildStepContext(context, input, workflowJob, jobRun, baseContext, stepRun);
140
+ const stepIf = text(stepRun.metadata?.if);
141
+ if (stepIf && !resolveWorkflowBoolean(stepIf, stepContext, true)) {
142
+ await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
143
+ status: "skipped",
144
+ summary: `Skipped step ${stepRun.name}.`,
145
+ });
146
+ return jobRun;
147
+ }
148
+ const redactor = createRunRedactor({
149
+ actions: context.options.actions,
150
+ env: stepContext.env,
151
+ run: input.run,
152
+ secrets: input.execution.secrets,
153
+ step: stepRun,
154
+ });
155
+ const resolvedCommand = stepRun.kind === "shell"
156
+ ? resolveWorkflowString(stepRun.command, stepContext)
157
+ : resolveWorkflowString(text(stepRun.uses), stepContext);
158
+ const started = await startStepExecution(context, input.run, jobRun, stepRun);
159
+ await emitStepStarted(context, input.run, started.jobRun, started.stepRun, resolvedCommand, redactor);
160
+ return await executeStartedStep(context, input, workflowJob, started.jobRun, started.stepRun, workspacePath, stepContext, resolvedCommand, redactor);
161
+ }
162
+ async function finalizeSuccessfulJob(context, run, jobRun) {
163
+ const finishedJob = await context.runtimeSupport.updateJob(run.id, jobRun.id, {
164
+ current_step: null,
165
+ current_step_index: null,
166
+ finished_at: nowIso(),
167
+ status: "success",
168
+ summary: `Job ${jobRun.name} completed successfully.`,
169
+ });
170
+ await context.jobStepSupport.emitJobFinished(run, finishedJob);
171
+ return finishedJob;
172
+ }
173
+ function createJobExecutor(context) {
174
+ return async (input) => {
175
+ const workflowJob = readWorkflowJob(input.workflow, input.jobRun.job_id);
176
+ const baseContext = buildBaseContext(input);
177
+ const earlyResult = await resolvePreExecutionResult(context, input, workflowJob, baseContext);
178
+ if (earlyResult)
179
+ return earlyResult;
180
+ let { jobRun, workspacePath } = await startJobExecution(context, input);
181
+ const stepRuns = await context.storage.listWorkflowRunSteps(input.run.id, { jobRunId: jobRun.id });
182
+ for (const stepRun of stepRuns) {
183
+ jobRun = await executeJobStep(context, input, workflowJob, baseContext, jobRun, stepRun, workspacePath);
184
+ if (isTerminalJobStatus(jobRun.status) && jobRun.status !== "running")
185
+ return jobRun;
186
+ }
187
+ return await finalizeSuccessfulJob(context, input.run, jobRun);
188
+ };
189
+ }
190
+ export { createJobExecutor };
191
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../../src/core/forge_actions/runtime/job/execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type WorkflowExpressionContext } from "../../../../actions/expressions.js";
2
+ import { createRunRedactor } from "../../../../actions/redaction.js";
3
+ import type { RuntimeContext } from "../../types.js";
4
+ import type { ExecuteJobInput } from "../execute.js";
5
+ declare function executeStartedStep(context: RuntimeContext, input: ExecuteJobInput, workflowJob: import("../../../../../types.js").GitForgeWorkflow["jobs"][number], jobRun: import("../../../../../types.js").GitForgeWorkflowRunJob, stepRun: import("../../../../../types.js").GitForgeWorkflowRunStep, workspacePath: string, stepContext: WorkflowExpressionContext, resolvedCommand: string, redactor: ReturnType<typeof createRunRedactor>): Promise<import("../../../../../types.js").GitForgeWorkflowRunJob>;
6
+ export { executeStartedStep };
7
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../../../src/core/forge_actions/runtime/job/step/execute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAUlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA6NrD,iBAAe,kBAAkB,CAC/B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,eAAe,EACtB,WAAW,EAAE,OAAO,eAAe,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EACrE,MAAM,EAAE,OAAO,eAAe,EAAE,sBAAsB,EACtD,OAAO,EAAE,OAAO,eAAe,EAAE,uBAAuB,EACxD,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,yBAAyB,EACtC,eAAe,EAAE,MAAM,EACvB,QAAQ,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,2DAM/C;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,176 @@
1
+ import { text } from "../../../../../utils/text.js";
2
+ import { resolveWorkflowString } from "../../../../actions/expressions.js";
3
+ import { runShellCommand } from "../../../../actions/local_runner.js";
4
+ import { normalizeEnv } from "../../../../actions/normalize.js";
5
+ import { DEFAULT_HEARTBEAT_INTERVAL_MS, mergeRuntimeEnv, normalizeTriggerContext, nowIso, } from "../../../shared.js";
6
+ async function emitOutputChunk(context, input, jobRun, stepRun, chunk, stream) {
7
+ for (const type of ["step.output", "job.output"]) {
8
+ await context.runtimeSupport.emitRunEvent(input.run, {
9
+ chunk,
10
+ job_id: jobRun.job_id,
11
+ job_name: jobRun.name,
12
+ job_run_id: jobRun.id,
13
+ status: "running",
14
+ step_id: stepRun.id,
15
+ step_index: stepRun.index,
16
+ step_name: stepRun.name,
17
+ stream,
18
+ type,
19
+ });
20
+ }
21
+ }
22
+ function resolveStepWith(stepRun, stepContext) {
23
+ return Object.fromEntries(Object.entries((stepRun.metadata?.with && typeof stepRun.metadata.with === "object")
24
+ ? stepRun.metadata.with
25
+ : {})
26
+ .map(([key, value]) => [key, resolveWorkflowString(String(value), stepContext)]));
27
+ }
28
+ async function failUsesStep(context, input, jobRun, stepRun, summary) {
29
+ await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
30
+ outputPreview: summary,
31
+ status: input.activeState.cancelRequested ? "cancelled" : "failed",
32
+ summary,
33
+ });
34
+ await context.runtimeSupport.markQueuedStepsForJob(input.run.id, jobRun.id, input.activeState.cancelRequested ? "cancelled" : "skipped");
35
+ const finishedJob = await context.runtimeSupport.updateJob(input.run.id, jobRun.id, {
36
+ current_step: null,
37
+ current_step_index: null,
38
+ finished_at: nowIso(),
39
+ status: input.activeState.cancelRequested ? "cancelled" : "failed",
40
+ summary,
41
+ });
42
+ await context.jobStepSupport.emitJobFinished(input.run, finishedJob);
43
+ return finishedJob;
44
+ }
45
+ async function executeUsesStep(context, input, jobRun, stepRun, workspacePath, stepContext, redactor) {
46
+ try {
47
+ const result = await context.jobStepSupport.executeUsesStep({
48
+ artifactsRoot: input.artifactsRoot,
49
+ execution: input.execution,
50
+ jobRun,
51
+ run: input.run,
52
+ stepWith: resolveStepWith(stepRun, stepContext),
53
+ stepRun,
54
+ workspacePath,
55
+ });
56
+ const preview = await redactor(result.outputPreview || "");
57
+ if (preview)
58
+ await emitOutputChunk(context, input, jobRun, stepRun, preview, "stdout");
59
+ await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
60
+ outputPreview: preview,
61
+ status: "success",
62
+ summary: result.summary,
63
+ });
64
+ return jobRun;
65
+ }
66
+ catch (error) {
67
+ const summary = await redactor(error instanceof Error ? error.message : "Action step failed.");
68
+ return await failUsesStep(context, input, jobRun, stepRun, summary);
69
+ }
70
+ }
71
+ function createShellCallbacks(context, input, jobRun, stepRun, redactor) {
72
+ return {
73
+ onHeartbeat: async () => {
74
+ for (const type of ["step.heartbeat", "job.heartbeat"]) {
75
+ await context.runtimeSupport.emitRunEvent(input.run, {
76
+ job_id: jobRun.job_id,
77
+ job_name: jobRun.name,
78
+ job_run_id: jobRun.id,
79
+ status: "running",
80
+ step_id: stepRun.id,
81
+ step_index: stepRun.index,
82
+ step_name: stepRun.name,
83
+ type,
84
+ });
85
+ }
86
+ },
87
+ onOutput: async (stream, chunk) => {
88
+ await emitOutputChunk(context, input, jobRun, stepRun, await redactor(chunk, stream), stream);
89
+ },
90
+ onSpawn: (child) => {
91
+ input.activeState.child = child;
92
+ },
93
+ };
94
+ }
95
+ async function finalizeShellFailure(context, input, jobRun, stepRun) {
96
+ await context.runtimeSupport.markQueuedStepsForJob(input.run.id, jobRun.id, "skipped");
97
+ const finishedJob = await context.runtimeSupport.updateJob(input.run.id, jobRun.id, {
98
+ current_step: null,
99
+ current_step_index: null,
100
+ finished_at: nowIso(),
101
+ status: "failed",
102
+ summary: `Job ${jobRun.name} failed in step ${stepRun.name}.`,
103
+ });
104
+ await context.jobStepSupport.emitJobFinished(input.run, finishedJob);
105
+ return finishedJob;
106
+ }
107
+ async function finalizeShellCancellation(context, input, jobRun) {
108
+ await context.runtimeSupport.markQueuedStepsForJob(input.run.id, jobRun.id, "cancelled");
109
+ const finishedJob = await context.runtimeSupport.updateJob(input.run.id, jobRun.id, {
110
+ current_step: null,
111
+ current_step_index: null,
112
+ finished_at: nowIso(),
113
+ status: "cancelled",
114
+ summary: `Cancelled during job ${jobRun.name}.`,
115
+ });
116
+ await context.jobStepSupport.emitJobFinished(input.run, finishedJob);
117
+ return finishedJob;
118
+ }
119
+ async function executeShellStep(context, input, workflowJob, jobRun, stepRun, workspacePath, resolvedCommand, redactor) {
120
+ const runtimeEnv = mergeRuntimeEnv({
121
+ actions: context.options.actions,
122
+ execution: input.execution,
123
+ jobEnv: workflowJob.env,
124
+ ...(input.jobRun.matrix ? { matrix: input.jobRun.matrix } : {}),
125
+ run: input.run,
126
+ stepEnv: normalizeEnv(stepRun.metadata?.env),
127
+ triggerContext: normalizeTriggerContext(input.run.trigger_context),
128
+ workflow: input.workflow,
129
+ });
130
+ const result = await runShellCommand({
131
+ ...(context.options.actions?.localRunner?.beforeSpawn ? { beforeSpawn: context.options.actions.localRunner.beforeSpawn } : {}),
132
+ command: resolvedCommand,
133
+ cwd: workspacePath,
134
+ env: runtimeEnv,
135
+ ...(context.options.actions?.localRunner?.execTimeoutMs === undefined ? {} : { execTimeoutMs: context.options.actions.localRunner.execTimeoutMs }),
136
+ ...(context.options.actions?.localRunner?.gid === undefined ? {} : { gid: context.options.actions.localRunner.gid }),
137
+ heartbeatIntervalMs: Math.max(250, Number(context.options.actions?.heartbeatIntervalMs) || DEFAULT_HEARTBEAT_INTERVAL_MS),
138
+ ...(context.options.actions?.localRunner?.uid === undefined ? {} : { uid: context.options.actions.localRunner.uid }),
139
+ ...createShellCallbacks(context, input, jobRun, stepRun, redactor),
140
+ shell: text(stepRun.metadata?.shell, text(context.options.actions?.shell, "bash")) || "bash",
141
+ });
142
+ const preview = await redactor(result.outputPreview);
143
+ if (input.activeState.cancelRequested || result.exitCode === 130) {
144
+ await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
145
+ exitCode: result.exitCode,
146
+ outputPreview: preview,
147
+ status: "cancelled",
148
+ summary: `Cancelled during step ${stepRun.name}.`,
149
+ });
150
+ return await finalizeShellCancellation(context, input, jobRun);
151
+ }
152
+ if (result.exitCode !== 0) {
153
+ await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
154
+ exitCode: result.exitCode,
155
+ outputPreview: preview,
156
+ status: "failed",
157
+ summary: `Failed step ${stepRun.name}.`,
158
+ });
159
+ return await finalizeShellFailure(context, input, jobRun, stepRun);
160
+ }
161
+ await context.jobStepSupport.finishStep(input.run, jobRun, stepRun, {
162
+ exitCode: result.exitCode,
163
+ outputPreview: preview,
164
+ status: "success",
165
+ summary: `Completed step ${stepRun.name}.`,
166
+ });
167
+ return jobRun;
168
+ }
169
+ async function executeStartedStep(context, input, workflowJob, jobRun, stepRun, workspacePath, stepContext, resolvedCommand, redactor) {
170
+ if (stepRun.kind === "uses") {
171
+ return await executeUsesStep(context, input, jobRun, stepRun, workspacePath, stepContext, redactor);
172
+ }
173
+ return await executeShellStep(context, input, workflowJob, jobRun, stepRun, workspacePath, resolvedCommand, redactor);
174
+ }
175
+ export { executeStartedStep };
176
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../../../src/core/forge_actions/runtime/job/step/execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { CancelWorkflowRun, QueueWorkflowRun, RuntimeContext } from "./types.js";
2
+ type QueueSupportInput = {
3
+ cancelWorkflowRunRef: {
4
+ current: CancelWorkflowRun | null;
5
+ };
6
+ context: RuntimeContext;
7
+ scheduleQueueProcessing: () => void;
8
+ };
9
+ declare function createQueueSupport(input: QueueSupportInput): QueueWorkflowRun;
10
+ export { createQueueSupport };
11
+ //# sourceMappingURL=queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../src/core/forge_actions/runtime/queue.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,KAAK,iBAAiB,GAAG;IACvB,oBAAoB,EAAE;QACpB,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;KACnC,CAAC;IACF,OAAO,EAAE,cAAc,CAAC;IACxB,uBAAuB,EAAE,MAAM,IAAI,CAAC;CACrC,CAAC;AAyJF,iBAAS,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,gBAAgB,CAsBtE;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,144 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { text } from "../../../utils/text.js";
3
+ import { assertAcyclicWorkflow, planWorkflowJobs } from "../../actions/planner.js";
4
+ import { normalizeTriggerContext, nowIso } from "../shared.js";
5
+ async function createPlannedStepRuns(context, runId, jobRunId, steps) {
6
+ for (const [index, step] of steps.entries()) {
7
+ await context.storage.createWorkflowRunStep({
8
+ command: text(step.run, step.uses),
9
+ exit_code: null,
10
+ finished_at: null,
11
+ id: randomUUID(),
12
+ index,
13
+ job_run_id: jobRunId,
14
+ kind: step.kind || (step.uses ? "uses" : "shell"),
15
+ metadata: {
16
+ env: step.env,
17
+ if: step.if,
18
+ shell: step.shell,
19
+ with: step.with,
20
+ },
21
+ name: text(step.name, `Step ${index + 1}`),
22
+ output_preview: "",
23
+ run_id: runId,
24
+ started_at: null,
25
+ status: "queued",
26
+ uses: text(step.uses) || null,
27
+ });
28
+ }
29
+ }
30
+ async function createPlannedJobRuns(context, run, workflow) {
31
+ for (const plannedJob of planWorkflowJobs(workflow)) {
32
+ const jobRun = await context.storage.createWorkflowRunJob({
33
+ current_step: null,
34
+ current_step_index: null,
35
+ finished_at: null,
36
+ id: randomUUID(),
37
+ index: plannedJob.index,
38
+ job_id: plannedJob.job.id,
39
+ ...(plannedJob.matrix ? { matrix: plannedJob.matrix } : {}),
40
+ name: plannedJob.name,
41
+ needs: plannedJob.job.needs,
42
+ run_id: run.id,
43
+ runner: null,
44
+ runs_on: plannedJob.job.runs_on,
45
+ started_at: null,
46
+ status: "queued",
47
+ summary: "Job queued.",
48
+ });
49
+ await createPlannedStepRuns(context, run.id, jobRun.id, plannedJob.job.steps);
50
+ }
51
+ }
52
+ async function emitAcceptedRun(context, run, workflow) {
53
+ await context.runtimeSupport.emitRunEvent(run, {
54
+ metadata: {
55
+ branch: run.branch,
56
+ definition_path: workflow.definition_path,
57
+ ref: run.ref,
58
+ },
59
+ status: "queued",
60
+ summary: run.summary,
61
+ type: "run.accepted",
62
+ });
63
+ }
64
+ async function createQueuedRun(context, repositoryId, workflow, runInput) {
65
+ const triggerContext = normalizeTriggerContext(runInput.triggerContext);
66
+ const target = await context.runtimeSupport.resolveRunTarget(repositoryId, runInput);
67
+ const execution = await context.runtimeSupport.resolveExecutionContext(repositoryId, workflow, {
68
+ ...runInput,
69
+ triggerContext,
70
+ });
71
+ const concurrencyGroup = await context.runtimeSupport.resolveConcurrencyGroup(repositoryId, workflow, {
72
+ ...runInput,
73
+ triggerContext,
74
+ }, target, execution);
75
+ const run = await context.storage.createWorkflowRun({
76
+ branch: target.branch,
77
+ commit_hash: target.commitHash,
78
+ ...(workflow.concurrency ? { concurrency_cancel_in_progress: workflow.concurrency.cancel_in_progress === true } : {}),
79
+ ...(concurrencyGroup ? { concurrency_group: concurrencyGroup } : {}),
80
+ created_at: nowIso(),
81
+ created_by: text(runInput.actor.id, text(runInput.actor.name, "system")),
82
+ current_job: null,
83
+ current_job_id: null,
84
+ current_step: null,
85
+ current_step_index: null,
86
+ execution_context: {
87
+ ...(execution.actor ? { actor: execution.actor } : {}),
88
+ env: execution.env,
89
+ inputs: execution.inputs,
90
+ ...(execution.metadata ? { metadata: execution.metadata } : {}),
91
+ secret_names: Object.keys(execution.secrets),
92
+ },
93
+ finished_at: null,
94
+ id: randomUUID(),
95
+ ref: target.ref,
96
+ release_id: text(triggerContext.release_id) || null,
97
+ repository_id: repositoryId,
98
+ runner: null,
99
+ started_at: null,
100
+ status: "queued",
101
+ summary: "Workflow run queued.",
102
+ trigger_context: {
103
+ ...triggerContext,
104
+ event_name: runInput.triggerKind === "manual" ? "workflow_dispatch" : runInput.triggerKind,
105
+ inputs: execution.inputs,
106
+ workflow_definition_path: workflow.definition_path,
107
+ },
108
+ trigger_kind: runInput.triggerKind,
109
+ workflow_id: workflow.id,
110
+ });
111
+ return { execution, run };
112
+ }
113
+ async function cancelConflictingRuns(context, repositoryId, runId, concurrencyGroup, actor, cancelWorkflowRun) {
114
+ if (!cancelWorkflowRun)
115
+ return;
116
+ const active = await context.storage.listWorkflowRuns(repositoryId, {
117
+ status: ["queued", "running", "starting"],
118
+ });
119
+ for (const entry of active) {
120
+ if (entry.id === runId)
121
+ continue;
122
+ if (text(entry.concurrency_group) !== text(concurrencyGroup))
123
+ continue;
124
+ await cancelWorkflowRun(repositoryId, entry.id, actor);
125
+ }
126
+ }
127
+ function createQueueSupport(input) {
128
+ return async (repositoryId, workflow, runInput) => {
129
+ const { context } = input;
130
+ assertAcyclicWorkflow(workflow);
131
+ const { execution, run } = await createQueuedRun(context, repositoryId, workflow, runInput);
132
+ await createPlannedJobRuns(context, run, workflow);
133
+ await emitAcceptedRun(context, run, workflow);
134
+ context.runExecutionContexts.set(run.id, execution);
135
+ if (run.concurrency_group && workflow.concurrency?.cancel_in_progress) {
136
+ await cancelConflictingRuns(context, repositoryId, run.id, run.concurrency_group, runInput.actor, input.cancelWorkflowRunRef.current);
137
+ }
138
+ context.queuedRuns.push({ repositoryId, runId: run.id });
139
+ input.scheduleQueueProcessing();
140
+ return run;
141
+ };
142
+ }
143
+ export { createQueueSupport };
144
+ //# sourceMappingURL=queue.js.map