pax8-cta 0.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 (224) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +659 -0
  3. package/demo-data/solutions/ProductQADemo_1_0_0_2_managed.zip +0 -0
  4. package/dist/commands/analyze.d.ts +28 -0
  5. package/dist/commands/analyze.d.ts.map +1 -0
  6. package/dist/commands/analyze.js +571 -0
  7. package/dist/commands/analyze.js.map +1 -0
  8. package/dist/commands/auth.d.ts +18 -0
  9. package/dist/commands/auth.d.ts.map +1 -0
  10. package/dist/commands/auth.js +171 -0
  11. package/dist/commands/auth.js.map +1 -0
  12. package/dist/commands/config.d.ts +34 -0
  13. package/dist/commands/config.d.ts.map +1 -0
  14. package/dist/commands/config.js +299 -0
  15. package/dist/commands/config.js.map +1 -0
  16. package/dist/commands/demo.d.ts +33 -0
  17. package/dist/commands/demo.d.ts.map +1 -0
  18. package/dist/commands/demo.js +362 -0
  19. package/dist/commands/demo.js.map +1 -0
  20. package/dist/commands/deploy.d.ts +18 -0
  21. package/dist/commands/deploy.d.ts.map +1 -0
  22. package/dist/commands/deploy.js +1186 -0
  23. package/dist/commands/deploy.js.map +1 -0
  24. package/dist/commands/deployments/helpers.d.ts +68 -0
  25. package/dist/commands/deployments/helpers.d.ts.map +1 -0
  26. package/dist/commands/deployments/helpers.js +414 -0
  27. package/dist/commands/deployments/helpers.js.map +1 -0
  28. package/dist/commands/deployments/index.d.ts +24 -0
  29. package/dist/commands/deployments/index.d.ts.map +1 -0
  30. package/dist/commands/deployments/index.js +47 -0
  31. package/dist/commands/deployments/index.js.map +1 -0
  32. package/dist/commands/deployments/list.d.ts +18 -0
  33. package/dist/commands/deployments/list.d.ts.map +1 -0
  34. package/dist/commands/deployments/list.js +97 -0
  35. package/dist/commands/deployments/list.js.map +1 -0
  36. package/dist/commands/deployments/show.d.ts +18 -0
  37. package/dist/commands/deployments/show.d.ts.map +1 -0
  38. package/dist/commands/deployments/show.js +81 -0
  39. package/dist/commands/deployments/show.js.map +1 -0
  40. package/dist/commands/deployments/undo.d.ts +18 -0
  41. package/dist/commands/deployments/undo.d.ts.map +1 -0
  42. package/dist/commands/deployments/undo.js +295 -0
  43. package/dist/commands/deployments/undo.js.map +1 -0
  44. package/dist/commands/export.d.ts +18 -0
  45. package/dist/commands/export.d.ts.map +1 -0
  46. package/dist/commands/export.js +133 -0
  47. package/dist/commands/export.js.map +1 -0
  48. package/dist/commands/import.d.ts +18 -0
  49. package/dist/commands/import.d.ts.map +1 -0
  50. package/dist/commands/import.js +129 -0
  51. package/dist/commands/import.js.map +1 -0
  52. package/dist/commands/init-config.d.ts +26 -0
  53. package/dist/commands/init-config.d.ts.map +1 -0
  54. package/dist/commands/init-config.js +123 -0
  55. package/dist/commands/init-config.js.map +1 -0
  56. package/dist/commands/init-validation.d.ts +47 -0
  57. package/dist/commands/init-validation.d.ts.map +1 -0
  58. package/dist/commands/init-validation.js +339 -0
  59. package/dist/commands/init-validation.js.map +1 -0
  60. package/dist/commands/init-wizard.d.ts +25 -0
  61. package/dist/commands/init-wizard.d.ts.map +1 -0
  62. package/dist/commands/init-wizard.js +433 -0
  63. package/dist/commands/init-wizard.js.map +1 -0
  64. package/dist/commands/init.d.ts +18 -0
  65. package/dist/commands/init.d.ts.map +1 -0
  66. package/dist/commands/init.js +46 -0
  67. package/dist/commands/init.js.map +1 -0
  68. package/dist/commands/resolve-url.d.ts +18 -0
  69. package/dist/commands/resolve-url.d.ts.map +1 -0
  70. package/dist/commands/resolve-url.js +126 -0
  71. package/dist/commands/resolve-url.js.map +1 -0
  72. package/dist/commands/setup.d.ts +18 -0
  73. package/dist/commands/setup.d.ts.map +1 -0
  74. package/dist/commands/setup.js +239 -0
  75. package/dist/commands/setup.js.map +1 -0
  76. package/dist/commands/solutions/drift-analysis.d.ts +73 -0
  77. package/dist/commands/solutions/drift-analysis.d.ts.map +1 -0
  78. package/dist/commands/solutions/drift-analysis.js +416 -0
  79. package/dist/commands/solutions/drift-analysis.js.map +1 -0
  80. package/dist/commands/solutions/drift.d.ts +32 -0
  81. package/dist/commands/solutions/drift.d.ts.map +1 -0
  82. package/dist/commands/solutions/drift.js +641 -0
  83. package/dist/commands/solutions/drift.js.map +1 -0
  84. package/dist/commands/solutions/fix-planner.d.ts +48 -0
  85. package/dist/commands/solutions/fix-planner.d.ts.map +1 -0
  86. package/dist/commands/solutions/fix-planner.js +43 -0
  87. package/dist/commands/solutions/fix-planner.js.map +1 -0
  88. package/dist/commands/solutions/helpers.d.ts +35 -0
  89. package/dist/commands/solutions/helpers.d.ts.map +1 -0
  90. package/dist/commands/solutions/helpers.js +54 -0
  91. package/dist/commands/solutions/helpers.js.map +1 -0
  92. package/dist/commands/solutions/index.d.ts +18 -0
  93. package/dist/commands/solutions/index.d.ts.map +1 -0
  94. package/dist/commands/solutions/index.js +30 -0
  95. package/dist/commands/solutions/index.js.map +1 -0
  96. package/dist/commands/solutions/list.d.ts +18 -0
  97. package/dist/commands/solutions/list.d.ts.map +1 -0
  98. package/dist/commands/solutions/list.js +174 -0
  99. package/dist/commands/solutions/list.js.map +1 -0
  100. package/dist/commands/solutions/remove.d.ts +18 -0
  101. package/dist/commands/solutions/remove.d.ts.map +1 -0
  102. package/dist/commands/solutions/remove.js +137 -0
  103. package/dist/commands/solutions/remove.js.map +1 -0
  104. package/dist/commands/solutions/risk-calculator.d.ts +33 -0
  105. package/dist/commands/solutions/risk-calculator.d.ts.map +1 -0
  106. package/dist/commands/solutions/risk-calculator.js +79 -0
  107. package/dist/commands/solutions/risk-calculator.js.map +1 -0
  108. package/dist/commands/solutions/show.d.ts +18 -0
  109. package/dist/commands/solutions/show.d.ts.map +1 -0
  110. package/dist/commands/solutions/show.js +165 -0
  111. package/dist/commands/solutions/show.js.map +1 -0
  112. package/dist/commands/status.d.ts +18 -0
  113. package/dist/commands/status.d.ts.map +1 -0
  114. package/dist/commands/status.js +573 -0
  115. package/dist/commands/status.js.map +1 -0
  116. package/dist/commands/telemetry.d.ts +18 -0
  117. package/dist/commands/telemetry.d.ts.map +1 -0
  118. package/dist/commands/telemetry.js +85 -0
  119. package/dist/commands/telemetry.js.map +1 -0
  120. package/dist/commands/tenants/health.d.ts +18 -0
  121. package/dist/commands/tenants/health.d.ts.map +1 -0
  122. package/dist/commands/tenants/health.js +172 -0
  123. package/dist/commands/tenants/health.js.map +1 -0
  124. package/dist/commands/tenants/helpers.d.ts +44 -0
  125. package/dist/commands/tenants/helpers.d.ts.map +1 -0
  126. package/dist/commands/tenants/helpers.js +72 -0
  127. package/dist/commands/tenants/helpers.js.map +1 -0
  128. package/dist/commands/tenants/index.d.ts +19 -0
  129. package/dist/commands/tenants/index.d.ts.map +1 -0
  130. package/dist/commands/tenants/index.js +39 -0
  131. package/dist/commands/tenants/index.js.map +1 -0
  132. package/dist/commands/tenants/inspect.d.ts +18 -0
  133. package/dist/commands/tenants/inspect.d.ts.map +1 -0
  134. package/dist/commands/tenants/inspect.js +176 -0
  135. package/dist/commands/tenants/inspect.js.map +1 -0
  136. package/dist/commands/tenants/list.d.ts +18 -0
  137. package/dist/commands/tenants/list.d.ts.map +1 -0
  138. package/dist/commands/tenants/list.js +144 -0
  139. package/dist/commands/tenants/list.js.map +1 -0
  140. package/dist/commands/tenants/manage.d.ts +20 -0
  141. package/dist/commands/tenants/manage.d.ts.map +1 -0
  142. package/dist/commands/tenants/manage.js +206 -0
  143. package/dist/commands/tenants/manage.js.map +1 -0
  144. package/dist/commands/tenants/show.d.ts +18 -0
  145. package/dist/commands/tenants/show.d.ts.map +1 -0
  146. package/dist/commands/tenants/show.js +191 -0
  147. package/dist/commands/tenants/show.js.map +1 -0
  148. package/dist/commands/validate.d.ts +18 -0
  149. package/dist/commands/validate.d.ts.map +1 -0
  150. package/dist/commands/validate.js +536 -0
  151. package/dist/commands/validate.js.map +1 -0
  152. package/dist/index.d.ts +19 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +258 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/lib/auth.d.ts +51 -0
  157. package/dist/lib/auth.d.ts.map +1 -0
  158. package/dist/lib/auth.js +153 -0
  159. package/dist/lib/auth.js.map +1 -0
  160. package/dist/lib/banner.d.ts +19 -0
  161. package/dist/lib/banner.d.ts.map +1 -0
  162. package/dist/lib/banner.js +78 -0
  163. package/dist/lib/banner.js.map +1 -0
  164. package/dist/lib/command-wrapper.d.ts +56 -0
  165. package/dist/lib/command-wrapper.d.ts.map +1 -0
  166. package/dist/lib/command-wrapper.js +71 -0
  167. package/dist/lib/command-wrapper.js.map +1 -0
  168. package/dist/lib/credentials.d.ts +56 -0
  169. package/dist/lib/credentials.d.ts.map +1 -0
  170. package/dist/lib/credentials.js +146 -0
  171. package/dist/lib/credentials.js.map +1 -0
  172. package/dist/lib/demo-banner.d.ts +15 -0
  173. package/dist/lib/demo-banner.d.ts.map +1 -0
  174. package/dist/lib/demo-banner.js +33 -0
  175. package/dist/lib/demo-banner.js.map +1 -0
  176. package/dist/lib/error-handler.d.ts +51 -0
  177. package/dist/lib/error-handler.d.ts.map +1 -0
  178. package/dist/lib/error-handler.js +458 -0
  179. package/dist/lib/error-handler.js.map +1 -0
  180. package/dist/lib/errors.d.ts +61 -0
  181. package/dist/lib/errors.d.ts.map +1 -0
  182. package/dist/lib/errors.js +168 -0
  183. package/dist/lib/errors.js.map +1 -0
  184. package/dist/lib/formatters.d.ts +55 -0
  185. package/dist/lib/formatters.d.ts.map +1 -0
  186. package/dist/lib/formatters.js +163 -0
  187. package/dist/lib/formatters.js.map +1 -0
  188. package/dist/lib/graph-client.d.ts +74 -0
  189. package/dist/lib/graph-client.d.ts.map +1 -0
  190. package/dist/lib/graph-client.js +231 -0
  191. package/dist/lib/graph-client.js.map +1 -0
  192. package/dist/lib/input.d.ts +22 -0
  193. package/dist/lib/input.d.ts.map +1 -0
  194. package/dist/lib/input.js +120 -0
  195. package/dist/lib/input.js.map +1 -0
  196. package/dist/lib/interactive-wizard.d.ts +26 -0
  197. package/dist/lib/interactive-wizard.d.ts.map +1 -0
  198. package/dist/lib/interactive-wizard.js +550 -0
  199. package/dist/lib/interactive-wizard.js.map +1 -0
  200. package/dist/lib/oss-surface.d.ts +21 -0
  201. package/dist/lib/oss-surface.d.ts.map +1 -0
  202. package/dist/lib/oss-surface.js +29 -0
  203. package/dist/lib/oss-surface.js.map +1 -0
  204. package/dist/lib/output.d.ts +74 -0
  205. package/dist/lib/output.d.ts.map +1 -0
  206. package/dist/lib/output.js +156 -0
  207. package/dist/lib/output.js.map +1 -0
  208. package/dist/lib/picker.d.ts +75 -0
  209. package/dist/lib/picker.d.ts.map +1 -0
  210. package/dist/lib/picker.js +115 -0
  211. package/dist/lib/picker.js.map +1 -0
  212. package/dist/lib/repl.d.ts +19 -0
  213. package/dist/lib/repl.d.ts.map +1 -0
  214. package/dist/lib/repl.js +158 -0
  215. package/dist/lib/repl.js.map +1 -0
  216. package/dist/lib/spinner.d.ts +41 -0
  217. package/dist/lib/spinner.d.ts.map +1 -0
  218. package/dist/lib/spinner.js +126 -0
  219. package/dist/lib/spinner.js.map +1 -0
  220. package/dist/lib/telemetry.d.ts +96 -0
  221. package/dist/lib/telemetry.d.ts.map +1 -0
  222. package/dist/lib/telemetry.js +367 -0
  223. package/dist/lib/telemetry.js.map +1 -0
  224. package/package.json +68 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ import { listCommand } from "./list.js";
