@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.
Files changed (112) hide show
  1. package/dist/commands/init.js +4 -4
  2. package/dist/commands/init.js.map +1 -1
  3. package/dist/commands/jahia/provision.d.ts +37 -2
  4. package/dist/commands/jahia/provision.d.ts.map +1 -1
  5. package/dist/commands/jahia/provision.js +241 -53
  6. package/dist/commands/jahia/provision.js.map +1 -1
  7. package/dist/commands/tests/artifacts.d.ts +25 -0
  8. package/dist/commands/tests/artifacts.d.ts.map +1 -0
  9. package/dist/commands/tests/artifacts.js +112 -0
  10. package/dist/commands/tests/artifacts.js.map +1 -0
  11. package/dist/commands/tests/build.d.ts +30 -0
  12. package/dist/commands/tests/build.d.ts.map +1 -0
  13. package/dist/commands/tests/build.js +90 -0
  14. package/dist/commands/tests/build.js.map +1 -0
  15. package/dist/commands/tests/run.d.ts +28 -0
  16. package/dist/commands/tests/run.d.ts.map +1 -0
  17. package/dist/commands/tests/run.js +166 -0
  18. package/dist/commands/tests/run.js.map +1 -0
  19. package/dist/commands/workflow/init.d.ts.map +1 -1
  20. package/dist/commands/workflow/init.js +15 -14
  21. package/dist/commands/workflow/init.js.map +1 -1
  22. package/dist/commands/workflow/run.d.ts +2 -1
  23. package/dist/commands/workflow/run.d.ts.map +1 -1
  24. package/dist/commands/workflow/run.js +27 -13
  25. package/dist/commands/workflow/run.js.map +1 -1
  26. package/dist/lib/artifacts/collect-all.d.ts +17 -0
  27. package/dist/lib/artifacts/collect-all.d.ts.map +1 -0
  28. package/dist/lib/artifacts/collect-all.js +107 -0
  29. package/dist/lib/artifacts/collect-all.js.map +1 -0
  30. package/dist/lib/artifacts/copy-container-artifacts.d.ts +13 -0
  31. package/dist/lib/artifacts/copy-container-artifacts.d.ts.map +1 -0
  32. package/dist/lib/artifacts/copy-container-artifacts.js +48 -0
  33. package/dist/lib/artifacts/copy-container-artifacts.js.map +1 -0
  34. package/dist/lib/artifacts/fetch-container-logs.d.ts +17 -0
  35. package/dist/lib/artifacts/fetch-container-logs.d.ts.map +1 -0
  36. package/dist/lib/artifacts/fetch-container-logs.js +36 -0
  37. package/dist/lib/artifacts/fetch-container-logs.js.map +1 -0
  38. package/dist/lib/artifacts/index.d.ts +6 -0
  39. package/dist/lib/artifacts/index.d.ts.map +1 -0
  40. package/dist/lib/artifacts/index.js +5 -0
  41. package/dist/lib/artifacts/index.js.map +1 -0
  42. package/dist/lib/artifacts/query-vlogs.d.ts +14 -0
  43. package/dist/lib/artifacts/query-vlogs.d.ts.map +1 -0
  44. package/dist/lib/artifacts/query-vlogs.js +33 -0
  45. package/dist/lib/artifacts/query-vlogs.js.map +1 -0
  46. package/dist/lib/artifacts/types.d.ts +28 -0
  47. package/dist/lib/artifacts/types.d.ts.map +1 -0
  48. package/dist/lib/artifacts/types.js +2 -0
  49. package/dist/lib/artifacts/types.js.map +1 -0
  50. package/dist/lib/components/cypress.d.ts +16 -0
  51. package/dist/lib/components/cypress.d.ts.map +1 -0
  52. package/dist/lib/components/cypress.js +35 -0
  53. package/dist/lib/components/cypress.js.map +1 -0
  54. package/dist/lib/components/index.d.ts.map +1 -1
  55. package/dist/lib/components/index.js +3 -0
  56. package/dist/lib/components/index.js.map +1 -1
  57. package/dist/lib/components/jahia.d.ts.map +1 -1
  58. package/dist/lib/components/jahia.js +1 -0
  59. package/dist/lib/components/jahia.js.map +1 -1
  60. package/dist/lib/components/smtp-server.d.ts.map +1 -1
  61. package/dist/lib/components/smtp-server.js +1 -0
  62. package/dist/lib/components/smtp-server.js.map +1 -1
  63. package/dist/lib/components/types.d.ts +12 -0
  64. package/dist/lib/components/types.d.ts.map +1 -1
  65. package/dist/lib/config/config-to-yaml-with-comments.d.ts.map +1 -1
  66. package/dist/lib/config/config-to-yaml-with-comments.js +15 -3
  67. package/dist/lib/config/config-to-yaml-with-comments.js.map +1 -1
  68. package/dist/lib/config/config-to-yaml.d.ts.map +1 -1
  69. package/dist/lib/config/config-to-yaml.js +12 -1
  70. package/dist/lib/config/config-to-yaml.js.map +1 -1
  71. package/dist/lib/config/parser.d.ts +17 -4
  72. package/dist/lib/config/parser.d.ts.map +1 -1
  73. package/dist/lib/config/parser.js +97 -12
  74. package/dist/lib/config/parser.js.map +1 -1
  75. package/dist/lib/config/types.d.ts +49 -3
  76. package/dist/lib/config/types.d.ts.map +1 -1
  77. package/dist/lib/providers/docker/container.d.ts +2 -0
  78. package/dist/lib/providers/docker/container.d.ts.map +1 -1
  79. package/dist/lib/providers/docker/container.js +5 -1
  80. package/dist/lib/providers/docker/container.js.map +1 -1
  81. package/dist/lib/provisioning/filter-files.d.ts +7 -0
  82. package/dist/lib/provisioning/filter-files.d.ts.map +1 -0
  83. package/dist/lib/provisioning/filter-files.js +14 -0
  84. package/dist/lib/provisioning/filter-files.js.map +1 -0
  85. package/dist/lib/provisioning/submit-file-action.d.ts +29 -0
  86. package/dist/lib/provisioning/submit-file-action.d.ts.map +1 -0
  87. package/dist/lib/provisioning/submit-file-action.js +75 -0
  88. package/dist/lib/provisioning/submit-file-action.js.map +1 -0
  89. package/dist/lib/provisioning/types.d.ts +11 -0
  90. package/dist/lib/provisioning/types.d.ts.map +1 -1
  91. package/dist/lib/tests/build-image.d.ts +33 -0
  92. package/dist/lib/tests/build-image.d.ts.map +1 -0
  93. package/dist/lib/tests/build-image.js +59 -0
  94. package/dist/lib/tests/build-image.js.map +1 -0
  95. package/dist/lib/workflow/build-sample-workflow.d.ts +5 -4
  96. package/dist/lib/workflow/build-sample-workflow.d.ts.map +1 -1
  97. package/dist/lib/workflow/build-sample-workflow.js +35 -31
  98. package/dist/lib/workflow/build-sample-workflow.js.map +1 -1
  99. package/dist/lib/workflow/executor.d.ts +3 -1
  100. package/dist/lib/workflow/executor.d.ts.map +1 -1
  101. package/dist/lib/workflow/executor.js +29 -0
  102. package/dist/lib/workflow/executor.js.map +1 -1
  103. package/dist/lib/workflow/merge-workflow-into-config.d.ts +4 -4
  104. package/dist/lib/workflow/merge-workflow-into-config.d.ts.map +1 -1
  105. package/dist/lib/workflow/merge-workflow-into-config.js +4 -4
  106. package/dist/lib/workflow/merge-workflow-into-config.js.map +1 -1
  107. package/dist/lib/workflow/resolve-workflow.d.ts +20 -0
  108. package/dist/lib/workflow/resolve-workflow.d.ts.map +1 -0
  109. package/dist/lib/workflow/resolve-workflow.js +38 -0
  110. package/dist/lib/workflow/resolve-workflow.js.map +1 -0
  111. package/oclif.manifest.json +309 -108
  112. package/package.json +4 -2
