@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.
- package/LICENSE +21 -0
- package/README.md +80 -0
- package/dist/add-app/add-app.command.d.ts +3 -0
- package/dist/add-app/add-app.command.d.ts.map +1 -0
- package/dist/add-app/add-app.command.js +50 -0
- package/dist/add-app/add-app.command.js.map +1 -0
- package/dist/adopt/adopt.command.d.ts +3 -0
- package/dist/adopt/adopt.command.d.ts.map +1 -0
- package/dist/adopt/adopt.command.js +77 -0
- package/dist/adopt/adopt.command.js.map +1 -0
- package/dist/adopt/adopt.d.ts +21 -0
- package/dist/adopt/adopt.d.ts.map +1 -0
- package/dist/adopt/adopt.js +31 -0
- package/dist/adopt/adopt.js.map +1 -0
- package/dist/app.d.ts +2 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +46 -0
- package/dist/app.js.map +1 -0
- package/dist/apply/access.d.ts +16 -0
- package/dist/apply/access.d.ts.map +1 -0
- package/dist/apply/access.js +72 -0
- package/dist/apply/access.js.map +1 -0
- package/dist/apply/apply-lock.d.ts +12 -0
- package/dist/apply/apply-lock.d.ts.map +1 -0
- package/dist/apply/apply-lock.js +102 -0
- package/dist/apply/apply-lock.js.map +1 -0
- package/dist/apply/apply.command.d.ts +3 -0
- package/dist/apply/apply.command.d.ts.map +1 -0
- package/dist/apply/apply.command.js +144 -0
- package/dist/apply/apply.command.js.map +1 -0
- package/dist/apply/migrate.d.ts +20 -0
- package/dist/apply/migrate.d.ts.map +1 -0
- package/dist/apply/migrate.js +112 -0
- package/dist/apply/migrate.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +5 -0
- package/dist/cli.js.map +1 -0
- package/dist/demo.d.ts +2 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +281 -0
- package/dist/demo.js.map +1 -0
- package/dist/deployments/deployments.command.d.ts +3 -0
- package/dist/deployments/deployments.command.d.ts.map +1 -0
- package/dist/deployments/deployments.command.js +19 -0
- package/dist/deployments/deployments.command.js.map +1 -0
- package/dist/deployments/deployments.d.ts +14 -0
- package/dist/deployments/deployments.d.ts.map +1 -0
- package/dist/deployments/deployments.js +83 -0
- package/dist/deployments/deployments.js.map +1 -0
- package/dist/env.config.d.ts +25 -0
- package/dist/env.config.d.ts.map +1 -0
- package/dist/env.config.js +31 -0
- package/dist/env.config.js.map +1 -0
- package/dist/host-ssh-tunnel/host-ssh-tunnel.command.d.ts +3 -0
- package/dist/host-ssh-tunnel/host-ssh-tunnel.command.d.ts.map +1 -0
- package/dist/host-ssh-tunnel/host-ssh-tunnel.command.js +39 -0
- package/dist/host-ssh-tunnel/host-ssh-tunnel.command.js.map +1 -0
- package/dist/host-ssh-tunnel/host-ssh-tunnel.d.ts +14 -0
- package/dist/host-ssh-tunnel/host-ssh-tunnel.d.ts.map +1 -0
- package/dist/host-ssh-tunnel/host-ssh-tunnel.js +21 -0
- package/dist/host-ssh-tunnel/host-ssh-tunnel.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/init/init.command.d.ts +3 -0
- package/dist/init/init.command.d.ts.map +1 -0
- package/dist/init/init.command.js +45 -0
- package/dist/init/init.command.js.map +1 -0
- package/dist/init/init.d.ts +7 -0
- package/dist/init/init.d.ts.map +1 -0
- package/dist/init/init.js +39 -0
- package/dist/init/init.js.map +1 -0
- package/dist/init/scaffold-app.d.ts +2 -0
- package/dist/init/scaffold-app.d.ts.map +1 -0
- package/dist/init/scaffold-app.js +27 -0
- package/dist/init/scaffold-app.js.map +1 -0
- package/dist/lib/artifact.d.ts +10 -0
- package/dist/lib/artifact.d.ts.map +1 -0
- package/dist/lib/artifact.js +29 -0
- package/dist/lib/artifact.js.map +1 -0
- package/dist/lib/cf-tunnel.d.ts +11 -0
- package/dist/lib/cf-tunnel.d.ts.map +1 -0
- package/dist/lib/cf-tunnel.js +30 -0
- package/dist/lib/cf-tunnel.js.map +1 -0
- package/dist/lib/known-hosts.d.ts +3 -0
- package/dist/lib/known-hosts.d.ts.map +1 -0
- package/dist/lib/known-hosts.js +18 -0
- package/dist/lib/known-hosts.js.map +1 -0
- package/dist/lib/output.d.ts +14 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +56 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/run-log.d.ts +3 -0
- package/dist/lib/run-log.d.ts.map +1 -0
- package/dist/lib/run-log.js +62 -0
- package/dist/lib/run-log.js.map +1 -0
- package/dist/lib/templates.d.ts +2 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +6 -0
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/version.d.ts +2 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +3 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/logs/logs.command.d.ts +3 -0
- package/dist/logs/logs.command.d.ts.map +1 -0
- package/dist/logs/logs.command.js +86 -0
- package/dist/logs/logs.command.js.map +1 -0
- package/dist/monorepo/monorepo.command.d.ts +3 -0
- package/dist/monorepo/monorepo.command.d.ts.map +1 -0
- package/dist/monorepo/monorepo.command.js +28 -0
- package/dist/monorepo/monorepo.command.js.map +1 -0
- package/dist/pipelines/adopt-pipelines.d.ts +35 -0
- package/dist/pipelines/adopt-pipelines.d.ts.map +1 -0
- package/dist/pipelines/adopt-pipelines.js +77 -0
- package/dist/pipelines/adopt-pipelines.js.map +1 -0
- package/dist/pipelines/control-plane-sync.d.ts +24 -0
- package/dist/pipelines/control-plane-sync.d.ts.map +1 -0
- package/dist/pipelines/control-plane-sync.js +62 -0
- package/dist/pipelines/control-plane-sync.js.map +1 -0
- package/dist/plan/plan.command.d.ts +3 -0
- package/dist/plan/plan.command.d.ts.map +1 -0
- package/dist/plan/plan.command.js +33 -0
- package/dist/plan/plan.command.js.map +1 -0
- package/dist/resolve/resolve.command.d.ts +3 -0
- package/dist/resolve/resolve.command.d.ts.map +1 -0
- package/dist/resolve/resolve.command.js +78 -0
- package/dist/resolve/resolve.command.js.map +1 -0
- package/dist/resolve/resolve.d.ts +4 -0
- package/dist/resolve/resolve.d.ts.map +1 -0
- package/dist/resolve/resolve.js +33 -0
- package/dist/resolve/resolve.js.map +1 -0
- package/dist/restore/restore.command.d.ts +3 -0
- package/dist/restore/restore.command.d.ts.map +1 -0
- package/dist/restore/restore.command.js +68 -0
- package/dist/restore/restore.command.js.map +1 -0
- package/dist/sandbox-tunnel/sandbox-tunnel.command.d.ts +3 -0
- package/dist/sandbox-tunnel/sandbox-tunnel.command.d.ts.map +1 -0
- package/dist/sandbox-tunnel/sandbox-tunnel.command.js +62 -0
- package/dist/sandbox-tunnel/sandbox-tunnel.command.js.map +1 -0
- package/dist/sandbox-tunnel/sandbox-tunnel.d.ts +18 -0
- package/dist/sandbox-tunnel/sandbox-tunnel.d.ts.map +1 -0
- package/dist/sandbox-tunnel/sandbox-tunnel.js +37 -0
- package/dist/sandbox-tunnel/sandbox-tunnel.js.map +1 -0
- package/dist/secrets/generated-secrets.d.ts +6 -0
- package/dist/secrets/generated-secrets.d.ts.map +1 -0
- package/dist/secrets/generated-secrets.js +26 -0
- package/dist/secrets/generated-secrets.js.map +1 -0
- package/dist/secrets/secret-store.d.ts +14 -0
- package/dist/secrets/secret-store.d.ts.map +1 -0
- package/dist/secrets/secret-store.js +111 -0
- package/dist/secrets/secret-store.js.map +1 -0
- package/dist/secrets/secrets.command.d.ts +6 -0
- package/dist/secrets/secrets.command.d.ts.map +1 -0
- package/dist/secrets/secrets.command.js +106 -0
- package/dist/secrets/secrets.command.js.map +1 -0
- package/dist/secrets/secrets.d.ts +7 -0
- package/dist/secrets/secrets.d.ts.map +1 -0
- package/dist/secrets/secrets.js +14 -0
- package/dist/secrets/secrets.js.map +1 -0
- package/package.json +69 -0
- package/templates/access.md.eta +21 -0
- package/templates/demo/Dockerfile.eta +5 -0
- package/templates/demo/deploy.config.ts.eta +23 -0
- package/templates/demo/env.eta +2 -0
- package/templates/env-example.eta +6 -0
- package/templates/scaffold/Dockerfile.eta +7 -0
- package/templates/scaffold/deploy.config.selfhost.ts.eta +18 -0
- package/templates/scaffold/deploy.config.ts.eta +22 -0
- package/templates/scaffold/server.js.eta +9 -0
- package/templates/workflows/apply.yaml.eta +28 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAKA,eAAO,MAAQ,OAAO,QAAgF,CAAC"}
|
|
@@ -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 @@
|
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAuB,YAAY,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,YAAY,GAAG,GAAG,CAAC;AAIzB,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAMtC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,IAAY,EAAE,IAAY,EAAU,EAAE,CAClE;IACI,yBAAyB,IAAI,uBAAuB;IACpD,uBAAuB,IAAI,sCAAsC,IAAI,qBAAqB,IAAI,wCAAwC,IAAI,EAAE;IAC5I,MAAM;IACN,uDAAuD,EAAE,yDAAyD,IAAI,iBAAiB;IACvI,oEAAoE,EAAE,iBAAiB,IAAI,iCAAiC;IAC5H,iFAAiF,IAAI,kBAAkB;IACvG,IAAI;CACP,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAOjB,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;IACpC,IAAI,EAAE,EAAE,KAAK,EAAE,mEAAmE,EAAE;IACpF,UAAU,EAAE;QACR,KAAK,EAAE;YACH,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,kCAAkC,aAAa,GAAG,EAAE;YACtH,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,gCAAgC,YAAY,GAAG,EAAE;SACxH;QACD,UAAU,EAAE;YACR,IAAI,EAAE,OAAO;YACb,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,2DAA2D,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;SACzI;KACJ;IACD,KAAK,CAAC,IAAI,CAAuB,KAAgB,EAAE,EAAW;QAC1D,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC,CAAC;QAC/F,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC;QACjD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAI3C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC;QAC9I,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YACjD,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,qHAAqH,CAAC,CAAC;YAChI,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACtF,OAAO;QACX,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,wDAAwD,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,oEAAoE,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;QAC1H,CAAC;QAGD,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,YAAY,IAAI,CAAC,IAAI,qEAAqE,CAAC,CAAC;QACtH,CAAC;QACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC;YAGD,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpG,OAAO,IAAI,KAAK,CAAC;gBACjB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClC,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACjB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,EAAE,kBAAkB,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvG,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,YAAY,EAAE,CAAC,CAAC;QACnF,CAAC;gBAAS,CAAC;YACP,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACxB,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;CACJ,CAAC,CAAC"}
|
|
@@ -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"}
|