@jahia/jahia-cli 0.2.0 → 0.3.0
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/dist/commands/init.js +4 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/jahia/provision.d.ts +37 -2
- package/dist/commands/jahia/provision.d.ts.map +1 -1
- package/dist/commands/jahia/provision.js +241 -53
- package/dist/commands/jahia/provision.js.map +1 -1
- package/dist/commands/tests/artifacts.d.ts +25 -0
- package/dist/commands/tests/artifacts.d.ts.map +1 -0
- package/dist/commands/tests/artifacts.js +112 -0
- package/dist/commands/tests/artifacts.js.map +1 -0
- package/dist/commands/tests/build.d.ts +30 -0
- package/dist/commands/tests/build.d.ts.map +1 -0
- package/dist/commands/tests/build.js +90 -0
- package/dist/commands/tests/build.js.map +1 -0
- package/dist/commands/tests/run.d.ts +28 -0
- package/dist/commands/tests/run.d.ts.map +1 -0
- package/dist/commands/tests/run.js +166 -0
- package/dist/commands/tests/run.js.map +1 -0
- package/dist/commands/workflow/init.d.ts.map +1 -1
- package/dist/commands/workflow/init.js +15 -14
- package/dist/commands/workflow/init.js.map +1 -1
- package/dist/commands/workflow/run.d.ts +2 -1
- package/dist/commands/workflow/run.d.ts.map +1 -1
- package/dist/commands/workflow/run.js +27 -13
- package/dist/commands/workflow/run.js.map +1 -1
- package/dist/lib/artifacts/collect-all.d.ts +17 -0
- package/dist/lib/artifacts/collect-all.d.ts.map +1 -0
- package/dist/lib/artifacts/collect-all.js +107 -0
- package/dist/lib/artifacts/collect-all.js.map +1 -0
- package/dist/lib/artifacts/copy-container-artifacts.d.ts +13 -0
- package/dist/lib/artifacts/copy-container-artifacts.d.ts.map +1 -0
- package/dist/lib/artifacts/copy-container-artifacts.js +48 -0
- package/dist/lib/artifacts/copy-container-artifacts.js.map +1 -0
- package/dist/lib/artifacts/fetch-container-logs.d.ts +17 -0
- package/dist/lib/artifacts/fetch-container-logs.d.ts.map +1 -0
- package/dist/lib/artifacts/fetch-container-logs.js +36 -0
- package/dist/lib/artifacts/fetch-container-logs.js.map +1 -0
- package/dist/lib/artifacts/index.d.ts +6 -0
- package/dist/lib/artifacts/index.d.ts.map +1 -0
- package/dist/lib/artifacts/index.js +5 -0
- package/dist/lib/artifacts/index.js.map +1 -0
- package/dist/lib/artifacts/query-vlogs.d.ts +14 -0
- package/dist/lib/artifacts/query-vlogs.d.ts.map +1 -0
- package/dist/lib/artifacts/query-vlogs.js +33 -0
- package/dist/lib/artifacts/query-vlogs.js.map +1 -0
- package/dist/lib/artifacts/types.d.ts +28 -0
- package/dist/lib/artifacts/types.d.ts.map +1 -0
- package/dist/lib/artifacts/types.js +2 -0
- package/dist/lib/artifacts/types.js.map +1 -0
- package/dist/lib/components/cypress.d.ts +16 -0
- package/dist/lib/components/cypress.d.ts.map +1 -0
- package/dist/lib/components/cypress.js +35 -0
- package/dist/lib/components/cypress.js.map +1 -0
- package/dist/lib/components/index.d.ts.map +1 -1
- package/dist/lib/components/index.js +3 -0
- package/dist/lib/components/index.js.map +1 -1
- package/dist/lib/components/jahia.d.ts.map +1 -1
- package/dist/lib/components/jahia.js +1 -0
- package/dist/lib/components/jahia.js.map +1 -1
- package/dist/lib/components/smtp-server.d.ts.map +1 -1
- package/dist/lib/components/smtp-server.js +1 -0
- package/dist/lib/components/smtp-server.js.map +1 -1
- package/dist/lib/components/types.d.ts +12 -0
- package/dist/lib/components/types.d.ts.map +1 -1
- package/dist/lib/config/config-to-yaml-with-comments.d.ts.map +1 -1
- package/dist/lib/config/config-to-yaml-with-comments.js +15 -3
- package/dist/lib/config/config-to-yaml-with-comments.js.map +1 -1
- package/dist/lib/config/config-to-yaml.d.ts.map +1 -1
- package/dist/lib/config/config-to-yaml.js +12 -1
- package/dist/lib/config/config-to-yaml.js.map +1 -1
- package/dist/lib/config/parser.d.ts +17 -4
- package/dist/lib/config/parser.d.ts.map +1 -1
- package/dist/lib/config/parser.js +97 -12
- package/dist/lib/config/parser.js.map +1 -1
- package/dist/lib/config/types.d.ts +49 -3
- package/dist/lib/config/types.d.ts.map +1 -1
- package/dist/lib/providers/docker/container.d.ts +2 -0
- package/dist/lib/providers/docker/container.d.ts.map +1 -1
- package/dist/lib/providers/docker/container.js +5 -1
- package/dist/lib/providers/docker/container.js.map +1 -1
- package/dist/lib/provisioning/filter-files.d.ts +7 -0
- package/dist/lib/provisioning/filter-files.d.ts.map +1 -0
- package/dist/lib/provisioning/filter-files.js +14 -0
- package/dist/lib/provisioning/filter-files.js.map +1 -0
- package/dist/lib/provisioning/submit-file-action.d.ts +29 -0
- package/dist/lib/provisioning/submit-file-action.d.ts.map +1 -0
- package/dist/lib/provisioning/submit-file-action.js +75 -0
- package/dist/lib/provisioning/submit-file-action.js.map +1 -0
- package/dist/lib/provisioning/types.d.ts +11 -0
- package/dist/lib/provisioning/types.d.ts.map +1 -1
- package/dist/lib/tests/build-image.d.ts +33 -0
- package/dist/lib/tests/build-image.d.ts.map +1 -0
- package/dist/lib/tests/build-image.js +59 -0
- package/dist/lib/tests/build-image.js.map +1 -0
- package/dist/lib/workflow/build-sample-workflow.d.ts +5 -4
- package/dist/lib/workflow/build-sample-workflow.d.ts.map +1 -1
- package/dist/lib/workflow/build-sample-workflow.js +35 -31
- package/dist/lib/workflow/build-sample-workflow.js.map +1 -1
- package/dist/lib/workflow/executor.d.ts +3 -1
- package/dist/lib/workflow/executor.d.ts.map +1 -1
- package/dist/lib/workflow/executor.js +29 -0
- package/dist/lib/workflow/executor.js.map +1 -1
- package/dist/lib/workflow/merge-workflow-into-config.d.ts +4 -4
- package/dist/lib/workflow/merge-workflow-into-config.d.ts.map +1 -1
- package/dist/lib/workflow/merge-workflow-into-config.js +4 -4
- package/dist/lib/workflow/merge-workflow-into-config.js.map +1 -1
- package/dist/lib/workflow/resolve-workflow.d.ts +20 -0
- package/dist/lib/workflow/resolve-workflow.d.ts.map +1 -0
- package/dist/lib/workflow/resolve-workflow.js +38 -0
- package/dist/lib/workflow/resolve-workflow.js.map +1 -0
- package/oclif.manifest.json +309 -108
- package/package.json +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-files.js","sourceRoot":"","sources":["../../../src/lib/provisioning/filter-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,SAAS,MAAM,WAAW,CAAC;AAElC;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAA4B,EAC5B,OAAe,EACI,EAAE;IACrB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,SAAS,CAAC;SAClB,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;SACjD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { FileActionResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Provisioning action types supported by the Jahia provisioning API.
|
|
4
|
+
* - module: installs or upgrades a bundle (JAR)
|
|
5
|
+
* - script: executes a provisioning script (groovy, etc.)
|
|
6
|
+
*/
|
|
7
|
+
export type FileActionType = 'module' | 'script';
|
|
8
|
+
/**
|
|
9
|
+
* Builds the JSON script payload for the provisioning API based on action type.
|
|
10
|
+
*/
|
|
11
|
+
export declare const buildScriptPayload: (actionType: FileActionType, filename: string) => string;
|
|
12
|
+
/**
|
|
13
|
+
* Submits a single file to the Jahia provisioning API.
|
|
14
|
+
*
|
|
15
|
+
* The `script` form field is sent as a plain text string (not a file blob),
|
|
16
|
+
* containing a JSON array that describes the operation.
|
|
17
|
+
* The `file` form field carries the binary file content.
|
|
18
|
+
*
|
|
19
|
+
* Endpoint: POST {url}/modules/api/provisioning
|
|
20
|
+
*/
|
|
21
|
+
export declare const submitFileAction: (options: {
|
|
22
|
+
readonly url: string;
|
|
23
|
+
readonly username: string;
|
|
24
|
+
readonly password: string;
|
|
25
|
+
readonly filename: string;
|
|
26
|
+
readonly content: Buffer;
|
|
27
|
+
readonly actionType: FileActionType;
|
|
28
|
+
}) => Promise<FileActionResult>;
|
|
29
|
+
//# sourceMappingURL=submit-file-action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-file-action.d.ts","sourceRoot":"","sources":["../../../src/lib/provisioning/submit-file-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAcnD;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,YAAY,cAAc,EAAE,UAAU,MAAM,KAAG,MAKjF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAU,SAAS;IAC9C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;CACrC,KAAG,OAAO,CAAC,gBAAgB,CAgD3B,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attempts to parse a string as JSON. Returns the parsed value on success
|
|
3
|
+
* or undefined if the string is not valid JSON.
|
|
4
|
+
*/
|
|
5
|
+
const parseJsonSafe = (text) => {
|
|
6
|
+
try {
|
|
7
|
+
return JSON.parse(text);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Builds the JSON script payload for the provisioning API based on action type.
|
|
15
|
+
*/
|
|
16
|
+
export const buildScriptPayload = (actionType, filename) => {
|
|
17
|
+
const payload = actionType === 'module'
|
|
18
|
+
? [{ installOrUpgradeBundle: filename, forceUpdate: true }]
|
|
19
|
+
: [{ executeScript: filename }];
|
|
20
|
+
return JSON.stringify(payload);
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Submits a single file to the Jahia provisioning API.
|
|
24
|
+
*
|
|
25
|
+
* The `script` form field is sent as a plain text string (not a file blob),
|
|
26
|
+
* containing a JSON array that describes the operation.
|
|
27
|
+
* The `file` form field carries the binary file content.
|
|
28
|
+
*
|
|
29
|
+
* Endpoint: POST {url}/modules/api/provisioning
|
|
30
|
+
*/
|
|
31
|
+
export const submitFileAction = async (options) => {
|
|
32
|
+
const { url, username, password, filename, content, actionType } = options;
|
|
33
|
+
const endpoint = url.endsWith('/')
|
|
34
|
+
? `${url}modules/api/provisioning`
|
|
35
|
+
: `${url}/modules/api/provisioning`;
|
|
36
|
+
const auth = Buffer.from(`${username}:${password}`).toString('base64');
|
|
37
|
+
const form = new FormData();
|
|
38
|
+
form.append('script', buildScriptPayload(actionType, filename));
|
|
39
|
+
const fileBlob = new Blob([content], { type: 'application/octet-stream' });
|
|
40
|
+
form.append('file', fileBlob, filename);
|
|
41
|
+
const start = Date.now();
|
|
42
|
+
try {
|
|
43
|
+
const response = await fetch(endpoint, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
Authorization: `Basic ${auth}`,
|
|
47
|
+
Origin: url.endsWith('/') ? url.slice(0, -1) : url,
|
|
48
|
+
},
|
|
49
|
+
body: form,
|
|
50
|
+
});
|
|
51
|
+
const responseText = await response.text();
|
|
52
|
+
const durationMs = Date.now() - start;
|
|
53
|
+
return {
|
|
54
|
+
success: response.ok,
|
|
55
|
+
statusCode: response.status,
|
|
56
|
+
message: responseText,
|
|
57
|
+
responseBody: parseJsonSafe(responseText),
|
|
58
|
+
filename,
|
|
59
|
+
durationMs,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
const durationMs = Date.now() - start;
|
|
64
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
statusCode: 0,
|
|
68
|
+
message,
|
|
69
|
+
responseBody: undefined,
|
|
70
|
+
filename,
|
|
71
|
+
durationMs,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=submit-file-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submit-file-action.js","sourceRoot":"","sources":["../../../src/lib/provisioning/submit-file-action.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,IAAY,EAAW,EAAE;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AASF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAA0B,EAAE,QAAgB,EAAU,EAAE;IACzF,MAAM,OAAO,GAAG,UAAU,KAAK,QAAQ;QACrC,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC3D,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAOtC,EAA6B,EAAE;IAC9B,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAC3E,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC,GAAG,GAAG,0BAA0B;QAClC,CAAC,CAAC,GAAG,GAAG,2BAA2B,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEvE,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEhE,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC3E,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAExC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,SAAS,IAAI,EAAE;gBAC9B,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;aACnD;YACD,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAEtC,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,EAAE;YACpB,UAAU,EAAE,QAAQ,CAAC,MAAM;YAC3B,OAAO,EAAE,YAAY;YACrB,YAAY,EAAE,aAAa,CAAC,YAAY,CAAC;YACzC,QAAQ;YACR,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC;YACb,OAAO;YACP,YAAY,EAAE,SAAS;YACvB,QAAQ;YACR,UAAU;SACX,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -9,6 +9,17 @@ export interface ProvisioningResult {
|
|
|
9
9
|
readonly manifest: string;
|
|
10
10
|
readonly durationMs: number;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Result of a single file action submission (module install or script execution).
|
|
14
|
+
*/
|
|
15
|
+
export interface FileActionResult {
|
|
16
|
+
readonly success: boolean;
|
|
17
|
+
readonly statusCode: number;
|
|
18
|
+
readonly message: string;
|
|
19
|
+
readonly responseBody: unknown;
|
|
20
|
+
readonly filename: string;
|
|
21
|
+
readonly durationMs: number;
|
|
22
|
+
}
|
|
12
23
|
/**
|
|
13
24
|
* Options for submitting a provisioning script to Jahia.
|
|
14
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/provisioning/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/provisioning/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default Dockerfile path relative to the working directory.
|
|
3
|
+
*/
|
|
4
|
+
export declare const DEFAULT_DOCKERFILE = "docker/Dockerfile.local";
|
|
5
|
+
/**
|
|
6
|
+
* Default image name prefix for built test images.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DEFAULT_IMAGE_NAME = "jahia-tests";
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the image tag for the test image build.
|
|
11
|
+
* Uses the scaffolding version from config, with env var substitution.
|
|
12
|
+
*/
|
|
13
|
+
export declare const resolveImageTag: (imageName: string, version: string) => string;
|
|
14
|
+
/**
|
|
15
|
+
* Parses a repeatable `KEY=VALUE` flag into a record.
|
|
16
|
+
* Applies `${VAR:-default}` env var resolution to values for consistency
|
|
17
|
+
* with the config system.
|
|
18
|
+
*/
|
|
19
|
+
export declare const parseKeyValueArgs: (args: readonly string[]) => Readonly<Record<string, string>>;
|
|
20
|
+
/**
|
|
21
|
+
* Builds the argument list for `docker buildx build`.
|
|
22
|
+
*
|
|
23
|
+
* Pure function — all inputs explicit, no side effects.
|
|
24
|
+
*/
|
|
25
|
+
export declare const buildBuildxArgs: (params: {
|
|
26
|
+
readonly dockerfile: string;
|
|
27
|
+
readonly tag: string;
|
|
28
|
+
readonly baseVersion: string;
|
|
29
|
+
readonly platform?: string | undefined;
|
|
30
|
+
readonly noCache?: boolean | undefined;
|
|
31
|
+
readonly extraBuildArgs?: Readonly<Record<string, string>> | undefined;
|
|
32
|
+
}) => readonly string[];
|
|
33
|
+
//# sourceMappingURL=build-image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-image.d.ts","sourceRoot":"","sources":["../../../src/lib/tests/build-image.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,SAAS,MAAM,KACd,MAAmC,CAAC;AAEvC;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,SAAS,MAAM,EAAE,KACtB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAW/B,CAAC;AAEJ;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CACxE,KAAG,SAAS,MAAM,EAgClB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { resolveEnvVars } from '../config/resolve-env-vars.js';
|
|
2
|
+
/**
|
|
3
|
+
* Default Dockerfile path relative to the working directory.
|
|
4
|
+
*/
|
|
5
|
+
export const DEFAULT_DOCKERFILE = 'docker/Dockerfile.local';
|
|
6
|
+
/**
|
|
7
|
+
* Default image name prefix for built test images.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_IMAGE_NAME = 'jahia-tests';
|
|
10
|
+
/**
|
|
11
|
+
* Resolves the image tag for the test image build.
|
|
12
|
+
* Uses the scaffolding version from config, with env var substitution.
|
|
13
|
+
*/
|
|
14
|
+
export const resolveImageTag = (imageName, version) => `${imageName}:${version}`;
|
|
15
|
+
/**
|
|
16
|
+
* Parses a repeatable `KEY=VALUE` flag into a record.
|
|
17
|
+
* Applies `${VAR:-default}` env var resolution to values for consistency
|
|
18
|
+
* with the config system.
|
|
19
|
+
*/
|
|
20
|
+
export const parseKeyValueArgs = (args) => Object.fromEntries(args.map((arg) => {
|
|
21
|
+
const eqIndex = arg.indexOf('=');
|
|
22
|
+
if (eqIndex === -1) {
|
|
23
|
+
throw new Error(`Invalid KEY=VALUE argument: "${arg}". Expected format: KEY=VALUE`);
|
|
24
|
+
}
|
|
25
|
+
return [arg.slice(0, eqIndex), resolveEnvVars(arg.slice(eqIndex + 1))];
|
|
26
|
+
}));
|
|
27
|
+
/**
|
|
28
|
+
* Builds the argument list for `docker buildx build`.
|
|
29
|
+
*
|
|
30
|
+
* Pure function — all inputs explicit, no side effects.
|
|
31
|
+
*/
|
|
32
|
+
export const buildBuildxArgs = (params) => {
|
|
33
|
+
const args = [
|
|
34
|
+
'buildx', 'build',
|
|
35
|
+
'-f', params.dockerfile,
|
|
36
|
+
'-t', params.tag,
|
|
37
|
+
'--build-arg', `BASE_VERSION=${params.baseVersion}`,
|
|
38
|
+
];
|
|
39
|
+
if (params.extraBuildArgs !== undefined) {
|
|
40
|
+
Object.entries(params.extraBuildArgs).forEach(([key, value]) => {
|
|
41
|
+
args.push('--build-arg', `${key}=${value}`);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (params.platform !== undefined) {
|
|
45
|
+
args.push('--platform', params.platform);
|
|
46
|
+
}
|
|
47
|
+
if (params.noCache === true) {
|
|
48
|
+
args.push('--no-cache');
|
|
49
|
+
}
|
|
50
|
+
// --load makes the image available in the local Docker daemon
|
|
51
|
+
args.push('--load');
|
|
52
|
+
// Build context is the directory containing the Dockerfile
|
|
53
|
+
const contextDir = params.dockerfile.includes('/')
|
|
54
|
+
? params.dockerfile.slice(0, params.dockerfile.lastIndexOf('/'))
|
|
55
|
+
: '.';
|
|
56
|
+
args.push(contextDir);
|
|
57
|
+
return args;
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=build-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-image.js","sourceRoot":"","sources":["../../../src/lib/tests/build-image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AAE5D;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AAEhD;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,SAAiB,EACjB,OAAe,EACP,EAAE,CAAC,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,IAAuB,EACW,EAAE,CACpC,MAAM,CAAC,WAAW,CAChB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;IACf,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,gCAAgC,GAAG,+BAA+B,CACnE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC,CACH,CAAC;AAEJ;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAO/B,EAAqB,EAAE;IACtB,MAAM,IAAI,GAAa;QACrB,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,MAAM,CAAC,UAAU;QACvB,IAAI,EAAE,MAAM,CAAC,GAAG;QAChB,aAAa,EAAE,gBAAgB,MAAM,CAAC,WAAW,EAAE;KACpD,CAAC;IAEF,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAC7D,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEpB,2DAA2D;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAChE,CAAC,CAAC,GAAG,CAAC;IACR,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEtB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { WorkflowsMap } from '../config/types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Builds a sample
|
|
4
|
-
* to help users get started quickly.
|
|
3
|
+
* Builds a sample workflows configuration with representative steps
|
|
4
|
+
* to help users get started quickly. Returns a named workflows map
|
|
5
|
+
* with a single "main" workflow marked as default.
|
|
5
6
|
*/
|
|
6
|
-
export declare const
|
|
7
|
+
export declare const buildSampleWorkflows: () => WorkflowsMap;
|
|
7
8
|
//# sourceMappingURL=build-sample-workflow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-sample-workflow.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/build-sample-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"build-sample-workflow.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/build-sample-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAAO,YAgCtC,CAAC"}
|
|
@@ -1,35 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Builds a sample
|
|
3
|
-
* to help users get started quickly.
|
|
2
|
+
* Builds a sample workflows configuration with representative steps
|
|
3
|
+
* to help users get started quickly. Returns a named workflows map
|
|
4
|
+
* with a single "main" workflow marked as default.
|
|
4
5
|
*/
|
|
5
|
-
export const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
6
|
+
export const buildSampleWorkflows = () => ({
|
|
7
|
+
main: {
|
|
8
|
+
default: true,
|
|
9
|
+
steps: [
|
|
10
|
+
{
|
|
11
|
+
name: 'Initialize test scaffolding',
|
|
12
|
+
uses: 'tests:init',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'Create Jahia environment',
|
|
16
|
+
uses: 'environment:create',
|
|
17
|
+
with: { force: 'true' },
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: 'Wait for Jahia to be healthy',
|
|
21
|
+
uses: 'environment:alive',
|
|
22
|
+
with: { timeout: '300' },
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: 'Install test dependencies',
|
|
26
|
+
run: 'yarn',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'Run tests',
|
|
30
|
+
run: 'yarn run e2e:ci',
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'Cleanup environment',
|
|
34
|
+
uses: 'environment:delete',
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
},
|
|
34
38
|
});
|
|
35
39
|
//# sourceMappingURL=build-sample-workflow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-sample-workflow.js","sourceRoot":"","sources":["../../../src/lib/workflow/build-sample-workflow.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"build-sample-workflow.js","sourceRoot":"","sources":["../../../src/lib/workflow/build-sample-workflow.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAiB,EAAE,CAAC,CAAC;IACvD,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,6BAA6B;gBACnC,IAAI,EAAE,YAAY;aACnB;YACD;gBACE,IAAI,EAAE,0BAA0B;gBAChC,IAAI,EAAE,oBAAoB;gBAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;aACxB;YACD;gBACE,IAAI,EAAE,8BAA8B;gBACpC,IAAI,EAAE,mBAAmB;gBACzB,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;aACzB;YACD;gBACE,IAAI,EAAE,2BAA2B;gBACjC,GAAG,EAAE,MAAM;aACZ;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,GAAG,EAAE,iBAAiB;aACvB;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,oBAAoB;aAC3B;SACF;KACuB;CAC3B,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WorkflowStep } from '../config/types.js';
|
|
1
|
+
import type { WorkflowStep, WorkflowsMap } from '../config/types.js';
|
|
2
2
|
import type { StepResult, WorkflowResult } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Options for executing a workflow.
|
|
@@ -11,6 +11,8 @@ export interface ExecuteWorkflowOptions {
|
|
|
11
11
|
readonly onStepStart?: ((name: string, index: number) => void) | undefined;
|
|
12
12
|
readonly onStepComplete?: ((result: StepResult, index: number) => void) | undefined;
|
|
13
13
|
readonly cliEntryPoint: string;
|
|
14
|
+
readonly workflows?: WorkflowsMap | undefined;
|
|
15
|
+
readonly callStack?: readonly string[] | undefined;
|
|
14
16
|
}
|
|
15
17
|
/**
|
|
16
18
|
* Executes a workflow's steps sequentially.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI7D;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3E,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACpF,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACpD;AAyKD;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,cAAc,CAqB7F,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
2
|
import { buildFlagsFromWith, getStepDisplayName } from './types.js';
|
|
3
|
+
import { detectCircularCall, resolveWorkflowByName } from './resolve-workflow.js';
|
|
3
4
|
/**
|
|
4
5
|
* Executes a shell command (`run:` step) via execa.
|
|
5
6
|
* Inherits stdio so output streams to the terminal in real time.
|
|
@@ -28,6 +29,27 @@ const executeUsesStep = async (command, withFlags, cwd, env, statePath, cliEntry
|
|
|
28
29
|
stdio: 'inherit',
|
|
29
30
|
});
|
|
30
31
|
};
|
|
32
|
+
/**
|
|
33
|
+
* Executes a nested workflow in-process (for `uses: workflow:run` steps).
|
|
34
|
+
* Detects circular calls via the callStack.
|
|
35
|
+
*/
|
|
36
|
+
const executeNestedWorkflow = async (targetName, options, _env) => {
|
|
37
|
+
const { workflows, callStack = [] } = options;
|
|
38
|
+
if (workflows === undefined) {
|
|
39
|
+
throw new Error('Cannot run nested workflow:run — no workflows map available.');
|
|
40
|
+
}
|
|
41
|
+
detectCircularCall(targetName, callStack);
|
|
42
|
+
const targetWorkflow = resolveWorkflowByName(workflows, targetName);
|
|
43
|
+
return executeWorkflow({
|
|
44
|
+
...options,
|
|
45
|
+
steps: targetWorkflow.steps,
|
|
46
|
+
callStack: [...callStack, targetName],
|
|
47
|
+
});
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Checks if a step is an in-process workflow:run call.
|
|
51
|
+
*/
|
|
52
|
+
const isWorkflowRunStep = (step) => step.uses === 'workflow:run' && step.with?.['name'] !== undefined;
|
|
31
53
|
/**
|
|
32
54
|
* Processes a single workflow step, returning updated state.
|
|
33
55
|
*/
|
|
@@ -45,6 +67,13 @@ const processStep = async (statePromise, step, index, options) => {
|
|
|
45
67
|
if (step.run !== undefined) {
|
|
46
68
|
await executeRunStep(step.run, stepCwd, state.env);
|
|
47
69
|
}
|
|
70
|
+
else if (isWorkflowRunStep(step)) {
|
|
71
|
+
const targetName = step.with?.['name'] ?? '';
|
|
72
|
+
const nestedResult = await executeNestedWorkflow(targetName, options, state.env);
|
|
73
|
+
if (!nestedResult.success) {
|
|
74
|
+
throw new Error(`Nested workflow "${targetName}" failed`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
48
77
|
else if (step.uses !== undefined) {
|
|
49
78
|
await executeUsesStep(step.uses, step.with, stepCwd, state.env, statePath, cliEntryPoint);
|
|
50
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/lib/workflow/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAI9B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/lib/workflow/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { JahiaCliConfig,
|
|
1
|
+
import type { JahiaCliConfig, WorkflowsMap } from '../config/types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Merges a
|
|
4
|
-
* replacing only the
|
|
3
|
+
* Merges a workflows map into an existing JahiaCliConfig,
|
|
4
|
+
* replacing only the workflows section and preserving all other properties.
|
|
5
5
|
*/
|
|
6
|
-
export declare const
|
|
6
|
+
export declare const mergeWorkflowsIntoConfig: (existing: JahiaCliConfig, workflows: WorkflowsMap) => JahiaCliConfig;
|
|
7
7
|
//# sourceMappingURL=merge-workflow-into-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-workflow-into-config.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/merge-workflow-into-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"merge-workflow-into-config.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/merge-workflow-into-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,cAAc,EACxB,WAAW,YAAY,KACtB,cAGD,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Merges a
|
|
3
|
-
* replacing only the
|
|
2
|
+
* Merges a workflows map into an existing JahiaCliConfig,
|
|
3
|
+
* replacing only the workflows section and preserving all other properties.
|
|
4
4
|
*/
|
|
5
|
-
export const
|
|
5
|
+
export const mergeWorkflowsIntoConfig = (existing, workflows) => ({
|
|
6
6
|
...existing,
|
|
7
|
-
|
|
7
|
+
workflows,
|
|
8
8
|
});
|
|
9
9
|
//# sourceMappingURL=merge-workflow-into-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-workflow-into-config.js","sourceRoot":"","sources":["../../../src/lib/workflow/merge-workflow-into-config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"merge-workflow-into-config.js","sourceRoot":"","sources":["../../../src/lib/workflow/merge-workflow-into-config.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,QAAwB,EACxB,SAAuB,EACP,EAAE,CAAC,CAAC;IACpB,GAAG,QAAQ;IACX,SAAS;CACV,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { WorkflowConfig, WorkflowsMap } from '../config/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves a workflow by name from the workflows map.
|
|
4
|
+
* Throws if the named workflow does not exist.
|
|
5
|
+
*/
|
|
6
|
+
export declare const resolveWorkflowByName: (workflows: WorkflowsMap, name: string) => WorkflowConfig;
|
|
7
|
+
/**
|
|
8
|
+
* Resolves the default workflow from the workflows map.
|
|
9
|
+
* Throws if no workflow has `default: true`.
|
|
10
|
+
*/
|
|
11
|
+
export declare const resolveDefaultWorkflow: (workflows: WorkflowsMap) => {
|
|
12
|
+
readonly name: string;
|
|
13
|
+
readonly workflow: WorkflowConfig;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Detects circular workflow calls by checking if a workflow name
|
|
17
|
+
* is already in the call stack.
|
|
18
|
+
*/
|
|
19
|
+
export declare const detectCircularCall: (workflowName: string, callStack: readonly string[]) => void;
|
|
20
|
+
//# sourceMappingURL=resolve-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-workflow.d.ts","sourceRoot":"","sources":["../../../src/lib/workflow/resolve-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,WAAW,YAAY,EACvB,MAAM,MAAM,KACX,cASF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,WAAW,YAAY,KACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;CAe5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,cAAc,MAAM,EACpB,WAAW,SAAS,MAAM,EAAE,KAC3B,IAQF,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a workflow by name from the workflows map.
|
|
3
|
+
* Throws if the named workflow does not exist.
|
|
4
|
+
*/
|
|
5
|
+
export const resolveWorkflowByName = (workflows, name) => {
|
|
6
|
+
const workflow = workflows[name];
|
|
7
|
+
if (workflow === undefined) {
|
|
8
|
+
const available = Object.keys(workflows).join(', ');
|
|
9
|
+
throw new Error(`Workflow "${name}" not found. Available workflows: ${available}`);
|
|
10
|
+
}
|
|
11
|
+
return workflow;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Resolves the default workflow from the workflows map.
|
|
15
|
+
* Throws if no workflow has `default: true`.
|
|
16
|
+
*/
|
|
17
|
+
export const resolveDefaultWorkflow = (workflows) => {
|
|
18
|
+
const defaultEntry = Object.entries(workflows).find(([, wf]) => wf.default === true);
|
|
19
|
+
if (defaultEntry === undefined) {
|
|
20
|
+
const available = Object.keys(workflows).join(', ');
|
|
21
|
+
throw new Error(`No default workflow found. Use --name to specify one.\n` +
|
|
22
|
+
` Available workflows: ${available}\n\n` +
|
|
23
|
+
' Or mark one workflow with "default: true" in your config.');
|
|
24
|
+
}
|
|
25
|
+
return { name: defaultEntry[0], workflow: defaultEntry[1] };
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Detects circular workflow calls by checking if a workflow name
|
|
29
|
+
* is already in the call stack.
|
|
30
|
+
*/
|
|
31
|
+
export const detectCircularCall = (workflowName, callStack) => {
|
|
32
|
+
if (callStack.includes(workflowName)) {
|
|
33
|
+
const chain = [...callStack, workflowName].join(' → ');
|
|
34
|
+
throw new Error(`Circular workflow detected: ${chain}\n` +
|
|
35
|
+
` Workflow "${workflowName}" is already being executed.`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=resolve-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-workflow.js","sourceRoot":"","sources":["../../../src/lib/workflow/resolve-workflow.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,SAAuB,EACvB,IAAY,EACI,EAAE;IAClB,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,qCAAqC,SAAS,EAAE,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,SAAuB,EACuC,EAAE;IAChE,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,IAAI,CAChC,CAAC;IAEF,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,IAAI,KAAK,CACb,yDAAyD;YACzD,0BAA0B,SAAS,MAAM;YACzC,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9D,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,YAAoB,EACpB,SAA4B,EACtB,EAAE;IACR,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,IAAI;YACxC,eAAe,YAAY,8BAA8B,CAC1D,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
|