@@ -0,0 +1,112 @@
1
+ import { resolve } from 'node:path';
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { collectAllArtifacts } from '../../lib/artifacts/collect-all.js';
4
+ import { getActiveEnvironment } from '../../lib/state/get-active-environment.js';
5
+ import { stateFilePath } from '../../lib/state/state-file-path.js';
6
+ import { stateFlag } from '../../lib/state/state-flag.js';
7
+ const DEFAULT_OUTPUT_DIR = './results/';
8
+ /**
9
+ * Formats a single component's collection result as human-readable text.
10
+ */
11
+ export const formatComponentResult = (c) => {
12
+ const lines = [];
13
+ const logStatus = c.logFile !== undefined
14
+ ? `✓ ${c.logFile} (${c.logSource ?? 'unknown'})`
15
+ : `✗ logs failed${c.logError !== undefined ? `: ${c.logError}` : ''}`;
16
+ lines.push(` ${c.componentName}: ${logStatus}`);
17
+ c.artifacts.forEach((a) => {
18
+ const status = a.success ? '✓' : '✗';
19
+ const suffix = a.success ? '' : ` — ${a.error ?? 'unknown error'}`;
20
+ lines.push(` ${status} ${a.path}${suffix}`);
21
+ });
22
+ return lines.join('\n');
23
+ };
24
+ /**
25
+ * Formats the full collection result as human-readable output.
26
+ */
27
+ export const formatCollectionHuman = (result) => {
28
+ const lines = [
29
+ `✓ Artifacts collected for environment "${result.envName}"`,
30
+ ` Output: ${result.outputDir}`,
31
+ '',
32
+ ];
33
+ result.components.forEach((c) => {
34
+ lines.push(formatComponentResult(c));
35
+ });
36
+ return lines.join('\n');
37
+ };
38
+ /**
39
+ * Builds JSON output for the collection result.
40
+ */
41
+ export const buildCollectionJson = (result) => JSON.stringify({
42
+ success: true,
43
+ envName: result.envName,
44
+ outputDir: result.outputDir,
45
+ components: result.components.map((c) => ({
46
+ name: c.componentName,
47
+ containerId: c.containerId,
48
+ logFile: c.logFile ?? null,
49
+ logSource: c.logSource ?? null,
50
+ logError: c.logError ?? null,
51
+ artifacts: c.artifacts.map((a) => ({
52
+ path: a.path,
53
+ success: a.success,
54
+ error: a.error ?? null,
55
+ })),
56
+ })),
57
+ }, null, 2);
58
+ export default class TestsArtifacts extends Command {
59
+ static description = 'Collect test artifacts (container logs and diagnostic files) from the active environment. ' +
60
+ 'Fetches logs from VictoriaLogs (with docker logs fallback) and copies container artifact paths ' +
61
+ 'defined in component definitions or config overrides.';
62
+ static examples = [
63
+ '<%= config.bin %> tests artifacts',
64
+ '<%= config.bin %> tests artifacts --output ./ci-results/',
65
+ '<%= config.bin %> tests artifacts --state /ci/workspace/state.json --json',
66
+ ];
67
+ static flags = {
68
+ state: stateFlag,
69
+ output: Flags.string({
70
+ char: 'o',
71
+ description: `Output directory for collected artifacts (default: ${DEFAULT_OUTPUT_DIR})`,
72
+ }),
73
+ json: Flags.boolean({
74
+ description: 'Output result as structured JSON (for AI agents and scripting)',
75
+ default: false,
76
+ }),
77
+ };
78
+ async run() {
79
+ const { flags } = await this.parse(TestsArtifacts);
80
+ const statePath = stateFilePath(flags.state);
81
+ const outputDir = resolve(flags.output ?? DEFAULT_OUTPUT_DIR);
82
+ try {
83
+ const env = await getActiveEnvironment(statePath);
84
+ if (env === undefined) {
85
+ throw new Error('No active environment found. Create one with "environment create" first.');
86
+ }
87
+ const result = await collectAllArtifacts({
88
+ env,
89
+ outputDir,
90
+ onProgress: flags.json ? undefined : (msg) => {
91
+ this.log(msg);
92
+ },
93
+ });
94
+ if (flags.json) {
95
+ this.log(buildCollectionJson(result));
96
+ }
97
+ else {
98
+ this.log(formatCollectionHuman(result));
99
+ }
100
+ }
101
+ catch (error) {
102
+ const message = error instanceof Error ? error.message : String(error);
103
+ if (flags.json) {
104
+ this.log(JSON.stringify({ success: false, error: message }, null, 2));
105
+ }
106
+ else {
107
+ this.error(message);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../../src/commands/tests/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Command } from '@oclif/core';
2
+ import type { TestContainerConfig } from '../../lib/config/types.js';
3
+ /**
4
+ * Resolves the effective image tag from config.
5
+ * Priority: tests.container.tag > tests.scaffolding.version > 'latest'
6
+ */
7
+ export declare const resolveVersion: (containerConfig: TestContainerConfig | undefined, scaffoldingVersion: string | undefined) => string;
8
+ /**
9
+ * Resolves the effective image name from config.
10
+ */
11
+ export declare const resolveImageName: (containerConfig: TestContainerConfig | undefined) => string;
12
+ /**
13
+ * Formats a human-readable build success message.
14
+ */
15
+ export declare const formatBuildSuccess: (tag: string, dockerfile: string) => string;
16
+ /**
17
+ * Formats a human-readable build failure message.
18
+ */
19
+ export declare const formatBuildFailure: (error: string) => string;
20
+ export default class TestsBuild extends Command {
21
+ static description: string;
22
+ static examples: string[];
23
+ static flags: {
24
+ config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
25
+ 'no-cache': import("@oclif/core/interfaces").BooleanFlag<boolean>;
26
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
27
+ };
28
+ run(): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/commands/tests/build.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAQrE;;;GAGG;AACH,eAAO,MAAM,cAAc,GACzB,iBAAiB,mBAAmB,GAAG,SAAS,EAChD,oBAAoB,MAAM,GAAG,SAAS,KACrC,MAAgE,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,iBAAiB,mBAAmB,GAAG,SAAS,KAC/C,MAAsD,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,EAAE,YAAY,MAAM,KAAG,MACG,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,KAAG,MACV,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAIU;IAErC,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;MAcnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4ClC"}
@@ -0,0 +1,90 @@
1
+ import { resolve } from 'node:path';
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { execa } from 'execa';
4
+ import { loadConfigFile } from '../../lib/config/parser.js';
5
+ import { DEFAULT_DOCKERFILE, DEFAULT_IMAGE_NAME, buildBuildxArgs, resolveImageTag, } from '../../lib/tests/build-image.js';
6
+ /**
7
+ * Resolves the effective image tag from config.
8
+ * Priority: tests.container.tag > tests.scaffolding.version > 'latest'
9
+ */
10
+ export const resolveVersion = (containerConfig, scaffoldingVersion) => containerConfig?.tag ?? scaffoldingVersion ?? 'latest';
11
+ /**
12
+ * Resolves the effective image name from config.
13
+ */
14
+ export const resolveImageName = (containerConfig) => containerConfig?.image ?? DEFAULT_IMAGE_NAME;
15
+ /**
16
+ * Formats a human-readable build success message.
17
+ */
18
+ export const formatBuildSuccess = (tag, dockerfile) => `✓ Test image built successfully: ${tag}\n Dockerfile: ${dockerfile}`;
19
+ /**
20
+ * Formats a human-readable build failure message.
21
+ */
22
+ export const formatBuildFailure = (error) => `✗ Test image build failed\n ${error}`;
23
+ export default class TestsBuild extends Command {
24
+ static description = 'Build the test Docker image using docker buildx. ' +
25
+ 'All build parameters (dockerfile, image, tag, platform, buildArgs) are read from ' +
26
+ 'the config file under tests.container. The image stays local (no push) ' +
27
+ 'and can be run with "tests run".';
28
+ static examples = [
29
+ '<%= config.bin %> tests build -c config.yml',
30
+ '<%= config.bin %> tests build -c config.yml --no-cache',
31
+ '<%= config.bin %> tests build -c config.yml --json',
32
+ ];
33
+ static flags = {
34
+ config: Flags.string({
35
+ char: 'c',
36
+ description: 'Path to jahia-cli config file',
37
+ required: true,
38
+ }),
39
+ 'no-cache': Flags.boolean({
40
+ description: 'Build without using cache',
41
+ default: false,
42
+ }),
43
+ json: Flags.boolean({
44
+ description: 'Output result as structured JSON',
45
+ default: false,
46
+ }),
47
+ };
48
+ async run() {
49
+ const { flags } = await this.parse(TestsBuild);
50
+ try {
51
+ const config = await loadConfigFile(resolve(flags.config));
52
+ const containerConfig = config.tests?.container;
53
+ const version = resolveVersion(containerConfig, config.tests?.scaffolding?.version);
54
+ const imageName = resolveImageName(containerConfig);
55
+ const dockerfile = containerConfig?.dockerfile ?? DEFAULT_DOCKERFILE;
56
+ const tag = resolveImageTag(imageName, version);
57
+ const args = buildBuildxArgs({
58
+ dockerfile,
59
+ tag,
60
+ baseVersion: version,
61
+ platform: containerConfig?.platform,
62
+ noCache: flags['no-cache'],
63
+ extraBuildArgs: containerConfig?.buildArgs,
64
+ });
65
+ if (!flags.json) {
66
+ this.log(`Building test image: ${tag}`);
67
+ this.log(` Dockerfile: ${dockerfile}`);
68
+ this.log(` BASE_VERSION: ${version}`);
69
+ }
70
+ await execa('docker', [...args], { stdio: 'inherit' });
71
+ if (flags.json) {
72
+ this.log(JSON.stringify({ success: true, tag, dockerfile, version }, null, 2));
73
+ }
74
+ else {
75
+ this.log(formatBuildSuccess(tag, dockerfile));
76
+ }
77
+ }
78
+ catch (error) {
79
+ const message = error instanceof Error ? error.message : String(error);
80
+ if (flags.json) {
81
+ this.log(JSON.stringify({ success: false, error: message }, null, 2));
82
+ }
83
+ else {
84
+ this.log(formatBuildFailure(message));
85
+ }
86
+ this.exit(1);
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/commands/tests/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { Command } from '@oclif/core';
2
+ import type { ResolvedComponent } from '../../lib/components/types.js';
3
+ import type { TestContainerConfig } from '../../lib/config/types.js';
4
+ /**
5
+ * Formats a human-readable test run start message.
6
+ */
7
+ export declare const formatRunStart: (image: string, network: string, name: string) => string;
8
+ /**
9
+ * Formats a human-readable test completion message.
10
+ */
11
+ export declare const formatRunComplete: (name: string, exitCode: number) => string;
12
+ /**
13
+ * Builds a ResolvedComponent for the cypress test runner using the component registry.
14
+ * Reads image/tag from tests.container config and applies env injections from sibling components.
15
+ */
16
+ export declare const buildCypressComponent: (envComponents: readonly string[], containerConfig: TestContainerConfig | undefined, scaffoldingVersion: string | undefined, extraEnv: Readonly<Record<string, string>>) => ResolvedComponent;
17
+ export default class TestsRun extends Command {
18
+ static description: string;
19
+ static examples: string[];
20
+ static flags: {
21
+ config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
22
+ state: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ env: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
25
+ };
26
+ run(): Promise<void>;
27
+ }
28
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/tests/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAOrE;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,SAAS,MAAM,EAAE,MAAM,MAAM,KAAG,MAOhE,CAAC;AAEf;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,MAAM,EACZ,UAAU,MAAM,KACf,MAIF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,eAAe,SAAS,MAAM,EAAE,EAChC,iBAAiB,mBAAmB,GAAG,SAAS,EAChD,oBAAoB,MAAM,GAAG,SAAS,EACtC,UAAU,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KACzC,iBAgCF,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,WAAW,SAG2E;IAEtG,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;MAgBnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4FlC"}
@@ -0,0 +1,166 @@
1
+ import { resolve } from 'node:path';
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { execa } from 'execa';
4
+ import { applyEnvInjections, getComponent, resolveComponent } from '../../lib/components/index.js';
5
+ import { loadConfigFile } from '../../lib/config/parser.js';
6
+ import { buildRunArgs, containerName, removeContainer } from '../../lib/providers/docker/container.js';
7
+ import { getActiveEnvironment } from '../../lib/state/get-active-environment.js';
8
+ import { stateFilePath } from '../../lib/state/state-file-path.js';
9
+ import { stateFlag } from '../../lib/state/state-flag.js';
10
+ import { DEFAULT_IMAGE_NAME, parseKeyValueArgs } from '../../lib/tests/build-image.js';
11
+ /**
12
+ * Formats a human-readable test run start message.
13
+ */
14
+ export const formatRunStart = (image, network, name) => [
15
+ `▶ Running tests`,
16
+ ` Image: ${image}`,
17
+ ` Network: ${network}`,
18
+ ` Container: ${name}`,
19
+ '',
20
+ ].join('\n');
21
+ /**
22
+ * Formats a human-readable test completion message.
23
+ */
24
+ export const formatRunComplete = (name, exitCode) => {
25
+ const icon = exitCode === 0 ? '✓' : '✗';
26
+ const status = exitCode === 0 ? 'passed' : `failed (exit code ${String(exitCode)})`;
27
+ return `${icon} Tests ${status}\n Container "${name}" kept for inspection`;
28
+ };
29
+ /**
30
+ * Builds a ResolvedComponent for the cypress test runner using the component registry.
31
+ * Reads image/tag from tests.container config and applies env injections from sibling components.
32
+ */
33
+ export const buildCypressComponent = (envComponents, containerConfig, scaffoldingVersion, extraEnv) => {
34
+ const definition = getComponent('cypress');
35
+ if (definition === undefined) {
36
+ throw new Error('cypress component not found in registry');
37
+ }
38
+ const imageOverride = containerConfig?.image ?? DEFAULT_IMAGE_NAME;
39
+ const tagOverride = containerConfig?.tag ?? scaffoldingVersion ?? 'latest';
40
+ const resolved = resolveComponent(definition, {
41
+ image: `${imageOverride}:${tagOverride}`,
42
+ env: extraEnv,
43
+ });
44
+ // Build sibling components (from persisted env) to apply envInjections
45
+ const siblings = envComponents
46
+ .map((name) => {
47
+ const def = getComponent(name);
48
+ return def !== undefined ? resolveComponent(def) : undefined;
49
+ })
50
+ .filter((c) => c !== undefined);
51
+ const allComponents = [...siblings, resolved];
52
+ const injected = applyEnvInjections(allComponents);
53
+ // Return the cypress component with injections applied
54
+ const cypressResult = injected[injected.length - 1];
55
+ if (cypressResult === undefined) {
56
+ throw new Error('Failed to resolve cypress component after env injection');
57
+ }
58
+ return cypressResult;
59
+ };
60
+ export default class TestsRun extends Command {
61
+ static description = 'Run the test Docker image against an active environment. ' +
62
+ 'The container attaches to the environment network, streams output in real-time, ' +
63
+ 'and the CLI exits with the container exit code. Container is kept after completion for debugging.';
64
+ static examples = [
65
+ '<%= config.bin %> tests run -c config.yml',
66
+ '<%= config.bin %> tests run -c config.yml --env CYPRESS_SPEC=cypress/e2e/login.cy.ts',
67
+ '<%= config.bin %> tests run -c config.yml --state /ci/workspace/state.json --json',
68
+ ];
69
+ static flags = {
70
+ config: Flags.string({
71
+ char: 'c',
72
+ description: 'Path to jahia-cli config file',
73
+ required: true,
74
+ }),
75
+ state: stateFlag,
76
+ env: Flags.string({
77
+ char: 'e',
78
+ description: 'Additional env var for test container (KEY=VALUE, repeatable). Supports ${VAR:-default}.',
79
+ multiple: true,
80
+ }),
81
+ json: Flags.boolean({
82
+ description: 'Output result as structured JSON',
83
+ default: false,
84
+ }),
85
+ };
86
+ async run() {
87
+ const { flags } = await this.parse(TestsRun);
88
+ const statePath = stateFilePath(flags.state);
89
+ try {
90
+ const activeEnv = await getActiveEnvironment(statePath);
91
+ if (activeEnv === undefined) {
92
+ throw new Error('No active environment found. Create one with "environment create" first.');
93
+ }
94
+ if (activeEnv.provider !== 'docker') {
95
+ throw new Error(`tests run requires a Docker environment. Current provider: ${activeEnv.provider}`);
96
+ }
97
+ const config = await loadConfigFile(resolve(flags.config));
98
+ const containerConfig = config.tests?.container;
99
+ const userEnv = flags.env !== undefined
100
+ ? parseKeyValueArgs(flags.env)
101
+ : {};
102
+ const component = buildCypressComponent(activeEnv.components.map((c) => c.name), containerConfig, config.tests?.scaffolding?.version, userEnv);
103
+ const imageRef = `${component.effectiveImage}:${component.effectiveTag}`;
104
+ const name = containerName(activeEnv.name, 'cypress');
105
+ const args = buildRunArgs({
106
+ envName: activeEnv.name,
107
+ componentName: component.definition.name,
108
+ image: component.effectiveImage,
109
+ tag: component.effectiveTag,
110
+ networkName: activeEnv.network,
111
+ ports: component.effectivePorts,
112
+ env: component.effectiveEnv,
113
+ volumes: component.definition.volumes,
114
+ networkAliases: component.definition.networkAliases,
115
+ detached: false,
116
+ });
117
+ if (!flags.json) {
118
+ this.log(formatRunStart(imageRef, activeEnv.network, name));
119
+ }
120
+ // Remove any leftover container from a previous run
121
+ await removeContainer(name);
122
+ const result = await execa('docker', [...args], {
123
+ stdio: 'inherit',
124
+ reject: false,
125
+ });
126
+ const exitCode = result.exitCode ?? 1;
127
+ if (flags.json) {
128
+ this.log(JSON.stringify({
129
+ success: exitCode === 0,
130
+ exitCode,
131
+ container: name,
132
+ image: imageRef,
133
+ network: activeEnv.network,
134
+ }, null, 2));
135
+ }
136
+ else {
137
+ this.log(formatRunComplete(name, exitCode));
138
+ }
139
+ if (exitCode !== 0) {
140
+ this.exit(exitCode);
141
+ }
142
+ }
143
+ catch (error) {
144
+ if (isExecaError(error)) {
145
+ const exitCode = error.exitCode ?? 1;
146
+ if (!flags.json) {
147
+ this.log(formatRunComplete('unknown', exitCode));
148
+ }
149
+ this.exit(exitCode);
150
+ return;
151
+ }
152
+ const message = error instanceof Error ? error.message : String(error);
153
+ if (flags.json) {
154
+ this.log(JSON.stringify({ success: false, error: message }, null, 2));
155
+ }
156
+ else {
157
+ this.error(message);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ /**
163
+ * Type guard for ExecaError (has exitCode property).
164
+ */
165
+ const isExecaError = (error) => error instanceof Error && 'exitCode' in error;
166
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/tests/run.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/workflow/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAK7C,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,2BAA2B,CAAC;AAM3E;;GAEG;AACH,eAAO,MAAM,6BAA6B,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,cAAc,CAQ5F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,GAAI,YAAY,MAAM,KAAG,MAGlB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,OAAgB,WAAW,SAGiD;IAE5E,OAAgB,QAAQ,WAKtB;IAEF,OAAgB,KAAK;;;;MAenB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoClC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/workflow/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAK7C,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,2BAA2B,CAAC;AAM3E;;GAEG;AACH,eAAO,MAAM,6BAA6B,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,cAAc,CAQ5F,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,+BAA+B,GAAI,YAAY,MAAM,KAAG,MAGlB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,OAAO;IAC/C,OAAgB,WAAW,SAI4B;IAEvD,OAAgB,QAAQ,WAKtB;IAEF,OAAgB,KAAK;;;;MAenB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAoClC"}
@@ -4,8 +4,8 @@ import { Command, Flags } from '@oclif/core';
4
4
  import yaml from 'js-yaml';
5
5
  import { configToYaml } from '../../lib/config/config-to-yaml.js';
6
6
  import { validateConfig } from '../../lib/config/parser.js';
7
- import { buildSampleWorkflow } from '../../lib/workflow/build-sample-workflow.js';
8
- import { mergeWorkflowIntoConfig } from '../../lib/workflow/merge-workflow-into-config.js';
7
+ import { buildSampleWorkflows } from '../../lib/workflow/build-sample-workflow.js';
8
+ import { mergeWorkflowsIntoConfig } from '../../lib/workflow/merge-workflow-into-config.js';
9
9
  const DEFAULT_CONFIG_FILE = 'jahia-cli.config.yml';
10
10
  /**
11
11
  * Loads an existing config file if it exists, returning an empty config if not found.
@@ -23,13 +23,14 @@ export const loadExistingConfigForWorkflow = async (filePath) => {
23
23
  /**
24
24
  * Builds a human-readable success message for the workflow init command.
25
25
  */
26
- export const buildWorkflowInitSuccessMessage = (outputPath) => `✓ Sample workflow added to ${outputPath}\n\n` +
26
+ export const buildWorkflowInitSuccessMessage = (outputPath) => `✓ Sample workflows added to ${outputPath}\n\n` +
27
27
  ' Edit the workflow steps to match your needs, then run:\n' +
28
28
  ` jahia-cli workflow run --config ${outputPath}`;
29
29
  export default class WorkflowInit extends Command {
30
- static description = 'Add a sample workflow section to a configuration file. ' +
31
- 'Generates ~5 representative steps (init, create, alive, test, cleanup) ' +
32
- 'to help get started. Preserves existing environment and tests sections.';
30
+ static description = 'Add sample workflows section to a configuration file. ' +
31
+ 'Generates a named "main" workflow with representative steps ' +
32
+ '(init, create, alive, test, cleanup) to help get started. ' +
33
+ 'Preserves existing environment and tests sections.';
33
34
  static examples = [
34
35
  '<%= config.bin %> workflow init',
35
36
  '<%= config.bin %> workflow init --config ./my-config.yml',
@@ -44,7 +45,7 @@ export default class WorkflowInit extends Command {
44
45
  }),
45
46
  force: Flags.boolean({
46
47
  char: 'f',
47
- description: 'Overwrite existing workflow section if already present',
48
+ description: 'Overwrite existing workflows section if already present',
48
49
  default: false,
49
50
  }),
50
51
  json: Flags.boolean({
@@ -56,24 +57,24 @@ export default class WorkflowInit extends Command {
56
57
  const { flags } = await this.parse(WorkflowInit);
57
58
  const configPath = resolve(flags.config);
58
59
  const existingConfig = await loadExistingConfigForWorkflow(configPath);
59
- if (existingConfig.workflow !== undefined && !flags.force) {
60
- const msg = `Configuration file already has a workflow section.\n\n` +
60
+ if (existingConfig.workflows !== undefined && !flags.force) {
61
+ const msg = `Configuration file already has a workflows section.\n\n` +
61
62
  ` File: ${configPath}\n\n` +
62
- ' Use --force to overwrite the existing workflow.';
63
+ ' Use --force to overwrite the existing workflows.';
63
64
  if (flags.json) {
64
- this.log(JSON.stringify({ success: false, error: 'workflow_exists', file: configPath }));
65
+ this.log(JSON.stringify({ success: false, error: 'workflows_exists', file: configPath }));
65
66
  }
66
67
  else {
67
68
  this.error(msg);
68
69
  }
69
70
  return;
70
71
  }
71
- const sampleWorkflow = buildSampleWorkflow();
72
- const merged = mergeWorkflowIntoConfig(existingConfig, sampleWorkflow);
72
+ const sampleWorkflows = buildSampleWorkflows();
73
+ const merged = mergeWorkflowsIntoConfig(existingConfig, sampleWorkflows);
73
74
  const yamlContent = configToYaml(merged);
74
75
  await writeFile(configPath, yamlContent, 'utf-8');
75
76
  if (flags.json) {
76
- this.log(JSON.stringify({ success: true, file: configPath, workflow: sampleWorkflow }, undefined, 2));
77
+ this.log(JSON.stringify({ success: true, file: configPath, workflows: sampleWorkflows }, undefined, 2));
77
78
  }
78
79
  else {
79
80
  this.log(buildWorkflowInitSuccessMessage(configPath));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/workflow/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/workflow/init.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,13 @@ export declare const formatDuration: (ms: number) => string;
7
7
  /**
8
8
  * Builds a formatted summary of workflow execution for human-readable output.
9
9
  */
10
- export declare const buildWorkflowSummary: (steps: readonly StepResult[], success: boolean, totalDurationMs: number) => string;
10
+ export declare const buildWorkflowSummary: (workflowName: string, steps: readonly StepResult[], success: boolean, totalDurationMs: number) => string;
11
11
  export default class WorkflowRun extends Command {
12
12
  static description: string;
13
13
  static examples: string[];
14
14
  static flags: {
15
15
  config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
16
+ name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
17
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
18
  state: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/workflow/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAa3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,UAAU,EAAE,EAC5B,SAAS,OAAO,EAChB,iBAAiB,MAAM,KACtB,MAkBF,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,OAAgB,WAAW,SAGoC;IAE/D,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;;;MAcnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+ClC"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/workflow/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAK7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAa3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,cAAc,MAAM,EACpB,OAAO,SAAS,UAAU,EAAE,EAC5B,SAAS,OAAO,EAChB,iBAAiB,MAAM,KACtB,MAoBF,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC9C,OAAgB,WAAW,SAIsC;IAEjE,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;MAkBnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqDlC"}