18
+ import { showCommand } from "./show.js";
19
+ import { undoCommand } from "./undo.js";
20
+ /**
21
+ * Deployments command - manage and view deployments
22
+ *
23
+ * Follows the resource-action pattern: `pax8-cta deployments <action>`
24
+ */
25
+ export const deploymentsCommand = new Command("deployments")
26
+ .description("View deployment history")
27
+ .addHelpText("after", `
28
+ Examples:
29
+ deployments list List recent deployments
30
+ deployments show dep_abc123 View deployment details
31
+ deployments list -s failed --since 7d Show failed deployments from last 7 days
32
+ deployments undo dep_abc123 Roll back a deployment (asks for confirmation)
33
+ deployments undo dep_abc123 --dry-run Preview what an undo would change
34
+ deployments undo dep_abc123 -y --json Skip prompt, machine-readable output
35
+
36
+ Note:
37
+ Queue management actions (cancel, retry, watch) are not available in the open-source CLI.
38
+ Real-mode undo is wired through @pax8-cta/core's RollbackService; it requires
39
+ pre-deploy snapshots to exist (Phase 2 of #418). Demo mode supports undo end-to-end.
40
+ `);
41
+ // Register subcommands
42
+ deploymentsCommand.addCommand(listCommand);
43
+ deploymentsCommand.addCommand(showCommand);
44
+ deploymentsCommand.addCommand(undoCommand);
45
+ // Re-export helpers for backwards compatibility
46
+ export { getDeployments, getDeploymentById, filterDeployments, outputDeploymentDetails, } from "./helpers.js";
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/deployments/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,aAAa,CAAC;KACzD,WAAW,CAAC,yBAAyB,CAAC;KACtC,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;CAaH,CACE,CAAC;AAEJ,uBAAuB;AACvB,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC3C,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAC3C,kBAAkB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAE3C,gDAAgD;AAChD,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ export declare const listCommand: Command;
18
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/deployments/list.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,eAAO,MAAM,WAAW,SAkFpB,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ import { createSpinner } from "../../lib/spinner.js";
18
+ import { withDemoMode } from "../../lib/command-wrapper.js";
19
+ import { getDeployments, filterDeployments, getDeploymentHistory, filterHistory, outputJson, outputTable, outputHistoryJson, outputHistoryTable, resolveDeploymentFormat, } from "./helpers.js";
20
+ import { handleCommandError } from "../../lib/errors.js";
21
+ import { output } from "../../lib/output.js";
22
+ export const listCommand = new Command("list")
23
+ .alias("ls")
24
+ .description("List solution import history across your environments")
25
+ .option("-s, --status <status>", "Filter by status (completed, failed, in_progress)")
26
+ .option("-t, --tenant <name>", "Filter by tenant name")
27
+ .option("-a, --agent <name>", "Filter by solution name")
28
+ .option("-l, --limit <n>", "Limit number of results", "20")
29
+ .option("-o, --offset <n>", "Skip first N results", "0")
30
+ .option("--since <date>", "Show history since date (ISO format or relative like '7d', '24h')")
31
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
32
+ .option("--json", "Output as JSON")
33
+ .option("--quiet", "Suppress all output")
34
+ .addHelpText("after", `
35
+ Examples:
36
+ deployments list Show recent import history
37
+ deployments list -t Pax8CTA-Test2 History for a specific tenant
38
+ deployments list -a TestDeploy History for a specific solution
39
+ deployments list --since 7d Imports in the last 7 days
40
+ deployments list --ids-only | xargs -I{} deployments show {}
41
+ `)
42
+ .action(async (options, cmd) => {
43
+ // Merge local options with global flags (e.g. --ids-only from root program)
44
+ const opts = { ...options, ...cmd.optsWithGlobals() };
45
+ const spinner = createSpinner("Loading deployment history...").start();
46
+ try {
47
+ await withDemoMode(async () => {
48
+ // Demo mode — use mock data
49
+ let deployments = await getDeployments(opts);
50
+ deployments = filterDeployments(deployments, opts);
51
+ // parseInt(undefined, 10) is NaN, and slice(NaN, NaN+limit) returns
52
+ // []. The Commander option defaults ("20"/"0") cover normal CLI
53
+ // invocations, but REPL state-resets and programmatic callers can
54
+ // leave these undefined — fall back to safe numbers.
55
+ const limit = Number.parseInt(opts.limit, 10) || 20;
56
+ const offset = Number.parseInt(opts.offset, 10) || 0;
57
+ const total = deployments.length;
58
+ deployments = deployments.slice(offset, offset + limit);
59
+ spinner.stop();
60
+ const fmt = resolveDeploymentFormat(opts);
61
+ if (fmt === "ids-only") {
62
+ // id is the deployment job ID — useful for `deployments show <id>` pipelines
63
+ output(deployments, { format: "ids-only", columns: [], idKey: "id" });
64
+ }
65
+ else if (fmt === "json") {
66
+ outputJson(deployments, total, limit, offset);
67
+ }
68
+ else if (fmt !== "quiet") {
69
+ outputTable(deployments, total, limit, offset);
70
+ }
71
+ }, async () => {
72
+ // Production mode — query Dataverse solution history
73
+ let entries = await getDeploymentHistory(opts);
74
+ entries = filterHistory(entries, opts);
75
+ const limit = Number.parseInt(opts.limit, 10) || 20;
76
+ const offset = Number.parseInt(opts.offset, 10) || 0;
77
+ const total = entries.length;
78
+ entries = entries.slice(offset, offset + limit);
79
+ spinner.stop();
80
+ const fmt = resolveDeploymentFormat(opts);
81
+ if (fmt === "ids-only") {
82
+ // id is the msdyn_solutionhistoryid — useful for querying specific history records
83
+ output(entries, { format: "ids-only", columns: [], idKey: "id" });
84
+ }
85
+ else if (fmt === "json") {
86
+ outputHistoryJson(entries, total, limit, offset);
87
+ }
88
+ else if (fmt !== "quiet") {
89
+ outputHistoryTable(entries, total, limit, offset);
90
+ }
91
+ });
92
+ }
93
+ catch (error) {
94
+ handleCommandError(error, spinner, "Failed to load deployment history");
95
+ }
96
+ });
97
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/deployments/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ export declare const showCommand: Command;
18
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/deployments/show.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAcpC,eAAO,MAAM,WAAW,SAmEpB,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ import chalk from "chalk";
18
+ import { createSpinner } from "../../lib/spinner.js";
19
+ import { demoDeploymentStore } from "@pax8-cta/core";
20
+ import { withDemoMode } from "../../lib/command-wrapper.js";
21
+ import { getDeploymentById, getDeploymentHistoryById, outputDeploymentDetails, outputHistoryDetails, resolveDeploymentFormat, } from "./helpers.js";
22
+ import { handleCommandError } from "../../lib/errors.js";
23
+ export const showCommand = new Command("show")
24
+ .argument("<id>", "Deployment or history entry ID")
25
+ .description("Show details of a specific deployment")
26
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
27
+ .option("--json", "Output as JSON")
28
+ .option("--quiet", "Suppress all output")
29
+ .addHelpText("after", `
30
+ Examples:
31
+ deployments show abc-123 Show details for a deployment
32
+ deployments show abc-123 --json Output as JSON
33
+ `)
34
+ .action(async (id, options) => {
35
+ const spinner = createSpinner("Loading deployment...").start();
36
+ try {
37
+ await withDemoMode(async () => {
38
+ const deployment = await getDeploymentById(id);
39
+ if (!deployment) {
40
+ spinner.fail(chalk.yellow(`Deployment '${id}' not found`));
41
+ console.log();
42
+ console.log(chalk.gray("Available demo deployments:"));
43
+ // Pull the first few from the in-process store so freshly-recorded
44
+ // demo deploys also appear in the "did you mean" suggestions.
45
+ const history = demoDeploymentStore.list().slice(0, 5);
46
+ history.forEach((d) => {
47
+ console.log(chalk.gray(` - ${chalk.cyan(d.id)} (${d.solutionName})`));
48
+ });
49
+ process.exit(1);
50
+ }
51
+ spinner.stop();
52
+ const fmt = resolveDeploymentFormat(options);
53
+ if (fmt === "json") {
54
+ console.log(JSON.stringify(deployment, null, 2));
55
+ }
56
+ else if (fmt !== "quiet") {
57
+ outputDeploymentDetails(deployment);
58
+ }
59
+ }, async () => {
60
+ // Production mode
61
+ const entry = await getDeploymentHistoryById(id, options);
62
+ if (!entry) {
63
+ spinner.fail(chalk.yellow(`History entry '${id}' not found`));
64
+ console.log(chalk.gray("\nUse 'deployments list' to see available entries."));
65
+ process.exit(1);
66
+ }
67
+ spinner.stop();
68
+ const fmt = resolveDeploymentFormat(options);
69
+ if (fmt === "json") {
70
+ console.log(JSON.stringify(entry, null, 2));
71
+ }
72
+ else if (fmt !== "quiet") {
73
+ outputHistoryDetails(entry);
74
+ }
75
+ });
76
+ }
77
+ catch (error) {
78
+ handleCommandError(error, spinner, "Failed to load deployment");
79
+ }
80
+ });
81
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/deployments/show.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ export declare const undoCommand: Command;
18
+ //# sourceMappingURL=undo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undo.d.ts","sourceRoot":"","sources":["../../../src/commands/deployments/undo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CpC,eAAO,MAAM,WAAW,SAwBpB,CAAC"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ import chalk from "chalk";
18
+ import { demoDeploymentStore, RollbackService } from "@pax8-cta/core";
19
+ import { createSpinner } from "../../lib/spinner.js";
20
+ import { withDemoMode, isDemo } from "../../lib/command-wrapper.js";
21
+ import { CliError, handleCommandError } from "../../lib/errors.js";
22
+ import { confirm, isInteractivePrompt } from "../../lib/picker.js";
23
+ import { getDeploymentById, resolveDeploymentFormat } from "./helpers.js";
24
+ export const undoCommand = new Command("undo")
25
+ .argument("<id>", "Deployment ID to roll back")
26
+ .description("Roll back a previous deployment to its prior solution version")
27
+ .option("-c, --config <path>", "Path to config file", "./config/tenants.yaml")
28
+ .option("--dry-run", "Show what would be undone without making changes")
29
+ .option("-y, --yes", "Skip confirmation prompt")
30
+ .option("--json", "Output as JSON")
31
+ .option("--quiet", "Suppress all output")
32
+ .addHelpText("after", `
33
+ Examples:
34
+ deployments undo dep-demo-123 Undo a deployment after confirming
35
+ deployments undo dep-demo-123 --dry-run Preview without making changes
36
+ deployments undo dep-demo-123 -y --json Skip prompt, JSON output
37
+ `)
38
+ .action(async (id, options, cmd) => {
39
+ const opts = { ...options, ...cmd.optsWithGlobals() };
40
+ await withDemoMode(() => demoUndo(id, opts), () => realUndo(id, opts)).catch((error) => handleCommandError(error, undefined, "Undo failed"));
41
+ });
42
+ /**
43
+ * Build a "did you mean..." suggestion from the most recent demo deployments.
44
+ * Helpful when the user typo-fingered the ID; quiet otherwise.
45
+ */
46
+ function buildDidYouMeanHint() {
47
+ if (!isDemo()) {
48
+ // Real-mode hint is intentionally minimal — we don't have a cheap way to
49
+ // list recent deployments without GDAP credentials. Point at `list`.
50
+ return "Run 'pax8-cta deployments list' to see available deployments.";
51
+ }
52
+ const recent = demoDeploymentStore
53
+ .list()
54
+ .filter((d) => !d.rollbackFromDeploymentId) // skip prior undo entries
55
+ .slice(0, 5);
56
+ if (recent.length === 0) {
57
+ return "Run 'pax8-cta deployments list' to see available deployments.";
58
+ }
59
+ const lines = recent.map((d) => ` - ${d.id} (${d.solutionName})`);
60
+ return (`Did you mean one of these?\n${lines.join("\n")}\n\n` +
61
+ `Run 'pax8-cta deployments list' to see all available deployments.`);
62
+ }
63
+ /**
64
+ * Decide the overall envelope status from per-tenant results.
65
+ */
66
+ function aggregateStatus(results) {
67
+ const allOk = results.every((r) => r.status === "rolled-back");
68
+ if (allOk)
69
+ return "rolled-back";
70
+ const allFailed = results.every((r) => r.status !== "rolled-back");
71
+ if (allFailed)
72
+ return "failed";
73
+ return "partial";
74
+ }
75
+ /**
76
+ * Map the demo-mode in-memory undo back to the public JSON envelope.
77
+ */
78
+ function envelopeFor(deploymentId, results) {
79
+ return {
80
+ deploymentId,
81
+ status: aggregateStatus(results),
82
+ tenants: results.map((r) => ({
83
+ tenantName: r.tenantName,
84
+ status: r.status,
85
+ ...(r.error ? { error: r.error } : {}),
86
+ })),
87
+ };
88
+ }
89
+ async function demoUndo(id, options) {
90
+ const original = await getDeploymentById(id);
91
+ if (!original) {
92
+ throw new CliError(`Deployment '${id}' not found.\n${buildDidYouMeanHint()}`);
93
+ }
94
+ // Reject undo of an undo: the second-level rollback is meaningless and
95
+ // confusing to surface in the audit trail.
96
+ if (original.rollbackFromDeploymentId) {
97
+ throw new CliError(`Deployment '${id}' is itself an undo (of ${original.rollbackFromDeploymentId}). ` +
98
+ `It cannot be rolled back again.`);
99
+ }
100
+ // Honor the explicit `canRollback: false` flag set on demo records.
101
+ // This is the cleanest way to surface "this deployment cannot be undone"
102
+ // (e.g. failed deploys with no successful tenants, very old records).
103
+ if (original.canRollback === false) {
104
+ throw new CliError(`Deployment '${id}' is not eligible for rollback ` +
105
+ `(canRollback: false). This is typically because the deploy already ` +
106
+ `failed, was already rolled back, or is too old for a snapshot to ` +
107
+ `exist. Run 'pax8-cta deployments show ${id}' for details.`);
108
+ }
109
+ const succeededTenants = original.tenantResults.filter((r) => r.status === "completed");
110
+ if (succeededTenants.length === 0) {
111
+ throw new CliError(`Deployment '${id}' has no successfully-deployed tenants to roll back. ` +
112
+ `Run 'pax8-cta deployments show ${id}' to inspect per-tenant status.`);
113
+ }
114
+ const fmt = resolveDeploymentFormat(options);
115
+ const verbose = fmt !== "json" && fmt !== "quiet";
116
+ if (verbose) {
117
+ console.log();
118
+ console.log(chalk.bold("Rollback Preview"));
119
+ console.log(` Original deployment: ${chalk.cyan(original.id)}`);
120
+ console.log(` Solution: ${original.solutionName} ${chalk.gray(`(v${original.solutionVersion ?? "?"})`)}`);
121
+ console.log(` Tenants to undo: ${succeededTenants.length} of ${original.tenantResults.length}`);
122
+ console.log();
123
+ succeededTenants.forEach((t) => {
124
+ console.log(` ${chalk.gray("•")} ${t.tenantName}`);
125
+ });
126
+ console.log();
127
+ }
128
+ // Dry-run path: emit a preview-shaped envelope (or human text) and bail
129
+ // before mutating the store.
130
+ if (options.dryRun) {
131
+ const previewResults = succeededTenants.map((t) => ({
132
+ tenantId: t.tenantId,
133
+ tenantName: t.tenantName,
134
+ status: "rolled-back",
135
+ }));
136
+ if (fmt === "json") {
137
+ const envelope = {
138
+ ...envelopeFor(original.id, previewResults),
139
+ dryRun: true,
140
+ };
141
+ console.log(JSON.stringify(envelope, null, 2));
142
+ return;
143
+ }
144
+ if (verbose) {
145
+ console.log(chalk.gray("(dry run — no changes were made)"));
146
+ }
147
+ return;
148
+ }
149
+ // Confirmation gate: only when stdin/stdout are both real TTYs and the
150
+ // caller didn't pass `-y`. Pipelined / scripted invocations skip this.
151
+ if (!options.yes && isInteractivePrompt(options)) {
152
+ const proceed = await confirm(chalk.bold(`Roll back deployment ${original.id} (${original.solutionName} v${original.solutionVersion ?? "?"}) on ${succeededTenants.length} tenant${succeededTenants.length === 1 ? "" : "s"}? [y/N] `));
153
+ if (!proceed) {
154
+ if (verbose) {
155
+ console.log(chalk.gray("Cancelled."));
156
+ }
157
+ return;
158
+ }
159
+ }
160
+ // Per-tenant simulated rollback. Spins for visual fidelity in TTY mode;
161
+ // silent and synchronous-feeling in --json/--quiet.
162
+ const undoStartedAt = new Date();
163
+ const undoResults = [];
164
+ const tenantJobResults = [];
165
+ for (const tenant of succeededTenants) {
166
+ const sp = verbose ? createSpinner(`Rolling back ${tenant.tenantName}...`).start() : null;
167
+ await new Promise((r) => setTimeout(r, 250));
168
+ sp?.succeed(chalk.green(`${tenant.tenantName}: restored prior version`));
169
+ undoResults.push({
170
+ tenantId: tenant.tenantId,
171
+ tenantName: tenant.tenantName,
172
+ status: "rolled-back",
173
+ });
174
+ tenantJobResults.push({
175
+ tenantId: tenant.tenantId,
176
+ tenantName: tenant.tenantName,
177
+ status: "completed",
178
+ startedAt: new Date(undoStartedAt.getTime() + tenantJobResults.length * 100).toISOString(),
179
+ completedAt: new Date(undoStartedAt.getTime() + (tenantJobResults.length + 1) * 350).toISOString(),
180
+ attemptNumber: 1,
181
+ previousVersion: original.solutionVersion,
182
+ });
183
+ }
184
+ const undoCompletedAt = new Date(undoStartedAt.getTime() + undoResults.length * 400);
185
+ const undoJob = {
186
+ id: `dep-demo-undo-${Date.now().toString(36)}`,
187
+ solutionPath: original.solutionPath,
188
+ solutionName: original.solutionName,
189
+ solutionVersion: original.solutionVersion,
190
+ status: "completed",
191
+ createdAt: undoStartedAt.toISOString(),
192
+ updatedAt: undoCompletedAt.toISOString(),
193
+ startedAt: undoStartedAt.toISOString(),
194
+ completedAt: undoCompletedAt.toISOString(),
195
+ tenantResults: tenantJobResults,
196
+ totalTenants: tenantJobResults.length,
197
+ completedTenants: tenantJobResults.length,
198
+ failedTenants: 0,
199
+ triggeredBy: "cli",
200
+ durationMs: tenantJobResults.length * 400,
201
+ rollbackFromDeploymentId: original.id,
202
+ canRollback: false,
203
+ };
204
+ demoDeploymentStore.record(undoJob);
205
+ // Mark the original as no-longer-rollback-able so a second `undo` on the
206
+ // same id surfaces a sensible error rather than silently re-rolling.
207
+ demoDeploymentStore.record({ ...original, canRollback: false });
208
+ if (fmt === "json") {
209
+ console.log(JSON.stringify(envelopeFor(original.id, undoResults), null, 2));
210
+ return;
211
+ }
212
+ if (verbose) {
213
+ console.log();
214
+ console.log(chalk.green.bold("Rollback complete"));
215
+ console.log(` Undo deployment: ${chalk.cyan(undoJob.id)}`);
216
+ console.log(` Tenants undone: ${undoResults.length}`);
217
+ console.log();
218
+ console.log(chalk.gray(`Run 'deployments show ${undoJob.id}' for details.`));
219
+ }
220
+ }
221
+ /**
222
+ * Real-mode undo path.
223
+ *
224
+ * Today this is wired to `RollbackService` from `@pax8-cta/core` but the
225
+ * snapshots that `RollbackService.rollback()` consumes are not yet created
226
+ * by `pax8-cta deploy` (Phase 2 of #418). So the practical end-state for
227
+ * any current real-mode caller is "no snapshots → CliError with recovery
228
+ * hint." We still instantiate the service and probe for snapshots so that
229
+ * once Phase 2 lands, this path becomes complete without further wiring.
230
+ */
231
+ async function realUndo(id, options) {
232
+ const fmt = resolveDeploymentFormat(options);
233
+ const verbose = fmt !== "json" && fmt !== "quiet";
234
+ const rollbackService = new RollbackService();
235
+ const snapshots = await rollbackService.listSnapshotsForDeployment(id);
236
+ if (snapshots.length === 0) {
237
+ throw new CliError(`No rollback snapshots found for deployment '${id}'.\n` +
238
+ `\n` +
239
+ `Snapshots are written when a deploy runs with rollback enabled in ` +
240
+ `your config (RollbackSettings.enabled). Wiring this into 'pax8-cta ` +
241
+ `deploy' is tracked as Phase 2 of #418 ` +
242
+ `(https://github.com/pax8labs/pax8-cta/issues/418).\n` +
243
+ `\n` +
244
+ `Workaround: uninstall the solution per tenant with ` +
245
+ `'pax8-cta solutions remove <name> -t <tenant>'.\n` +
246
+ `Demo: 'DEMO_MODE=true pax8-cta deployments undo ${id} -y' shows the ` +
247
+ `flow end-to-end.`);
248
+ }
249
+ if (verbose) {
250
+ console.log();
251
+ console.log(chalk.bold("Rollback Preview"));
252
+ console.log(` Original deployment: ${chalk.cyan(id)}`);
253
+ console.log(` Snapshots found: ${snapshots.length}`);
254
+ console.log();
255
+ snapshots.forEach((s) => {
256
+ console.log(` ${chalk.gray("•")} ${s.tenantName} ${chalk.gray(`(prev v${s.previousVersion})`)}`);
257
+ });
258
+ console.log();
259
+ }
260
+ if (options.dryRun) {
261
+ const previewResults = snapshots.map((s) => ({
262
+ tenantId: s.tenantId,
263
+ tenantName: s.tenantName,
264
+ status: "rolled-back",
265
+ }));
266
+ if (fmt === "json") {
267
+ console.log(JSON.stringify({ ...envelopeFor(id, previewResults), dryRun: true }, null, 2));
268
+ return;
269
+ }
270
+ if (verbose) {
271
+ console.log(chalk.gray("(dry run — no changes were made)"));
272
+ }
273
+ return;
274
+ }
275
+ if (!options.yes && isInteractivePrompt(options)) {
276
+ const proceed = await confirm(chalk.bold(`Roll back deployment ${id} on ${snapshots.length} tenant${snapshots.length === 1 ? "" : "s"}? [y/N] `));
277
+ if (!proceed) {
278
+ if (verbose) {
279
+ console.log(chalk.gray("Cancelled."));
280
+ }
281
+ return;
282
+ }
283
+ }
284
+ // Per-tenant rollback. We can't actually call `RollbackService.rollback()`
285
+ // without a `DataverseClient` per tenant, which requires a real
286
+ // TokenManager bootstrapped from a config + GDAP credentials. That wiring
287
+ // mirrors `deploy.ts` exactly; once Phase 2 lands a snapshot in deploy,
288
+ // the code below should pick that snapshot up via the per-tenant
289
+ // DataverseClient path. For now we surface a clean CliError.
290
+ throw new CliError(`Real-mode undo found ${snapshots.length} snapshot(s) for deployment '${id}', ` +
291
+ `but the per-tenant Dataverse rollback path is not yet wired into the ` +
292
+ `CLI (Phase 2 of #418). Use 'pax8-cta solutions remove <name> -t <tenant>' ` +
293
+ `per tenant as a workaround.`);
294
+ }
295
+ //# sourceMappingURL=undo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undo.js","sourceRoot":"","sources":["../../../src/commands/deployments/undo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Copyright 2024 Pax8, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { Command } from "commander";
17
+ export declare const exportCommand: Command;
18
+ //# sourceMappingURL=export.d.ts.map