@eudiplo/cli 8.0.2 → 8.1.0-main.05183ed

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 (85) hide show
  1. package/README.md +7 -3
  2. package/dist/commands/config/portability/migrations.spec.js +5 -3
  3. package/dist/commands/config/portability/migrations.spec.js.map +1 -1
  4. package/dist/commands/deployment/action.d.ts +1 -1
  5. package/dist/commands/deployment/action.d.ts.map +1 -1
  6. package/dist/commands/deployment/action.js.map +1 -1
  7. package/dist/commands/deployment/index.d.ts.map +1 -1
  8. package/dist/commands/deployment/index.js +7 -4
  9. package/dist/commands/deployment/index.js.map +1 -1
  10. package/dist/commands/doctor/action.d.ts +2 -1
  11. package/dist/commands/doctor/action.d.ts.map +1 -1
  12. package/dist/commands/doctor/action.js +25 -7
  13. package/dist/commands/doctor/action.js.map +1 -1
  14. package/dist/commands/doctor/index.d.ts.map +1 -1
  15. package/dist/commands/doctor/index.js +2 -0
  16. package/dist/commands/doctor/index.js.map +1 -1
  17. package/dist/commands/open/action.d.ts +9 -0
  18. package/dist/commands/open/action.d.ts.map +1 -0
  19. package/dist/commands/open/action.js +41 -0
  20. package/dist/commands/open/action.js.map +1 -0
  21. package/dist/commands/open/index.d.ts +5 -0
  22. package/dist/commands/open/index.d.ts.map +1 -0
  23. package/dist/commands/open/index.js +15 -0
  24. package/dist/commands/open/index.js.map +1 -0
  25. package/dist/commands/upgrade/action.d.ts +3 -0
  26. package/dist/commands/upgrade/action.d.ts.map +1 -0
  27. package/dist/commands/upgrade/action.js +95 -0
  28. package/dist/commands/upgrade/action.js.map +1 -0
  29. package/dist/commands/upgrade/index.d.ts +5 -0
  30. package/dist/commands/upgrade/index.d.ts.map +1 -0
  31. package/dist/commands/upgrade/index.js +15 -0
  32. package/dist/commands/upgrade/index.js.map +1 -0
  33. package/dist/index.js +3139 -550
  34. package/dist/runtime.d.ts.map +1 -1
  35. package/dist/runtime.js +5 -1
  36. package/dist/runtime.js.map +1 -1
  37. package/dist/services/api-auth.d.ts +31 -0
  38. package/dist/services/api-auth.d.ts.map +1 -0
  39. package/dist/services/api-auth.js +78 -0
  40. package/dist/services/api-auth.js.map +1 -0
  41. package/dist/services/backend-checks.d.ts +24 -0
  42. package/dist/services/backend-checks.d.ts.map +1 -0
  43. package/dist/services/backend-checks.js +105 -0
  44. package/dist/services/backend-checks.js.map +1 -0
  45. package/dist/services/browser.d.ts +30 -0
  46. package/dist/services/browser.d.ts.map +1 -0
  47. package/dist/services/browser.js +102 -0
  48. package/dist/services/browser.js.map +1 -0
  49. package/dist/services/compose-args.d.ts +28 -0
  50. package/dist/services/compose-args.d.ts.map +1 -0
  51. package/dist/services/compose-args.js +117 -0
  52. package/dist/services/compose-args.js.map +1 -0
  53. package/dist/services/compose-project.js +6 -6
  54. package/dist/services/compose-project.js.map +1 -1
  55. package/dist/services/compose-upgrade.d.ts +40 -0
  56. package/dist/services/compose-upgrade.d.ts.map +1 -0
  57. package/dist/services/compose-upgrade.js +102 -0
  58. package/dist/services/compose-upgrade.js.map +1 -0
  59. package/dist/services/container-state.d.ts +14 -0
  60. package/dist/services/container-state.d.ts.map +1 -0
  61. package/dist/services/container-state.js +70 -0
  62. package/dist/services/container-state.js.map +1 -0
  63. package/dist/services/deployment-drivers.d.ts +8 -1
  64. package/dist/services/deployment-drivers.d.ts.map +1 -1
  65. package/dist/services/deployment-drivers.js +162 -19
  66. package/dist/services/deployment-drivers.js.map +1 -1
  67. package/dist/services/diagnostics.d.ts +19 -2
  68. package/dist/services/diagnostics.d.ts.map +1 -1
  69. package/dist/services/diagnostics.js +219 -50
  70. package/dist/services/diagnostics.js.map +1 -1
  71. package/dist/services/tls-expiry.d.ts +16 -0
  72. package/dist/services/tls-expiry.d.ts.map +1 -0
  73. package/dist/services/tls-expiry.js +80 -0
  74. package/dist/services/tls-expiry.js.map +1 -0
  75. package/dist/types.d.ts +5 -1
  76. package/dist/types.d.ts.map +1 -1
  77. package/package.json +4 -4
  78. package/templates/demo-config/trust-lists/trustlist-580831bc-ef11-43f4-a3be-a2b6bf1b29a3-config.json +1 -97
  79. package/templates/docker-compose.yml +35 -28
  80. package/templates/schemas/IssuanceConfig.schema.json +13 -0
  81. package/templates/schemas/IssuanceConfigFile.schema.json +663 -1
  82. package/templates/schemas/KeyChainConfigFile.schema.json +7 -3
  83. package/templates/schemas/KeyChainImportDto.schema.json +7 -3
  84. package/templates/schemas/PresentationConfigCreateDto.schema.json +3 -6
  85. package/templates/schemas/PresentationConfigFile.schema.json +723 -1
