@eudiplo/cli 8.0.1 → 8.0.2-main.4c3e735
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 +5 -1
- package/dist/commands/config/validate/schemas.d.ts.map +1 -1
- package/dist/commands/config/validate/schemas.js +3 -3
- package/dist/commands/config/validate/schemas.js.map +1 -1
- package/dist/commands/deployment/action.d.ts +1 -1
- package/dist/commands/deployment/action.d.ts.map +1 -1
- package/dist/commands/deployment/action.js.map +1 -1
- package/dist/commands/deployment/index.d.ts.map +1 -1
- package/dist/commands/deployment/index.js +7 -4
- package/dist/commands/deployment/index.js.map +1 -1
- package/dist/commands/open/action.d.ts +9 -0
- package/dist/commands/open/action.d.ts.map +1 -0
- package/dist/commands/open/action.js +41 -0
- package/dist/commands/open/action.js.map +1 -0
- package/dist/commands/open/index.d.ts +5 -0
- package/dist/commands/open/index.d.ts.map +1 -0
- package/dist/commands/open/index.js +15 -0
- package/dist/commands/open/index.js.map +1 -0
- package/dist/commands/upgrade/action.d.ts +3 -0
- package/dist/commands/upgrade/action.d.ts.map +1 -0
- package/dist/commands/upgrade/action.js +95 -0
- package/dist/commands/upgrade/action.js.map +1 -0
- package/dist/commands/upgrade/index.d.ts +5 -0
- package/dist/commands/upgrade/index.d.ts.map +1 -0
- package/dist/commands/upgrade/index.js +15 -0
- package/dist/commands/upgrade/index.js.map +1 -0
- package/dist/index.js +632 -87
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +4 -0
- package/dist/runtime.js.map +1 -1
- package/dist/sea-assets.d.ts +1 -0
- package/dist/sea-assets.d.ts.map +1 -1
- package/dist/sea-assets.js +17 -0
- package/dist/sea-assets.js.map +1 -1
- package/dist/services/browser.d.ts +30 -0
- package/dist/services/browser.d.ts.map +1 -0
- package/dist/services/browser.js +102 -0
- package/dist/services/browser.js.map +1 -0
- package/dist/services/compose-args.d.ts +28 -0
- package/dist/services/compose-args.d.ts.map +1 -0
- package/dist/services/compose-args.js +117 -0
- package/dist/services/compose-args.js.map +1 -0
- package/dist/services/compose-project.d.ts.map +1 -1
- package/dist/services/compose-project.js +5 -5
- package/dist/services/compose-project.js.map +1 -1
- package/dist/services/compose-upgrade.d.ts +40 -0
- package/dist/services/compose-upgrade.d.ts.map +1 -0
- package/dist/services/compose-upgrade.js +102 -0
- package/dist/services/compose-upgrade.js.map +1 -0
- package/dist/services/deployment-drivers.d.ts +8 -1
- package/dist/services/deployment-drivers.d.ts.map +1 -1
- package/dist/services/deployment-drivers.js +85 -19
- package/dist/services/deployment-drivers.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/schemas/KeyChainConfigFile.schema.json +7 -3
- package/templates/schemas/KeyChainImportDto.schema.json +7 -3
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAkB,MAAM,WAAW,CAAC;AAgBpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,MAAM,CACxB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAiC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAmBjB;AAED,wBAAgB,aAAa,CACzB,OAAO,EAAE,cAAc,EACvB,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACxC,OAAO,CAwCT"}
|
package/dist/runtime.js
CHANGED
|
@@ -8,7 +8,9 @@ import { createDeploymentCommands } from "./commands/deployment/index.js";
|
|
|
8
8
|
import { createDoctorCommand } from "./commands/doctor/index.js";
|
|
9
9
|
import { createInitCommand } from "./commands/init/index.js";
|
|
10
10
|
import { createInstanceCommand } from "./commands/instance/index.js";
|
|
11
|
+
import { createOpenCommand } from "./commands/open/index.js";
|
|
11
12
|
import { createStatusCommand } from "./commands/status/index.js";
|
|
13
|
+
import { createUpgradeCommand } from "./commands/upgrade/index.js";
|
|
12
14
|
import { createVersionCommand, versionText } from "./commands/version/index.js";
|
|
13
15
|
export async function runCli(args, context = defaultContext()) {
|
|
14
16
|
let actionExitCode = 0;
|
|
@@ -40,6 +42,8 @@ export function createProgram(context, setExitCode) {
|
|
|
40
42
|
for (const command of createDeploymentCommands(context, setExitCode)) {
|
|
41
43
|
program.addCommand(command);
|
|
42
44
|
}
|
|
45
|
+
program.addCommand(createUpgradeCommand(context, setExitCode));
|
|
46
|
+
program.addCommand(createOpenCommand(context, setExitCode));
|
|
43
47
|
program.addCommand(createInstanceCommand(context, setExitCode));
|
|
44
48
|
program.addCommand(createConfigCommand(context, setExitCode));
|
|
45
49
|
program.addCommand(createDoctorCommand(context, setExitCode));
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/sea-assets.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
type CliAssetFallback = URL | (() => URL);
|
|
2
|
+
export declare function templateAssetUrl(relativePath: string): URL;
|
|
2
3
|
export declare function readCliTextAsset(assetKey: string, fileUrl: CliAssetFallback): Promise<string>;
|
|
3
4
|
export declare function readCliBinaryAsset(assetKey: string, fileUrl: CliAssetFallback): Promise<Uint8Array>;
|
|
4
5
|
export {};
|
package/dist/sea-assets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sea-assets.d.ts","sourceRoot":"","sources":["../src/sea-assets.ts"],"names":[],"mappings":"AAGA,KAAK,gBAAgB,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"sea-assets.d.ts","sourceRoot":"","sources":["../src/sea-assets.ts"],"names":[],"mappings":"AAGA,KAAK,gBAAgB,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAiB1C,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAE1D;AAED,wBAAsB,gBAAgB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAsB,kBAAkB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,gBAAgB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAarB"}
|
package/dist/sea-assets.js
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { getAsset, isSea } from "node:sea";
|
|
3
|
+
/**
|
|
4
|
+
* Base URL for the `templates/` directory, computed relative to this module.
|
|
5
|
+
*
|
|
6
|
+
* This file lives at the same directory depth as `index.ts` (the CLI entry
|
|
7
|
+
* point), so its `import.meta.url` stays stable whether the build preserves
|
|
8
|
+
* the original `src/` folder structure (`pnpm build`) or bundles everything
|
|
9
|
+
* into a single `dist/index.js` (`build:publish` / `build:sea`): esbuild
|
|
10
|
+
* rewrites every bundled module's `import.meta.url` to the output file's URL,
|
|
11
|
+
* which sits at the same depth. Consumers must derive template asset URLs
|
|
12
|
+
* from this constant rather than computing their own relative path from
|
|
13
|
+
* `import.meta.url`, since their original source depth is not preserved once
|
|
14
|
+
* bundled.
|
|
15
|
+
*/
|
|
16
|
+
const templatesBaseUrl = new URL("../templates/", import.meta.url);
|
|
17
|
+
export function templateAssetUrl(relativePath) {
|
|
18
|
+
return new URL(relativePath, templatesBaseUrl);
|
|
19
|
+
}
|
|
3
20
|
export async function readCliTextAsset(assetKey, fileUrl) {
|
|
4
21
|
if (isSea()) {
|
|
5
22
|
return getAsset(assetKey, "utf8");
|
package/dist/sea-assets.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sea-assets.js","sourceRoot":"","sources":["../src/sea-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAI3C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,QAAgB,EAChB,OAAyB;IAEzB,IAAI,KAAK,EAAE,EAAE,CAAC;QACV,OAAO,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAW,CAAC;IAChD,CAAC;IAED,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,QAAgB,EAChB,OAAyB;IAEzB,IAAI,KAAK,EAAE,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAsC,CAAC;QACtE,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YAC/B,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,eAAe,CAAC,QAA0B;IAC/C,OAAO,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClE,CAAC"}
|
|
1
|
+
{"version":3,"file":"sea-assets.js","sourceRoot":"","sources":["../src/sea-assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAI3C;;;;;;;;;;;;GAYG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnE,MAAM,UAAU,gBAAgB,CAAC,YAAoB;IACjD,OAAO,IAAI,GAAG,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,QAAgB,EAChB,OAAyB;IAEzB,IAAI,KAAK,EAAE,EAAE,CAAC;QACV,OAAO,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAW,CAAC;IAChD,CAAC;IAED,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,QAAgB,EAChB,OAAyB;IAEzB,IAAI,KAAK,EAAE,EAAE,CAAC;QACV,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAsC,CAAC;QACtE,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YAC/B,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,eAAe,CAAC,QAA0B;IAC/C,OAAO,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface BrowserLauncher {
|
|
2
|
+
command: string;
|
|
3
|
+
args: string[];
|
|
4
|
+
}
|
|
5
|
+
export interface LauncherEnvironment {
|
|
6
|
+
platform: NodeJS.Platform;
|
|
7
|
+
env: NodeJS.ProcessEnv;
|
|
8
|
+
/** Resolves an executable name on PATH, or undefined when absent. */
|
|
9
|
+
which: (name: string) => Promise<string | undefined>;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Only web URLs are ever handed to a launcher. Instance URLs are validated
|
|
13
|
+
* when they are registered, but a hand-edited config must not be able to turn
|
|
14
|
+
* `open` into "run whatever this file:// or custom-scheme URL points at".
|
|
15
|
+
*/
|
|
16
|
+
export declare function assertWebUrl(value: string): URL;
|
|
17
|
+
/**
|
|
18
|
+
* Picks how to open a URL in a browser, or returns undefined when this
|
|
19
|
+
* environment has no usable browser (SSH sessions, containers, CI). Every
|
|
20
|
+
* launcher receives the URL as a single argv entry; no shell ever parses it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function chooseLauncher(url: string, { platform, env, which }: LauncherEnvironment): Promise<BrowserLauncher | undefined>;
|
|
23
|
+
/**
|
|
24
|
+
* Starts the launcher detached. Resolves true once it has been spawned and
|
|
25
|
+
* false when it could not be started, so the caller can fall back to
|
|
26
|
+
* printing the URL.
|
|
27
|
+
*/
|
|
28
|
+
export declare function launchBrowser(launcher: BrowserLauncher): Promise<boolean>;
|
|
29
|
+
export declare function pathLookup(env: NodeJS.ProcessEnv, platform?: NodeJS.Platform): (name: string) => Promise<string | undefined>;
|
|
30
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/services/browser.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,qEAAqE;IACrE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAa/C;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAChC,GAAG,EAAE,MAAM,EACX,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,mBAAmB,GAC9C,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAwCtC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAYzE;AAED,wBAAgB,UAAU,CACtB,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC7C,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB/C"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { access } from "node:fs/promises";
|
|
3
|
+
import { delimiter, join } from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* Only web URLs are ever handed to a launcher. Instance URLs are validated
|
|
6
|
+
* when they are registered, but a hand-edited config must not be able to turn
|
|
7
|
+
* `open` into "run whatever this file:// or custom-scheme URL points at".
|
|
8
|
+
*/
|
|
9
|
+
export function assertWebUrl(value) {
|
|
10
|
+
let url;
|
|
11
|
+
try {
|
|
12
|
+
url = new URL(value);
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
throw new Error(`${value} is not a valid absolute URL.`);
|
|
16
|
+
}
|
|
17
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
18
|
+
throw new Error(`Refusing to open ${value}: only http and https URLs are supported.`);
|
|
19
|
+
}
|
|
20
|
+
return url;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Picks how to open a URL in a browser, or returns undefined when this
|
|
24
|
+
* environment has no usable browser (SSH sessions, containers, CI). Every
|
|
25
|
+
* launcher receives the URL as a single argv entry; no shell ever parses it.
|
|
26
|
+
*/
|
|
27
|
+
export async function chooseLauncher(url, { platform, env, which }) {
|
|
28
|
+
// $BROWSER is the conventional user override. Only a bare command is
|
|
29
|
+
// honoured; anything with arguments or placeholders is ignored rather
|
|
30
|
+
// than split, so the value is never interpreted by a shell.
|
|
31
|
+
const browser = env.BROWSER?.trim();
|
|
32
|
+
if (browser && !/\s|%s/.test(browser)) {
|
|
33
|
+
const command = await which(browser);
|
|
34
|
+
if (command) {
|
|
35
|
+
return { command, args: [url] };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (platform === "darwin") {
|
|
39
|
+
return { command: "open", args: [url] };
|
|
40
|
+
}
|
|
41
|
+
if (platform === "win32") {
|
|
42
|
+
// Avoids `cmd /c start`, where "&" in a query string would be parsed.
|
|
43
|
+
return {
|
|
44
|
+
command: "rundll32.exe",
|
|
45
|
+
args: ["url.dll,FileProtocolHandler", url],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// WSL: open the Windows browser when wslu is installed.
|
|
49
|
+
if (env.WSL_DISTRO_NAME) {
|
|
50
|
+
const wslview = await which("wslview");
|
|
51
|
+
if (wslview) {
|
|
52
|
+
return { command: wslview, args: [url] };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (env.DISPLAY || env.WAYLAND_DISPLAY) {
|
|
56
|
+
const xdgOpen = await which("xdg-open");
|
|
57
|
+
if (xdgOpen) {
|
|
58
|
+
return { command: xdgOpen, args: [url] };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Starts the launcher detached. Resolves true once it has been spawned and
|
|
65
|
+
* false when it could not be started, so the caller can fall back to
|
|
66
|
+
* printing the URL.
|
|
67
|
+
*/
|
|
68
|
+
export function launchBrowser(launcher) {
|
|
69
|
+
return new Promise((resolveLaunch) => {
|
|
70
|
+
const child = spawn(launcher.command, launcher.args, {
|
|
71
|
+
detached: true,
|
|
72
|
+
stdio: "ignore",
|
|
73
|
+
});
|
|
74
|
+
child.once("error", () => resolveLaunch(false));
|
|
75
|
+
child.once("spawn", () => {
|
|
76
|
+
child.unref();
|
|
77
|
+
resolveLaunch(true);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export function pathLookup(env, platform = process.platform) {
|
|
82
|
+
const extensions = platform === "win32"
|
|
83
|
+
? ["", ...(env.PATHEXT ?? ".EXE;.CMD;.BAT;.COM").split(";")]
|
|
84
|
+
: [""];
|
|
85
|
+
return async (name) => {
|
|
86
|
+
const entries = (env.PATH ?? "").split(delimiter).filter(Boolean);
|
|
87
|
+
for (const entry of entries) {
|
|
88
|
+
for (const extension of extensions) {
|
|
89
|
+
const candidate = join(entry, `${name}${extension}`);
|
|
90
|
+
try {
|
|
91
|
+
await access(candidate);
|
|
92
|
+
return candidate;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// keep looking
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/services/browser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { InstanceConfig } from "../types.js";
|
|
2
|
+
export interface ComposeLogOptions {
|
|
3
|
+
follow?: boolean;
|
|
4
|
+
tail?: number;
|
|
5
|
+
since?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function assertServiceName(service: string): void;
|
|
8
|
+
export declare function assertSince(since: string): void;
|
|
9
|
+
/**
|
|
10
|
+
* Options shared by every Compose invocation for an instance: env file,
|
|
11
|
+
* compose files, profiles and project name, all resolved against the
|
|
12
|
+
* project directory.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildComposeBaseArgs(instance: InstanceConfig, projectDirectory: string, composeFiles: string[]): string[];
|
|
15
|
+
export declare function buildComposePsArgs(): string[];
|
|
16
|
+
export declare function buildComposeListServicesArgs(): string[];
|
|
17
|
+
export declare function buildComposeLogsArgs(service: string | undefined, options?: ComposeLogOptions): string[];
|
|
18
|
+
export declare function buildComposePullArgs(service: string | undefined): string[];
|
|
19
|
+
export declare function buildComposeUpArgs(): string[];
|
|
20
|
+
export declare function buildComposeRestartArgs(service: string | undefined): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Parses `compose config --services` output. `podman compose` can print a
|
|
23
|
+
* provider notice before delegating, so anything that is not a valid service
|
|
24
|
+
* name is dropped rather than trusted.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseServiceList(stdout: string): string[];
|
|
27
|
+
export declare function assertKnownService(service: string, known: string[]): void;
|
|
28
|
+
//# sourceMappingURL=compose-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-args.d.ts","sourceRoot":"","sources":["../../src/services/compose-args.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAuBlD,MAAM,WAAW,iBAAiB;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAMvD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAS/C;AAQD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,cAAc,EACxB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAeV;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,4BAA4B,IAAI,MAAM,EAAE,CAEvD;AAED,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,GAAE,iBAAsB,GAChC,MAAM,EAAE,CAkBV;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAO1E;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAO7E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAMzD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAMzE"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* Argument construction for `docker compose` and `podman compose`.
|
|
4
|
+
*
|
|
5
|
+
* Both runtimes accept the same subcommands and flags used here, so the
|
|
6
|
+
* builders are runtime-agnostic: the runtime only decides which executable
|
|
7
|
+
* receives the argv. Every value that comes from the user is validated before
|
|
8
|
+
* it is placed in the argv, so it can never be read as an extra option.
|
|
9
|
+
*/
|
|
10
|
+
// Compose service names: must start with a letter or digit, then letters,
|
|
11
|
+
// digits, dots, underscores or dashes. Rejecting a leading "-" is what keeps
|
|
12
|
+
// a service name from being parsed as a flag.
|
|
13
|
+
const SERVICE_NAME = /^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/;
|
|
14
|
+
// Go-style durations as accepted by `compose logs --since`, e.g. 10m, 1h30m.
|
|
15
|
+
const DURATION = /^(\d+(\.\d+)?(ns|us|µs|ms|s|m|h))+$/;
|
|
16
|
+
// RFC 3339 / ISO 8601 timestamps, e.g. 2026-09-01 or 2026-09-01T12:00:00Z.
|
|
17
|
+
const TIMESTAMP = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d+)?)?(Z|[+-]\d{2}:\d{2})?)?$/;
|
|
18
|
+
export function assertServiceName(service) {
|
|
19
|
+
if (!SERVICE_NAME.test(service)) {
|
|
20
|
+
throw new Error(`Invalid service name ${JSON.stringify(service)}. Service names start with a letter or digit and contain only letters, digits, ".", "_" and "-".`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function assertSince(since) {
|
|
24
|
+
const isDuration = DURATION.test(since);
|
|
25
|
+
const isTimestamp = TIMESTAMP.test(since) && !Number.isNaN(Date.parse(since));
|
|
26
|
+
if (!isDuration && !isTimestamp) {
|
|
27
|
+
throw new Error(`Invalid --since value ${JSON.stringify(since)}. Use a duration such as 10m or 2h30m, or a timestamp such as 2026-09-01T12:00:00Z.`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function assertTail(tail) {
|
|
31
|
+
if (!Number.isInteger(tail) || tail < 0) {
|
|
32
|
+
throw new Error("--tail must be a whole number of lines, 0 or more.");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Options shared by every Compose invocation for an instance: env file,
|
|
37
|
+
* compose files, profiles and project name, all resolved against the
|
|
38
|
+
* project directory.
|
|
39
|
+
*/
|
|
40
|
+
export function buildComposeBaseArgs(instance, projectDirectory, composeFiles) {
|
|
41
|
+
const args = ["compose"];
|
|
42
|
+
if (instance.envFile) {
|
|
43
|
+
args.push("--env-file", resolve(projectDirectory, instance.envFile));
|
|
44
|
+
}
|
|
45
|
+
for (const composeFile of composeFiles) {
|
|
46
|
+
args.push("-f", resolve(projectDirectory, composeFile));
|
|
47
|
+
}
|
|
48
|
+
for (const profile of instance.composeProfiles ?? []) {
|
|
49
|
+
args.push("--profile", profile);
|
|
50
|
+
}
|
|
51
|
+
if (instance.projectName) {
|
|
52
|
+
args.push("--project-name", instance.projectName);
|
|
53
|
+
}
|
|
54
|
+
return args;
|
|
55
|
+
}
|
|
56
|
+
export function buildComposePsArgs() {
|
|
57
|
+
return ["ps"];
|
|
58
|
+
}
|
|
59
|
+
export function buildComposeListServicesArgs() {
|
|
60
|
+
return ["config", "--services"];
|
|
61
|
+
}
|
|
62
|
+
export function buildComposeLogsArgs(service, options = {}) {
|
|
63
|
+
const args = ["logs"];
|
|
64
|
+
if (options.follow === true) {
|
|
65
|
+
args.push("--follow");
|
|
66
|
+
}
|
|
67
|
+
if (options.tail !== undefined) {
|
|
68
|
+
assertTail(options.tail);
|
|
69
|
+
args.push("--tail", String(options.tail));
|
|
70
|
+
}
|
|
71
|
+
if (options.since !== undefined) {
|
|
72
|
+
assertSince(options.since);
|
|
73
|
+
args.push("--since", options.since);
|
|
74
|
+
}
|
|
75
|
+
if (service !== undefined) {
|
|
76
|
+
assertServiceName(service);
|
|
77
|
+
args.push(service);
|
|
78
|
+
}
|
|
79
|
+
return args;
|
|
80
|
+
}
|
|
81
|
+
export function buildComposePullArgs(service) {
|
|
82
|
+
const args = ["pull"];
|
|
83
|
+
if (service !== undefined) {
|
|
84
|
+
assertServiceName(service);
|
|
85
|
+
args.push(service);
|
|
86
|
+
}
|
|
87
|
+
return args;
|
|
88
|
+
}
|
|
89
|
+
export function buildComposeUpArgs() {
|
|
90
|
+
return ["up", "-d"];
|
|
91
|
+
}
|
|
92
|
+
export function buildComposeRestartArgs(service) {
|
|
93
|
+
const args = ["restart"];
|
|
94
|
+
if (service !== undefined) {
|
|
95
|
+
assertServiceName(service);
|
|
96
|
+
args.push(service);
|
|
97
|
+
}
|
|
98
|
+
return args;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Parses `compose config --services` output. `podman compose` can print a
|
|
102
|
+
* provider notice before delegating, so anything that is not a valid service
|
|
103
|
+
* name is dropped rather than trusted.
|
|
104
|
+
*/
|
|
105
|
+
export function parseServiceList(stdout) {
|
|
106
|
+
return stdout
|
|
107
|
+
.split(/\r?\n/)
|
|
108
|
+
.map((line) => line.trim())
|
|
109
|
+
.filter((line) => SERVICE_NAME.test(line))
|
|
110
|
+
.sort();
|
|
111
|
+
}
|
|
112
|
+
export function assertKnownService(service, known) {
|
|
113
|
+
if (!known.includes(service)) {
|
|
114
|
+
throw new Error(`Unknown service ${service}. Services in this project: ${known.join(", ") || "none"}.`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=compose-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose-args.js","sourceRoot":"","sources":["../../src/services/compose-args.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-project.d.ts","sourceRoot":"","sources":["../../src/services/compose-project.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compose-project.d.ts","sourceRoot":"","sources":["../../src/services/compose-project.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,sBAAsB,yBAAyB,CAAC;AAC7D,eAAO,MAAM,8BAA8B,kCAAkC,CAAC;AAC9E,eAAO,MAAM,kBAAkB,iBAAiB,CAAC;AACjD,eAAO,MAAM,mBAAmB,8BAA8B,CAAC;AAC/D,eAAO,MAAM,eAAe,sBAAsB,CAAC;AACnD,eAAO,MAAM,mBAAmB,WAAW,CAAC;AAE5C,eAAO,MAAM,mBAAmB,gBAA2C,CAAC;AAG5E,KAAK,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AACvC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,IAAI,CAAC;AAC5C,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;AAExC,UAAU,iBAAiB;IACvB,IAAI,EAAE,WAAW,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAoCnE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CA2B7D;AA2DD,wBAAgB,eAAe,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAKzD;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAOtD;AAED,wBAAsB,qBAAqB,CACvC,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAsB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOlE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { randomBytes } from "node:crypto";
|
|
2
2
|
import { cp, mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
-
import { readCliBinaryAsset, readCliTextAsset } from "../sea-assets.js";
|
|
4
|
+
import { readCliBinaryAsset, readCliTextAsset, templateAssetUrl, } from "../sea-assets.js";
|
|
5
5
|
export const defaultComposeFileName = "eudiplo.compose.yaml";
|
|
6
6
|
export const defaultComposeOverrideFileName = "eudiplo.compose.override.yaml";
|
|
7
7
|
export const defaultEnvFileName = ".eudiplo.env";
|
|
@@ -114,7 +114,7 @@ export function resolveImageTag(imageTagOverride) {
|
|
|
114
114
|
return "latest";
|
|
115
115
|
}
|
|
116
116
|
export async function createComposeFile() {
|
|
117
|
-
return readCliTextAsset("templates/docker-compose.yml",
|
|
117
|
+
return readCliTextAsset("templates/docker-compose.yml", templateAssetUrl("docker-compose.yml"));
|
|
118
118
|
}
|
|
119
119
|
export function createNoClientComposeOverride() {
|
|
120
120
|
return [
|
|
@@ -138,7 +138,7 @@ export async function copyBundledDemoConfig(targetDirectory, force) {
|
|
|
138
138
|
recursive: true,
|
|
139
139
|
mode: 0o700,
|
|
140
140
|
});
|
|
141
|
-
const contents = await readCliBinaryAsset(`templates/demo-config/${normalized}`,
|
|
141
|
+
const contents = await readCliBinaryAsset(`templates/demo-config/${normalized}`, templateAssetUrl(`demo-config/${normalized}`));
|
|
142
142
|
await writeFile(destinationPath, contents, { mode: 0o600 });
|
|
143
143
|
}
|
|
144
144
|
return;
|
|
@@ -161,7 +161,7 @@ export async function hasFiles(directory) {
|
|
|
161
161
|
}
|
|
162
162
|
async function readDemoConfigManifest() {
|
|
163
163
|
try {
|
|
164
|
-
const manifestText = await readCliTextAsset(demoConfigManifestAssetKey,
|
|
164
|
+
const manifestText = await readCliTextAsset(demoConfigManifestAssetKey, templateAssetUrl("demo-config.manifest.json"));
|
|
165
165
|
const parsed = JSON.parse(manifestText);
|
|
166
166
|
if (Array.isArray(parsed) &&
|
|
167
167
|
parsed.every((item) => typeof item === "string")) {
|
|
@@ -170,7 +170,7 @@ async function readDemoConfigManifest() {
|
|
|
170
170
|
}
|
|
171
171
|
catch {
|
|
172
172
|
try {
|
|
173
|
-
const localManifest = await readFile(
|
|
173
|
+
const localManifest = await readFile(templateAssetUrl("demo-config.manifest.json"), "utf8");
|
|
174
174
|
const parsed = JSON.parse(localManifest);
|
|
175
175
|
if (Array.isArray(parsed) &&
|
|
176
176
|
parsed.every((item) => typeof item === "string")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-project.js","sourceRoot":"","sources":["../../src/services/compose-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,
|
|
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/migration";
|
|
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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"}
|