@eudiplo/cli 8.0.2-main.e4bc4d4 → 8.1.0-main.3c4fbcd
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/README.md +2 -2
- package/dist/commands/config/portability/migrations.spec.js +5 -3
- package/dist/commands/config/portability/migrations.spec.js.map +1 -1
- package/dist/commands/doctor/action.d.ts +2 -1
- package/dist/commands/doctor/action.d.ts.map +1 -1
- package/dist/commands/doctor/action.js +25 -7
- package/dist/commands/doctor/action.js.map +1 -1
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +2 -0
- package/dist/commands/doctor/index.js.map +1 -1
- package/dist/index.js +2496 -466
- package/dist/runtime.js +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/services/api-auth.d.ts +31 -0
- package/dist/services/api-auth.d.ts.map +1 -0
- package/dist/services/api-auth.js +78 -0
- package/dist/services/api-auth.js.map +1 -0
- package/dist/services/backend-checks.d.ts +24 -0
- package/dist/services/backend-checks.d.ts.map +1 -0
- package/dist/services/backend-checks.js +105 -0
- package/dist/services/backend-checks.js.map +1 -0
- package/dist/services/compose-project.js +6 -6
- package/dist/services/compose-project.js.map +1 -1
- package/dist/services/compose-upgrade.js +1 -1
- package/dist/services/compose-upgrade.js.map +1 -1
- package/dist/services/container-state.d.ts +14 -0
- package/dist/services/container-state.d.ts.map +1 -0
- package/dist/services/container-state.js +70 -0
- package/dist/services/container-state.js.map +1 -0
- package/dist/services/deployment-drivers.d.ts.map +1 -1
- package/dist/services/deployment-drivers.js +77 -0
- package/dist/services/deployment-drivers.js.map +1 -1
- package/dist/services/diagnostics.d.ts +19 -2
- package/dist/services/diagnostics.d.ts.map +1 -1
- package/dist/services/diagnostics.js +213 -49
- package/dist/services/diagnostics.js.map +1 -1
- package/dist/services/tls-expiry.d.ts +16 -0
- package/dist/services/tls-expiry.d.ts.map +1 -0
- package/dist/services/tls-expiry.js +80 -0
- package/dist/services/tls-expiry.js.map +1 -0
- package/dist/types.d.ts +4 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/templates/demo-config/trust-lists/trustlist-580831bc-ef11-43f4-a3be-a2b6bf1b29a3-config.json +1 -97
- package/templates/docker-compose.yml +35 -28
- package/templates/schemas/IssuanceConfig.schema.json +13 -0
- package/templates/schemas/IssuanceConfigFile.schema.json +663 -1
- package/templates/schemas/PresentationConfigCreateDto.schema.json +3 -6
- package/templates/schemas/PresentationConfigFile.schema.json +723 -1
package/dist/runtime.js
CHANGED
|
@@ -36,7 +36,7 @@ export function createProgram(context, setExitCode) {
|
|
|
36
36
|
.description("Deployment-aware command line tools for EUDIPLO")
|
|
37
37
|
.version(versionText(), "-v, --version", "Print the installed CLI version")
|
|
38
38
|
.helpCommand(true)
|
|
39
|
-
.addHelpText("afterAll", "\nFor more information, see https://docs.eudiplo.dev/
|
|
39
|
+
.addHelpText("afterAll", "\nFor more information, see https://docs.eudiplo.dev/cookbooks/foundation");
|
|
40
40
|
program.addCommand(createDemoCommand(context, setExitCode));
|
|
41
41
|
program.addCommand(createInitCommand(context, setExitCode));
|
|
42
42
|
for (const command of createDeploymentCommands(context, setExitCode)) {
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EACH,iCAAiC,EACjC,uBAAuB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAGhF,MAAM,CAAC,KAAK,UAAU,MAAM,CACxB,IAAc,EACd,OAAO,GAAmB,cAAc,EAAE;IAE1C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAQ,EAAE;QAC3C,cAAc,GAAG,QAAQ,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAEpD,IAAI,CAAC;QACD,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,QAAQ,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAChE,CAAC;QACF,OAAO,CAAC,CAAC;IACb,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CACzB,OAAuB,EACvB,WAAuC;IAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SACxB,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,iDAAiD,CAAC;SAC9D,OAAO,CACJ,WAAW,EAAE,EACb,eAAe,EACf,iCAAiC,CACpC;SACA,WAAW,CAAC,IAAI,CAAC;SACjB,WAAW,CACR,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EACH,iCAAiC,EACjC,uBAAuB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAGhF,MAAM,CAAC,KAAK,UAAU,MAAM,CACxB,IAAc,EACd,OAAO,GAAmB,cAAc,EAAE;IAE1C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAQ,EAAE;QAC3C,cAAc,GAAG,QAAQ,CAAC;IAC9B,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAEpD,IAAI,CAAC;QACD,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACjD,OAAO,cAAc,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,QAAQ,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAChE,CAAC;QACF,OAAO,CAAC,CAAC;IACb,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CACzB,OAAuB,EACvB,WAAuC;IAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SACxB,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,iDAAiD,CAAC;SAC9D,OAAO,CACJ,WAAW,EAAE,EACb,eAAe,EACf,iCAAiC,CACpC;SACA,WAAW,CAAC,IAAI,CAAC;SACjB,WAAW,CACR,UAAU,EACV,2EAA2E,CAC9E,CAAC;IAEN,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5D,KAAK,MAAM,OAAO,IAAI,wBAAwB,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;QACnE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,UAAU,CAAC,uBAAuB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,UAAU,CACd,iCAAiC,CAAC,OAAO,EAAE,WAAW,CAAC,EACvD;QACI,MAAM,EAAE,IAAI;KACf,CACJ,CAAC;IACF,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,OAAO,CAAC,MAAM,CAAC,SAAS,YAAY;QAChC,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAgB,EAAE,OAAuB;IACnE,OAAO,CAAC,YAAY,EAAE,CAAC;IACvB,OAAO,CAAC,eAAe,CAAC;QACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;KACnD,CAAC,CAAC;IACH,OAAO,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC;IACtE,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;AACL,CAAC;AAED,SAAS,cAAc;IACnB,OAAO;QACH,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK;QAClD,WAAW,EACP,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;QACjE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK;KACR,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { CommandContext } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal client-credentials token fetch for the checks that need an
|
|
4
|
+
* authenticated API call. The CLI has no shared auth helper yet; when one
|
|
5
|
+
* lands, only this module should need replacing.
|
|
6
|
+
*/
|
|
7
|
+
export type TokenResult = {
|
|
8
|
+
kind: "token";
|
|
9
|
+
accessToken: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "unavailable";
|
|
12
|
+
reason: string;
|
|
13
|
+
} | {
|
|
14
|
+
kind: "error";
|
|
15
|
+
reason: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function requestAccessToken(baseUrl: URL, context: CommandContext): Promise<TokenResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Fetches an authenticated endpoint. Returns the status code and parsed
|
|
20
|
+
* body; error bodies are never returned, so nothing sensitive is printed.
|
|
21
|
+
*/
|
|
22
|
+
export declare function fetchAuthenticated(url: URL, accessToken: string, context: CommandContext): Promise<{
|
|
23
|
+
ok: true;
|
|
24
|
+
body: unknown;
|
|
25
|
+
} | {
|
|
26
|
+
ok: false;
|
|
27
|
+
status?: number;
|
|
28
|
+
reason: string;
|
|
29
|
+
}>;
|
|
30
|
+
export declare function withTrailingSlash(url: URL): URL;
|
|
31
|
+
//# sourceMappingURL=api-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-auth.d.ts","sourceRoot":"","sources":["../../src/services/api-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,wBAAsB,kBAAkB,CACpC,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,GACxB,OAAO,CAAC,WAAW,CAAC,CAgDtB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACpC,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACxB,OAAO,CACN;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAC/E,CAoBA;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAE/C"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export async function requestAccessToken(baseUrl, context) {
|
|
2
|
+
const clientId = context.env.EUDIPLO_CLIENT_ID;
|
|
3
|
+
const clientSecret = context.env.EUDIPLO_CLIENT_SECRET;
|
|
4
|
+
if (!clientId || !clientSecret) {
|
|
5
|
+
return {
|
|
6
|
+
kind: "unavailable",
|
|
7
|
+
reason: "EUDIPLO_CLIENT_ID and EUDIPLO_CLIENT_SECRET are not set",
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
const tokenUrl = new URL("api/oauth2/token", withTrailingSlash(baseUrl));
|
|
11
|
+
try {
|
|
12
|
+
const response = await context.fetch(tokenUrl, {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: { "content-type": "application/x-www-form-urlencoded" },
|
|
15
|
+
body: new URLSearchParams({
|
|
16
|
+
grant_type: "client_credentials",
|
|
17
|
+
client_id: clientId,
|
|
18
|
+
client_secret: clientSecret,
|
|
19
|
+
}).toString(),
|
|
20
|
+
});
|
|
21
|
+
if (!response.ok) {
|
|
22
|
+
// Never echo the response body: it can contain credentials.
|
|
23
|
+
return {
|
|
24
|
+
kind: "error",
|
|
25
|
+
reason: `the token endpoint returned HTTP ${response.status}`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const payload = await response.json();
|
|
29
|
+
const accessToken = typeof payload === "object" &&
|
|
30
|
+
payload !== null &&
|
|
31
|
+
"access_token" in payload
|
|
32
|
+
? String(payload.access_token)
|
|
33
|
+
: "";
|
|
34
|
+
if (!accessToken) {
|
|
35
|
+
return {
|
|
36
|
+
kind: "error",
|
|
37
|
+
reason: "the token response did not contain an access token",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return { kind: "token", accessToken };
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return {
|
|
44
|
+
kind: "error",
|
|
45
|
+
reason: `the token endpoint could not be reached: ${error instanceof Error ? error.message : String(error)}`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Fetches an authenticated endpoint. Returns the status code and parsed
|
|
51
|
+
* body; error bodies are never returned, so nothing sensitive is printed.
|
|
52
|
+
*/
|
|
53
|
+
export async function fetchAuthenticated(url, accessToken, context) {
|
|
54
|
+
try {
|
|
55
|
+
const response = await context.fetch(url, {
|
|
56
|
+
method: "GET",
|
|
57
|
+
headers: { authorization: `Bearer ${accessToken}` },
|
|
58
|
+
});
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
return {
|
|
61
|
+
ok: false,
|
|
62
|
+
status: response.status,
|
|
63
|
+
reason: `${url.pathname} returned HTTP ${response.status}`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return { ok: true, body: await response.json() };
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
return {
|
|
70
|
+
ok: false,
|
|
71
|
+
reason: `${url.pathname} could not be reached: ${error instanceof Error ? error.message : String(error)}`,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function withTrailingSlash(url) {
|
|
76
|
+
return url.href.endsWith("/") ? url : new URL(`${url.href}/`);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=api-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-auth.js","sourceRoot":"","sources":["../../src/services/api-auth.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,OAAY,EACZ,OAAuB;IAEvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC/C,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACvD,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO;YACH,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,yDAAyD;SACpE,CAAC;IACN,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;YAChE,IAAI,EAAE,IAAI,eAAe,CAAC;gBACtB,UAAU,EAAE,oBAAoB;gBAChC,SAAS,EAAE,QAAQ;gBACnB,aAAa,EAAE,YAAY;aAC9B,CAAC,CAAC,QAAQ,EAAE;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,4DAA4D;YAC5D,OAAO;gBACH,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,oCAAoC,QAAQ,CAAC,MAAM,EAAE;aAChE,CAAC;QACN,CAAC;QACD,MAAM,OAAO,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,WAAW,GACb,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,KAAK,IAAI;YAChB,cAAc,IAAI,OAAO;YACrB,CAAC,CAAC,MAAM,CAAE,OAAqC,CAAC,YAAY,CAAC;YAC7D,CAAC,CAAC,EAAE,CAAC;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO;gBACH,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,oDAAoD;aAC/D,CAAC;QACN,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,4CAA4C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC/G,CAAC;IACN,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,GAAQ,EACR,WAAmB,EACnB,OAAuB;IAIvB,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACtC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;SACtD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,OAAO;gBACH,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,kBAAkB,QAAQ,CAAC,MAAM,EAAE;aAC7D,CAAC;QACN,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SAC5G,CAAC;IACN,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACtC,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DoctorCheck } from "../types.js";
|
|
2
|
+
export interface ProviderHealth {
|
|
3
|
+
providerId: string;
|
|
4
|
+
type: string;
|
|
5
|
+
ok: boolean;
|
|
6
|
+
latencyMs?: number;
|
|
7
|
+
error?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Compares the CLI version with the backend version. A different major
|
|
11
|
+
* version is a failure, a different minor version a warning; patch
|
|
12
|
+
* differences are fine. Unparsable versions (e.g. "main" from a dev build)
|
|
13
|
+
* cannot be judged, so they warn rather than fail.
|
|
14
|
+
*/
|
|
15
|
+
export declare function compareVersions(cliVersion: string, backendVersion: string): DoctorCheck;
|
|
16
|
+
export declare function readBackendVersion(body: unknown): string | undefined;
|
|
17
|
+
export declare function readProviderHealth(body: unknown): ProviderHealth[];
|
|
18
|
+
/**
|
|
19
|
+
* Summarizes KMS provider health. Provider errors are reported by provider
|
|
20
|
+
* id and type only; the raw error text is not echoed, since it can contain
|
|
21
|
+
* endpoint details or credentials.
|
|
22
|
+
*/
|
|
23
|
+
export declare function summarizeProviderHealth(providers: ProviderHealth[]): DoctorCheck;
|
|
24
|
+
//# sourceMappingURL=backend-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-checks.d.ts","sourceRoot":"","sources":["../../src/services/backend-checks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACvB,WAAW,CA+Bb;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMpE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,cAAc,EAAE,CAiBlE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACnC,SAAS,EAAE,cAAc,EAAE,GAC5B,WAAW,CAkCb"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares the CLI version with the backend version. A different major
|
|
3
|
+
* version is a failure, a different minor version a warning; patch
|
|
4
|
+
* differences are fine. Unparsable versions (e.g. "main" from a dev build)
|
|
5
|
+
* cannot be judged, so they warn rather than fail.
|
|
6
|
+
*/
|
|
7
|
+
export function compareVersions(cliVersion, backendVersion) {
|
|
8
|
+
const name = "version compatibility";
|
|
9
|
+
const cli = parse(cliVersion);
|
|
10
|
+
const backend = parse(backendVersion);
|
|
11
|
+
if (!cli || !backend) {
|
|
12
|
+
return {
|
|
13
|
+
name,
|
|
14
|
+
status: "warn",
|
|
15
|
+
message: `CLI ${cliVersion} and backend ${backendVersion} cannot be compared as versions.`,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
if (cli.major !== backend.major) {
|
|
19
|
+
return {
|
|
20
|
+
name,
|
|
21
|
+
status: "fail",
|
|
22
|
+
message: `CLI ${cliVersion} and backend ${backendVersion} are different major versions. Install a matching CLI with npm install -g @eudiplo/cli@${backend.major}.`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (cli.minor !== backend.minor) {
|
|
26
|
+
return {
|
|
27
|
+
name,
|
|
28
|
+
status: "warn",
|
|
29
|
+
message: `CLI ${cliVersion} and backend ${backendVersion} differ in minor version; some commands may not be supported.`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
name,
|
|
34
|
+
status: "pass",
|
|
35
|
+
message: `CLI ${cliVersion} matches backend ${backendVersion}.`,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function readBackendVersion(body) {
|
|
39
|
+
if (typeof body === "object" && body !== null && "version" in body) {
|
|
40
|
+
const version = body.version;
|
|
41
|
+
return typeof version === "string" && version ? version : undefined;
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
export function readProviderHealth(body) {
|
|
46
|
+
if (!Array.isArray(body)) {
|
|
47
|
+
throw new Error("the provider health response was not a list");
|
|
48
|
+
}
|
|
49
|
+
return body.map((entry) => {
|
|
50
|
+
const record = entry;
|
|
51
|
+
return {
|
|
52
|
+
providerId: String(record.providerId ?? "unknown"),
|
|
53
|
+
type: String(record.type ?? "unknown"),
|
|
54
|
+
ok: record.ok === true,
|
|
55
|
+
latencyMs: typeof record.latencyMs === "number"
|
|
56
|
+
? record.latencyMs
|
|
57
|
+
: undefined,
|
|
58
|
+
error: typeof record.error === "string" ? record.error : undefined,
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Summarizes KMS provider health. Provider errors are reported by provider
|
|
64
|
+
* id and type only; the raw error text is not echoed, since it can contain
|
|
65
|
+
* endpoint details or credentials.
|
|
66
|
+
*/
|
|
67
|
+
export function summarizeProviderHealth(providers) {
|
|
68
|
+
const name = "KMS providers";
|
|
69
|
+
if (providers.length === 0) {
|
|
70
|
+
return {
|
|
71
|
+
name,
|
|
72
|
+
status: "warn",
|
|
73
|
+
message: "No KMS providers are registered for this tenant.",
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const failing = providers.filter((provider) => !provider.ok);
|
|
77
|
+
if (failing.length > 0) {
|
|
78
|
+
return {
|
|
79
|
+
name,
|
|
80
|
+
status: "fail",
|
|
81
|
+
message: `${failing.length}/${providers.length} provider(s) unhealthy: ${failing
|
|
82
|
+
.map((provider) => `${provider.providerId} (${provider.type})${provider.error ? ", health check reported an error" : ""}`)
|
|
83
|
+
.join(", ")}`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
name,
|
|
88
|
+
status: "pass",
|
|
89
|
+
message: `${providers.length} provider(s) healthy: ${providers
|
|
90
|
+
.map((provider) => `${provider.providerId} (${provider.type}${provider.latencyMs === undefined ? "" : `, ${provider.latencyMs}ms`})`)
|
|
91
|
+
.join(", ")}`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function parse(version) {
|
|
95
|
+
const match = /^v?(\d+)\.(\d+)\.(\d+)/.exec(version.trim());
|
|
96
|
+
if (!match) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
major: Number(match[1]),
|
|
101
|
+
minor: Number(match[2]),
|
|
102
|
+
patch: Number(match[3]),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=backend-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-checks.js","sourceRoot":"","sources":["../../src/services/backend-checks.ts"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC3B,UAAkB,EAClB,cAAsB;IAEtB,MAAM,IAAI,GAAG,uBAAuB,CAAC;IACrC,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC;IAEtC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO;YACH,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,OAAO,UAAU,gBAAgB,cAAc,kCAAkC;SAC7F,CAAC;IACN,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO;YACH,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,OAAO,UAAU,gBAAgB,cAAc,0FAA0F,OAAO,CAAC,KAAK,GAAG;SACrK,CAAC;IACN,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO;YACH,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,OAAO,UAAU,gBAAgB,cAAc,+DAA+D;SAC1H,CAAC;IACN,CAAC;IACD,OAAO;QACH,IAAI;QACJ,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,OAAO,UAAU,oBAAoB,cAAc,GAAG;KAClE,CAAC;AACN,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACjE,MAAM,OAAO,GAAI,IAA6B,CAAC,OAAO,CAAC;QACvD,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxE,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtB,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,OAAO;YACH,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC;YAClD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;YACtC,EAAE,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI;YACtB,SAAS,EACL,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;gBAChC,CAAC,CAAC,MAAM,CAAC,SAAS;gBAClB,CAAC,CAAC,SAAS;YACnB,KAAK,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACnC,SAA2B;IAE3B,MAAM,IAAI,GAAG,eAAe,CAAC;IAC7B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACH,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,kDAAkD;SAC9D,CAAC;IACN,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO;YACH,IAAI;YACJ,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,2BAA2B,OAAO;iBAC3E,GAAG,CACA,CAAC,QAAQ,EAAE,EAAE,CACT,GAAG,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7G;iBACA,IAAI,CAAC,IAAI,CAAC,EAAE;SACpB,CAAC;IACN,CAAC;IAED,OAAO;QACH,IAAI;QACJ,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,GAAG,SAAS,CAAC,MAAM,yBAAyB,SAAS;aACzD,GAAG,CACA,CAAC,QAAQ,EAAE,EAAE,CACT,GAAG,QAAQ,CAAC,UAAU,KAAK,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,SAAS,IAAI,GAAG,CACxH;aACA,IAAI,CAAC,IAAI,CAAC,EAAE;KACpB,CAAC;AACN,CAAC;AAED,SAAS,KAAK,CACV,OAAe;IAEf,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO;QACH,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1B,CAAC;AACN,CAAC"}
|
|
@@ -75,17 +75,17 @@ function storageEnv(storage) {
|
|
|
75
75
|
if (storage === "local") {
|
|
76
76
|
return ["STORAGE_DRIVER=local", "LOCAL_STORAGE_DIR=/app/uploads"];
|
|
77
77
|
}
|
|
78
|
-
const
|
|
78
|
+
const rustfsPassword = randomSecret();
|
|
79
79
|
return [
|
|
80
80
|
"STORAGE_DRIVER=s3",
|
|
81
|
-
"S3_ENDPOINT=http://
|
|
81
|
+
"S3_ENDPOINT=http://rustfs:9000",
|
|
82
82
|
"S3_REGION=us-east-1",
|
|
83
|
-
"S3_ACCESS_KEY_ID=
|
|
84
|
-
`S3_SECRET_ACCESS_KEY=${
|
|
83
|
+
"S3_ACCESS_KEY_ID=rustfsadmin",
|
|
84
|
+
`S3_SECRET_ACCESS_KEY=${rustfsPassword}`,
|
|
85
85
|
"S3_BUCKET=uploads",
|
|
86
86
|
"S3_FORCE_PATH_STYLE=true",
|
|
87
|
-
"
|
|
88
|
-
`
|
|
87
|
+
"RUSTFS_ACCESS_KEY=rustfsadmin",
|
|
88
|
+
`RUSTFS_SECRET_KEY=${rustfsPassword}`,
|
|
89
89
|
];
|
|
90
90
|
}
|
|
91
91
|
function kmsEnv(kms) {
|
|
@@ -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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"}
|
|
@@ -73,7 +73,7 @@ function parseVersion(tag) {
|
|
|
73
73
|
function compareVersions(a, b) {
|
|
74
74
|
return a.major - b.major || a.minor - b.minor || a.patch - b.patch;
|
|
75
75
|
}
|
|
76
|
-
const migrationBaseUrl = "https://docs.eudiplo.dev/
|
|
76
|
+
const migrationBaseUrl = "https://docs.eudiplo.dev/upgrade";
|
|
77
77
|
/**
|
|
78
78
|
* Notes to show before an upgrade: the migration guide for every major
|
|
79
79
|
* version crossed, a downgrade warning, or a pointer to the guide index when
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-upgrade.js","sourceRoot":"","sources":["../../src/services/compose-upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,aAAa,GAAG;IAClB,aAAa,EAAE,uCAAuC;IACtD,oBAAoB,EAAE,8CAA8C;CAC9D,CAAC;AAiBX,gEAAgE;AAChE,MAAM,GAAG,GAAG,qCAAqC,CAAC;AAElD,MAAM,UAAU,cAAc,CAAC,GAAW;IACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACX,qBAAqB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qFAAqF,CAChI,CAAC;IACN,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,GAAW;IACzD,cAAc,CAAC,GAAG,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAc,CAAC;IACpC,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,wEAAwE;IACxE,8BAA8B;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,mDAAmD,CAAC,IAAI,CAClE,IAAI,CACP,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAe,CAAC;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACX,GAAG,GAAG,6CAA6C,CACtD,CAAC;QACN,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEf,MAAM,MAAM,GAAG,GAAG,UAAU,GAAG,CAAC;QAChC,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YACpC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CACX,GAAG,GAAG,cAAc,KAAK,sEAAsE,MAAM,iCAAiC,CACzI,CAAC;QACN,CAAC;QAED,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,GAAG,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,UAAU,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACX,0FAA0F,CAC7F,CAAC;IACN,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAClD,CAAC;AAQD,SAAS,YAAY,CAAC,GAAW;IAC7B,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO;QACH,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC1B,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,CAAU,EAAE,CAAU;IAC3C,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;AACvE,CAAC;AAED,MAAM,gBAAgB,GAAG,
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment-drivers.d.ts","sourceRoot":"","sources":["../../src/services/deployment-drivers.ts"],"names":[],"mappings":"
|
|
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"}
|
|
@@ -3,6 +3,7 @@ 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
5
|
import { assertKnownService, assertServiceName, buildComposeBaseArgs, buildComposeListServicesArgs, buildComposeLogsArgs, buildComposePsArgs, buildComposePullArgs, buildComposeRestartArgs, parseServiceList, } from "./compose-args.js";
|
|
6
|
+
import { parseContainerStates, summarizeContainerStates, } from "./container-state.js";
|
|
6
7
|
import { buildCanIArgs, buildLogsArgs, buildRestartArgs, buildRolloutStatusArgs, resolveWorkload, buildGetEndpointSlicesArgs, buildGetPodsArgs, buildGetWorkloadArgs, resolveScope, resolveWorkloads, } from "./kubectl.js";
|
|
7
8
|
export const drivers = {
|
|
8
9
|
compose: {
|
|
@@ -18,6 +19,10 @@ export const drivers = {
|
|
|
18
19
|
? `${runtime.name} found at ${runtime.command}`
|
|
19
20
|
: "Docker or Podman was not found in a supported install location.",
|
|
20
21
|
});
|
|
22
|
+
if (runtime) {
|
|
23
|
+
checks.push(await composeProviderCheck(runtime, context));
|
|
24
|
+
checks.push(await composeServicesCheck(runtime, instance, context));
|
|
25
|
+
}
|
|
21
26
|
for (const composeFile of getComposeFiles(instance)) {
|
|
22
27
|
let found = true;
|
|
23
28
|
try {
|
|
@@ -591,6 +596,78 @@ async function resolveComposeService(options) {
|
|
|
591
596
|
assertKnownService(service, parseServiceList(listed.stdout));
|
|
592
597
|
return service;
|
|
593
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
|
+
}
|
|
594
671
|
export async function resolveComposeRuntime(env) {
|
|
595
672
|
const preferredRuntime = parsePreferredRuntime(env.EUDIPLO_CONTAINER_RUNTIME);
|
|
596
673
|
const candidates = preferredRuntime
|