quidproquo-cli 0.1.5

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 (268) hide show
  1. package/README.md +3 -0
  2. package/docker/cdk-deployer/Dockerfile +13 -0
  3. package/docker/dev-server/Dockerfile +48 -0
  4. package/lib/commonjs/bin/qpq.d.ts +2 -0
  5. package/lib/commonjs/bin/qpq.js +6 -0
  6. package/lib/commonjs/bin/qpq.js.map +1 -0
  7. package/lib/commonjs/bin/qpqCdkApp.d.ts +1 -0
  8. package/lib/commonjs/bin/qpqCdkApp.js +8 -0
  9. package/lib/commonjs/bin/qpqCdkApp.js.map +1 -0
  10. package/lib/commonjs/cli/index.d.ts +1 -0
  11. package/lib/commonjs/cli/index.js +18 -0
  12. package/lib/commonjs/cli/index.js.map +1 -0
  13. package/lib/commonjs/cli/runCli.d.ts +1 -0
  14. package/lib/commonjs/cli/runCli.js +80 -0
  15. package/lib/commonjs/cli/runCli.js.map +1 -0
  16. package/lib/commonjs/commands/go.d.ts +1 -0
  17. package/lib/commonjs/commands/go.js +28 -0
  18. package/lib/commonjs/commands/go.js.map +1 -0
  19. package/lib/commonjs/commands/goDev.d.ts +1 -0
  20. package/lib/commonjs/commands/goDev.js +143 -0
  21. package/lib/commonjs/commands/goDev.js.map +1 -0
  22. package/lib/commonjs/commands/goDevWeb.d.ts +1 -0
  23. package/lib/commonjs/commands/goDevWeb.js +122 -0
  24. package/lib/commonjs/commands/goDevWeb.js.map +1 -0
  25. package/lib/commonjs/commands/goDocker.d.ts +1 -0
  26. package/lib/commonjs/commands/goDocker.js +32 -0
  27. package/lib/commonjs/commands/goDocker.js.map +1 -0
  28. package/lib/commonjs/commands/hooks.d.ts +1 -0
  29. package/lib/commonjs/commands/hooks.js +26 -0
  30. package/lib/commonjs/commands/hooks.js.map +1 -0
  31. package/lib/commonjs/commands/prep.d.ts +1 -0
  32. package/lib/commonjs/commands/prep.js +28 -0
  33. package/lib/commonjs/commands/prep.js.map +1 -0
  34. package/lib/commonjs/commands/publish.d.ts +4 -0
  35. package/lib/commonjs/commands/publish.js +54 -0
  36. package/lib/commonjs/commands/publish.js.map +1 -0
  37. package/lib/commonjs/commands/synth.d.ts +1 -0
  38. package/lib/commonjs/commands/synth.js +79 -0
  39. package/lib/commonjs/commands/synth.js.map +1 -0
  40. package/lib/commonjs/commands/teardown.d.ts +1 -0
  41. package/lib/commonjs/commands/teardown.js +33 -0
  42. package/lib/commonjs/commands/teardown.js.map +1 -0
  43. package/lib/commonjs/index.d.ts +1 -0
  44. package/lib/commonjs/index.js +18 -0
  45. package/lib/commonjs/index.js.map +1 -0
  46. package/lib/commonjs/lib/args.d.ts +2 -0
  47. package/lib/commonjs/lib/args.js +21 -0
  48. package/lib/commonjs/lib/args.js.map +1 -0
  49. package/lib/commonjs/lib/deployEnv.d.ts +6 -0
  50. package/lib/commonjs/lib/deployEnv.js +76 -0
  51. package/lib/commonjs/lib/deployEnv.js.map +1 -0
  52. package/lib/commonjs/lib/deployPrompts.d.ts +25 -0
  53. package/lib/commonjs/lib/deployPrompts.js +83 -0
  54. package/lib/commonjs/lib/deployPrompts.js.map +1 -0
  55. package/lib/commonjs/lib/devServerEntry.d.ts +1 -0
  56. package/lib/commonjs/lib/devServerEntry.js +53 -0
  57. package/lib/commonjs/lib/devServerEntry.js.map +1 -0
  58. package/lib/commonjs/lib/discovery.d.ts +10 -0
  59. package/lib/commonjs/lib/discovery.js +56 -0
  60. package/lib/commonjs/lib/discovery.js.map +1 -0
  61. package/lib/commonjs/lib/hooks.d.ts +2 -0
  62. package/lib/commonjs/lib/hooks.js +45 -0
  63. package/lib/commonjs/lib/hooks.js.map +1 -0
  64. package/lib/commonjs/lib/packageRoot.d.ts +1 -0
  65. package/lib/commonjs/lib/packageRoot.js +21 -0
  66. package/lib/commonjs/lib/packageRoot.js.map +1 -0
  67. package/lib/commonjs/lib/prompts.d.ts +3 -0
  68. package/lib/commonjs/lib/prompts.js +64 -0
  69. package/lib/commonjs/lib/prompts.js.map +1 -0
  70. package/lib/commonjs/lib/qpqConfigs.d.ts +3 -0
  71. package/lib/commonjs/lib/qpqConfigs.js +19 -0
  72. package/lib/commonjs/lib/qpqConfigs.js.map +1 -0
  73. package/lib/commonjs/lib/resolveAppSelection.d.ts +6 -0
  74. package/lib/commonjs/lib/resolveAppSelection.js +58 -0
  75. package/lib/commonjs/lib/resolveAppSelection.js.map +1 -0
  76. package/lib/commonjs/lib/rspackRun.d.ts +2 -0
  77. package/lib/commonjs/lib/rspackRun.js +23 -0
  78. package/lib/commonjs/lib/rspackRun.js.map +1 -0
  79. package/lib/commonjs/lib/runCommand.d.ts +13 -0
  80. package/lib/commonjs/lib/runCommand.js +78 -0
  81. package/lib/commonjs/lib/runCommand.js.map +1 -0
  82. package/lib/commonjs/lib/runTasks.d.ts +10 -0
  83. package/lib/commonjs/lib/runTasks.js +42 -0
  84. package/lib/commonjs/lib/runTasks.js.map +1 -0
  85. package/lib/commonjs/lib/timing.d.ts +2 -0
  86. package/lib/commonjs/lib/timing.js +11 -0
  87. package/lib/commonjs/lib/timing.js.map +1 -0
  88. package/lib/commonjs/lib/views.d.ts +2 -0
  89. package/lib/commonjs/lib/views.js +32 -0
  90. package/lib/commonjs/lib/views.js.map +1 -0
  91. package/lib/commonjs/platforms/aws/awsCredentials.d.ts +1 -0
  92. package/lib/commonjs/platforms/aws/awsCredentials.js +28 -0
  93. package/lib/commonjs/platforms/aws/awsCredentials.js.map +1 -0
  94. package/lib/commonjs/platforms/aws/cdkApp.d.ts +2 -0
  95. package/lib/commonjs/platforms/aws/cdkApp.js +19 -0
  96. package/lib/commonjs/platforms/aws/cdkApp.js.map +1 -0
  97. package/lib/commonjs/platforms/aws/go.d.ts +2 -0
  98. package/lib/commonjs/platforms/aws/go.js +116 -0
  99. package/lib/commonjs/platforms/aws/go.js.map +1 -0
  100. package/lib/commonjs/platforms/aws/goDocker.d.ts +2 -0
  101. package/lib/commonjs/platforms/aws/goDocker.js +287 -0
  102. package/lib/commonjs/platforms/aws/goDocker.js.map +1 -0
  103. package/lib/commonjs/platforms/aws/identity.d.ts +2 -0
  104. package/lib/commonjs/platforms/aws/identity.js +26 -0
  105. package/lib/commonjs/platforms/aws/identity.js.map +1 -0
  106. package/lib/commonjs/platforms/aws/index.d.ts +2 -0
  107. package/lib/commonjs/platforms/aws/index.js +19 -0
  108. package/lib/commonjs/platforms/aws/index.js.map +1 -0
  109. package/lib/commonjs/platforms/aws/publish.d.ts +4 -0
  110. package/lib/commonjs/platforms/aws/publish.js +66 -0
  111. package/lib/commonjs/platforms/aws/publish.js.map +1 -0
  112. package/lib/commonjs/platforms/aws/remote.d.ts +11 -0
  113. package/lib/commonjs/platforms/aws/remote.js +106 -0
  114. package/lib/commonjs/platforms/aws/remote.js.map +1 -0
  115. package/lib/commonjs/platforms/aws/stacks.d.ts +7 -0
  116. package/lib/commonjs/platforms/aws/stacks.js +91 -0
  117. package/lib/commonjs/platforms/aws/stacks.js.map +1 -0
  118. package/lib/commonjs/platforms/aws/teardown.d.ts +2 -0
  119. package/lib/commonjs/platforms/aws/teardown.js +59 -0
  120. package/lib/commonjs/platforms/aws/teardown.js.map +1 -0
  121. package/lib/commonjs/platforms/aws/viewsSync.d.ts +2 -0
  122. package/lib/commonjs/platforms/aws/viewsSync.js +39 -0
  123. package/lib/commonjs/platforms/aws/viewsSync.js.map +1 -0
  124. package/lib/commonjs/platforms/docker/go.d.ts +2 -0
  125. package/lib/commonjs/platforms/docker/go.js +160 -0
  126. package/lib/commonjs/platforms/docker/go.js.map +1 -0
  127. package/lib/commonjs/platforms/docker/index.d.ts +2 -0
  128. package/lib/commonjs/platforms/docker/index.js +27 -0
  129. package/lib/commonjs/platforms/docker/index.js.map +1 -0
  130. package/lib/commonjs/platforms/index.d.ts +4 -0
  131. package/lib/commonjs/platforms/index.js +39 -0
  132. package/lib/commonjs/platforms/index.js.map +1 -0
  133. package/lib/commonjs/platforms/types.d.ts +16 -0
  134. package/lib/commonjs/platforms/types.js +9 -0
  135. package/lib/commonjs/platforms/types.js.map +1 -0
  136. package/lib/esm/bin/qpq.d.ts +2 -0
  137. package/lib/esm/bin/qpq.js +4 -0
  138. package/lib/esm/bin/qpq.js.map +1 -0
  139. package/lib/esm/bin/qpqCdkApp.d.ts +1 -0
  140. package/lib/esm/bin/qpqCdkApp.js +6 -0
  141. package/lib/esm/bin/qpqCdkApp.js.map +1 -0
  142. package/lib/esm/cli/index.d.ts +1 -0
  143. package/lib/esm/cli/index.js +2 -0
  144. package/lib/esm/cli/index.js.map +1 -0
  145. package/lib/esm/cli/runCli.d.ts +1 -0
  146. package/lib/esm/cli/runCli.js +67 -0
  147. package/lib/esm/cli/runCli.js.map +1 -0
  148. package/lib/esm/commands/go.d.ts +1 -0
  149. package/lib/esm/commands/go.js +15 -0
  150. package/lib/esm/commands/go.js.map +1 -0
  151. package/lib/esm/commands/goDev.d.ts +1 -0
  152. package/lib/esm/commands/goDev.js +127 -0
  153. package/lib/esm/commands/goDev.js.map +1 -0
  154. package/lib/esm/commands/goDevWeb.d.ts +1 -0
  155. package/lib/esm/commands/goDevWeb.js +107 -0
  156. package/lib/esm/commands/goDevWeb.js.map +1 -0
  157. package/lib/esm/commands/goDocker.d.ts +1 -0
  158. package/lib/esm/commands/goDocker.js +19 -0
  159. package/lib/esm/commands/goDocker.js.map +1 -0
  160. package/lib/esm/commands/hooks.d.ts +1 -0
  161. package/lib/esm/commands/hooks.js +13 -0
  162. package/lib/esm/commands/hooks.js.map +1 -0
  163. package/lib/esm/commands/prep.d.ts +1 -0
  164. package/lib/esm/commands/prep.js +15 -0
  165. package/lib/esm/commands/prep.js.map +1 -0
  166. package/lib/esm/commands/publish.d.ts +4 -0
  167. package/lib/esm/commands/publish.js +38 -0
  168. package/lib/esm/commands/publish.js.map +1 -0
  169. package/lib/esm/commands/synth.d.ts +1 -0
  170. package/lib/esm/commands/synth.js +63 -0
  171. package/lib/esm/commands/synth.js.map +1 -0
  172. package/lib/esm/commands/teardown.d.ts +1 -0
  173. package/lib/esm/commands/teardown.js +20 -0
  174. package/lib/esm/commands/teardown.js.map +1 -0
  175. package/lib/esm/index.d.ts +1 -0
  176. package/lib/esm/index.js +2 -0
  177. package/lib/esm/index.js.map +1 -0
  178. package/lib/esm/lib/args.d.ts +2 -0
  179. package/lib/esm/lib/args.js +16 -0
  180. package/lib/esm/lib/args.js.map +1 -0
  181. package/lib/esm/lib/deployEnv.d.ts +6 -0
  182. package/lib/esm/lib/deployEnv.js +60 -0
  183. package/lib/esm/lib/deployEnv.js.map +1 -0
  184. package/lib/esm/lib/deployPrompts.d.ts +25 -0
  185. package/lib/esm/lib/deployPrompts.js +69 -0
  186. package/lib/esm/lib/deployPrompts.js.map +1 -0
  187. package/lib/esm/lib/devServerEntry.d.ts +1 -0
  188. package/lib/esm/lib/devServerEntry.js +46 -0
  189. package/lib/esm/lib/devServerEntry.js.map +1 -0
  190. package/lib/esm/lib/discovery.d.ts +10 -0
  191. package/lib/esm/lib/discovery.js +40 -0
  192. package/lib/esm/lib/discovery.js.map +1 -0
  193. package/lib/esm/lib/hooks.d.ts +2 -0
  194. package/lib/esm/lib/hooks.js +27 -0
  195. package/lib/esm/lib/hooks.js.map +1 -0
  196. package/lib/esm/lib/packageRoot.d.ts +1 -0
  197. package/lib/esm/lib/packageRoot.js +14 -0
  198. package/lib/esm/lib/packageRoot.js.map +1 -0
  199. package/lib/esm/lib/prompts.d.ts +3 -0
  200. package/lib/esm/lib/prompts.js +16 -0
  201. package/lib/esm/lib/prompts.js.map +1 -0
  202. package/lib/esm/lib/qpqConfigs.d.ts +3 -0
  203. package/lib/esm/lib/qpqConfigs.js +14 -0
  204. package/lib/esm/lib/qpqConfigs.js.map +1 -0
  205. package/lib/esm/lib/resolveAppSelection.d.ts +6 -0
  206. package/lib/esm/lib/resolveAppSelection.js +45 -0
  207. package/lib/esm/lib/resolveAppSelection.js.map +1 -0
  208. package/lib/esm/lib/rspackRun.d.ts +2 -0
  209. package/lib/esm/lib/rspackRun.js +19 -0
  210. package/lib/esm/lib/rspackRun.js.map +1 -0
  211. package/lib/esm/lib/runCommand.d.ts +13 -0
  212. package/lib/esm/lib/runCommand.js +69 -0
  213. package/lib/esm/lib/runCommand.js.map +1 -0
  214. package/lib/esm/lib/runTasks.d.ts +10 -0
  215. package/lib/esm/lib/runTasks.js +28 -0
  216. package/lib/esm/lib/runTasks.js.map +1 -0
  217. package/lib/esm/lib/timing.d.ts +2 -0
  218. package/lib/esm/lib/timing.js +6 -0
  219. package/lib/esm/lib/timing.js.map +1 -0
  220. package/lib/esm/lib/views.d.ts +2 -0
  221. package/lib/esm/lib/views.js +15 -0
  222. package/lib/esm/lib/views.js.map +1 -0
  223. package/lib/esm/platforms/aws/awsCredentials.d.ts +1 -0
  224. package/lib/esm/platforms/aws/awsCredentials.js +15 -0
  225. package/lib/esm/platforms/aws/awsCredentials.js.map +1 -0
  226. package/lib/esm/platforms/aws/cdkApp.d.ts +2 -0
  227. package/lib/esm/platforms/aws/cdkApp.js +11 -0
  228. package/lib/esm/platforms/aws/cdkApp.js.map +1 -0
  229. package/lib/esm/platforms/aws/go.d.ts +2 -0
  230. package/lib/esm/platforms/aws/go.js +100 -0
  231. package/lib/esm/platforms/aws/go.js.map +1 -0
  232. package/lib/esm/platforms/aws/goDocker.d.ts +2 -0
  233. package/lib/esm/platforms/aws/goDocker.js +271 -0
  234. package/lib/esm/platforms/aws/goDocker.js.map +1 -0
  235. package/lib/esm/platforms/aws/identity.d.ts +2 -0
  236. package/lib/esm/platforms/aws/identity.js +22 -0
  237. package/lib/esm/platforms/aws/identity.js.map +1 -0
  238. package/lib/esm/platforms/aws/index.d.ts +2 -0
  239. package/lib/esm/platforms/aws/index.js +16 -0
  240. package/lib/esm/platforms/aws/index.js.map +1 -0
  241. package/lib/esm/platforms/aws/publish.d.ts +4 -0
  242. package/lib/esm/platforms/aws/publish.js +50 -0
  243. package/lib/esm/platforms/aws/publish.js.map +1 -0
  244. package/lib/esm/platforms/aws/remote.d.ts +11 -0
  245. package/lib/esm/platforms/aws/remote.js +90 -0
  246. package/lib/esm/platforms/aws/remote.js.map +1 -0
  247. package/lib/esm/platforms/aws/stacks.d.ts +7 -0
  248. package/lib/esm/platforms/aws/stacks.js +69 -0
  249. package/lib/esm/platforms/aws/stacks.js.map +1 -0
  250. package/lib/esm/platforms/aws/teardown.d.ts +2 -0
  251. package/lib/esm/platforms/aws/teardown.js +46 -0
  252. package/lib/esm/platforms/aws/teardown.js.map +1 -0
  253. package/lib/esm/platforms/aws/viewsSync.d.ts +2 -0
  254. package/lib/esm/platforms/aws/viewsSync.js +25 -0
  255. package/lib/esm/platforms/aws/viewsSync.js.map +1 -0
  256. package/lib/esm/platforms/docker/go.d.ts +2 -0
  257. package/lib/esm/platforms/docker/go.js +143 -0
  258. package/lib/esm/platforms/docker/go.js.map +1 -0
  259. package/lib/esm/platforms/docker/index.d.ts +2 -0
  260. package/lib/esm/platforms/docker/index.js +15 -0
  261. package/lib/esm/platforms/docker/index.js.map +1 -0
  262. package/lib/esm/platforms/index.d.ts +4 -0
  263. package/lib/esm/platforms/index.js +20 -0
  264. package/lib/esm/platforms/index.js.map +1 -0
  265. package/lib/esm/platforms/types.d.ts +16 -0
  266. package/lib/esm/platforms/types.js +6 -0
  267. package/lib/esm/platforms/types.js.map +1 -0
  268. package/package.json +63 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runTasks.js","sourceRoot":"","sources":["../../../src/lib/runTasks.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,+EAA+E;AAC/E,mEAAmE;AAC5D,MAAM,QAAQ,GAAG,CAAO,KAAa,EAAE,KAAa,EAA0B,EAAE;IACrF,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAS,EAAE;QAC7C,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAC9B,SAAS,IAAI,CAAC,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAc,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC,CAAA,CAAC,CACH,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAA,CAAC;AApBW,QAAA,QAAQ,YAoBnB;AAEK,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAE,QAAuB,EAAQ,EAAE;IACnF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAClC,OAAO,CAAC,KAAK,CAAC,KAAK,SAAS,cAAc,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,KAAK,QAAQ,CAAC,MAAM,iBAAiB,CAAC,CAAC;AACrE,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B","sourcesContent":["export type Task = { label: string; run: () => Promise<void> };\nexport type TaskFailure = { label: string; error: Error };\n\n// Run tasks with at most `limit` in flight; never rejects — failures come back\n// labelled so a whole wave can finish before we report what broke.\nexport const runTasks = async (tasks: Task[], limit: number): Promise<TaskFailure[]> => {\n const failures: TaskFailure[] = [];\n let nextIndex = 0;\n\n const workerCount = Math.max(1, Math.min(limit, tasks.length));\n await Promise.all(\n Array.from({ length: workerCount }, async () => {\n while (nextIndex < tasks.length) {\n const task = tasks[nextIndex];\n nextIndex += 1;\n try {\n await task.run();\n } catch (error) {\n failures.push({ label: task.label, error: error as Error });\n }\n }\n }),\n );\n\n return failures;\n};\n\nexport const assertNoFailures = (phaseName: string, failures: TaskFailure[]): void => {\n if (failures.length === 0) return;\n console.error(`\\n${phaseName} failed for:`);\n failures.forEach((failure) => console.error(` ${failure.label}: ${failure.error.message}`));\n throw new Error(`${phaseName}: ${failures.length} task(s) failed`);\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const logTimeStart: (name: string) => void;
