allure 3.0.0-beta.2 → 3.0.0-beta.21

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 (70) hide show
  1. package/README.md +148 -16
  2. package/dist/commands/allure2.d.ts +15 -0
  3. package/dist/commands/allure2.js +77 -0
  4. package/dist/commands/awesome.d.ts +18 -12
  5. package/dist/commands/awesome.js +83 -75
  6. package/dist/commands/classic.d.ts +15 -11
  7. package/dist/commands/classic.js +71 -63
  8. package/dist/commands/csv.d.ts +13 -9
  9. package/dist/commands/csv.js +63 -45
  10. package/dist/commands/dashboard.d.ts +15 -0
  11. package/dist/commands/dashboard.js +77 -0
  12. package/dist/commands/generate.d.ts +12 -9
  13. package/dist/commands/generate.js +98 -26
  14. package/dist/commands/history.d.ts +9 -7
  15. package/dist/commands/history.js +32 -29
  16. package/dist/commands/index.d.ts +8 -0
  17. package/dist/commands/index.js +8 -0
  18. package/dist/commands/jira/clear.d.ts +16 -0
  19. package/dist/commands/jira/clear.js +113 -0
  20. package/dist/commands/jira/index.d.ts +1 -0
  21. package/dist/commands/jira/index.js +1 -0
  22. package/dist/commands/knownIssue.d.ts +8 -6
  23. package/dist/commands/knownIssue.js +31 -20
  24. package/dist/commands/log.d.ts +12 -7
  25. package/dist/commands/log.js +58 -40
  26. package/dist/commands/login.d.ts +8 -0
  27. package/dist/commands/login.js +50 -0
  28. package/dist/commands/logout.d.ts +8 -0
  29. package/dist/commands/logout.js +50 -0
  30. package/dist/commands/open.d.ts +11 -8
  31. package/dist/commands/open.js +36 -36
  32. package/dist/commands/projects/create.d.ts +9 -0
  33. package/dist/commands/projects/create.js +83 -0
  34. package/dist/commands/projects/delete.d.ts +10 -0
  35. package/dist/commands/projects/delete.js +68 -0
  36. package/dist/commands/projects/index.d.ts +3 -0
  37. package/dist/commands/projects/index.js +3 -0
  38. package/dist/commands/projects/list.d.ts +8 -0
  39. package/dist/commands/projects/list.js +75 -0
  40. package/dist/commands/qualityGate.d.ts +14 -6
  41. package/dist/commands/qualityGate.js +125 -39
  42. package/dist/commands/results/index.d.ts +2 -0
  43. package/dist/commands/results/index.js +2 -0
  44. package/dist/commands/results/pack.d.ts +10 -0
  45. package/dist/commands/results/pack.js +106 -0
  46. package/dist/commands/results/unpack.d.ts +9 -0
  47. package/dist/commands/results/unpack.js +79 -0
  48. package/dist/commands/run.d.ts +24 -10
  49. package/dist/commands/run.js +279 -109
  50. package/dist/commands/slack.d.ts +9 -5
  51. package/dist/commands/slack.js +55 -31
  52. package/dist/commands/testplan.d.ts +8 -6
  53. package/dist/commands/testplan.js +38 -30
  54. package/dist/commands/watch.d.ts +12 -10
  55. package/dist/commands/watch.js +110 -106
  56. package/dist/commands/whoami.d.ts +8 -0
  57. package/dist/commands/whoami.js +57 -0
  58. package/dist/index.d.ts +2 -2
  59. package/dist/index.js +36 -28
  60. package/dist/utils/index.d.ts +1 -0
  61. package/dist/utils/index.js +1 -0
  62. package/dist/utils/logs.d.ts +3 -0
  63. package/dist/utils/logs.js +32 -0
  64. package/dist/utils/process.d.ts +8 -2
  65. package/dist/utils/process.js +17 -6
  66. package/dist/utils/terminal.d.ts +1 -1
  67. package/dist/utils/terminal.js +1 -1
  68. package/package.json +35 -15
  69. package/dist/utils/commands.d.ts +0 -16
  70. package/dist/utils/commands.js +0 -14
