@intentic/cli 1.0.2

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 (174) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/dist/add-app/add-app.command.d.ts +3 -0
  4. package/dist/add-app/add-app.command.d.ts.map +1 -0
  5. package/dist/add-app/add-app.command.js +50 -0
  6. package/dist/add-app/add-app.command.js.map +1 -0
  7. package/dist/adopt/adopt.command.d.ts +3 -0
  8. package/dist/adopt/adopt.command.d.ts.map +1 -0
  9. package/dist/adopt/adopt.command.js +77 -0
  10. package/dist/adopt/adopt.command.js.map +1 -0
  11. package/dist/adopt/adopt.d.ts +21 -0
  12. package/dist/adopt/adopt.d.ts.map +1 -0
  13. package/dist/adopt/adopt.js +31 -0
  14. package/dist/adopt/adopt.js.map +1 -0
  15. package/dist/app.d.ts +2 -0
  16. package/dist/app.d.ts.map +1 -0
  17. package/dist/app.js +46 -0
  18. package/dist/app.js.map +1 -0
  19. package/dist/apply/access.d.ts +16 -0
  20. package/dist/apply/access.d.ts.map +1 -0
  21. package/dist/apply/access.js +72 -0
  22. package/dist/apply/access.js.map +1 -0
  23. package/dist/apply/apply-lock.d.ts +12 -0
  24. package/dist/apply/apply-lock.d.ts.map +1 -0
  25. package/dist/apply/apply-lock.js +102 -0
  26. package/dist/apply/apply-lock.js.map +1 -0
  27. package/dist/apply/apply.command.d.ts +3 -0
  28. package/dist/apply/apply.command.d.ts.map +1 -0
  29. package/dist/apply/apply.command.js +144 -0
  30. package/dist/apply/apply.command.js.map +1 -0
  31. package/dist/apply/migrate.d.ts +20 -0
  32. package/dist/apply/migrate.d.ts.map +1 -0
  33. package/dist/apply/migrate.js +112 -0
  34. package/dist/apply/migrate.js.map +1 -0
  35. package/dist/cli.d.ts +3 -0
  36. package/dist/cli.d.ts.map +1 -0
  37. package/dist/cli.js +5 -0
  38. package/dist/cli.js.map +1 -0
  39. package/dist/demo.d.ts +2 -0
  40. package/dist/demo.d.ts.map +1 -0
  41. package/dist/demo.js +281 -0
  42. package/dist/demo.js.map +1 -0
  43. package/dist/deployments/deployments.command.d.ts +3 -0
  44. package/dist/deployments/deployments.command.d.ts.map +1 -0
  45. package/dist/deployments/deployments.command.js +19 -0
  46. package/dist/deployments/deployments.command.js.map +1 -0
  47. package/dist/deployments/deployments.d.ts +14 -0
  48. package/dist/deployments/deployments.d.ts.map +1 -0
  49. package/dist/deployments/deployments.js +83 -0
  50. package/dist/deployments/deployments.js.map +1 -0
  51. package/dist/env.config.d.ts +25 -0
  52. package/dist/env.config.d.ts.map +1 -0
  53. package/dist/env.config.js +31 -0
  54. package/dist/env.config.js.map +1 -0
  55. package/dist/host-ssh-tunnel/host-ssh-tunnel.command.d.ts +3 -0
  56. package/dist/host-ssh-tunnel/host-ssh-tunnel.command.d.ts.map +1 -0
  57. package/dist/host-ssh-tunnel/host-ssh-tunnel.command.js +39 -0
  58. package/dist/host-ssh-tunnel/host-ssh-tunnel.command.js.map +1 -0
  59. package/dist/host-ssh-tunnel/host-ssh-tunnel.d.ts +14 -0
  60. package/dist/host-ssh-tunnel/host-ssh-tunnel.d.ts.map +1 -0
  61. package/dist/host-ssh-tunnel/host-ssh-tunnel.js +21 -0
  62. package/dist/host-ssh-tunnel/host-ssh-tunnel.js.map +1 -0
  63. package/dist/index.d.ts +5 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +5 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/init/init.command.d.ts +3 -0
  68. package/dist/init/init.command.d.ts.map +1 -0
  69. package/dist/init/init.command.js +45 -0
  70. package/dist/init/init.command.js.map +1 -0
  71. package/dist/init/init.d.ts +7 -0
  72. package/dist/init/init.d.ts.map +1 -0
  73. package/dist/init/init.js +39 -0
  74. package/dist/init/init.js.map +1 -0
  75. package/dist/init/scaffold-app.d.ts +2 -0
  76. package/dist/init/scaffold-app.d.ts.map +1 -0
  77. package/dist/init/scaffold-app.js +27 -0
  78. package/dist/init/scaffold-app.js.map +1 -0
  79. package/dist/lib/artifact.d.ts +10 -0
  80. package/dist/lib/artifact.d.ts.map +1 -0
  81. package/dist/lib/artifact.js +29 -0
  82. package/dist/lib/artifact.js.map +1 -0
  83. package/dist/lib/cf-tunnel.d.ts +11 -0
  84. package/dist/lib/cf-tunnel.d.ts.map +1 -0
  85. package/dist/lib/cf-tunnel.js +30 -0
  86. package/dist/lib/cf-tunnel.js.map +1 -0
  87. package/dist/lib/known-hosts.d.ts +3 -0
  88. package/dist/lib/known-hosts.d.ts.map +1 -0
  89. package/dist/lib/known-hosts.js +18 -0
  90. package/dist/lib/known-hosts.js.map +1 -0
  91. package/dist/lib/output.d.ts +14 -0
  92. package/dist/lib/output.d.ts.map +1 -0
  93. package/dist/lib/output.js +56 -0
  94. package/dist/lib/output.js.map +1 -0
  95. package/dist/lib/run-log.d.ts +3 -0
  96. package/dist/lib/run-log.d.ts.map +1 -0
  97. package/dist/lib/run-log.js +62 -0
  98. package/dist/lib/run-log.js.map +1 -0
  99. package/dist/lib/templates.d.ts +2 -0
  100. package/dist/lib/templates.d.ts.map +1 -0
  101. package/dist/lib/templates.js +6 -0
  102. package/dist/lib/templates.js.map +1 -0
  103. package/dist/lib/version.d.ts +2 -0
  104. package/dist/lib/version.d.ts.map +1 -0
  105. package/dist/lib/version.js +3 -0
  106. package/dist/lib/version.js.map +1 -0
  107. package/dist/logs/logs.command.d.ts +3 -0
  108. package/dist/logs/logs.command.d.ts.map +1 -0
  109. package/dist/logs/logs.command.js +86 -0
  110. package/dist/logs/logs.command.js.map +1 -0
  111. package/dist/monorepo/monorepo.command.d.ts +3 -0
  112. package/dist/monorepo/monorepo.command.d.ts.map +1 -0
  113. package/dist/monorepo/monorepo.command.js +28 -0
  114. package/dist/monorepo/monorepo.command.js.map +1 -0
  115. package/dist/pipelines/adopt-pipelines.d.ts +35 -0
  116. package/dist/pipelines/adopt-pipelines.d.ts.map +1 -0
  117. package/dist/pipelines/adopt-pipelines.js +77 -0
  118. package/dist/pipelines/adopt-pipelines.js.map +1 -0
  119. package/dist/pipelines/control-plane-sync.d.ts +24 -0
  120. package/dist/pipelines/control-plane-sync.d.ts.map +1 -0
  121. package/dist/pipelines/control-plane-sync.js +62 -0
  122. package/dist/pipelines/control-plane-sync.js.map +1 -0
  123. package/dist/plan/plan.command.d.ts +3 -0
  124. package/dist/plan/plan.command.d.ts.map +1 -0
  125. package/dist/plan/plan.command.js +33 -0
  126. package/dist/plan/plan.command.js.map +1 -0
  127. package/dist/resolve/resolve.command.d.ts +3 -0
  128. package/dist/resolve/resolve.command.d.ts.map +1 -0
  129. package/dist/resolve/resolve.command.js +78 -0
  130. package/dist/resolve/resolve.command.js.map +1 -0
  131. package/dist/resolve/resolve.d.ts +4 -0
  132. package/dist/resolve/resolve.d.ts.map +1 -0
  133. package/dist/resolve/resolve.js +33 -0
  134. package/dist/resolve/resolve.js.map +1 -0
  135. package/dist/restore/restore.command.d.ts +3 -0
  136. package/dist/restore/restore.command.d.ts.map +1 -0
  137. package/dist/restore/restore.command.js +68 -0
  138. package/dist/restore/restore.command.js.map +1 -0
  139. package/dist/sandbox-tunnel/sandbox-tunnel.command.d.ts +3 -0
  140. package/dist/sandbox-tunnel/sandbox-tunnel.command.d.ts.map +1 -0
  141. package/dist/sandbox-tunnel/sandbox-tunnel.command.js +62 -0
  142. package/dist/sandbox-tunnel/sandbox-tunnel.command.js.map +1 -0
  143. package/dist/sandbox-tunnel/sandbox-tunnel.d.ts +18 -0
  144. package/dist/sandbox-tunnel/sandbox-tunnel.d.ts.map +1 -0
  145. package/dist/sandbox-tunnel/sandbox-tunnel.js +37 -0
  146. package/dist/sandbox-tunnel/sandbox-tunnel.js.map +1 -0
  147. package/dist/secrets/generated-secrets.d.ts +6 -0
  148. package/dist/secrets/generated-secrets.d.ts.map +1 -0
  149. package/dist/secrets/generated-secrets.js +26 -0
  150. package/dist/secrets/generated-secrets.js.map +1 -0
  151. package/dist/secrets/secret-store.d.ts +14 -0
  152. package/dist/secrets/secret-store.d.ts.map +1 -0
  153. package/dist/secrets/secret-store.js +111 -0
  154. package/dist/secrets/secret-store.js.map +1 -0
  155. package/dist/secrets/secrets.command.d.ts +6 -0
  156. package/dist/secrets/secrets.command.d.ts.map +1 -0
  157. package/dist/secrets/secrets.command.js +106 -0
  158. package/dist/secrets/secrets.command.js.map +1 -0
  159. package/dist/secrets/secrets.d.ts +7 -0
  160. package/dist/secrets/secrets.d.ts.map +1 -0
  161. package/dist/secrets/secrets.js +14 -0
  162. package/dist/secrets/secrets.js.map +1 -0
  163. package/package.json +69 -0
  164. package/templates/access.md.eta +21 -0
  165. package/templates/demo/Dockerfile.eta +5 -0
  166. package/templates/demo/deploy.config.ts.eta +23 -0
  167. package/templates/demo/env.eta +2 -0
  168. package/templates/env-example.eta +6 -0
  169. package/templates/scaffold/Dockerfile.eta +7 -0
  170. package/templates/scaffold/deploy.config.selfhost.ts.eta +18 -0
  171. package/templates/scaffold/deploy.config.ts.eta +22 -0
  172. package/templates/scaffold/server.js.eta +9 -0
  173. package/templates/workflows/apply.yaml.eta +28 -0
  174. package/templates/workflows/resolve.yaml.eta +26 -0
