@intentic/cli 1.32.2 → 1.38.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 (189) hide show
  1. package/dist/add-app/add-app.command.d.ts +3 -0
  2. package/dist/add-app/add-app.command.d.ts.map +1 -0
  3. package/dist/add-app/add-app.command.js +20 -0
  4. package/dist/add-app/add-app.command.js.map +1 -0
  5. package/dist/add-app/add-app.d.ts +4 -0
  6. package/dist/add-app/add-app.d.ts.map +1 -0
  7. package/dist/add-app/add-app.js +13 -0
  8. package/dist/add-app/add-app.js.map +1 -0
  9. package/dist/adopt/adopt.command.d.ts +3 -0
  10. package/dist/adopt/adopt.command.d.ts.map +1 -0
  11. package/dist/adopt/adopt.command.js +82 -0
  12. package/dist/adopt/adopt.command.js.map +1 -0
  13. package/dist/adopt/adopt.d.ts.map +1 -0
  14. package/dist/adopt/adopt.js.map +1 -0
  15. package/dist/app.d.ts +1 -2
  16. package/dist/app.d.ts.map +1 -1
  17. package/dist/app.js +26 -441
  18. package/dist/app.js.map +1 -1
  19. package/dist/apply/access.d.ts.map +1 -0
  20. package/dist/{access.js → apply/access.js} +7 -21
  21. package/dist/apply/access.js.map +1 -0
  22. package/dist/apply/apply-lock.d.ts.map +1 -0
  23. package/dist/apply/apply-lock.js.map +1 -0
  24. package/dist/apply/apply.command.d.ts +3 -0
  25. package/dist/apply/apply.command.d.ts.map +1 -0
  26. package/dist/apply/apply.command.js +142 -0
  27. package/dist/apply/apply.command.js.map +1 -0
  28. package/dist/apply/migrate.d.ts.map +1 -0
  29. package/dist/apply/migrate.js.map +1 -0
  30. package/dist/demo.js +14 -42
  31. package/dist/demo.js.map +1 -1
  32. package/dist/deployments/deployments.command.d.ts +3 -0
  33. package/dist/deployments/deployments.command.d.ts.map +1 -0
  34. package/dist/deployments/deployments.command.js +18 -0
  35. package/dist/deployments/deployments.command.js.map +1 -0
  36. package/dist/deployments/deployments.d.ts.map +1 -0
  37. package/dist/{deployments.js → deployments/deployments.js} +32 -32
  38. package/dist/deployments/deployments.js.map +1 -0
  39. package/dist/env.config.d.ts +23 -0
  40. package/dist/env.config.d.ts.map +1 -0
  41. package/dist/env.config.js +27 -0
  42. package/dist/env.config.js.map +1 -0
  43. package/dist/host-ssh-tunnel/host-ssh-tunnel.command.d.ts +3 -0
  44. package/dist/host-ssh-tunnel/host-ssh-tunnel.command.d.ts.map +1 -0
  45. package/dist/host-ssh-tunnel/host-ssh-tunnel.command.js +35 -0
  46. package/dist/host-ssh-tunnel/host-ssh-tunnel.command.js.map +1 -0
  47. package/dist/host-ssh-tunnel/host-ssh-tunnel.d.ts +13 -0
  48. package/dist/host-ssh-tunnel/host-ssh-tunnel.d.ts.map +1 -0
  49. package/dist/host-ssh-tunnel/host-ssh-tunnel.js +21 -0
  50. package/dist/host-ssh-tunnel/host-ssh-tunnel.js.map +1 -0
  51. package/dist/index.d.ts +3 -3
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +3 -3
  54. package/dist/index.js.map +1 -1
  55. package/dist/init/init.command.d.ts +3 -0
  56. package/dist/init/init.command.d.ts.map +1 -0
  57. package/dist/init/init.command.js +45 -0
  58. package/dist/init/init.command.js.map +1 -0
  59. package/dist/{init.d.ts → init/init.d.ts} +2 -2
  60. package/dist/init/init.d.ts.map +1 -0
  61. package/dist/init/init.js +39 -0
  62. package/dist/init/init.js.map +1 -0
  63. package/dist/init/scaffold-app.d.ts +2 -0
  64. package/dist/init/scaffold-app.d.ts.map +1 -0
  65. package/dist/init/scaffold-app.js +27 -0
  66. package/dist/init/scaffold-app.js.map +1 -0
  67. package/dist/lib/artifact.d.ts.map +1 -0
  68. package/dist/lib/artifact.js.map +1 -0
  69. package/dist/lib/cf-tunnel.d.ts +11 -0
  70. package/dist/lib/cf-tunnel.d.ts.map +1 -0
  71. package/dist/lib/cf-tunnel.js +30 -0
  72. package/dist/lib/cf-tunnel.js.map +1 -0
  73. package/dist/lib/known-hosts.d.ts.map +1 -0
  74. package/dist/lib/known-hosts.js.map +1 -0
  75. package/dist/{output.d.ts → lib/output.d.ts} +0 -1
  76. package/dist/lib/output.d.ts.map +1 -0
  77. package/dist/{output.js → lib/output.js} +0 -4
  78. package/dist/lib/output.js.map +1 -0
  79. package/dist/lib/templates.d.ts +2 -0
  80. package/dist/lib/templates.d.ts.map +1 -0
  81. package/dist/lib/templates.js +6 -0
  82. package/dist/lib/templates.js.map +1 -0
  83. package/dist/lib/version.d.ts +2 -0
  84. package/dist/lib/version.d.ts.map +1 -0
  85. package/dist/lib/version.js +3 -0
  86. package/dist/lib/version.js.map +1 -0
  87. package/dist/pipelines/adopt-pipelines.d.ts.map +1 -0
  88. package/dist/pipelines/adopt-pipelines.js +59 -0
  89. package/dist/pipelines/adopt-pipelines.js.map +1 -0
  90. package/dist/pipelines/control-plane-sync.d.ts.map +1 -0
  91. package/dist/{control-plane-sync.js → pipelines/control-plane-sync.js} +2 -2
  92. package/dist/pipelines/control-plane-sync.js.map +1 -0
  93. package/dist/plan/plan.command.d.ts +3 -0
  94. package/dist/plan/plan.command.d.ts.map +1 -0
  95. package/dist/plan/plan.command.js +32 -0
  96. package/dist/plan/plan.command.js.map +1 -0
  97. package/dist/resolve/resolve.command.d.ts +3 -0
  98. package/dist/resolve/resolve.command.d.ts.map +1 -0
  99. package/dist/resolve/resolve.command.js +75 -0
  100. package/dist/resolve/resolve.command.js.map +1 -0
  101. package/dist/resolve/resolve.d.ts.map +1 -0
  102. package/dist/{resolve.js → resolve/resolve.js} +1 -1
  103. package/dist/resolve/resolve.js.map +1 -0
  104. package/dist/restore/restore.command.d.ts +3 -0
  105. package/dist/restore/restore.command.d.ts.map +1 -0
  106. package/dist/restore/restore.command.js +67 -0
  107. package/dist/restore/restore.command.js.map +1 -0
  108. package/dist/sandbox-tunnel/sandbox-tunnel.command.d.ts +3 -0
  109. package/dist/sandbox-tunnel/sandbox-tunnel.command.d.ts.map +1 -0
  110. package/dist/sandbox-tunnel/sandbox-tunnel.command.js +48 -0
  111. package/dist/sandbox-tunnel/sandbox-tunnel.command.js.map +1 -0
  112. package/dist/sandbox-tunnel/sandbox-tunnel.d.ts.map +1 -0
  113. package/dist/sandbox-tunnel/sandbox-tunnel.js +27 -0
  114. package/dist/sandbox-tunnel/sandbox-tunnel.js.map +1 -0
  115. package/dist/secrets/generated-secrets.d.ts.map +1 -0
  116. package/dist/{generated-secrets.js → secrets/generated-secrets.js} +1 -1
  117. package/dist/secrets/generated-secrets.js.map +1 -0
  118. package/dist/{secret-store.d.ts → secrets/secret-store.d.ts} +3 -1
  119. package/dist/secrets/secret-store.d.ts.map +1 -0
  120. package/dist/{secret-store.js → secrets/secret-store.js} +15 -1
  121. package/dist/secrets/secret-store.js.map +1 -0
  122. package/dist/secrets/secrets.d.ts.map +1 -0
  123. package/dist/{secrets.js → secrets/secrets.js} +2 -6
  124. package/dist/secrets/secrets.js.map +1 -0
  125. package/package.json +14 -8
  126. package/templates/access.md.eta +21 -0
  127. package/templates/demo/Dockerfile.eta +5 -0
  128. package/templates/demo/deploy.config.ts.eta +23 -0
  129. package/templates/demo/env.eta +2 -0
  130. package/templates/env-example.eta +6 -0
  131. package/templates/scaffold/Dockerfile.eta +7 -0
  132. package/templates/scaffold/deploy.config.selfhost.ts.eta +18 -0
  133. package/templates/scaffold/deploy.config.ts.eta +22 -0
  134. package/templates/scaffold/server.js.eta +9 -0
  135. package/templates/workflows/apply.yaml.eta +28 -0
  136. package/templates/workflows/resolve.yaml.eta +26 -0
  137. package/dist/access.d.ts.map +0 -1
  138. package/dist/access.js.map +0 -1
  139. package/dist/adopt-pipelines.d.ts.map +0 -1
  140. package/dist/adopt-pipelines.js +0 -97
  141. package/dist/adopt-pipelines.js.map +0 -1
  142. package/dist/adopt.d.ts.map +0 -1
  143. package/dist/adopt.js.map +0 -1
  144. package/dist/apply-lock.d.ts.map +0 -1
  145. package/dist/apply-lock.js.map +0 -1
  146. package/dist/artifact.d.ts.map +0 -1
  147. package/dist/artifact.js.map +0 -1
  148. package/dist/control-plane-sync.d.ts.map +0 -1
  149. package/dist/control-plane-sync.js.map +0 -1
  150. package/dist/deployments.d.ts.map +0 -1
  151. package/dist/deployments.js.map +0 -1
  152. package/dist/generated-secrets.d.ts.map +0 -1
  153. package/dist/generated-secrets.js.map +0 -1
  154. package/dist/init.d.ts.map +0 -1
  155. package/dist/init.js +0 -122
  156. package/dist/init.js.map +0 -1
  157. package/dist/known-hosts.d.ts.map +0 -1
  158. package/dist/known-hosts.js.map +0 -1
  159. package/dist/migrate.d.ts.map +0 -1
  160. package/dist/migrate.js.map +0 -1
  161. package/dist/output.d.ts.map +0 -1
  162. package/dist/output.js.map +0 -1
  163. package/dist/resolve.d.ts.map +0 -1
  164. package/dist/resolve.js.map +0 -1
  165. package/dist/sandbox-tunnel.d.ts.map +0 -1
  166. package/dist/sandbox-tunnel.js +0 -56
  167. package/dist/sandbox-tunnel.js.map +0 -1
  168. package/dist/secret-store.d.ts.map +0 -1
  169. package/dist/secret-store.js.map +0 -1
  170. package/dist/secrets.d.ts.map +0 -1
  171. package/dist/secrets.js.map +0 -1
  172. /package/dist/{adopt.d.ts → adopt/adopt.d.ts} +0 -0
  173. /package/dist/{adopt.js → adopt/adopt.js} +0 -0
  174. /package/dist/{access.d.ts → apply/access.d.ts} +0 -0
  175. /package/dist/{apply-lock.d.ts → apply/apply-lock.d.ts} +0 -0
  176. /package/dist/{apply-lock.js → apply/apply-lock.js} +0 -0
  177. /package/dist/{migrate.d.ts → apply/migrate.d.ts} +0 -0
  178. /package/dist/{migrate.js → apply/migrate.js} +0 -0
  179. /package/dist/{deployments.d.ts → deployments/deployments.d.ts} +0 -0
  180. /package/dist/{artifact.d.ts → lib/artifact.d.ts} +0 -0
  181. /package/dist/{artifact.js → lib/artifact.js} +0 -0
  182. /package/dist/{known-hosts.d.ts → lib/known-hosts.d.ts} +0 -0
  183. /package/dist/{known-hosts.js → lib/known-hosts.js} +0 -0
  184. /package/dist/{adopt-pipelines.d.ts → pipelines/adopt-pipelines.d.ts} +0 -0
  185. /package/dist/{control-plane-sync.d.ts → pipelines/control-plane-sync.d.ts} +0 -0
  186. /package/dist/{resolve.d.ts → resolve/resolve.d.ts} +0 -0
  187. /package/dist/{sandbox-tunnel.d.ts → sandbox-tunnel/sandbox-tunnel.d.ts} +0 -0
  188. /package/dist/{generated-secrets.d.ts → secrets/generated-secrets.d.ts} +0 -0
  189. /package/dist/{secrets.d.ts → secrets/secrets.d.ts} +0 -0