@@ -0,0 +1,75 @@
1
+ import { readConfig } from "@allurereport/core";
2
+ import { AllureServiceClient, KnownError } from "@allurereport/service";
3
+ import { Command, Option } from "clipanion";
4
+ import * as console from "node:console";
5
+ import { exit } from "node:process";
6
+ import prompts from "prompts";
7
+ import { green, red, yellow } from "yoctocolors";
8
+ import { logError } from "../../utils/logs.js";
9
+ export class ProjectsListCommand extends Command {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.config = Option.String("--config,-c", {
13
+ description: "The path Allure config file",
14
+ });
15
+ this.cwd = Option.String("--cwd", {
16
+ description: "The working directory for the command to run (default: current working directory)",
17
+ });
18
+ }
19
+ async execute() {
20
+ const config = await readConfig(this.cwd, this.config);
21
+ if (!config?.allureService?.url) {
22
+ console.error(red("No Allure Service URL is provided. Please provide it in the `allureService.url` field in the `allure.config.js` file"));
23
+ exit(1);
24
+ return;
25
+ }
26
+ const serviceClient = new AllureServiceClient(config.allureService);
27
+ try {
28
+ const projects = await serviceClient.projects();
29
+ if (projects.length === 0) {
30
+ console.info(yellow("No projects found. Create a new one with `allure project-create` command"));
31
+ return;
32
+ }
33
+ const res = await prompts({
34
+ type: "select",
35
+ name: "project",
36
+ message: "Select a project",
37
+ choices: projects.map((project) => ({
38
+ title: project.name,
39
+ value: project.name,
40
+ })),
41
+ });
42
+ if (!res?.project) {
43
+ console.error(red("No project selected"));
44
+ exit(1);
45
+ return;
46
+ }
47
+ const lines = [
48
+ "Insert following code into your Allure Config file, to enable Allure Service features for the project:",
49
+ "",
50
+ green("{"),
51
+ green(" allureService: {"),
52
+ green(` project: "${res.project}"`),
53
+ green(" }"),
54
+ green("}"),
55
+ ];
56
+ console.info(lines.join("\n"));
57
+ }
58
+ catch (error) {
59
+ if (error instanceof KnownError) {
60
+ console.error(red(error.message));
61
+ exit(1);
62
+ return;
63
+ }
64
+ await logError("Failed to get projects due to unexpected error", error);
65
+ exit(1);
66
+ }
67
+ }
68
+ }
69
+ ProjectsListCommand.paths = [["projects", "list"]];
70
+ ProjectsListCommand.usage = Command.Usage({
71
+ category: "Allure Service Projects",
72
+ description: "Shows list of all available projects for current user",
73
+ details: "This command lists all available projects for the current user and allows selecting one to get configuration information.",
74
+ examples: [["projects list", "List all available projects"]],
75
+ });
@@ -1,6 +1,14 @@
1
- type QualityGateCommandOptions = {
2
- cwd?: string;
3
- };
4
- export declare const QualityGateCommandAction: (resultsDir: string, options: QualityGateCommandOptions) => Promise<void>;
5
- export declare const QualityGateCommand: (cli: import("cac").CAC) => void;
6
- export {};
1
+ import { Command } from "clipanion";
2
+ export declare class QualityGateCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ resultsDir: string | undefined;
6
+ config: string | undefined;
7
+ fastFail: boolean | undefined;
8
+ maxFailures: number | undefined;
9
+ minTestsCount: number | undefined;
10
+ successRate: number | undefined;
11
+ knownIssues: string | undefined;
12
+ cwd: string | undefined;
13
+ execute(): Promise<void>;
14
+ }
@@ -1,46 +1,132 @@
1
- import { AllureReport, readRuntimeConfig } from "@allure/core";
2
- import console from "node:console";
3
- import process from "node:process";
4
- import { bold, red } from "yoctocolors";
5
- import { createCommand } from "../utils/commands.js";
6
- export const QualityGateCommandAction = async (resultsDir, options) => {
7
- const cwd = options.cwd ?? process.cwd();
8
- const fullConfig = await readRuntimeConfig(cwd, "./allure-report");
9
- const allureReport = new AllureReport(fullConfig);
10
- await allureReport.start();
11
- await allureReport.readDirectory(resultsDir);
12
- await allureReport.done();
13
- await allureReport.validate();
14
- if (allureReport.exitCode === 0) {
15
- return;
1
+ import { AllureReport, QualityGateState, readConfig, stringifyQualityGateResults } from "@allurereport/core";
2
+ import { Command, Option } from "clipanion";
3
+ import { glob } from "glob";
4
+ import * as console from "node:console";
5
+ import { realpath } from "node:fs/promises";
6
+ import { exit, cwd as processCwd } from "node:process";
7
+ import * as typanion from "typanion";
8
+ import { red } from "yoctocolors";
9
+ export class QualityGateCommand extends Command {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.resultsDir = Option.String({
13
+ required: false,
14
+ name: "Pattern to match test results directories in the current working directory (default: ./**/allure-results)",
15
+ });
16
+ this.config = Option.String("--config,-c", {
17
+ description: "The path Allure config file",
18
+ });
19
+ this.fastFail = Option.Boolean("--fast-fail", {
20
+ description: "Force the command to fail if there are any rule failures",
21
+ });
22
+ this.maxFailures = Option.String("--max-failures", {
23
+ description: "The maximum number of rule failures to allow before failing the command",
24
+ validator: typanion.isNumber(),
25
+ });
26
+ this.minTestsCount = Option.String("--min-tests-count", {
27
+ description: "The minimum number of tests to run before validating the quality gate",
28
+ validator: typanion.isNumber(),
29
+ });
30
+ this.successRate = Option.String("--success-rate", {
31
+ description: "The minimum success rate to allow before failing the command",
32
+ validator: typanion.isNumber(),
33
+ });
34
+ this.knownIssues = Option.String("--known-issues", {
35
+ description: "Path to the known issues file. Updates the file and quarantines failed tests when specified",
36
+ });
37
+ this.cwd = Option.String("--cwd", {
38
+ description: "The working directory for the command to run (default: current working directory)",
39
+ });
16
40
  }
17
- const failedResults = allureReport.validationResults.filter((result) => !result.success);
18
- console.error(red(`Quality gate has failed with ${bold(failedResults.length.toString())} errors:\n`));
19
- for (const result of failedResults) {
20
- let scope = "";
21
- switch (result.meta?.type) {
22
- case "label":
23
- scope = `(label[${result.meta.name}="${result.meta.value}"])`;
24
- break;
25
- case "parameter":
26
- scope = `(parameter[${result.meta.name}="${result.meta.value}"])`;
27
- break;
28
- }
29
- console.error(red(`⨯ ${bold(`${result.rule}${scope}`)}: expected ${result.expected}, actual ${result.actual}`));
41
+ async execute() {
42
+ const cwd = await realpath(this.cwd ?? processCwd());
43
+ const resultsDir = (this.resultsDir ?? "./**/allure-results").replace(/[\\/]$/, "");
44
+ const { maxFailures, minTestsCount, successRate, fastFail, knownIssues: knownIssuesPath } = this;
45
+ const config = await readConfig(cwd, this.config, {
46
+ knownIssuesPath,
47
+ });
48
+ const rules = {};
49
+ if (maxFailures !== undefined) {
50
+ rules.maxFailures = maxFailures;
51
+ }
52
+ if (minTestsCount !== undefined) {
53
+ rules.minTestsCount = minTestsCount;
54
+ }
55
+ if (successRate !== undefined) {
56
+ rules.successRate = successRate;
57
+ }
58
+ if (fastFail) {
59
+ rules.fastFail = fastFail;
60
+ }
61
+ config.plugins = [];
62
+ if (Object.keys(rules).length > 0) {
63
+ config.qualityGate = {
64
+ rules: [rules],
65
+ };
66
+ }
67
+ const allureReport = new AllureReport(config);
68
+ if (!allureReport.hasQualityGate) {
69
+ console.error(red("Quality gate is not configured!"));
70
+ console.error(red("Add qualityGate to the config or consult help to know, how to use the command with command-line arguments"));
71
+ exit(-1);
72
+ return;
73
+ }
74
+ const resultsDirectories = (await glob(resultsDir, {
75
+ mark: true,
76
+ nodir: false,
77
+ absolute: true,
78
+ dot: true,
79
+ windowsPathsNoEscape: true,
80
+ cwd,
81
+ })).filter((p) => /(\/|\\)$/.test(p));
82
+ if (resultsDirectories.length === 0) {
83
+ console.error("No Allure results directories found");
84
+ exit(0);
85
+ return;
86
+ }
87
+ const knownIssues = await allureReport.store.allKnownIssues();
88
+ const state = new QualityGateState();
89
+ allureReport.realtimeSubscriber.onTestResults(async (trsIds) => {
90
+ const trs = await Promise.all(trsIds.map((id) => allureReport.store.testResultById(id)));
91
+ const notHiddenTrs = trs.filter((tr) => !tr.hidden);
92
+ const { results, fastFailed } = await allureReport.validate({
93
+ trs: notHiddenTrs,
94
+ knownIssues,
95
+ state,
96
+ });
97
+ if (!fastFailed) {
98
+ return;
99
+ }
100
+ console.error(stringifyQualityGateResults(results));
101
+ exit(1);
102
+ });
103
+ await allureReport.start();
104
+ for (const dir of resultsDirectories) {
105
+ await allureReport.readDirectory(dir);
106
+ }
107
+ await allureReport.done();
108
+ const allTrs = await allureReport.store.allTestResults({ includeHidden: false });
109
+ const validationResults = await allureReport.validate({
110
+ trs: allTrs,
111
+ knownIssues,
112
+ });
113
+ if (validationResults.results.length === 0) {
114
+ exit(0);
115
+ return;
116
+ }
117
+ console.error(stringifyQualityGateResults(validationResults.results));
118
+ exit(1);
30
119
  }
31
- console.error(red(`\nThe process has been exited with code 1`));
32
- process.exit(allureReport.exitCode);
33
- };
34
- export const QualityGateCommand = createCommand({
35
- name: "quality-gate <resultsDir>",
120
+ }
121
+ QualityGateCommand.paths = [["quality-gate"]];
122
+ QualityGateCommand.usage = Command.Usage({
36
123
  description: "Returns status code 1 if there any test failure above specified success rate",
37
- options: [
124
+ details: "This command validates the test results against quality gates defined in the configuration.",
125
+ examples: [
126
+ ["quality-gate ./allure-results", "Validate the test results in the ./allure-results directory"],
38
127
  [
39
- "--cwd <cwd>",
40
- {
41
- description: "The working directory for the command to run (default: current working directory)",
42
- },
128
+ "quality-gate ./allure-results --config custom-config.js",
129
+ "Validate the test results using a custom configuration file",
43
130
  ],
44
131
  ],
45
- action: QualityGateCommandAction,
46
132
  });
@@ -0,0 +1,2 @@
1
+ export * from "./pack.js";
2
+ export * from "./unpack.js";
@@ -0,0 +1,2 @@
1
+ export * from "./pack.js";
2
+ export * from "./unpack.js";
@@ -0,0 +1,10 @@
1
+ import { Command } from "clipanion";
2
+ export declare class ResultsPackCommand extends Command {
3
+ #private;
4
+ static paths: string[][];
5
+ static usage: import("clipanion").Usage;
6
+ resultsDir: string | undefined;
7
+ name: string | undefined;
8
+ cwd: string | undefined;
9
+ execute(): Promise<void>;
10
+ }
@@ -0,0 +1,106 @@
1
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
3
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
4
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
+ };
6
+ var _ResultsPackCommand_instances, _ResultsPackCommand_formatSize;
7
+ import AdmZip from "adm-zip";
8
+ import { Command, Option } from "clipanion";
9
+ import { glob } from "glob";
10
+ import * as console from "node:console";
11
+ import * as fs from "node:fs/promises";
12
+ import { realpath } from "node:fs/promises";
13
+ import { basename, join, resolve } from "node:path";
14
+ import { green, red } from "yoctocolors";
15
+ export class ResultsPackCommand extends Command {
16
+ constructor() {
17
+ super(...arguments);
18
+ _ResultsPackCommand_instances.add(this);
19
+ this.resultsDir = Option.String({
20
+ required: false,
21
+ name: "Pattern to match test results directories in the current working directory (default: ./**/allure-results)",
22
+ });
23
+ this.name = Option.String("--name", {
24
+ description: "The archive name (default: allure-results.zip)",
25
+ });
26
+ this.cwd = Option.String("--cwd", {
27
+ description: "The working directory for the command to run (default: current working directory)",
28
+ });
29
+ }
30
+ async execute() {
31
+ const cwd = await realpath(this.cwd ?? process.cwd());
32
+ const resultsDir = (this.resultsDir ?? "./**/allure-results").replace(/[\\/]$/, "");
33
+ const archiveName = this.name ?? "allure-results.zip";
34
+ const resultsDirectories = (await glob(resultsDir, {
35
+ mark: true,
36
+ nodir: false,
37
+ dot: true,
38
+ absolute: true,
39
+ windowsPathsNoEscape: true,
40
+ cwd,
41
+ })).filter((p) => /(\/|\\)$/.test(p));
42
+ const resultsFiles = new Set();
43
+ if (resultsDirectories.length === 0) {
44
+ console.log(red(`No test results directories found matching pattern: ${resultsDir}`));
45
+ return;
46
+ }
47
+ for (const dir of resultsDirectories) {
48
+ const files = await fs.readdir(dir);
49
+ if (files.length === 0) {
50
+ continue;
51
+ }
52
+ for (const file of files) {
53
+ resultsFiles.add(resolve(dir, file));
54
+ }
55
+ }
56
+ const outputPath = join(cwd, archiveName);
57
+ const zip = new AdmZip();
58
+ for (const file of resultsFiles) {
59
+ try {
60
+ const stats = await fs.stat(file);
61
+ if (stats.isFile()) {
62
+ zip.addLocalFile(file, "", basename(file));
63
+ }
64
+ }
65
+ catch (error) {
66
+ console.log(red(`Error adding file ${file} to archive: ${error.message}`));
67
+ }
68
+ }
69
+ try {
70
+ zip.writeZip(outputPath);
71
+ const stats = await fs.stat(outputPath);
72
+ console.log(green(`Archive created successfully: ${outputPath}`));
73
+ console.log(green(`Total size: ${__classPrivateFieldGet(this, _ResultsPackCommand_instances, "m", _ResultsPackCommand_formatSize).call(this, stats.size)}. ${resultsFiles.size} results files have been collected`));
74
+ }
75
+ catch (err) {
76
+ console.log(red(`Error creating archive: ${err.message}`));
77
+ throw err;
78
+ }
79
+ }
80
+ }
81
+ _ResultsPackCommand_instances = new WeakSet(), _ResultsPackCommand_formatSize = function _ResultsPackCommand_formatSize(bytes) {
82
+ const units = ["bytes", "KB", "MB", "GB"];
83
+ let size = bytes;
84
+ let unitIndex = 0;
85
+ while (size >= 1024 && unitIndex < units.length - 1) {
86
+ size /= 1024;
87
+ unitIndex++;
88
+ }
89
+ if (bytes === 0) {
90
+ return "0 bytes";
91
+ }
92
+ return unitIndex === 0 ? `${Math.round(size)} ${units[unitIndex]}` : `${size.toFixed(2)} ${units[unitIndex]}`;
93
+ };
94
+ ResultsPackCommand.paths = [["results", "pack"]];
95
+ ResultsPackCommand.usage = Command.Usage({
96
+ description: "Creates .zip archive with test results",
97
+ category: "Allure Test Results",
98
+ details: "This command creates .zip archive with all test results which can be collected in the project",
99
+ examples: [
100
+ ["results pack", "Creates .zip archive with test results in directories matched to ./**/allure-results pattern"],
101
+ [
102
+ "results pack ./**/foo/**/my-results --name results.zip",
103
+ "Creates results.zip archive with test results in directories matched to ./**/foo/**/my-results pattern",
104
+ ],
105
+ ],
106
+ });
@@ -0,0 +1,9 @@
1
+ import { Command } from "clipanion";
2
+ export declare class ResultsUnpackCommand extends Command {
3
+ static paths: string[][];
4
+ static usage: import("clipanion").Usage;
5
+ output: string;
6
+ archives: string[];
7
+ cwd: string | undefined;
8
+ execute(): Promise<void>;
9
+ }
@@ -0,0 +1,79 @@
1
+ import AdmZip from "adm-zip";
2
+ import { Command, Option } from "clipanion";
3
+ import * as console from "node:console";
4
+ import * as fs from "node:fs/promises";
5
+ import { realpath } from "node:fs/promises";
6
+ import { basename, resolve } from "node:path";
7
+ import { green, red } from "yoctocolors";
8
+ export class ResultsUnpackCommand extends Command {
9
+ constructor() {
10
+ super(...arguments);
11
+ this.output = Option.String("--output", "./allure-results", {
12
+ description: "Output directory where the archives should be unarchived to (default: ./allure-results)",
13
+ });
14
+ this.archives = Option.Rest({
15
+ name: "List of test results archives to extract separated by spaces. If no archives are provided, the command will extract allure-results.zip archive",
16
+ });
17
+ this.cwd = Option.String("--cwd", {
18
+ description: "The working directory for the command to run (default: current working directory)",
19
+ });
20
+ }
21
+ async execute() {
22
+ const cwd = await realpath(this.cwd ?? process.cwd());
23
+ const outputDir = resolve(cwd, this.output);
24
+ const archives = this.archives.length > 0 ? this.archives : ["allure-results.zip"];
25
+ try {
26
+ await fs.mkdir(outputDir, { recursive: true });
27
+ }
28
+ catch (ignored) { }
29
+ let successCount = 0;
30
+ let failCount = 0;
31
+ for (const archivePath of archives) {
32
+ const resolvedPath = resolve(cwd, archivePath);
33
+ try {
34
+ await fs.access(resolvedPath);
35
+ console.log(`Extracting ${resolvedPath} to ${outputDir}`);
36
+ try {
37
+ const zip = new AdmZip(resolvedPath);
38
+ zip.extractAllTo(outputDir, true);
39
+ console.log(green(`Successfully extracted ${basename(resolvedPath)}`));
40
+ successCount++;
41
+ }
42
+ catch (err) {
43
+ console.log(red(`Error extracting ${basename(resolvedPath)}: ${err.message}`));
44
+ failCount++;
45
+ }
46
+ }
47
+ catch (error) {
48
+ console.log(red(`Error accessing archive ${resolvedPath}: ${error.message}`));
49
+ failCount++;
50
+ }
51
+ }
52
+ console.log(green(`Extraction complete. Successfully extracted ${successCount} archive(s).`));
53
+ if (failCount > 0) {
54
+ console.log(red(`Failed to extract ${failCount} archive(s).`));
55
+ return;
56
+ }
57
+ }
58
+ }
59
+ ResultsUnpackCommand.paths = [["results", "unpack"]];
60
+ ResultsUnpackCommand.usage = Command.Usage({
61
+ description: "Extracts test results from .zip archives",
62
+ category: "Allure Test Results",
63
+ details: "This command extracts test results from .zip archives to the specified output directory",
64
+ examples: [
65
+ ["results unpack", "Extract test results from allure-results.zip to the default directory (./allure-results)"],
66
+ [
67
+ "results unpack results.zip",
68
+ "Extract test results from results.zip to the default directory (./allure-results)",
69
+ ],
70
+ [
71
+ "results unpack results1.zip results2.zip results3.zip",
72
+ "Extract test results from multiple archives to the default directory",
73
+ ],
74
+ [
75
+ "results unpack --output ./mydir results1.zip results2.zip results3.zip",
76
+ "Extract test results from multiple archives to the specified directory (./mydir)",
77
+ ],
78
+ ],
79
+ });
@@ -1,10 +1,24 @@
1
- export type RunCommandOptions = {
2
- config?: string;
3
- cwd?: string;
4
- output?: string;
5
- reportName?: string;
6
- rerun?: number;
7
- silent?: boolean;
8
- } & Record<"--", string[]>;
9
- export declare const RunCommandAction: (options: RunCommandOptions) => Promise<never>;
10
- export declare const RunCommand: (cli: import("cac").CAC) => void;
1
+ import type { QualityGateValidationResult } from "@allurereport/plugin-api";
2
+ import { Command } from "clipanion";
3
+ export type TestProcessResult = {
4
+ code: number | null;
5
+ stdout: string;
6
+ stderr: string;
7
+ qualityGateResults: QualityGateValidationResult[];
8
+ };
9
+ export declare class RunCommand extends Command {
10
+ static paths: string[][];
11
+ static usage: import("clipanion").Usage;
12
+ config: string | undefined;
13
+ cwd: string | undefined;
14
+ output: string | undefined;
15
+ reportName: string | undefined;
16
+ rerun: string | undefined;
17
+ silent: boolean | undefined;
18
+ ignoreLogs: boolean | undefined;
19
+ stage: string | undefined;
20
+ environment: string | undefined;
21
+ commandToRun: string[];
22
+ get logs(): "pipe" | "inherit" | "ignore";
23
+ execute(): Promise<void>;
24
+ }