@@ -0,0 +1,30 @@
1
+ export const CATCH_ALL = { service: "http_status:404" };
2
+ export const resolveZone = async (api, apiToken, override) => {
3
+ if (override !== undefined && override !== "") {
4
+ const found = await api.getZone({ apiToken, zone: override });
5
+ if (found === undefined) {
6
+ throw new Error(`Cloudflare zone "${override}" not found for this API token`);
7
+ }
8
+ return { id: found.id, name: override, accountId: found.accountId };
9
+ }
10
+ const zones = await api.listZones({ apiToken });
11
+ const [only, ...rest] = zones;
12
+ if (only === undefined) {
13
+ throw new Error("the Cloudflare API token sees no zones — add a domain to the account, or broaden the token's Zone:Read scope");
14
+ }
15
+ if (rest.length > 0) {
16
+ const names = [only, ...rest].map((zone) => zone.name);
17
+ throw new Error(`the Cloudflare API token sees multiple zones (${names.join(", ")}) — set the ZONE env var or pass --zone to choose one, e.g. --zone ${only.name}`);
18
+ }
19
+ return only;
20
+ };
21
+ export const upsertCname = async (api, apiToken, zoneId, name, cname, comment) => {
22
+ const record = await api.findDnsRecord({ apiToken, zoneId, name });
23
+ if (record === undefined) {
24
+ await api.createDnsRecord({ apiToken, zoneId, name, content: cname, comment });
25
+ }
26
+ else {
27
+ await api.updateDnsRecord({ apiToken, zoneId, recordId: record.id, name, content: cname, comment });
28
+ }
29
+ };
30
+ //# sourceMappingURL=cf-tunnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cf-tunnel.js","sourceRoot":"","sources":["../../src/lib/cf-tunnel.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAW,CAAC;AAIjE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC5B,GAAkB,EAClB,QAAgB,EAChB,QAA4B,EAC4B,EAAE;IAC1D,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC5C,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,gCAAgC,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACxE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IAC9B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,8GAA8G,CAAC,CAAC;IACpI,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CACX,iDAAiD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,sEAAsE,IAAI,CAAC,IAAI,EAAE,CACrJ,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC5B,GAAkB,EAClB,QAAgB,EAChB,MAAc,EACd,IAAY,EACZ,KAAa,EACb,OAAe,EACF,EAAE;IACf,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,GAAG,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACJ,MAAM,GAAG,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACxG,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { HostKeyStore } from "@intentic/providers";
2
+ export declare const createKnownHostsStore: (dir: string) => HostKeyStore;
3
+ //# sourceMappingURL=known-hosts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"known-hosts.d.ts","sourceRoot":"","sources":["../../src/lib/known-hosts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,eAAO,MAAM,qBAAqB,GAAI,KAAK,MAAM,KAAG,YAYnD,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { KNOWN_HOSTS_FILE } from "./artifact.js";
5
+ const hostKeyId = (host, port) => `${host}:${port}`;
6
+ export const createKnownHostsStore = (dir) => {
7
+ const path = join(dir, KNOWN_HOSTS_FILE);
8
+ const read = async () => existsSync(path) ? JSON.parse(await readFile(path, "utf8")) : {};
9
+ return {
10
+ get: async (host, port) => (await read())[hostKeyId(host, port)],
11
+ set: async (host, port, key) => {
12
+ const store = await read();
13
+ store[hostKeyId(host, port)] = key;
14
+ await writeFile(path, `${JSON.stringify(store, undefined, 4)}\n`, { mode: 0o600 });
15
+ },
16
+ };
17
+ };
18
+ //# sourceMappingURL=known-hosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"known-hosts.js","sourceRoot":"","sources":["../../src/lib/known-hosts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAKjD,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAE5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,GAAW,EAAgB,EAAE;IAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,KAAK,IAAqC,EAAE,CACrD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,OAAO;QACH,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;YAC3B,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YACnC,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvF,CAAC;KACJ,CAAC;AACN,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { EngineEvent } from "@intentic/engine";
2
+ export type OutputMode = "text" | "json" | "ndjson";
3
+ export interface Sink {
4
+ readonly write: (chunk: string) => void;
5
+ }
6
+ export interface Output {
7
+ readonly mode: OutputMode;
8
+ readonly onEvent: (event: EngineEvent) => void;
9
+ readonly log: (message: string) => void;
10
+ readonly text: (line: string) => void;
11
+ readonly result: (result: Record<string, unknown>) => void;
12
+ }
13
+ export declare const createOutput: (sink: Sink, mode: OutputMode) => Output;
14
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAKpD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,IAAI;IACjB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAOD,MAAM,WAAW,MAAM;IACnB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9D;AA2BD,eAAO,MAAM,YAAY,GAAI,MAAM,IAAI,EAAE,MAAM,UAAU,KAAG,MAsC3D,CAAC"}
@@ -0,0 +1,56 @@
1
+ const eventText = (event) => {
2
+ if (event.kind === "node" && event.phase === "apply") {
3
+ if (event.state === "start") {
4
+ return `applying "${event.id}" (type "${event.type}")`;
5
+ }
6
+ const reason = event.reason === undefined ? "" : ` (${event.reason})`;
7
+ return `applied "${event.id}" (type "${event.type}") — ${event.action ?? "done"}${reason}`;
8
+ }
9
+ if (event.kind === "readiness") {
10
+ return event.state === "waiting" ? `waiting for "${event.id}" at ${event.url}` : `"${event.id}" ready`;
11
+ }
12
+ if (event.kind === "prune") {
13
+ return event.state === "deleted"
14
+ ? `prune: deleted "${event.id}" (type "${event.type}")`
15
+ : `prune: "${event.id}" (type "${event.type}") removed from desired state but its provider has no delete — left in place`;
16
+ }
17
+ if (event.kind === "orphan") {
18
+ return `orphan: "${event.id}" (type "${event.type}") exists but is not in the desired graph — not deleted`;
19
+ }
20
+ return undefined;
21
+ };
22
+ export const createOutput = (sink, mode) => {
23
+ const line = (text) => sink.write(`${text}\n`);
24
+ const jsonLine = (value) => sink.write(`${JSON.stringify(value)}\n`);
25
+ if (mode === "ndjson") {
26
+ return {
27
+ mode,
28
+ onEvent: jsonLine,
29
+ log: (message) => jsonLine({ kind: "log", message }),
30
+ text: () => { },
31
+ result: (result) => jsonLine({ kind: "result", ...result }),
32
+ };
33
+ }
34
+ if (mode === "json") {
35
+ return {
36
+ mode,
37
+ onEvent: () => { },
38
+ log: () => { },
39
+ text: () => { },
40
+ result: (result) => sink.write(`${JSON.stringify(result, undefined, 4)}\n`),
41
+ };
42
+ }
43
+ return {
44
+ mode,
45
+ onEvent: (event) => {
46
+ const text = eventText(event);
47
+ if (text !== undefined) {
48
+ line(text);
49
+ }
50
+ },
51
+ log: line,
52
+ text: line,
53
+ result: () => { },
54
+ };
55
+ };
56
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Sink } from "./output.js";
2
+ export declare const withRunLog: (sink: Sink, command: string) => Sink;
3
+ //# sourceMappingURL=run-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-log.d.ts","sourceRoot":"","sources":["../../src/lib/run-log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AASxC,eAAO,MAAM,UAAU,GAAI,MAAM,IAAI,EAAE,SAAS,MAAM,KAAG,IAsDxD,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { closeSync, mkdirSync, openSync, readdirSync, rmSync, statSync, writeSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { loadConfig } from "../env.config.js";
4
+ const KEEP_RUNS = 50;
5
+ export const withRunLog = (sink, command) => {
6
+ let fd;
7
+ const ensure = () => {
8
+ if (fd !== undefined) {
9
+ return fd === false ? undefined : fd;
10
+ }
11
+ try {
12
+ const dir = loadConfig().intenticLogDir;
13
+ mkdirSync(dir, { recursive: true });
14
+ const runs = readdirSync(dir)
15
+ .filter((name) => name.endsWith(".log"))
16
+ .flatMap((name) => {
17
+ try {
18
+ return [{ name, mtimeMs: statSync(join(dir, name)).mtimeMs }];
19
+ }
20
+ catch {
21
+ return [];
22
+ }
23
+ })
24
+ .toSorted((a, b) => b.mtimeMs - a.mtimeMs);
25
+ for (const run of runs.slice(KEEP_RUNS - 1)) {
26
+ rmSync(join(dir, run.name), { force: true });
27
+ }
28
+ const stamp = new Date().toISOString().replaceAll(":", "-");
29
+ const opened = openSync(join(dir, `${command}-${stamp}.log`), "a");
30
+ fd = opened;
31
+ process.on("exit", (code) => {
32
+ try {
33
+ writeSync(opened, `# exit ${code}\n`);
34
+ closeSync(opened);
35
+ }
36
+ catch {
37
+ }
38
+ });
39
+ return opened;
40
+ }
41
+ catch {
42
+ fd = false;
43
+ return undefined;
44
+ }
45
+ };
46
+ return {
47
+ write: (chunk) => {
48
+ sink.write(chunk);
49
+ const opened = ensure();
50
+ if (opened === undefined) {
51
+ return;
52
+ }
53
+ try {
54
+ writeSync(opened, chunk);
55
+ }
56
+ catch {
57
+ fd = false;
58
+ }
59
+ },
60
+ };
61
+ };
62
+ //# sourceMappingURL=run-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-log.js","sourceRoot":"","sources":["../../src/lib/run-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const renderTemplate: (name: string, data: Record<string, unknown>) => string;
2
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAAyC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { fileURLToPath } from "node:url";
2
+ import { Eta } from "eta";
3
+ const views = fileURLToPath(new URL("../../templates", import.meta.url));
4
+ const eta = new Eta({ views, autoEscape: false, autoTrim: false });
5
+ export const renderTemplate = (name, data) => eta.render(`${name}.eta`, data);
6
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/lib/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAO1B,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAKzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAKnE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,IAA6B,EAAU,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const version: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAKA,eAAO,MAAQ,OAAO,QAAgF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { createRequire } from "node:module";
2
+ export const { version } = createRequire(import.meta.url)("../../package.json");
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type CommandContext } from "@stricli/core";
2
+ export declare const logsCommand: import("@stricli/core").Command<CommandContext>;
3
+ //# sourceMappingURL=logs.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.command.d.ts","sourceRoot":"","sources":["../../src/logs/logs.command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,cAAc,EAAgB,MAAM,eAAe,CAAC;AAiChF,eAAO,MAAM,WAAW,iDAsEtB,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { dirname } from "node:path";
2
+ import { createStore, resolveInputs } from "@intentic/engine";
3
+ import { createSshExecutor, sshSchema, sshTarget } from "@intentic/providers";
4
+ import { buildCommand, numberParser } from "@stricli/core";
5
+ import { loadConfig } from "../env.config.js";
6
+ import { ARTIFACT_PATH, loadEnvFile, readArtifact } from "../lib/artifact.js";
7
+ import { createKnownHostsStore } from "../lib/known-hosts.js";
8
+ import { createOutput } from "../lib/output.js";
9
+ import { withRunLog } from "../lib/run-log.js";
10
+ const DEFAULT_TAIL = 200;
11
+ const SAFE_NAME = /^[a-zA-Z0-9_.-]+$/;
12
+ const logsScript = (id, type, tail) => [
13
+ `if [ -f /opt/intentic/${type}/compose.yaml ]; then`,
14
+ ` docker compose -p ${type} --project-directory /opt/intentic/${type} -f /opt/intentic/${type}/compose.yaml logs --no-color --tail ${tail}`,
15
+ `else`,
16
+ ` ids=$({ docker ps -aq --filter "label=intentic.id=${id}"; docker ps -aq --filter "label=intentic.id=intentic-${type}"; } | sort -u)`,
17
+ ` if [ -z "$ids" ]; then echo "no containers labeled intentic.id=${id} (or intentic-${type}) on this host" >&2; exit 1; fi`,
18
+ ` for c in $ids; do docker inspect -f '== {{.Name}}' "$c"; docker logs --tail ${tail} "$c" 2>&1; done`,
19
+ `fi`,
20
+ ].join("\n");
21
+ export const logsCommand = buildCommand({
22
+ docs: { brief: "Fetch a deployed resource's container logs from its host over SSH" },
23
+ parameters: {
24
+ flags: {
25
+ artifact: { kind: "parsed", parse: String, optional: true, brief: `Path to the artifact (default: ${ARTIFACT_PATH})` },
26
+ tail: { kind: "parsed", parse: numberParser, optional: true, brief: `Lines per container (default ${DEFAULT_TAIL})` },
27
+ },
28
+ positional: {
29
+ kind: "tuple",
30
+ parameters: [{ parse: String, optional: true, brief: "Resource id from the artifact; omit to list what has logs", placeholder: "id" }],
31
+ },
32
+ },
33
+ async func(flags, id) {
34
+ const out = createOutput(withRunLog(this.process.stdout, "logs"), loadConfig().intenticOutput);
35
+ const artifact = flags.artifact ?? ARTIFACT_PATH;
36
+ const dir = dirname(artifact);
37
+ loadEnvFile(dir);
38
+ const graph = await readArtifact(artifact);
39
+ const loggable = Object.values(graph.resources).filter((node) => node.inputs["address"] !== undefined && node.inputs["sshKey"] !== undefined);
40
+ if (id === undefined) {
41
+ for (const node of loggable) {
42
+ out.text(`${node.id} (type "${node.type}")`);
43
+ }
44
+ out.text(`\nintentic logs <id> fetches that resource's container logs; app deployments live in Komodo (intentic deployments).`);
45
+ out.result({ resources: loggable.map((node) => ({ id: node.id, type: node.type })) });
46
+ return;
47
+ }
48
+ const node = graph.resources[id];
49
+ if (node === undefined) {
50
+ throw new Error(`no resource "${id}" in the artifact — run \`intentic logs\` to list them`);
51
+ }
52
+ if (!SAFE_NAME.test(node.id) || !SAFE_NAME.test(node.type)) {
53
+ throw new Error(`resource id/type contains characters unsafe for a remote shell: "${node.id}" (type "${node.type}")`);
54
+ }
55
+ const resolved = resolveInputs(node.inputs, createStore(), process.env, { lenient: true });
56
+ const parsedSsh = sshSchema.safeParse(resolved);
57
+ if (!parsedSsh.success) {
58
+ throw new Error(`"${id}" (type "${node.type}") has no host SSH target — its runtime logs are not host-fetchable`);
59
+ }
60
+ const ssh = createSshExecutor(createKnownHostsStore(dir));
61
+ const session = await ssh.connect(sshTarget(parsedSsh.data));
62
+ try {
63
+ let pending = "";
64
+ const result = await session.exec(logsScript(node.id, node.type, flags.tail ?? DEFAULT_TAIL), (chunk) => {
65
+ pending += chunk;
66
+ const lines = pending.split("\n");
67
+ pending = lines.pop() ?? "";
68
+ for (const text of lines) {
69
+ out.log(text);
70
+ }
71
+ });
72
+ if (pending !== "") {
73
+ out.log(pending);
74
+ }
75
+ if (result.code !== 0) {
76
+ throw new Error(`fetching logs for "${id}" failed (exit ${result.code}): ${result.stderr.trim()}`);
77
+ }
78
+ out.result({ id: node.id, type: node.type, tail: flags.tail ?? DEFAULT_TAIL });
79
+ }
80
+ finally {
81
+ await session.dispose();
82
+ await ssh.dispose?.();
83
+ }
84
+ },
85
+ });
86
+ //# sourceMappingURL=logs.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.command.js","sourceRoot":"","sources":["../../src/logs/logs.command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type CommandContext } from "@stricli/core";
2
+ export declare const monorepoCommand: import("@stricli/core").Command<CommandContext>;
3
+ //# sourceMappingURL=monorepo.command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo.command.d.ts","sourceRoot":"","sources":["../../src/monorepo/monorepo.command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAclE,eAAO,MAAM,eAAe,iDAqB1B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { join } from "node:path";
2
+ import { DEFAULT_TEMPLATE_REF, DEFAULT_TEMPLATE_SOURCE, scaffoldMonorepo } from "@intentic/scaffold";
3
+ import { buildCommand } from "@stricli/core";
4
+ import { loadConfig } from "../env.config.js";
5
+ import { createOutput } from "../lib/output.js";
6
+ export const monorepoCommand = buildCommand({
7
+ docs: { brief: "Scaffold an empty pnpm+turbo monorepo at <dir>/<name>" },
8
+ parameters: {
9
+ flags: {
10
+ dir: { kind: "parsed", parse: String, optional: true, brief: "Directory holding the workspace repos (default: .)" },
11
+ name: { kind: "parsed", parse: String, brief: "Monorepo name — becomes the repo directory name" },
12
+ source: { kind: "parsed", parse: String, optional: true, brief: `Template source git URL (default: ${DEFAULT_TEMPLATE_SOURCE})` },
13
+ ref: { kind: "parsed", parse: String, optional: true, brief: `Template source branch/tag (default: ${DEFAULT_TEMPLATE_REF})` },
14
+ },
15
+ },
16
+ async func(flags) {
17
+ const out = createOutput(this.process.stdout, loadConfig().intenticOutput);
18
+ const repoDir = join(flags.dir ?? ".", flags.name);
19
+ await scaffoldMonorepo({
20
+ repoDir,
21
+ source: flags.source ?? DEFAULT_TEMPLATE_SOURCE,
22
+ ref: flags.ref ?? DEFAULT_TEMPLATE_REF,
23
+ });
24
+ out.text(`created empty monorepo ${flags.name} at ${repoDir}`);
25
+ out.result({ name: flags.name, dir: repoDir });
26
+ },
27
+ });
28
+ //# sourceMappingURL=monorepo.command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monorepo.command.js","sourceRoot":"","sources":["../../src/monorepo/monorepo.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,YAAY,EAAuB,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAYhD,MAAM,CAAC,MAAM,eAAe,GAAG,YAAY,CAAgB;IACvD,IAAI,EAAE,EAAE,KAAK,EAAE,uDAAuD,EAAE;IACxE,UAAU,EAAE;QACR,KAAK,EAAE;YACH,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,oDAAoD,EAAE;YACnH,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,iDAAiD,EAAE;YACjG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,qCAAqC,uBAAuB,GAAG,EAAE;YACjI,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,wCAAwC,oBAAoB,GAAG,EAAE;SACjI;KACJ;IACD,KAAK,CAAC,IAAI,CAAuB,KAAoB;QACjD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,gBAAgB,CAAC;YACnB,OAAO;YACP,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,uBAAuB;YAC/C,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,oBAAoB;SACzC,CAAC,CAAC;QACH,GAAG,CAAC,IAAI,CAAC,0BAA0B,KAAK,CAAC,IAAI,OAAO,OAAO,EAAE,CAAC,CAAC;QAC/D,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC;CACJ,CAAC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { DesiredStateGraph } from "@intentic/graph";
2
+ import type { ForgejoApi } from "@intentic/providers";
3
+ export declare const GIT_USER_SECRET = "INTENTIC_GIT_USER";
4
+ export declare const GIT_TOKEN_SECRET = "INTENTIC_GIT_TOKEN";
5
+ export declare const GIT_USER_ENV = "GIT_USER";
6
+ export declare const GIT_TOKEN_ENV = "GIT_TOKEN";
7
+ export declare const INTENT_WORKFLOW_PATH = ".forgejo/workflows/resolve.yaml";
8
+ export declare const APPLY_WORKFLOW_PATH = ".forgejo/workflows/apply.yaml";
9
+ export declare const forgejoSecretName: (key: string) => string;
10
+ export interface PipelineInputs {
11
+ readonly cliVersion: string;
12
+ readonly user: string;
13
+ readonly domain: string;
14
+ readonly configFile: string;
15
+ readonly artifactFile: string;
16
+ readonly intentRepo: string;
17
+ readonly desiredStateRepo: string;
18
+ readonly applySecretKeys: readonly string[];
19
+ readonly forgejoPasswordKey: string;
20
+ }
21
+ export declare const intentWorkflowYaml: (inputs: PipelineInputs) => string;
22
+ export declare const applyWorkflowYaml: (inputs: PipelineInputs) => string;
23
+ export declare const writeWorkflow: (repoDir: string, workflowPath: string, content: string) => Promise<void>;
24
+ export declare const writeControlPlaneWorkflows: (intentDir: string, targetDir: string, inputs: PipelineInputs) => Promise<void>;
25
+ export declare const collectSecretValues: (graph: DesiredStateGraph, env: Readonly<Record<string, string | undefined>>, generatedValues: Readonly<Record<string, string>>) => Record<string, string>;
26
+ export declare const setRepoSecrets: (args: {
27
+ readonly api: ForgejoApi;
28
+ readonly baseUrl: string;
29
+ readonly user: string;
30
+ readonly password: string;
31
+ readonly owner: string;
32
+ readonly name: string;
33
+ readonly secrets: Readonly<Record<string, string>>;
34
+ }) => Promise<void>;
35
+ //# sourceMappingURL=adopt-pipelines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt-pipelines.d.ts","sourceRoot":"","sources":["../../src/pipelines/adopt-pipelines.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAMtD,eAAO,MAAM,eAAe,sBAAsB,CAAC;AACnD,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AAIrD,eAAO,MAAM,YAAY,aAAa,CAAC;AACvC,eAAO,MAAM,aAAa,cAAc,CAAC;AAWzC,eAAO,MAAM,oBAAoB,oCAAoC,CAAC;AACtE,eAAO,MAAM,mBAAmB,kCAAkC,CAAC;AAOnE,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MAC+C,CAAC;AAEhG,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAGlC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAG5C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACvC;AAOD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,cAAc,KAAG,MAatD,CAAC;AAKP,eAAO,MAAM,iBAAiB,GAAI,QAAQ,cAAc,KAAG,MASrD,CAAC;AAIP,eAAO,MAAM,aAAa,GAAU,SAAS,MAAM,EAAE,cAAc,MAAM,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAIxG,CAAC;AAGF,eAAO,MAAM,0BAA0B,GAAU,WAAW,MAAM,EAAE,WAAW,MAAM,EAAE,QAAQ,cAAc,KAAG,OAAO,CAAC,IAAI,CAG3H,CAAC;AAKF,eAAO,MAAM,mBAAmB,GAC5B,OAAO,iBAAiB,EACxB,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,iBAAiB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAClD,MAAM,CAAC,MAAM,EAAE,MAAM,CAgBvB,CAAC;AAGF,eAAO,MAAM,cAAc,GAAU,MAAM;IACvC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD,KAAG,OAAO,CAAC,IAAI,CAYf,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { renderTemplate } from "../lib/templates.js";
4
+ import { collectSecrets } from "../secrets/secrets.js";
5
+ export const GIT_USER_SECRET = "INTENTIC_GIT_USER";
6
+ export const GIT_TOKEN_SECRET = "INTENTIC_GIT_TOKEN";
7
+ export const GIT_USER_ENV = "GIT_USER";
8
+ export const GIT_TOKEN_ENV = "GIT_TOKEN";
9
+ const CLI_PACKAGE = "@intentic/cli";
10
+ const APPLIED_TAG = "intentic-applied";
11
+ export const INTENT_WORKFLOW_PATH = ".forgejo/workflows/resolve.yaml";
12
+ export const APPLY_WORKFLOW_PATH = ".forgejo/workflows/apply.yaml";
13
+ const RESERVED_SECRET_PREFIXES = ["GITHUB_", "GITEA_", "FORGEJO_"];
14
+ export const forgejoSecretName = (key) => RESERVED_SECRET_PREFIXES.some((prefix) => key.startsWith(prefix)) ? `INTENTIC_${key}` : key;
15
+ const cloneUrl = (inputs, repo) => `https://${inputs.domain}/${inputs.user}/${repo}.git`;
16
+ export const intentWorkflowYaml = (inputs) => renderTemplate("workflows/resolve.yaml", {
17
+ configFile: inputs.configFile,
18
+ artifactFile: inputs.artifactFile,
19
+ gitUserEnv: GIT_USER_ENV,
20
+ gitUserSecret: GIT_USER_SECRET,
21
+ gitTokenEnv: GIT_TOKEN_ENV,
22
+ gitTokenSecret: GIT_TOKEN_SECRET,
23
+ desiredStateCloneUrl: cloneUrl(inputs, inputs.desiredStateRepo),
24
+ cliPackage: CLI_PACKAGE,
25
+ cliVersion: inputs.cliVersion,
26
+ user: inputs.user,
27
+ domain: inputs.domain,
28
+ });
29
+ export const applyWorkflowYaml = (inputs) => renderTemplate("workflows/apply.yaml", {
30
+ artifactFile: inputs.artifactFile,
31
+ envEntries: inputs.applySecretKeys.map((key) => ({ env: key, secret: forgejoSecretName(key) })),
32
+ appliedTag: APPLIED_TAG,
33
+ cliPackage: CLI_PACKAGE,
34
+ cliVersion: inputs.cliVersion,
35
+ user: inputs.user,
36
+ forgejoPasswordKey: inputs.forgejoPasswordKey,
37
+ });
38
+ export const writeWorkflow = async (repoDir, workflowPath, content) => {
39
+ const full = join(repoDir, workflowPath);
40
+ await mkdir(dirname(full), { recursive: true });
41
+ await writeFile(full, content);
42
+ };
43
+ export const writeControlPlaneWorkflows = async (intentDir, targetDir, inputs) => {
44
+ await writeWorkflow(intentDir, INTENT_WORKFLOW_PATH, intentWorkflowYaml(inputs));
45
+ await writeWorkflow(targetDir, APPLY_WORKFLOW_PATH, applyWorkflowYaml(inputs));
46
+ };
47
+ export const collectSecretValues = (graph, env, generatedValues) => {
48
+ const { env: envKeys, generated: generatedKeys } = collectSecrets(graph);
49
+ const values = {};
50
+ for (const key of envKeys) {
51
+ const value = env[key];
52
+ if (value !== undefined && value !== "") {
53
+ values[key] = value;
54
+ }
55
+ }
56
+ for (const key of generatedKeys) {
57
+ const value = generatedValues[key];
58
+ if (value !== undefined) {
59
+ values[key] = value;
60
+ }
61
+ }
62
+ return values;
63
+ };
64
+ export const setRepoSecrets = async (args) => {
65
+ for (const [secretName, data] of Object.entries(args.secrets)) {
66
+ await args.api.setRepoSecret({
67
+ baseUrl: args.baseUrl,
68
+ user: args.user,
69
+ password: args.password,
70
+ owner: args.owner,
71
+ name: args.name,
72
+ secretName: forgejoSecretName(secretName),
73
+ data,
74
+ });
75
+ }
76
+ };
77
+ //# sourceMappingURL=adopt-pipelines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adopt-pipelines.js","sourceRoot":"","sources":["../../src/pipelines/adopt-pipelines.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type DesiredStateGraph, type SecretSource } from "@intentic/graph";
2
+ import { type ForgejoApi } from "@intentic/providers";
3
+ export declare const forgejoIdentity: (graph: DesiredStateGraph) => {
4
+ readonly domain: string;
5
+ readonly user: string;
6
+ readonly adminPasswordRef: {
7
+ readonly source: SecretSource;
8
+ readonly key: string;
9
+ };
10
+ };
11
+ export declare const syncControlPlaneSecrets: (args: {
12
+ readonly previousGraph: DesiredStateGraph | undefined;
13
+ readonly newGraph: DesiredStateGraph;
14
+ readonly env: Readonly<Record<string, string | undefined>>;
15
+ readonly dir: string;
16
+ readonly password: string;
17
+ readonly cliVersion: string;
18
+ readonly log: (message: string) => void;
19
+ readonly api?: ForgejoApi;
20
+ }) => Promise<{
21
+ readonly pushed: readonly string[];
22
+ readonly newEnv: readonly string[];
23
+ }>;
24
+ //# sourceMappingURL=control-plane-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control-plane-sync.d.ts","sourceRoot":"","sources":["../../src/pipelines/control-plane-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,KAAK,UAAU,EAAc,MAAM,qBAAqB,CAAC;AAOlE,eAAO,MAAM,eAAe,GACxB,OAAO,iBAAiB,KACzB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,gBAAgB,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CAetI,CAAC;AASF,eAAO,MAAM,uBAAuB,GAAU,MAAM;IAChD,QAAQ,CAAC,aAAa,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAE3D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;CAC7B,KAAG,OAAO,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAkDrF,CAAC"}