2
+ export declare const logTimeEnd: (name: string) => void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logTimeEnd = exports.logTimeStart = void 0;
4
+ const logTimeStart = (name) => console.time(name);
5
+ exports.logTimeStart = logTimeStart;
6
+ const logTimeEnd = (name) => {
7
+ console.log('When:', new Date().toLocaleTimeString());
8
+ console.timeEnd(name);
9
+ };
10
+ exports.logTimeEnd = logTimeEnd;
11
+ //# sourceMappingURL=timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.js","sourceRoot":"","sources":["../../../src/lib/timing.ts"],"names":[],"mappings":";;;AAAO,MAAM,YAAY,GAAG,CAAC,IAAY,EAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAA1D,QAAA,YAAY,gBAA8C;AAEhE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAQ,EAAE;IAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC,CAAC;AAHW,QAAA,UAAU,cAGrB","sourcesContent":["export const logTimeStart = (name: string): void => console.time(name);\n\nexport const logTimeEnd = (name: string): void => {\n console.log('When:', new Date().toLocaleTimeString());\n console.timeEnd(name);\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const bundleViews: (appName: string, serviceName: string) => Promise<void>;
2
+ export declare const getViewsDistDir: (appName: string, serviceName: string) => string;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.getViewsDistDir = exports.bundleViews = void 0;
16
+ // Views build — programmatic (getViewsRspackConfig), platform-neutral. Where
17
+ // the built views get hosted is a platform driver concern (see
18
+ // platforms/<platform>/viewsSync).
19
+ const quidproquo_deploy_rspack_1 = require("quidproquo-deploy-rspack");
20
+ const path_1 = __importDefault(require("path"));
21
+ const discovery_1 = require("./discovery");
22
+ const rspackRun_1 = require("./rspackRun");
23
+ const bundleViews = (appName, serviceName) => __awaiter(void 0, void 0, void 0, function* () {
24
+ const viewsDir = path_1.default.join((0, discovery_1.getServiceDirectory)(appName, serviceName), 'views');
25
+ process.env.NODE_ENV = 'production';
26
+ delete process.env.LOCAL_DEV_SERVER;
27
+ yield (0, rspackRun_1.runRspack)((0, quidproquo_deploy_rspack_1.getViewsRspackConfig)(viewsDir));
28
+ });
29
+ exports.bundleViews = bundleViews;
30
+ const getViewsDistDir = (appName, serviceName) => path_1.default.join((0, discovery_1.getRoot)(), 'dist', 'apps', appName, 'services', serviceName, 'views');
31
+ exports.getViewsDistDir = getViewsDistDir;
32
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/lib/views.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,+DAA+D;AAC/D,mCAAmC;AACnC,uEAAgE;AAEhE,gDAAwB;AAExB,2CAA2D;AAC3D,2CAAwC;AAEjC,MAAM,WAAW,GAAG,CAAO,OAAe,EAAE,WAAmB,EAAiB,EAAE;IACvF,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,+BAAmB,EAAC,OAAO,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;IAE/E,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC;IACpC,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAEpC,MAAM,IAAA,qBAAS,EAAC,IAAA,+CAAoB,EAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,CAAC,CAAA,CAAC;AAPW,QAAA,WAAW,eAOtB;AAEK,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,WAAmB,EAAU,EAAE,CAC9E,cAAI,CAAC,IAAI,CAAC,IAAA,mBAAO,GAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AADrE,QAAA,eAAe,mBACsD","sourcesContent":["// Views build — programmatic (getViewsRspackConfig), platform-neutral. Where\n// the built views get hosted is a platform driver concern (see\n// platforms/<platform>/viewsSync).\nimport { getViewsRspackConfig } from 'quidproquo-deploy-rspack';\n\nimport path from 'path';\n\nimport { getRoot, getServiceDirectory } from './discovery';\nimport { runRspack } from './rspackRun';\n\nexport const bundleViews = async (appName: string, serviceName: string): Promise<void> => {\n const viewsDir = path.join(getServiceDirectory(appName, serviceName), 'views');\n\n process.env.NODE_ENV = 'production';\n delete process.env.LOCAL_DEV_SERVER;\n\n await runRspack(getViewsRspackConfig(viewsDir));\n};\n\nexport const getViewsDistDir = (appName: string, serviceName: string): string =>\n path.join(getRoot(), 'dist', 'apps', appName, 'services', serviceName, 'views');\n"]}
@@ -0,0 +1 @@
1
+ export declare const isAwsCredentialsValid: () => Promise<boolean>;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.isAwsCredentialsValid = void 0;
13
+ const client_sts_1 = require("@aws-sdk/client-sts");
14
+ const isAwsCredentialsValid = () => __awaiter(void 0, void 0, void 0, function* () {
15
+ try {
16
+ const client = new client_sts_1.STSClient({
17
+ region: process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1',
18
+ });
19
+ yield client.send(new client_sts_1.GetCallerIdentityCommand({}));
20
+ return true;
21
+ }
22
+ catch (error) {
23
+ console.log('Error validating AWS credentials:', error);
24
+ return false;
25
+ }
26
+ });
27
+ exports.isAwsCredentialsValid = isAwsCredentialsValid;
28
+ //# sourceMappingURL=awsCredentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awsCredentials.js","sourceRoot":"","sources":["../../../../src/platforms/aws/awsCredentials.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAA0E;AAEnE,MAAM,qBAAqB,GAAG,GAA2B,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,sBAAS,CAAC;YAC3B,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,WAAW;SAChF,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,qCAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAA,CAAC;AAXW,QAAA,qBAAqB,yBAWhC","sourcesContent":["import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts';\n\nexport const isAwsCredentialsValid = async (): Promise<boolean> => {\n try {\n const client = new STSClient({\n region: process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || 'us-east-1',\n });\n await client.send(new GetCallerIdentityCommand({}));\n return true;\n } catch (error) {\n console.log('Error validating AWS credentials:', error);\n return false;\n }\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const getCdkAppCommand: () => string;
2
+ export declare const getDockerDir: () => string;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getDockerDir = exports.getCdkAppCommand = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const packageRoot_1 = require("../../lib/packageRoot");
9
+ // The CDK app command (`cdk ... --app "<this>"`): quidproquo-deploy-awscdk's
10
+ // generic workspace app under ts-node hooks, with DEPLOY_* in the env.
11
+ const getCdkAppCommand = () => {
12
+ const cdkAppScript = path_1.default.join((0, packageRoot_1.getOwnPackageRoot)(), 'lib', 'commonjs', 'bin', 'qpqCdkApp.js');
13
+ return `node -r ts-node/register/transpile-only "${cdkAppScript}"`;
14
+ };
15
+ exports.getCdkAppCommand = getCdkAppCommand;
16
+ // The docker build context for the go:docker deployer image.
17
+ const getDockerDir = () => path_1.default.join((0, packageRoot_1.getOwnPackageRoot)(), 'docker', 'cdk-deployer');
18
+ exports.getDockerDir = getDockerDir;
19
+ //# sourceMappingURL=cdkApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdkApp.js","sourceRoot":"","sources":["../../../../src/platforms/aws/cdkApp.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAwB;AAExB,uDAA0D;AAE1D,6EAA6E;AAC7E,uEAAuE;AAChE,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAC3C,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,IAAA,+BAAiB,GAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IAC9F,OAAO,4CAA4C,YAAY,GAAG,CAAC;AACrE,CAAC,CAAC;AAHW,QAAA,gBAAgB,oBAG3B;AAEF,6DAA6D;AACtD,MAAM,YAAY,GAAG,GAAW,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,IAAA,+BAAiB,GAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;AAAtF,QAAA,YAAY,gBAA0E","sourcesContent":["import path from 'path';\n\nimport { getOwnPackageRoot } from '../../lib/packageRoot';\n\n// The CDK app command (`cdk ... --app \"<this>\"`): quidproquo-deploy-awscdk's\n// generic workspace app under ts-node hooks, with DEPLOY_* in the env.\nexport const getCdkAppCommand = (): string => {\n const cdkAppScript = path.join(getOwnPackageRoot(), 'lib', 'commonjs', 'bin', 'qpqCdkApp.js');\n return `node -r ts-node/register/transpile-only \"${cdkAppScript}\"`;\n};\n\n// The docker build context for the go:docker deployer image.\nexport const getDockerDir = (): string => path.join(getOwnPackageRoot(), 'docker', 'cdk-deployer');\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeployPlan } from '../../lib/deployPrompts';
2
+ export declare const awsGo: (appName: string, plan: DeployPlan) => Promise<void>;
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.awsGo = void 0;
16
+ // AWS sequential deploy (`qpq go`). Per service it: synths the QPQ config,
17
+ // rspack-bundles the backend (programmatic — no per-service rspack.config.ts),
18
+ // deploys the inf/api/web CDK stacks (cdk runs the generic workspace app via
19
+ // --app), bundles views (rspack, production) and syncs them to S3.
20
+ const quidproquo_deploy_awscdk_1 = require("quidproquo-deploy-awscdk");
21
+ const quidproquo_deploy_rspack_1 = require("quidproquo-deploy-rspack");
22
+ const path_1 = __importDefault(require("path"));
23
+ const synth_1 = require("../../commands/synth");
24
+ const discovery_1 = require("../../lib/discovery");
25
+ const hooks_1 = require("../../lib/hooks");
26
+ const qpqConfigs_1 = require("../../lib/qpqConfigs");
27
+ const rspackRun_1 = require("../../lib/rspackRun");
28
+ const runCommand_1 = require("../../lib/runCommand");
29
+ const timing_1 = require("../../lib/timing");
30
+ const views_1 = require("../../lib/views");
31
+ const awsCredentials_1 = require("./awsCredentials");
32
+ const stacks_1 = require("./stacks");
33
+ const viewsSync_1 = require("./viewsSync");
34
+ const buildAndDeploy = (serviceName, needsSynth, needsBuildApi, needsInfStack, needsApiStack, needsWebStack, needsViewStack, appName) => __awaiter(void 0, void 0, void 0, function* () {
35
+ if (needsSynth) {
36
+ console.log('Synth QPQ Configs');
37
+ yield (0, synth_1.synthCommand)([serviceName, '--app', appName]);
38
+ }
39
+ const qpqConfigForService = (0, qpqConfigs_1.loadServiceQpqConfig)(appName, serviceName);
40
+ if (needsBuildApi) {
41
+ console.log('Building Api: ', serviceName);
42
+ yield (0, rspackRun_1.runRspack)((0, quidproquo_deploy_rspack_1.getServiceRspackConfig)(qpqConfigForService, path_1.default.join((0, discovery_1.getServiceDirectory)(appName, serviceName), 'service')));
43
+ }
44
+ if (needsInfStack) {
45
+ console.log('Deploy Inf: ', serviceName);
46
+ yield (0, stacks_1.deployServiceStack)(serviceName, quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getInfStackName(qpqConfigForService), appName);
47
+ }
48
+ if (needsApiStack) {
49
+ console.log('Deploy Api: ', serviceName);
50
+ yield (0, stacks_1.deployServiceStack)(serviceName, quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getApiStackName(qpqConfigForService), appName);
51
+ }
52
+ if (needsWebStack) {
53
+ console.log('Deploy Web: ', serviceName);
54
+ yield (0, stacks_1.deployServiceStack)(serviceName, quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getWebStackName(qpqConfigForService), appName);
55
+ }
56
+ if (needsViewStack && (0, discovery_1.getServiceNamesWithViews)(appName).includes(serviceName)) {
57
+ console.log('Building Views: ', serviceName);
58
+ yield (0, views_1.bundleViews)(appName, serviceName);
59
+ yield (0, viewsSync_1.syncViewsToS3)(appName, serviceName);
60
+ }
61
+ });
62
+ const awsGo = (appName, plan) => __awaiter(void 0, void 0, void 0, function* () {
63
+ if (plan.kind === 'cancelled') {
64
+ return;
65
+ }
66
+ (0, timing_1.logTimeStart)('totalTime');
67
+ if (plan.kind === 'account') {
68
+ yield (0, stacks_1.deployAccountStack)(plan.appName);
69
+ (0, timing_1.logTimeEnd)('totalTime');
70
+ return;
71
+ }
72
+ if (plan.kind === 'bootstrap') {
73
+ // Actor bootstraps deploy into a shared account — leave the account-level
74
+ // guardrails stack alone (deploy it explicitly via the 'account' option).
75
+ if (process.env.ACTOR_NAME) {
76
+ console.log('Skipping account stack for actor deploy');
77
+ }
78
+ else {
79
+ yield (0, stacks_1.deployAccountStack)(plan.appName);
80
+ }
81
+ if (plan.includeDomain) {
82
+ yield (0, stacks_1.deployDomainStack)(plan.appName);
83
+ }
84
+ yield (0, stacks_1.deployBootstrapStack)(plan.appName);
85
+ (0, timing_1.logTimeEnd)('totalTime');
86
+ return;
87
+ }
88
+ const { services, stacks } = plan;
89
+ const shouldBuildApi = stacks !== 'views';
90
+ console.log('\n\nRunning automated deploy\n\n');
91
+ console.log('Executing for services');
92
+ console.log(services.join(', '));
93
+ if ((yield (0, awsCredentials_1.isAwsCredentialsValid)()) === false) {
94
+ console.log('Credentials are expired or invalid.');
95
+ return;
96
+ }
97
+ const allStacks = stacks === 'all';
98
+ yield (0, hooks_1.runAppHook)(appName, 'predeploy');
99
+ // Workspace packages resolve through their built dist/ (package.json main),
100
+ // so bundles would ship stale code unless every lib is tsc'd first.
101
+ console.log('Building workspace packages');
102
+ yield (0, runCommand_1.runCommand)('npm', ['run', 'build', '--workspaces', '--if-present']);
103
+ // Views uploads resolve bucket names from the shell service's config.
104
+ if (allStacks || stacks === 'views') {
105
+ yield (0, synth_1.synthCommand)(['shell', '--app', appName]);
106
+ }
107
+ for (let phase = 0; phase <= 5; phase += 1) {
108
+ yield services.reduce((cur, service) => __awaiter(void 0, void 0, void 0, function* () {
109
+ yield cur;
110
+ return buildAndDeploy(service, phase === 0, phase === 1 && shouldBuildApi, phase === 2 && (allStacks || stacks === 'inf'), phase === 3 && (allStacks || stacks === 'api'), phase === 4 && (allStacks || stacks === 'web'), phase === 5 && (allStacks || stacks === 'views'), appName);
111
+ }), Promise.resolve());
112
+ }
113
+ (0, timing_1.logTimeEnd)('totalTime');
114
+ });
115
+ exports.awsGo = awsGo;
116
+ //# sourceMappingURL=go.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.js","sourceRoot":"","sources":["../../../../src/platforms/aws/go.ts"],"names":[],"mappings":"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","sourcesContent":["// AWS sequential deploy (`qpq go`). Per service it: synths the QPQ config,\n// rspack-bundles the backend (programmatic — no per-service rspack.config.ts),\n// deploys the inf/api/web CDK stacks (cdk runs the generic workspace app via\n// --app), bundles views (rspack, production) and syncs them to S3.\nimport { qpqDeployAwsCdkUtils } from 'quidproquo-deploy-awscdk';\nimport { getServiceRspackConfig } from 'quidproquo-deploy-rspack';\n\nimport path from 'path';\n\nimport { synthCommand } from '../../commands/synth';\nimport { DeployPlan } from '../../lib/deployPrompts';\nimport { getServiceDirectory, getServiceNamesWithViews } from '../../lib/discovery';\nimport { runAppHook } from '../../lib/hooks';\nimport { loadServiceQpqConfig } from '../../lib/qpqConfigs';\nimport { runRspack } from '../../lib/rspackRun';\nimport { runCommand } from '../../lib/runCommand';\nimport { logTimeEnd, logTimeStart } from '../../lib/timing';\nimport { bundleViews } from '../../lib/views';\nimport { isAwsCredentialsValid } from './awsCredentials';\nimport { deployAccountStack, deployBootstrapStack, deployDomainStack, deployServiceStack } from './stacks';\nimport { syncViewsToS3 } from './viewsSync';\n\nconst buildAndDeploy = async (\n serviceName: string,\n needsSynth: boolean,\n needsBuildApi: boolean,\n needsInfStack: boolean,\n needsApiStack: boolean,\n needsWebStack: boolean,\n needsViewStack: boolean,\n appName: string,\n): Promise<void> => {\n if (needsSynth) {\n console.log('Synth QPQ Configs');\n await synthCommand([serviceName, '--app', appName]);\n }\n\n const qpqConfigForService = loadServiceQpqConfig(appName, serviceName);\n\n if (needsBuildApi) {\n console.log('Building Api: ', serviceName);\n await runRspack(getServiceRspackConfig(qpqConfigForService, path.join(getServiceDirectory(appName, serviceName), 'service')));\n }\n\n if (needsInfStack) {\n console.log('Deploy Inf: ', serviceName);\n await deployServiceStack(serviceName, qpqDeployAwsCdkUtils.getInfStackName(qpqConfigForService), appName);\n }\n\n if (needsApiStack) {\n console.log('Deploy Api: ', serviceName);\n await deployServiceStack(serviceName, qpqDeployAwsCdkUtils.getApiStackName(qpqConfigForService), appName);\n }\n\n if (needsWebStack) {\n console.log('Deploy Web: ', serviceName);\n await deployServiceStack(serviceName, qpqDeployAwsCdkUtils.getWebStackName(qpqConfigForService), appName);\n }\n\n if (needsViewStack && getServiceNamesWithViews(appName).includes(serviceName)) {\n console.log('Building Views: ', serviceName);\n await bundleViews(appName, serviceName);\n await syncViewsToS3(appName, serviceName);\n }\n};\n\nexport const awsGo = async (appName: string, plan: DeployPlan): Promise<void> => {\n if (plan.kind === 'cancelled') {\n return;\n }\n\n logTimeStart('totalTime');\n\n if (plan.kind === 'account') {\n await deployAccountStack(plan.appName);\n logTimeEnd('totalTime');\n return;\n }\n\n if (plan.kind === 'bootstrap') {\n // Actor bootstraps deploy into a shared account — leave the account-level\n // guardrails stack alone (deploy it explicitly via the 'account' option).\n if (process.env.ACTOR_NAME) {\n console.log('Skipping account stack for actor deploy');\n } else {\n await deployAccountStack(plan.appName);\n }\n if (plan.includeDomain) {\n await deployDomainStack(plan.appName);\n }\n await deployBootstrapStack(plan.appName);\n logTimeEnd('totalTime');\n return;\n }\n\n const { services, stacks } = plan;\n const shouldBuildApi = stacks !== 'views';\n\n console.log('\\n\\nRunning automated deploy\\n\\n');\n console.log('Executing for services');\n console.log(services.join(', '));\n\n if ((await isAwsCredentialsValid()) === false) {\n console.log('Credentials are expired or invalid.');\n return;\n }\n\n const allStacks = stacks === 'all';\n\n await runAppHook(appName, 'predeploy');\n\n // Workspace packages resolve through their built dist/ (package.json main),\n // so bundles would ship stale code unless every lib is tsc'd first.\n console.log('Building workspace packages');\n await runCommand('npm', ['run', 'build', '--workspaces', '--if-present']);\n\n // Views uploads resolve bucket names from the shell service's config.\n if (allStacks || stacks === 'views') {\n await synthCommand(['shell', '--app', appName]);\n }\n\n for (let phase = 0; phase <= 5; phase += 1) {\n await services.reduce(async (cur, service) => {\n await cur;\n return buildAndDeploy(\n service,\n phase === 0,\n phase === 1 && shouldBuildApi,\n phase === 2 && (allStacks || stacks === 'inf'),\n phase === 3 && (allStacks || stacks === 'api'),\n phase === 4 && (allStacks || stacks === 'web'),\n phase === 5 && (allStacks || stacks === 'views'),\n appName,\n );\n }, Promise.resolve());\n }\n\n logTimeEnd('totalTime');\n};\n"]}
@@ -0,0 +1,2 @@
1
+ import { DeployPlan } from '../../lib/deployPrompts';
2
+ export declare const awsGoDocker: (appName: string, plan: DeployPlan) => Promise<void>;
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.awsGoDocker = void 0;
16
+ // `qpq go:docker` — asks the same questions as `qpq go`, then deploys in
17
+ // parallel via docker instead of sequentially:
18
+ //
19
+ // 1. Build everything locally first: QPQ config synth, rspack API bundles,
20
+ // rspack view bundles, and one self-contained CDK cloud assembly per
21
+ // service (`cdk synth --output dist/qpq/cdk-docker/<app>/<service>`).
22
+ // 2. Wave 1 (inf): one docker container per service deploys its inf stack,
23
+ // all concurrently. Containers run only the CDK CLI against the mounted
24
+ // pre-synthesized assembly — the workspace (and its npm-linked
25
+ // quidproquo packages) never needs to exist inside the image.
26
+ // 3. Wave 2 (api + web): once every inf stack is done, api and web stacks
27
+ // for all services deploy concurrently (they depend only on inf, not on
28
+ // each other).
29
+ // 4. Views: the already-built bundles are synced to S3, one aws-cli
30
+ // container per service, all concurrently.
31
+ //
32
+ // domain/bootstrap menu options deploy host-side exactly like `qpq go` —
33
+ // a single stack gains nothing from docker.
34
+ //
35
+ // Requires the same env as `go` plus a running docker daemon. Knobs:
36
+ // GO_DOCKER_BUILD_CONCURRENCY (default 4 — local builds are CPU-bound) and
37
+ // GO_DOCKER_DEPLOY_CONCURRENCY (default unlimited — deploys just wait on
38
+ // CloudFormation).
39
+ const quidproquo_deploy_awscdk_1 = require("quidproquo-deploy-awscdk");
40
+ const quidproquo_deploy_rspack_1 = require("quidproquo-deploy-rspack");
41
+ const fs_1 = __importDefault(require("fs"));
42
+ const path_1 = __importDefault(require("path"));
43
+ const synth_1 = require("../../commands/synth");
44
+ const discovery_1 = require("../../lib/discovery");
45
+ const hooks_1 = require("../../lib/hooks");
46
+ const qpqConfigs_1 = require("../../lib/qpqConfigs");
47
+ const rspackRun_1 = require("../../lib/rspackRun");
48
+ const runCommand_1 = require("../../lib/runCommand");
49
+ const runTasks_1 = require("../../lib/runTasks");
50
+ const timing_1 = require("../../lib/timing");
51
+ const views_1 = require("../../lib/views");
52
+ const awsCredentials_1 = require("./awsCredentials");
53
+ const cdkApp_1 = require("./cdkApp");
54
+ const stacks_1 = require("./stacks");
55
+ const viewsSync_1 = require("./viewsSync");
56
+ const IMAGE_TAG = 'qpq-cdk-deployer';
57
+ const AWS_CLI_IMAGE = 'amazon/aws-cli';
58
+ const BUILD_CONCURRENCY = Number(process.env.GO_DOCKER_BUILD_CONCURRENCY) || 4;
59
+ const DEPLOY_CONCURRENCY = Number(process.env.GO_DOCKER_DEPLOY_CONCURRENCY) || Infinity;
60
+ // Credentials/region reach the containers via `docker run -e NAME` (value
61
+ // inherited from this process's env, never on the docker command line).
62
+ const AWS_ENV_PASSTHROUGH = [
63
+ 'AWS_ACCESS_KEY_ID',
64
+ 'AWS_SECRET_ACCESS_KEY',
65
+ 'AWS_SESSION_TOKEN',
66
+ 'AWS_REGION',
67
+ 'AWS_DEFAULT_REGION',
68
+ 'AWS_DEFAULT_ACCOUNT',
69
+ ];
70
+ const assemblyDir = (appName, serviceName) => path_1.default.join((0, discovery_1.getRoot)(), 'dist', 'qpq', 'cdk-docker', appName, serviceName);
71
+ const assertDockerRunning = () => __awaiter(void 0, void 0, void 0, function* () {
72
+ try {
73
+ yield (0, runCommand_1.runCommand)('docker', ['info', '--format', '"docker daemon ok — server {{.ServerVersion}}"']);
74
+ }
75
+ catch (_a) {
76
+ throw new Error('Docker daemon is not running (start Docker Desktop and retry).');
77
+ }
78
+ });
79
+ const buildDeployerImage = () => __awaiter(void 0, void 0, void 0, function* () {
80
+ // Pin the image's CDK CLI to the CLI's own aws-cdk version so it can always
81
+ // read the assembly schema the host synthesized.
82
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
83
+ const cdkVersion = require('aws-cdk/package.json').version;
84
+ console.log(`Building deployer image [${IMAGE_TAG}] (aws-cdk ${cdkVersion})`);
85
+ yield (0, runCommand_1.runCommand)('docker', ['build', '-t', IMAGE_TAG, '--build-arg', `CDK_VERSION=${cdkVersion}`, (0, cdkApp_1.getDockerDir)()]);
86
+ });
87
+ // Deploy one stack from a pre-synthesized assembly in a throwaway container
88
+ // named <service>-<stackType> (e.g. mini-web) so `docker ps` reads cleanly.
89
+ // The assembly mounts read-only and is copied container-local first — the CDK
90
+ // CLI writes lock files next to the assembly it reads, and the copy keeps
91
+ // parallel api/web deploys of the same service fully isolated.
92
+ const dockerDeployStack = (color, appName, serviceName, stackType, stackName) => {
93
+ const containerName = `${serviceName}-${stackType}`;
94
+ return (0, runCommand_1.runCommandPrefixed)(`${stackType}:${serviceName}`, 'docker', [
95
+ // A container left behind by an interrupted run would block reusing the
96
+ // name — clear it quietly first.
97
+ 'rm',
98
+ '-f',
99
+ containerName,
100
+ '>/dev/null',
101
+ '2>&1',
102
+ ';',
103
+ 'docker',
104
+ 'run',
105
+ '--rm',
106
+ '--name',
107
+ containerName,
108
+ '-v',
109
+ `"${assemblyDir(appName, serviceName)}:/assembly:ro"`,
110
+ ...AWS_ENV_PASSTHROUGH.flatMap((name) => ['-e', name]),
111
+ IMAGE_TAG,
112
+ 'bash',
113
+ '-c',
114
+ `"cp -r /assembly /work/assembly && cdk deploy ${stackName} --app /work/assembly --require-approval never --progress events"`,
115
+ ], { color });
116
+ };
117
+ // Sync one service's pre-built views to S3 in a throwaway aws-cli container
118
+ // named <service>-views. The official image's entrypoint is `aws`. Multiple
119
+ // destinations (shell → website root + views prefix) run sequentially within
120
+ // the service, reusing the container name.
121
+ const dockerSyncViews = (color, appName, serviceName) => __awaiter(void 0, void 0, void 0, function* () {
122
+ const containerName = `${serviceName}-views`;
123
+ for (const destination of (0, viewsSync_1.getViewsS3Destinations)(appName, serviceName)) {
124
+ yield (0, runCommand_1.runCommandPrefixed)(`views:${serviceName}`, 'docker', [
125
+ 'rm',
126
+ '-f',
127
+ containerName,
128
+ '>/dev/null',
129
+ '2>&1',
130
+ ';',
131
+ 'docker',
132
+ 'run',
133
+ '--rm',
134
+ '--name',
135
+ containerName,
136
+ '-v',
137
+ `"${(0, views_1.getViewsDistDir)(appName, serviceName)}:/views:ro"`,
138
+ ...AWS_ENV_PASSTHROUGH.flatMap((name) => ['-e', name]),
139
+ AWS_CLI_IMAGE,
140
+ 's3',
141
+ 'sync',
142
+ '/views',
143
+ destination,
144
+ ], { color });
145
+ }
146
+ });
147
+ const awsGoDocker = (appName, plan) => __awaiter(void 0, void 0, void 0, function* () {
148
+ if (plan.kind === 'cancelled') {
149
+ return;
150
+ }
151
+ if ((yield (0, awsCredentials_1.isAwsCredentialsValid)()) === false) {
152
+ console.log('Credentials are expired or invalid.');
153
+ return;
154
+ }
155
+ (0, timing_1.logTimeStart)('totalTime');
156
+ if (plan.kind === 'account') {
157
+ yield (0, stacks_1.deployAccountStack)(plan.appName);
158
+ (0, timing_1.logTimeEnd)('totalTime');
159
+ return;
160
+ }
161
+ if (plan.kind === 'bootstrap') {
162
+ if (plan.includeDomain) {
163
+ yield (0, stacks_1.deployDomainStack)(plan.appName);
164
+ }
165
+ yield (0, stacks_1.deployBootstrapStack)(plan.appName);
166
+ (0, timing_1.logTimeEnd)('totalTime');
167
+ return;
168
+ }
169
+ const { services, stacks } = plan;
170
+ const allStacks = stacks === 'all';
171
+ const needInf = allStacks || stacks === 'inf';
172
+ const needApi = allStacks || stacks === 'api';
173
+ const needWeb = allStacks || stacks === 'web';
174
+ const needViews = allStacks || stacks === 'views';
175
+ const needCdkDeploys = needInf || needApi || needWeb;
176
+ const viewServices = needViews ? services.filter((s) => (0, discovery_1.getServiceNamesWithViews)(appName).includes(s)) : [];
177
+ console.log('\n\nRunning dockerized deploy\n\n');
178
+ console.log('Executing for services');
179
+ console.log(services.join(', '));
180
+ if (needCdkDeploys || viewServices.length > 0) {
181
+ yield assertDockerRunning();
182
+ }
183
+ if (needCdkDeploys) {
184
+ yield buildDeployerImage();
185
+ }
186
+ if (viewServices.length > 0) {
187
+ // Pull up front so the views wave doesn't race N containers into pulling
188
+ // the same image.
189
+ yield (0, runCommand_1.runCommand)('docker', ['pull', AWS_CLI_IMAGE]);
190
+ }
191
+ // ---- Phase 1: build everything locally ----
192
+ console.log('\n=== Phase 1: local builds ===\n');
193
+ yield (0, hooks_1.runAppHook)(appName, 'predeploy');
194
+ // Workspace packages resolve through their built dist/ (package.json main),
195
+ // so bundles would ship stale code unless every lib is tsc'd first. npm runs
196
+ // the workspaces in topological order; tsc -b is incremental, so this is
197
+ // seconds when nothing changed.
198
+ console.log('Building workspace packages');
199
+ yield (0, runCommand_1.runCommand)('npm', ['run', 'build', '--workspaces', '--if-present']);
200
+ // Synth QPQ configs (shell's config resolves the view bucket names).
201
+ // In-process (no subprocess per service) — it's just config loads + JSON writes.
202
+ const qpqSynthServices = [...new Set([...services, ...(needViews ? ['shell'] : [])])];
203
+ for (const service of qpqSynthServices) {
204
+ yield (0, synth_1.synthCommand)([service, '--app', appName]);
205
+ }
206
+ if (stacks !== 'views') {
207
+ (0, runTasks_1.assertNoFailures)('API bundling', yield (0, runTasks_1.runTasks)(services.map((service) => ({
208
+ label: `bundle-api:${service}`,
209
+ run: () => __awaiter(void 0, void 0, void 0, function* () {
210
+ console.log(`Bundling api: [${service}]`);
211
+ const qpqConfig = (0, qpqConfigs_1.loadServiceQpqConfig)(appName, service);
212
+ yield (0, rspackRun_1.runRspack)((0, quidproquo_deploy_rspack_1.getServiceRspackConfig)(qpqConfig, path_1.default.join((0, discovery_1.getServiceDirectory)(appName, service), 'service')));
213
+ }),
214
+ })), BUILD_CONCURRENCY));
215
+ }
216
+ (0, runTasks_1.assertNoFailures)('Views bundling', yield (0, runTasks_1.runTasks)(viewServices.map((service) => ({
217
+ label: `bundle-views:${service}`,
218
+ run: () => __awaiter(void 0, void 0, void 0, function* () {
219
+ console.log(`Bundling views: [${service}]`);
220
+ yield (0, views_1.bundleViews)(appName, service);
221
+ }),
222
+ })), BUILD_CONCURRENCY));
223
+ if (needCdkDeploys) {
224
+ // One self-contained cloud assembly per service (all its stacks + staged
225
+ // assets) — separate --output dirs so synths can run in parallel and
226
+ // containers never share mutable state.
227
+ (0, runTasks_1.assertNoFailures)('CDK synth', yield (0, runTasks_1.runTasks)(services.map((service) => ({
228
+ label: `cdk-synth:${service}`,
229
+ run: () => __awaiter(void 0, void 0, void 0, function* () {
230
+ const outputDir = assemblyDir(appName, service);
231
+ fs_1.default.rmSync(outputDir, { recursive: true, force: true });
232
+ yield (0, runCommand_1.runCommandPrefixed)(`cdk-synth:${service}`, 'npx', ['cdk', 'synth', '--all', '--quiet', '--app', `'${(0, cdkApp_1.getCdkAppCommand)()}'`, '--output', `"${outputDir}"`], {
233
+ cwd: (0, discovery_1.getRoot)(),
234
+ env: { DEPLOY_SERVICE_NAME: service, DEPLOY_APP_NAME: appName },
235
+ color: (0, runCommand_1.nextPrefixColor)(),
236
+ });
237
+ }),
238
+ })), BUILD_CONCURRENCY));
239
+ }
240
+ // Stack names come from each service's live config, resolved once up front.
241
+ const stackNames = new Map(services.map((service) => {
242
+ const qpqConfig = (0, qpqConfigs_1.loadServiceQpqConfig)(appName, service);
243
+ return [
244
+ service,
245
+ {
246
+ inf: quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getInfStackName(qpqConfig),
247
+ api: quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getApiStackName(qpqConfig),
248
+ web: quidproquo_deploy_awscdk_1.qpqDeployAwsCdkUtils.getWebStackName(qpqConfig),
249
+ },
250
+ ];
251
+ }));
252
+ // ---- Phase 2: inf stacks, one container per service, all concurrent ----
253
+ if (needInf) {
254
+ console.log('\n=== Phase 2: deploy inf stacks (docker) ===\n');
255
+ (0, timing_1.logTimeStart)('infWave');
256
+ (0, runTasks_1.assertNoFailures)('Inf deploy', yield (0, runTasks_1.runTasks)(services.map((service) => ({
257
+ label: `inf:${service}`,
258
+ run: () => dockerDeployStack((0, runCommand_1.nextPrefixColor)(), appName, service, 'inf', stackNames.get(service).inf),
259
+ })), DEPLOY_CONCURRENCY));
260
+ (0, timing_1.logTimeEnd)('infWave');
261
+ }
262
+ // ---- Phase 3: api + web stacks, all concurrent ----
263
+ if (needApi || needWeb) {
264
+ console.log('\n=== Phase 3: deploy api + web stacks (docker) ===\n');
265
+ (0, timing_1.logTimeStart)('apiWebWave');
266
+ (0, runTasks_1.assertNoFailures)('Api/Web deploy', yield (0, runTasks_1.runTasks)(['api', 'web']
267
+ .filter((stackType) => (stackType === 'api' ? needApi : needWeb))
268
+ .flatMap((stackType) => services.map((service) => ({
269
+ label: `${stackType}:${service}`,
270
+ run: () => dockerDeployStack((0, runCommand_1.nextPrefixColor)(), appName, service, stackType, stackNames.get(service)[stackType]),
271
+ }))), DEPLOY_CONCURRENCY));
272
+ (0, timing_1.logTimeEnd)('apiWebWave');
273
+ }
274
+ // ---- Phase 4: sync the pre-built views to S3, all concurrent ----
275
+ if (viewServices.length > 0) {
276
+ console.log('\n=== Phase 4: sync views to S3 (docker) ===\n');
277
+ (0, timing_1.logTimeStart)('viewsWave');
278
+ (0, runTasks_1.assertNoFailures)('Views sync', yield (0, runTasks_1.runTasks)(viewServices.map((service) => ({
279
+ label: `views:${service}`,
280
+ run: () => dockerSyncViews((0, runCommand_1.nextPrefixColor)(), appName, service),
281
+ })), DEPLOY_CONCURRENCY));
282
+ (0, timing_1.logTimeEnd)('viewsWave');
283
+ }
284
+ (0, timing_1.logTimeEnd)('totalTime');
285
+ });
286
+ exports.awsGoDocker = awsGoDocker;
287
+ //# sourceMappingURL=goDocker.js.map