@@ -1 +1 @@
1
- {"version":3,"file":"compose-project.js","sourceRoot":"","sources":["../../src/services/compose-project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compose-project.js","sourceRoot":"","sources":["../../src/services/compose-project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Application upgrades for Compose instances.
3
+ *
4
+ * The CLI manages exactly two lines in the instance env file:
5
+ * EUDIPLO_IMAGE and EUDIPLO_CLIENT_IMAGE, pointing at the official images.
6
+ * An upgrade rewrites the tag on those lines and nothing else: every other
7
+ * byte of the file, including comments, ordering, user keys and line
8
+ * endings, is kept as it was.
9
+ */
10
+ declare const managedImages: {
11
+ readonly EUDIPLO_IMAGE: "ghcr.io/openwallet-foundation/eudiplo";
12
+ readonly EUDIPLO_CLIENT_IMAGE: "ghcr.io/openwallet-foundation/eudiplo-client";
13
+ };
14
+ type ManagedKey = keyof typeof managedImages;
15
+ interface ImageChange {
16
+ key: ManagedKey;
17
+ repository: string;
18
+ from: string;
19
+ to: string;
20
+ }
21
+ interface UpgradePlan {
22
+ changes: ImageChange[];
23
+ /** The env file with only the managed tags replaced. */
24
+ content: string;
25
+ }
26
+ export declare function assertImageTag(tag: string): void;
27
+ /**
28
+ * Plans a tag change for the managed image lines. Refuses rather than
29
+ * guesses when a line has been customised (another registry, a digest, or
30
+ * no tag), because that line is then user-managed.
31
+ */
32
+ export declare function planImageUpgrade(content: string, tag: string): UpgradePlan;
33
+ /**
34
+ * Notes to show before an upgrade: the migration guide for every major
35
+ * version crossed, a downgrade warning, or a pointer to the guide index when
36
+ * the tags are not plain versions (e.g. "latest").
37
+ */
38
+ export declare function migrationNotes(from: string, to: string): string[];
39
+ export {};
40
+ //# sourceMappingURL=compose-upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-upgrade.d.ts","sourceRoot":"","sources":["../../src/services/compose-upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,QAAA,MAAM,aAAa;aACf,aAAa,EAAE,uCAAuC;aACtD,oBAAoB,EAAE,8CAA8C;CAC9D,CAAC;AAEX,KAAK,UAAU,GAAG,MAAM,OAAO,aAAa,CAAC;AAE7C,UAAU,WAAW;IACjB,GAAG,EAAE,UAAU,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACd;AAED,UAAU,WAAW;IACjB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAC;CACnB;AAKD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMhD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAiD1E;AA0BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBjE"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Application upgrades for Compose instances.
3
+ *
4
+ * The CLI manages exactly two lines in the instance env file:
5
+ * EUDIPLO_IMAGE and EUDIPLO_CLIENT_IMAGE, pointing at the official images.
6
+ * An upgrade rewrites the tag on those lines and nothing else: every other
7
+ * byte of the file, including comments, ordering, user keys and line
8
+ * endings, is kept as it was.
9
+ */
10
+ const managedImages = {
11
+ EUDIPLO_IMAGE: "ghcr.io/openwallet-foundation/eudiplo",
12
+ EUDIPLO_CLIENT_IMAGE: "ghcr.io/openwallet-foundation/eudiplo-client",
13
+ };
14
+ // OCI tag grammar: up to 128 characters, no leading "." or "-".
15
+ const TAG = /^[A-Za-z0-9_][A-Za-z0-9_.-]{0,127}$/;
16
+ export function assertImageTag(tag) {
17
+ if (!TAG.test(tag)) {
18
+ throw new Error(`Invalid image tag ${JSON.stringify(tag)}. Tags contain letters, digits, "_", "." and "-", and cannot start with "." or "-".`);
19
+ }
20
+ }
21
+ /**
22
+ * Plans a tag change for the managed image lines. Refuses rather than
23
+ * guesses when a line has been customised (another registry, a digest, or
24
+ * no tag), because that line is then user-managed.
25
+ */
26
+ export function planImageUpgrade(content, tag) {
27
+ assertImageTag(tag);
28
+ const found = new Set();
29
+ const changes = [];
30
+ // Split on "\n" only, so "\r" stays attached to its line and CRLF files
31
+ // are written back with CRLF.
32
+ const lines = content.split("\n").map((line) => {
33
+ const match = /^(EUDIPLO_IMAGE|EUDIPLO_CLIENT_IMAGE)=(.*?)(\r?)$/.exec(line);
34
+ if (!match) {
35
+ return line;
36
+ }
37
+ const key = match[1];
38
+ const value = match[2];
39
+ const lineEnding = match[3];
40
+ const repository = managedImages[key];
41
+ if (found.has(key)) {
42
+ throw new Error(`${key} is defined more than once in the env file.`);
43
+ }
44
+ found.add(key);
45
+ const prefix = `${repository}:`;
46
+ const current = value.startsWith(prefix)
47
+ ? value.slice(prefix.length)
48
+ : undefined;
49
+ if (current === undefined || !TAG.test(current)) {
50
+ throw new Error(`${key} is set to ${value}, which is not a CLI-managed image. Update it yourself, or restore ${prefix}<tag> to let the CLI manage it.`);
51
+ }
52
+ if (current !== tag) {
53
+ changes.push({ key, repository, from: current, to: tag });
54
+ }
55
+ return `${key}=${prefix}${tag}${lineEnding}`;
56
+ });
57
+ if (!found.has("EUDIPLO_IMAGE")) {
58
+ throw new Error("The env file does not define EUDIPLO_IMAGE, so there is no CLI-managed image to upgrade.");
59
+ }
60
+ return { changes, content: lines.join("\n") };
61
+ }
62
+ function parseVersion(tag) {
63
+ const match = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(tag);
64
+ if (!match) {
65
+ return undefined;
66
+ }
67
+ return {
68
+ major: Number(match[1]),
69
+ minor: Number(match[2]),
70
+ patch: Number(match[3]),
71
+ };
72
+ }
73
+ function compareVersions(a, b) {
74
+ return a.major - b.major || a.minor - b.minor || a.patch - b.patch;
75
+ }
76
+ const migrationBaseUrl = "https://docs.eudiplo.dev/upgrade";
77
+ /**
78
+ * Notes to show before an upgrade: the migration guide for every major
79
+ * version crossed, a downgrade warning, or a pointer to the guide index when
80
+ * the tags are not plain versions (e.g. "latest").
81
+ */
82
+ export function migrationNotes(from, to) {
83
+ const fromVersion = parseVersion(from);
84
+ const toVersion = parseVersion(to);
85
+ if (!fromVersion || !toVersion) {
86
+ return [
87
+ `Cannot compare ${from} and ${to} as versions. Check the release notes and ${migrationBaseUrl} before continuing.`,
88
+ ];
89
+ }
90
+ const order = compareVersions(fromVersion, toVersion);
91
+ if (order > 0) {
92
+ return [
93
+ `${to} is older than ${from}. Downgrades are not supported once database migrations have run; restore a backup instead if you need to go back.`,
94
+ ];
95
+ }
96
+ const notes = [];
97
+ for (let major = fromVersion.major + 1; major <= toVersion.major; major++) {
98
+ notes.push(`Major version ${major}: read ${migrationBaseUrl}/${major - 1}.x-to-${major}.0 first.`);
99
+ }
100
+ return notes;
101
+ }
102
+ //# sourceMappingURL=compose-upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose-upgrade.js","sourceRoot":"","sources":["../../src/services/compose-upgrade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { DoctorCheck } from "../types.js";
2
+ export interface ContainerState {
3
+ name: string;
4
+ state: string;
5
+ status: string;
6
+ }
7
+ /**
8
+ * Parses `docker ps --format json` (one JSON object per line) and
9
+ * `podman ps --format json` (a single JSON array). Field shapes differ
10
+ * slightly: Podman reports Names as an array, Docker as a string.
11
+ */
12
+ export declare function parseContainerStates(stdout: string): ContainerState[];
13
+ export declare function summarizeContainerStates(containers: ContainerState[], projectName: string): DoctorCheck;
14
+ //# sourceMappingURL=container-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-state.d.ts","sourceRoot":"","sources":["../../src/services/container-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,CAyBrE;AAED,wBAAgB,wBAAwB,CACpC,UAAU,EAAE,cAAc,EAAE,EAC5B,WAAW,EAAE,MAAM,GACpB,WAAW,CAwCb"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Parses `docker ps --format json` (one JSON object per line) and
3
+ * `podman ps --format json` (a single JSON array). Field shapes differ
4
+ * slightly: Podman reports Names as an array, Docker as a string.
5
+ */
6
+ export function parseContainerStates(stdout) {
7
+ const trimmed = stdout.trim();
8
+ if (!trimmed) {
9
+ return [];
10
+ }
11
+ const entries = trimmed.startsWith("[")
12
+ ? asArray(JSON.parse(trimmed))
13
+ : trimmed
14
+ .split("\n")
15
+ .map((line) => line.trim())
16
+ .filter((line) => line.startsWith("{"))
17
+ .map((line) => JSON.parse(line));
18
+ return entries.map((entry) => {
19
+ const record = entry;
20
+ const names = record.Names;
21
+ return {
22
+ name: Array.isArray(names)
23
+ ? String(names[0] ?? "")
24
+ : String(names ?? record.Name ?? ""),
25
+ state: String(record.State ?? ""),
26
+ status: String(record.Status ?? ""),
27
+ };
28
+ });
29
+ }
30
+ export function summarizeContainerStates(containers, projectName) {
31
+ const name = "service containers";
32
+ if (containers.length === 0) {
33
+ return {
34
+ name,
35
+ status: "warn",
36
+ message: `No containers found for project ${projectName}. Start it with eudiplo up.`,
37
+ };
38
+ }
39
+ const unhealthy = containers.filter((container) => container.status.toLowerCase().includes("unhealthy"));
40
+ if (unhealthy.length > 0) {
41
+ return {
42
+ name,
43
+ status: "fail",
44
+ message: `Unhealthy: ${describe(unhealthy)}`,
45
+ };
46
+ }
47
+ const notRunning = containers.filter((container) => container.state.toLowerCase() !== "running");
48
+ if (notRunning.length > 0) {
49
+ return {
50
+ name,
51
+ status: "warn",
52
+ message: `${containers.length - notRunning.length}/${containers.length} running. Not running: ${describe(notRunning)}`,
53
+ };
54
+ }
55
+ const starting = containers.filter((container) => container.status.toLowerCase().includes("starting")).length;
56
+ return {
57
+ name,
58
+ status: "pass",
59
+ message: `${containers.length} container(s) running${starting > 0 ? `, ${starting} still starting` : ""}.`,
60
+ };
61
+ }
62
+ function asArray(value) {
63
+ return Array.isArray(value) ? value : [];
64
+ }
65
+ function describe(containers) {
66
+ return containers
67
+ .map((container) => `${container.name} (${container.status})`)
68
+ .join(", ");
69
+ }
70
+ //# sourceMappingURL=container-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-state.js","sourceRoot":"","sources":["../../src/services/container-state.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
- import type { DeploymentDriver, DeploymentTarget, InstanceConfig } from "../types.js";
1
+ import type { DeploymentDriver, DeploymentTarget, DriverCommandOptions, InstanceConfig } from "../types.js";
2
2
  type ContainerRuntimeName = "docker" | "podman";
3
3
  interface ComposeRuntime {
4
4
  command: string;
5
5
  name: ContainerRuntimeName;
6
6
  }
7
7
  export declare const drivers: Record<DeploymentTarget, DeploymentDriver>;
8
+ /**
9
+ * A read-only instance is registered by someone who holds credentials for a
10
+ * cluster they do not operate, so a mutation is refused outright rather than
11
+ * attempted and left to fail on permissions.
12
+ */
13
+ export declare function assertWritable({ instance, instanceName, }: DriverCommandOptions): void;
8
14
  export declare function readReplicaCounts(stdout: string): {
9
15
  ready: number;
10
16
  desired: number;
@@ -31,6 +37,7 @@ export declare function ensureComposeProject(cwd: string, options: {
31
37
  }): Promise<InstanceConfig>;
32
38
  export declare function demoProjectExists(cwd: string): Promise<boolean>;
33
39
  export declare function unsupportedCommand(command: string, target: DeploymentTarget): string;
40
+ export declare function runCompose(args: string[], { instance, context }: DriverCommandOptions): Promise<number>;
34
41
  export declare function resolveComposeRuntime(env: NodeJS.ProcessEnv): Promise<ComposeRuntime | undefined>;
35
42
  export {};
36
43
  //# sourceMappingURL=deployment-drivers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"deployment-drivers.d.ts","sourceRoot":"","sources":["../../src/services/deployment-drivers.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,EAER,gBAAgB,EAChB,gBAAgB,EAGhB,cAAc,EACjB,MAAM,aAAa,CAAC;AAErB,KAAK,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD,UAAU,cAAc;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,CAAC;CAC9B;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CA+F9D,CAAC;AA+MF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB,CAaA;AA2CD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAkCzD;AA6ED,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IACL,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,GACF,OAAO,CAAC,cAAc,CAAC,CAqFzB;AAwCD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;AAaD,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,gBAAgB,GACzB,MAAM,CAKR;AAgDD,wBAAsB,qBAAqB,CACvC,GAAG,EAAE,MAAM,CAAC,UAAU,GACvB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAgBrC"}
1
+ {"version":3,"file":"deployment-drivers.d.ts","sourceRoot":"","sources":["../../src/services/deployment-drivers.ts"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAER,gBAAgB,EAChB,gBAAgB,EAEhB,oBAAoB,EACpB,cAAc,EACjB,MAAM,aAAa,CAAC;AAErB,KAAK,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhD,UAAU,cAAc;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,CAAC;CAC9B;AAED,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CA8I9D,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC3B,QAAQ,EACR,YAAY,GACf,EAAE,oBAAoB,GAAG,IAAI,CAM7B;AAmMD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB,CAaA;AA2CD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAqCzD;AA6ED,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IACL,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B,GACF,OAAO,CAAC,cAAc,CAAC,CAqFzB;AAwCD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE;AAaD,wBAAgB,kBAAkB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,gBAAgB,GACzB,MAAM,CAKR;AAED,wBAAsB,UAAU,CAC5B,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,oBAAoB,GAC5C,OAAO,CAAC,MAAM,CAAC,CAgCjB;AA+KD,wBAAsB,qBAAqB,CACvC,GAAG,EAAE,MAAM,CAAC,UAAU,GACvB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAgBrC"}
@@ -2,6 +2,8 @@ import { access, mkdir, rm, stat, unlink, writeFile } from "node:fs/promises";
2
2
  import { delimiter, join, resolve } from "node:path";
3
3
  import { spawn } from "node:child_process";
4
4
  import { copyBundledDemoConfig, createComposeFile, createComposeEnv, createGlobalKmsConfig, createNoClientComposeOverride, configDirectoryName, demoComposeFileName, demoConfigDirectory, demoEnvFileName, defaultComposeFileName, defaultComposeOverrideFileName, defaultEnvFileName, hasFiles, } from "./compose-project.js";
5
+ import { assertKnownService, assertServiceName, buildComposeBaseArgs, buildComposeListServicesArgs, buildComposeLogsArgs, buildComposePsArgs, buildComposePullArgs, buildComposeRestartArgs, parseServiceList, } from "./compose-args.js";
6
+ import { parseContainerStates, summarizeContainerStates, } from "./container-state.js";
5
7
  import { buildCanIArgs, buildLogsArgs, buildRestartArgs, buildRolloutStatusArgs, resolveWorkload, buildGetEndpointSlicesArgs, buildGetPodsArgs, buildGetWorkloadArgs, resolveScope, resolveWorkloads, } from "./kubectl.js";
6
8
  export const drivers = {
7
9
  compose: {
@@ -17,6 +19,10 @@ export const drivers = {
17
19
  ? `${runtime.name} found at ${runtime.command}`
18
20
  : "Docker or Podman was not found in a supported install location.",
19
21
  });
22
+ if (runtime) {
23
+ checks.push(await composeProviderCheck(runtime, context));
24
+ checks.push(await composeServicesCheck(runtime, instance, context));
25
+ }
20
26
  for (const composeFile of getComposeFiles(instance)) {
21
27
  let found = true;
22
28
  try {
@@ -41,8 +47,33 @@ export const drivers = {
41
47
  down(options) {
42
48
  return runCompose(["down", ...options.args], options);
43
49
  },
44
- logs(options) {
45
- return runCompose(["logs", "-f", ...options.args], options);
50
+ async logs(options) {
51
+ const service = await resolveComposeService(options);
52
+ const { follow, tail } = readLogOptions(options.flags);
53
+ const since = typeof options.flags.since === "string"
54
+ ? options.flags.since
55
+ : undefined;
56
+ return runCompose([
57
+ ...buildComposeLogsArgs(service, { follow, tail, since }),
58
+ ...options.args,
59
+ ], options);
60
+ },
61
+ async ps(options) {
62
+ return runCompose([...buildComposePsArgs(), ...options.args], options);
63
+ },
64
+ async pull(options) {
65
+ const service = await resolveComposeService(options);
66
+ return runCompose([...buildComposePullArgs(service), ...options.args], options);
67
+ },
68
+ async restart(options) {
69
+ assertWritable(options);
70
+ const service = await resolveComposeService(options);
71
+ const restartArgs = buildComposeRestartArgs(service);
72
+ const runtime = await resolveComposeRuntime(options.context.env);
73
+ // Name the target before changing anything, as the Kubernetes
74
+ // driver does, including which runtime will carry it out.
75
+ options.context.stdout.write(`Restarting ${service ?? "all services"} of ${options.instanceName}${runtime ? ` with ${runtime.name} compose` : ""}\n`);
76
+ return runCompose([...restartArgs, ...options.args], options);
46
77
  },
47
78
  },
48
79
  external: {
@@ -74,7 +105,7 @@ export const drivers = {
74
105
  // command is restarting the right workload in the wrong cluster.
75
106
  options.context.stdout.write(`Restarting ${workload} in namespace ${scope.namespace} on context ${scope.context}\n`);
76
107
  const restarted = await runKubectl([...buildRestartArgs(scope, workload), ...options.args], options);
77
- if (restarted !== 0 || options.flags.wait === false) {
108
+ if (restarted !== 0 || options.flags["no-wait"] === true) {
78
109
  return restarted;
79
110
  }
80
111
  return runKubectl(buildRolloutStatusArgs(scope, workload), options);
@@ -86,7 +117,7 @@ export const drivers = {
86
117
  * cluster they do not operate, so a mutation is refused outright rather than
87
118
  * attempted and left to fail on permissions.
88
119
  */
89
- function assertWritable({ instance, instanceName }) {
120
+ export function assertWritable({ instance, instanceName, }) {
90
121
  if (instance.readOnly === true) {
91
122
  throw new Error(`Instance ${instanceName} is registered read-only. Re-register it without --read-only to allow changes.`);
92
123
  }
@@ -491,22 +522,12 @@ export function unsupportedCommand(command, target) {
491
522
  }
492
523
  return `${command} is not available for ${target} deployments`;
493
524
  }
494
- async function runCompose(args, { instance, context }) {
525
+ export async function runCompose(args, { instance, context }) {
495
526
  const projectDirectory = instance.projectDirectory ?? context.cwd;
496
- const composeArgs = ["compose"];
497
- if (instance.envFile) {
498
- composeArgs.push("--env-file", resolve(projectDirectory, instance.envFile));
499
- }
500
- for (const composeFile of getComposeFiles(instance)) {
501
- composeArgs.push("-f", resolve(projectDirectory, composeFile));
502
- }
503
- for (const profile of instance.composeProfiles ?? []) {
504
- composeArgs.push("--profile", profile);
505
- }
506
- if (instance.projectName) {
507
- composeArgs.push("--project-name", instance.projectName);
508
- }
509
- composeArgs.push(...args);
527
+ const composeArgs = [
528
+ ...buildComposeBaseArgs(instance, projectDirectory, getComposeFiles(instance)),
529
+ ...args,
530
+ ];
510
531
  const composeRuntime = await resolveComposeRuntime(context.env);
511
532
  if (!composeRuntime) {
512
533
  context.stderr.write("Docker or Podman was not found in a supported install location.\n");
@@ -525,6 +546,128 @@ async function runCompose(args, { instance, context }) {
525
546
  child.on("close", (code) => resolveProcess(code ?? 1));
526
547
  });
527
548
  }
549
+ /**
550
+ * Runs Compose with captured output. Used for read-only queries whose
551
+ * result the CLI needs, such as the service list.
552
+ */
553
+ async function captureCompose(args, { instance, context }) {
554
+ const projectDirectory = instance.projectDirectory ?? context.cwd;
555
+ const composeRuntime = await resolveComposeRuntime(context.env);
556
+ if (!composeRuntime) {
557
+ throw new Error("Docker or Podman was not found in a supported install location.");
558
+ }
559
+ const composeArgs = [
560
+ ...buildComposeBaseArgs(instance, projectDirectory, getComposeFiles(instance)),
561
+ ...args,
562
+ ];
563
+ return new Promise((resolveProcess) => {
564
+ const child = spawn(composeRuntime.command, composeArgs, {
565
+ cwd: projectDirectory,
566
+ env: context.env,
567
+ stdio: ["ignore", "pipe", "pipe"],
568
+ });
569
+ let stdout = "";
570
+ let stderr = "";
571
+ child.stdout?.on("data", (chunk) => {
572
+ stdout += String(chunk);
573
+ });
574
+ child.stderr?.on("data", (chunk) => {
575
+ stderr += String(chunk);
576
+ });
577
+ child.on("error", (error) => resolveProcess({ code: 1, stdout, stderr: error.message }));
578
+ child.on("close", (code) => resolveProcess({ code: code ?? 1, stdout, stderr }));
579
+ });
580
+ }
581
+ /**
582
+ * Validates `--service` against the services Compose actually defines for
583
+ * this instance, so a typo fails with the list of real names instead of a
584
+ * runtime error.
585
+ */
586
+ async function resolveComposeService(options) {
587
+ const service = readServiceFlag(options.flags);
588
+ if (service === undefined) {
589
+ return undefined;
590
+ }
591
+ assertServiceName(service);
592
+ const listed = await captureCompose(buildComposeListServicesArgs(), options);
593
+ if (listed.code !== 0) {
594
+ throw new Error(`Could not list Compose services: ${listed.stderr.trim() || `exit code ${listed.code}`}`);
595
+ }
596
+ assertKnownService(service, parseServiceList(listed.stdout));
597
+ return service;
598
+ }
599
+ /**
600
+ * `podman compose` delegates to an external provider, and a broken or
601
+ * missing provider only shows up when a command is run. Asking the runtime
602
+ * for its compose version surfaces that here instead.
603
+ */
604
+ async function composeProviderCheck(runtime, context) {
605
+ const version = await captureRuntime(runtime.command, ["compose", "version"], context);
606
+ if (version.code !== 0) {
607
+ return {
608
+ name: "compose provider",
609
+ status: "fail",
610
+ message: `${runtime.name} compose is not usable: ${firstLine(version.stderr) || `exit code ${version.code}`}`,
611
+ };
612
+ }
613
+ return {
614
+ name: "compose provider",
615
+ status: "pass",
616
+ message: firstLine(version.stdout) || `${runtime.name} compose works`,
617
+ };
618
+ }
619
+ async function composeServicesCheck(runtime, instance, context) {
620
+ if (!instance.projectName) {
621
+ return {
622
+ name: "service containers",
623
+ status: "skip",
624
+ message: "This instance has no Compose project name, so its containers cannot be identified.",
625
+ };
626
+ }
627
+ const listed = await captureRuntime(runtime.command, [
628
+ "ps",
629
+ "--all",
630
+ "--filter",
631
+ `label=com.docker.compose.project=${instance.projectName}`,
632
+ "--format",
633
+ "json",
634
+ ], context);
635
+ if (listed.code !== 0) {
636
+ return {
637
+ name: "service containers",
638
+ status: "warn",
639
+ message: `Containers could not be listed: ${firstLine(listed.stderr) || `exit code ${listed.code}`}`,
640
+ };
641
+ }
642
+ try {
643
+ return summarizeContainerStates(parseContainerStates(listed.stdout), instance.projectName);
644
+ }
645
+ catch {
646
+ return {
647
+ name: "service containers",
648
+ status: "warn",
649
+ message: `The container list returned by ${runtime.name} could not be read.`,
650
+ };
651
+ }
652
+ }
653
+ function captureRuntime(command, args, context) {
654
+ return new Promise((resolveProcess) => {
655
+ const child = spawn(command, args, {
656
+ env: context.env,
657
+ stdio: ["ignore", "pipe", "pipe"],
658
+ });
659
+ let stdout = "";
660
+ let stderr = "";
661
+ child.stdout?.on("data", (chunk) => {
662
+ stdout += String(chunk);
663
+ });
664
+ child.stderr?.on("data", (chunk) => {
665
+ stderr += String(chunk);
666
+ });
667
+ child.on("error", (error) => resolveProcess({ code: 1, stdout, stderr: error.message }));
668
+ child.on("close", (code) => resolveProcess({ code: code ?? 1, stdout, stderr }));
669
+ });
670
+ }
528
671
  export async function resolveComposeRuntime(env) {
529
672
  const preferredRuntime = parsePreferredRuntime(env.EUDIPLO_CONTAINER_RUNTIME);
530
673
  const candidates = preferredRuntime