package/dist/app.js CHANGED
@@ -1,450 +1,35 @@
1
- import { existsSync } from "node:fs";
2
- import { readFile, writeFile } from "node:fs/promises";
3
- import { createRequire } from "node:module";
4
- import { tmpdir } from "node:os";
5
- import { dirname, join } from "node:path";
6
- import { applyMoves, createStore, plan, prune, reconcile, resolveInputs, rewriteGraphForMoves } from "@intentic/engine";
7
- import { createProviders, createSshExecutor, createSshProbe, forgejoApi, hostTarget, restoreBackup, } from "@intentic/providers";
8
- import { resolveState } from "@intentic/state-resolver";
9
- import { buildApplication, buildCommand, buildRouteMap, numberParser, text_en } from "@stricli/core";
10
- import { collectAccess, formatAccessSummary, writeAccessFile } from "./access.js";
11
- import { adoptRepos } from "./adopt.js";
12
- import { GIT_TOKEN_ENV, GIT_TOKEN_SECRET, GIT_USER_SECRET, setRepoSecrets, writeControlPlaneWorkflows, } from "./adopt-pipelines.js";
13
- import { acquireApplyLock } from "./apply-lock.js";
14
- import { ACCESS_FILE, ARTIFACT_FILE, ARTIFACT_PATH, CONFIG_FILE, CONFIG_PATH, ENV_FILE, INTENT_DIR, LAST_APPLIED_FILE, loadEnvFile, readArtifact, STATUS_FILE, TARGET_DIR, writeArtifact, writeStatus, } from "./artifact.js";
15
- import { forgejoIdentity, syncControlPlaneSecrets } from "./control-plane-sync.js";
16
- import { collectDeployments } from "./deployments.js";
17
- import { ensureGeneratedSecrets, readGeneratedSecrets } from "./generated-secrets.js";
18
- import { scaffold } from "./init.js";
19
- import { createKnownHostsStore } from "./known-hosts.js";
20
- import { detectHostMoves, migrateHosts } from "./migrate.js";
21
- import { createOutput, outputMode } from "./output.js";
22
- import { discoverZone, loadIntent } from "./resolve.js";
23
- import { createSandboxTunnel } from "./sandbox-tunnel.js";
24
- import { createHostSecretStore, createLayeredSecretStore, createLocalSecretStore } from "./secret-store.js";
25
- import { collectSecrets, writeEnvExample } from "./secrets.js";
26
- const { version } = createRequire(import.meta.url)("../package.json");
27
- const DEFAULT_MAX_ITERATIONS = 5;
28
- const generatedSecretStore = (graph, dir, ssh, backfill, log) => {
29
- const local = createLocalSecretStore(dir);
30
- const forgejo = Object.values(graph.resources).find((node) => node.type === "forgejo");
31
- const serverRef = forgejo?.inputs["server"];
32
- const hostId = typeof serverRef === "object" && serverRef !== null && "$ref" in serverRef ? serverRef.$ref : undefined;
33
- const hostNode = hostId !== undefined ? graph.resources[hostId] : undefined;
34
- if (hostNode === undefined) {
35
- return local;
36
- }
37
- const target = hostTarget(resolveInputs(hostNode.inputs, createStore(), process.env, { lenient: false }));
38
- return createLayeredSecretStore([createHostSecretStore(target, ssh), local], { backfill, log });
39
- };
40
- const init = buildCommand({
41
- docs: { brief: "Scaffold local intent, desired-state, and app git repos" },
42
- parameters: {
43
- flags: {
44
- dir: { kind: "parsed", parse: String, optional: true, brief: "Directory to scaffold in (default: .)" },
45
- link: { kind: "boolean", brief: "Link @intentic/* to this monorepo's _libs for local development against unpublished packages" },
46
- app: { kind: "parsed", parse: String, optional: true, brief: "Clone this git URL as the app repo instead of scaffolding a starter app" },
47
- selfHost: { kind: "boolean", brief: "Scaffold the example app onto the auto-registered `self` deploy target (this machine) instead of a placeholder remote host" },
48
- zone: { kind: "parsed", parse: String, optional: true, brief: "Cloudflare zone for the scaffolded app's domain (app.<zone>); used with --self-host" },
49
- },
50
- },
51
- async func(flags) {
52
- const out = createOutput(this.process.stdout, outputMode(process.env));
53
- const { intentDir, targetDir, appDir } = await scaffold(flags.dir ?? ".", version, flags.link, flags.app, flags.selfHost, flags.zone);
54
- out.text(`initialized ${intentDir} (with ${CONFIG_FILE}), ${targetDir}, and ${appDir}`);
55
- out.result({ intentDir, targetDir, appDir });
56
- },
57
- });
58
- const resolveCommand = buildCommand({
59
- docs: { brief: "Resolve a deploy.config.ts into the desired-state artifact" },
60
- parameters: {
61
- flags: {
62
- config: { kind: "parsed", parse: String, optional: true, brief: `Path to the intent config (default: ${CONFIG_PATH})` },
63
- out: { kind: "parsed", parse: String, optional: true, brief: `Path to write the artifact (default: ${ARTIFACT_PATH})` },
64
- syncControlPlane: {
65
- kind: "boolean",
66
- brief: "Push newly-required generated secrets into Forgejo and regenerate apply.yaml (run by the resolve pipeline post-adopt; needs GIT_TOKEN)",
67
- },
68
- },
69
- },
70
- async func(flags) {
71
- const out = createOutput(this.process.stdout, outputMode(process.env));
72
- const intent = await loadIntent(flags.config ?? CONFIG_PATH);
73
- const artifactOut = flags.out ?? ARTIFACT_PATH;
74
- const dir = dirname(artifactOut);
75
- const previousGraph = flags.syncControlPlane && existsSync(artifactOut) ? await readArtifact(artifactOut) : undefined;
76
- const zone = await discoverZone(intent, dir);
77
- const graph = resolveState(intent, zone);
78
- await writeArtifact(artifactOut, graph);
79
- const count = Object.keys(graph.resources).length;
80
- out.text(`resolved desired state (${count} resources) → ${artifactOut}`);
81
- if (zone !== undefined) {
82
- out.text(`discovered Cloudflare zone "${zone}" from the API token`);
83
- }
84
- const { env: envKeys, generated } = collectSecrets(graph);
85
- if (envKeys.length > 0) {
86
- await writeEnvExample(join(dir, `${ENV_FILE}.example`), envKeys);
87
- out.text(`set these in ${ENV_FILE} before apply (see ${ENV_FILE}.example): ${envKeys.join(", ")}`);
88
- }
89
- if (generated.length > 0) {
90
- await ensureGeneratedSecrets(createLocalSecretStore(dir), generated, process.env);
91
- out.text(`generated these (stored in .secrets.json): ${generated.join(", ")}`);
92
- }
93
- let synced;
94
- if (flags.syncControlPlane) {
95
- const password = process.env[GIT_TOKEN_ENV];
96
- if (password === undefined || password === "") {
97
- throw new Error(`set ${GIT_TOKEN_ENV} (the Forgejo admin password) to use --sync-control-plane`);
98
- }
99
- synced = await syncControlPlaneSecrets({
100
- previousGraph,
101
- newGraph: graph,
102
- env: process.env,
103
- dir,
104
- password,
105
- cliVersion: version,
106
- log: out.log,
107
- });
108
- }
109
- out.result({
110
- resources: count,
111
- ...(zone !== undefined ? { zone } : {}),
112
- envSecrets: envKeys,
113
- generatedSecrets: generated,
114
- ...(synced !== undefined ? { synced } : {}),
115
- });
116
- },
117
- });
118
- const planCommand = buildCommand({
119
- docs: { brief: "Show what applying the artifact would create/update (read-only)" },
120
- parameters: {
121
- flags: { artifact: { kind: "parsed", parse: String, optional: true, brief: `Path to the artifact (default: ${ARTIFACT_PATH})` } },
122
- },
123
- async func(flags) {
124
- const out = createOutput(this.process.stdout, outputMode(process.env));
125
- const artifact = flags.artifact ?? ARTIFACT_PATH;
126
- const dir = dirname(artifact);
127
- loadEnvFile(dir);
128
- const graph = await readArtifact(artifact);
129
- const ssh = createSshExecutor(createKnownHostsStore(dir));
130
- await ensureGeneratedSecrets(generatedSecretStore(graph, dir, ssh, false, out.log), collectSecrets(graph).generated, process.env);
131
- const outcome = await plan(graph, { providers: createProviders({ ssh }), log: out.log, onEvent: out.onEvent });
132
- for (const step of outcome.steps) {
133
- out.text(`${step.action}\t${step.type}\t${step.id}${step.reason !== undefined ? `\t(${step.reason})` : ""}`);
134
- }
135
- out.result({ steps: outcome.steps, orphans: outcome.orphans });
136
- },
137
- });
138
- const apply = buildCommand({
139
- docs: { brief: "Execute the desired-state artifact until state reads true" },
140
- parameters: {
141
- flags: {
142
- artifact: { kind: "parsed", parse: String, optional: true, brief: `Path to the artifact (default: ${ARTIFACT_PATH})` },
143
- maxIterations: {
144
- kind: "parsed",
145
- parse: numberParser,
146
- optional: true,
147
- brief: `Max reconcile iterations (default ${DEFAULT_MAX_ITERATIONS})`,
148
- },
149
- previous: {
150
- kind: "parsed",
151
- parse: String,
152
- optional: true,
153
- brief: "Path to the last successfully-applied artifact; resources absent from the new one are pruned after convergence",
154
- },
155
- },
156
- },
157
- async func(flags) {
158
- const out = createOutput(this.process.stdout, outputMode(process.env));
159
- const artifact = flags.artifact ?? ARTIFACT_PATH;
160
- const dir = dirname(artifact);
161
- loadEnvFile(dir);
162
- const graph = await readArtifact(artifact);
163
- const ssh = createSshExecutor(createKnownHostsStore(dir));
164
- const previousPath = flags.previous ?? join(dir, LAST_APPLIED_FILE);
165
- const previous = existsSync(previousPath) ? await readArtifact(previousPath) : undefined;
166
- const hostMoves = previous !== undefined ? detectHostMoves(previous, graph) : [];
167
- const targets = Object.values(graph.resources)
168
- .filter((node) => node.type === "host")
169
- .map((node) => hostTarget(resolveInputs(node.inputs, createStore(), process.env, { lenient: false })));
170
- const probes = targets.map((target) => createSshProbe(target, ssh));
171
- const probe = probes.length === 0
172
- ? undefined
173
- : async (url, status) => {
174
- for (const p of probes) {
175
- if (await p(url, status)) {
176
- return true;
177
- }
178
- }
179
- return false;
180
- };
181
- const oldMoveTargets = hostMoves.map((move) => hostTarget(resolveInputs(move.oldNode.inputs, createStore(), process.env, { lenient: false })));
182
- const lock = await acquireApplyLock(ssh, [...targets, ...oldMoveTargets], { log: out.log });
183
- const onSignal = () => {
184
- void lock.release().finally(() => process.exit(130));
185
- };
186
- process.once("SIGINT", onSignal);
187
- process.once("SIGTERM", onSignal);
188
- try {
189
- await ensureGeneratedSecrets(generatedSecretStore(graph, dir, ssh, true, out.log), collectSecrets(graph).generated, process.env);
190
- if (hostMoves.length > 0) {
191
- await migrateHosts(hostMoves, { next: graph, ssh, env: process.env, tmpDir: tmpdir(), log: out.log });
192
- }
193
- const movedApplied = await applyMoves(graph, {
194
- providers: createProviders({ ssh }),
195
- log: out.log,
196
- onEvent: out.onEvent,
197
- env: process.env,
198
- });
199
- const result = await reconcile(graph, { providers: createProviders({ ssh }), log: out.log, onEvent: out.onEvent, ...(probe !== undefined ? { probe } : {}) }, { maxIterations: flags.maxIterations ?? DEFAULT_MAX_ITERATIONS });
200
- await writeStatus(join(dir, STATUS_FILE), {
201
- converged: result.converged,
202
- iterations: result.iterations,
203
- steps: result.outcome.steps,
204
- });
205
- let pruned = { deleted: [], skipped: [] };
206
- if (previous !== undefined) {
207
- await lock.renew();
208
- await lock.verify();
209
- const baseline = rewriteGraphForMoves(previous, movedApplied);
210
- pruned = await prune(baseline, graph, { providers: createProviders({ ssh }), log: out.log, onEvent: out.onEvent, env: process.env });
211
- if (pruned.deleted.length > 0 || pruned.skipped.length > 0) {
212
- out.text(`pruned ${pruned.deleted.length} resource(s)${pruned.skipped.length > 0 ? `, ${pruned.skipped.length} left in place` : ""}`);
213
- }
214
- }
215
- await writeFile(join(dir, LAST_APPLIED_FILE), await readFile(artifact, "utf8"));
216
- const access = collectAccess(graph, result.outcome.outputs, process.env);
217
- out.text(`${result.converged ? "converged" : "did not converge"} in ${result.iterations} iteration(s)`);
218
- if (access.length > 0) {
219
- await writeAccessFile(join(dir, ACCESS_FILE), access);
220
- out.text(formatAccessSummary(access));
221
- }
222
- out.result({
223
- converged: result.converged,
224
- iterations: result.iterations,
225
- steps: result.outcome.steps,
226
- outputs: result.outcome.outputs,
227
- orphans: result.outcome.orphans,
228
- pruned,
229
- access,
230
- });
231
- const reconcileWebhook = result.outcome.outputs["discord"]?.["reconcileWebhook"];
232
- if (typeof reconcileWebhook === "string" && reconcileWebhook !== "") {
233
- const creates = result.outcome.steps.filter((s) => s.action === "create").length;
234
- const updates = result.outcome.steps.filter((s) => s.action === "update").length;
235
- const noops = result.outcome.steps.filter((s) => s.action === "noop").length;
236
- const summary = [
237
- `**intentic apply** — ${result.converged ? "✅ converged" : "⚠️ did not converge"} in ${result.iterations} iteration(s)`,
238
- `📊 ${result.outcome.steps.length} resources: ${creates} created, ${updates} updated, ${noops} unchanged`,
239
- ...(result.outcome.orphans.length > 0 ? [`🗑️ ${result.outcome.orphans.length} orphan(s) detected`] : []),
240
- ].join("\n");
241
- try {
242
- await fetch(reconcileWebhook, {
243
- method: "POST",
244
- headers: { "Content-Type": "application/json" },
245
- body: JSON.stringify({ content: summary }),
246
- });
247
- }
248
- catch {
249
- out.log("discord: failed to post reconcile summary (non-fatal)");
250
- }
251
- }
252
- }
253
- finally {
254
- process.removeListener("SIGINT", onSignal);
255
- process.removeListener("SIGTERM", onSignal);
256
- await lock.release();
257
- }
258
- },
259
- });
260
- const adopt = buildCommand({
261
- docs: { brief: "Push the local intent and desired-state repos to the provisioned Forgejo" },
262
- parameters: {
263
- flags: { artifact: { kind: "parsed", parse: String, optional: true, brief: `Path to the artifact (default: ${ARTIFACT_PATH})` } },
264
- },
265
- async func(flags) {
266
- const out = createOutput(this.process.stdout, outputMode(process.env));
267
- const artifact = flags.artifact ?? ARTIFACT_PATH;
268
- const targetDir = dirname(artifact);
269
- const intentDir = join(dirname(targetDir), INTENT_DIR);
270
- loadEnvFile(targetDir);
271
- const graph = await readArtifact(artifact);
272
- const { domain, user, adminPasswordRef: ref } = forgejoIdentity(graph);
273
- const generatedValues = await readGeneratedSecrets(targetDir);
274
- const password = ref.source === "generated" ? generatedValues[ref.key] : process.env[ref.key];
275
- if (password === undefined || password === "") {
276
- throw new Error(`forgejo admin password (${ref.source} secret ${ref.key}) is not available`);
277
- }
278
- const { env: envKeys, generated: generatedKeys } = collectSecrets(graph);
279
- const desiredStateSecrets = {};
280
- for (const key of envKeys) {
281
- const value = process.env[key];
282
- if (value !== undefined && value !== "") {
283
- desiredStateSecrets[key] = value;
284
- }
285
- }
286
- for (const key of generatedKeys) {
287
- const value = generatedValues[key];
288
- if (value !== undefined) {
289
- desiredStateSecrets[key] = value;
290
- }
291
- }
292
- const inputs = {
293
- cliVersion: version,
294
- user,
295
- domain,
296
- configFile: CONFIG_FILE,
297
- artifactFile: ARTIFACT_FILE,
298
- intentRepo: INTENT_DIR,
299
- desiredStateRepo: TARGET_DIR,
300
- applySecretKeys: Object.keys(desiredStateSecrets).sort(),
301
- forgejoPasswordKey: ref.key,
302
- };
303
- await writeControlPlaneWorkflows(intentDir, targetDir, inputs);
304
- const baseUrl = `https://${domain}`;
305
- const repos = await adoptRepos({
306
- baseUrl,
307
- user,
308
- password,
309
- repos: [
310
- { dir: intentDir, name: INTENT_DIR },
311
- { dir: targetDir, name: TARGET_DIR },
312
- ],
313
- log: out.log,
314
- });
315
- const intentSecrets = { [GIT_USER_SECRET]: user, [GIT_TOKEN_SECRET]: password };
316
- if (desiredStateSecrets["CLOUDFLARE_API_TOKEN"] !== undefined) {
317
- intentSecrets["CLOUDFLARE_API_TOKEN"] = desiredStateSecrets["CLOUDFLARE_API_TOKEN"];
318
- }
319
- await setRepoSecrets({ api: forgejoApi, baseUrl, user, password, owner: user, name: INTENT_DIR, secrets: intentSecrets });
320
- await setRepoSecrets({ api: forgejoApi, baseUrl, user, password, owner: user, name: TARGET_DIR, secrets: desiredStateSecrets });
321
- out.text(`set ${Object.keys(intentSecrets).length} secret(s) on ${user}/${INTENT_DIR}, ${Object.keys(desiredStateSecrets).length} on ${user}/${TARGET_DIR}`);
322
- out.result({
323
- repos,
324
- intentSecrets: Object.keys(intentSecrets).sort(),
325
- desiredStateSecrets: Object.keys(desiredStateSecrets).sort(),
326
- });
327
- },
328
- });
329
- const restore = buildCommand({
330
- docs: { brief: "Restore Forgejo/Komodo from a restic backup snapshot, then re-apply (one-shot recovery)" },
331
- parameters: {
332
- flags: {
333
- artifact: { kind: "parsed", parse: String, optional: true, brief: `Path to the artifact (default: ${ARTIFACT_PATH})` },
334
- snapshot: { kind: "parsed", parse: String, optional: true, brief: "restic snapshot id to restore (default: latest)" },
335
- only: { kind: "parsed", parse: String, optional: true, brief: "Which to restore: forgejo | komodo | all (default: all)" },
336
- },
337
- },
338
- async func(flags) {
339
- const out = createOutput(this.process.stdout, outputMode(process.env));
340
- const artifact = flags.artifact ?? ARTIFACT_PATH;
341
- const dir = dirname(artifact);
342
- loadEnvFile(dir);
343
- const graph = await readArtifact(artifact);
344
- const ssh = createSshExecutor(createKnownHostsStore(dir));
345
- await ensureGeneratedSecrets(generatedSecretStore(graph, dir, ssh, false, out.log), collectSecrets(graph).generated, process.env);
346
- const backupNode = Object.values(graph.resources).find((node) => node.type === "backup");
347
- if (backupNode === undefined) {
348
- throw new Error("no backup resource in the artifact — declare one with i.have.backup and apply it first");
349
- }
350
- const scope = flags.only ?? "all";
351
- if (scope !== "forgejo" && scope !== "komodo" && scope !== "all") {
352
- throw new Error(`--only must be one of forgejo|komodo|all, got "${scope}"`);
353
- }
354
- const resolved = resolveInputs(backupNode.inputs, createStore(), process.env, { lenient: false });
355
- const repo = resolved["repo"];
356
- const password = resolved["password"];
357
- const image = resolved["image"];
358
- if (typeof repo !== "string" || typeof password !== "string" || typeof image !== "string") {
359
- throw new Error("backup resource is missing its repo/password/image inputs");
360
- }
361
- const credsRaw = resolved["credentials"];
362
- const credentials = {};
363
- if (typeof credsRaw === "object" && credsRaw !== null) {
364
- for (const [key, value] of Object.entries(credsRaw)) {
365
- if (typeof value === "string") {
366
- credentials[key] = value;
367
- }
368
- }
369
- }
370
- await restoreBackup({
371
- target: hostTarget(resolved),
372
- image,
373
- repo,
374
- password,
375
- credentials,
376
- snapshot: flags.snapshot ?? "latest",
377
- scope: scope,
378
- log: out.log,
379
- executor: ssh,
380
- });
381
- out.result({ snapshot: flags.snapshot ?? "latest", scope });
382
- },
383
- });
384
- const deploymentsCommand = buildCommand({
385
- docs: { brief: "List the app deployments Komodo manages, with their desired config (read-only)" },
386
- parameters: {
387
- flags: { artifact: { kind: "parsed", parse: String, optional: true, brief: `Path to the artifact (default: ${ARTIFACT_PATH})` } },
388
- },
389
- async func(flags) {
390
- const out = createOutput(this.process.stdout, outputMode(process.env));
391
- const deployments = await collectDeployments(flags.artifact ?? ARTIFACT_PATH, out.log);
392
- out.text(`${deployments.length} deployment(s)`);
393
- out.result({ deployments });
394
- },
395
- });
396
- const sandboxTunnel = buildCommand({
397
- docs: { brief: "Create/refresh the per-sandbox Cloudflare tunnel + DNS and print its connector token (used by connect.sh)" },
398
- parameters: {
399
- flags: {
400
- service: {
401
- kind: "parsed",
402
- parse: String,
403
- brief: "Internal service URL the tunnel routes to (e.g. http://intentic-sandbox-workspace:8787)",
404
- },
405
- previewService: {
406
- kind: "parsed",
407
- parse: String,
408
- optional: true,
409
- brief: "Dev-server URL to route the *.preview.<zone> wildcard to (e.g. http://intentic-sandbox-workspace:5173)",
410
- },
411
- zone: {
412
- kind: "parsed",
413
- parse: String,
414
- optional: true,
415
- brief: "Cloudflare zone for the DNS record (default: the API token's sole zone, or set ZONE)",
416
- },
417
- },
418
- },
419
- async func(flags) {
420
- const apiToken = process.env["CLOUDFLARE_API_TOKEN"];
421
- const connectToken = process.env["CONNECT_TOKEN"];
422
- if (apiToken === undefined || apiToken === "") {
423
- throw new Error("set CLOUDFLARE_API_TOKEN");
424
- }
425
- if (connectToken === undefined || connectToken === "") {
426
- throw new Error("set CONNECT_TOKEN (the per-sandbox connection token)");
427
- }
428
- const zone = flags.zone ?? process.env["ZONE"];
429
- const { token, hostname } = await createSandboxTunnel({
430
- apiToken,
431
- connectToken,
432
- service: flags.service,
433
- ...(flags.previewService !== undefined && flags.previewService !== "" ? { previewService: flags.previewService } : {}),
434
- ...(zone !== undefined && zone !== "" ? { zone } : {}),
435
- log: (message) => this.process.stderr.write(`${message}\n`),
436
- });
437
- this.process.stdout.write(`TUNNEL_TOKEN=${token}\nSANDBOX_HOSTNAME=${hostname}\n`);
438
- },
439
- });
1
+ import { buildApplication, buildRouteMap, text_en } from "@stricli/core";
2
+ import { addAppCommand } from "./add-app/add-app.command.js";
3
+ import { adopt } from "./adopt/adopt.command.js";
4
+ import { apply } from "./apply/apply.command.js";
5
+ import { deploymentsCommand } from "./deployments/deployments.command.js";
6
+ import { loadConfig } from "./env.config.js";
7
+ import { hostSshTunnel } from "./host-ssh-tunnel/host-ssh-tunnel.command.js";
8
+ import { init } from "./init/init.command.js";
9
+ import { version } from "./lib/version.js";
10
+ import { planCommand } from "./plan/plan.command.js";
11
+ import { resolveCommand } from "./resolve/resolve.command.js";
12
+ import { restore } from "./restore/restore.command.js";
13
+ import { sandboxTunnel } from "./sandbox-tunnel/sandbox-tunnel.command.js";
440
14
  const formatException = (exc) => {
441
15
  if (exc instanceof Error) {
442
- return process.env["INTENTIC_DEBUG"] !== undefined ? (exc.stack ?? exc.message) : exc.message;
16
+ return loadConfig().intenticDebug ? (exc.stack ?? exc.message) : exc.message;
443
17
  }
444
18
  return String(exc);
445
19
  };
446
20
  export const app = buildApplication(buildRouteMap({
447
- routes: { init, resolve: resolveCommand, plan: planCommand, apply, adopt, restore, deployments: deploymentsCommand, sandboxTunnel },
21
+ routes: {
22
+ init,
23
+ addApp: addAppCommand,
24
+ resolve: resolveCommand,
25
+ plan: planCommand,
26
+ apply,
27
+ adopt,
28
+ restore,
29
+ deployments: deploymentsCommand,
30
+ sandboxTunnel,
31
+ hostSshTunnel,
32
+ },
448
33
  docs: { brief: "intentic — intent-driven deployment" },
449
34
  }), {
450
35
  name: "intentic",
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAM3E,MAAM,eAAe,GAAG,CAAC,GAAY,EAAU,EAAE;IAC7C,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;IACjF,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,GAAG,GAAG,gBAAgB,CAC/B,aAAa,CAAC;IACV,MAAM,EAAE;QACJ,IAAI;QACJ,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,WAAW;QACjB,KAAK;QACL,KAAK;QACL,OAAO;QACP,WAAW,EAAE,kBAAkB;QAC/B,aAAa;QACb,aAAa;KAChB;IACD,IAAI,EAAE,EAAE,KAAK,EAAE,qCAAqC,EAAE;CACzD,CAAC,EACF;IACI,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,EAAE,cAAc,EAAE,OAAO,EAAE;IACxC,OAAO,EAAE,EAAE,SAAS,EAAE,uBAAuB,EAAE;IAC/C,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;CAClH,CACJ,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/apply/access.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAYvE,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAG3B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxG;AAKD,eAAO,MAAM,aAAa,GACtB,OAAO,iBAAiB,EACxB,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EACpE,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,KAClD,WAAW,EAuBb,CAAC;AAeF,eAAO,MAAM,mBAAmB,GAAI,SAAS,SAAS,WAAW,EAAE,KAAG,MASrE,CAAC;AAWF,eAAO,MAAM,eAAe,GAAU,MAAM,MAAM,EAAE,SAAS,SAAS,WAAW,EAAE,KAAG,OAAO,CAAC,IAAI,CAMjG,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { writeFile } from "node:fs/promises";
2
- import { secretRef } from "./secrets.js";
2
+ import { renderTemplate } from "../lib/templates.js";
3
+ import { secretRef } from "../secrets/secrets.js";
3
4
  const SERVICE_LABELS = {
4
5
  forgejo: "Forgejo (git)",
5
6
  komodo: "Komodo (deploys)",
@@ -57,25 +58,10 @@ const markdownPassword = (password) => {
57
58
  return password.source === "generated" ? "generated (see `.secrets.json`)" : `\`$${password.key}\``;
58
59
  };
59
60
  export const writeAccessFile = async (path, entries) => {
60
- const services = entries.filter((entry) => entry.username !== undefined);
61
- const apps = entries.filter((entry) => entry.username === undefined);
62
- const lines = [
63
- "# Access",
64
- "",
65
- "Generated by `intentic apply`. User-supplied passwords are the values you set in `.env`; generated passwords are stored in `.secrets.json` (gitignored).",
66
- ];
67
- if (services.length > 0) {
68
- lines.push("", "| Service | URL | Username | Password |", "| --- | --- | --- | --- |");
69
- for (const entry of services) {
70
- lines.push(`| ${entry.label} | ${entry.url} | ${entry.username} | ${markdownPassword(entry.password)} |`);
71
- }
72
- }
73
- if (apps.length > 0) {
74
- lines.push("", "## App environments", "", "| Environment | URL |", "| --- | --- |");
75
- for (const entry of apps) {
76
- lines.push(`| ${entry.id} | ${entry.url} |`);
77
- }
78
- }
79
- await writeFile(path, `${lines.join("\n")}\n`);
61
+ const services = entries
62
+ .filter((entry) => entry.username !== undefined)
63
+ .map((entry) => ({ label: entry.label, url: entry.url, username: entry.username, password: markdownPassword(entry.password) }));
64
+ const apps = entries.filter((entry) => entry.username === undefined).map((entry) => ({ id: entry.id, url: entry.url }));
65
+ await writeFile(path, renderTemplate("access.md", { services, apps }));
80
66
  };
81
67
  //# sourceMappingURL=access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/apply/access.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-lock.d.ts","sourceRoot":"","sources":["../../src/apply/apply-lock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAa,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAe7E,MAAM,WAAW,SAAS;IAEtB,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAoED,eAAO,MAAM,gBAAgB,GACzB,UAAU,WAAW,EACrB,SAAS,SAAS,SAAS,EAAE,EAC7B,UAAS;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,KACnH,OAAO,CAAC,SAAS,CAuDnB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-lock.js","sourceRoot":"","sources":["../../src/apply/apply-lock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type CommandContext } from "@stricli/core";
2
+ export declare const apply: import("@stricli/core").Command<CommandContext>;
3
+ //# sourceMappingURL=apply.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.command.d.ts","sourceRoot":"","sources":["../../src/apply/apply.command.ts"],"names":[],"mappings":"AAMA,OAAO,EAAgB,KAAK,cAAc,EAAgB,MAAM,eAAe,CAAC;AAoBhF,eAAO,MAAM,KAAK,iDAiKhB,CAAC"}