@allurereport/plugin-testops 3.1.0 → 3.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/client.d.ts +3 -1
- package/dist/client.js +18 -7
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/model.d.ts +2 -1
- package/dist/plugin.d.ts +4 -4
- package/dist/plugin.js +58 -58
- package/dist/utils.d.ts +2 -2
- package/package.json +10 -7
package/dist/client.d.ts
CHANGED
|
@@ -5,16 +5,18 @@ export declare class TestOpsClient {
|
|
|
5
5
|
baseUrl: string;
|
|
6
6
|
projectId: string;
|
|
7
7
|
accessToken: string;
|
|
8
|
+
limit?: number;
|
|
8
9
|
});
|
|
9
10
|
get launchUrl(): string | undefined;
|
|
10
11
|
issueOauthToken(): Promise<void>;
|
|
11
12
|
startUpload(ci: CiDescriptor): Promise<void>;
|
|
12
13
|
stopUpload(ci: CiDescriptor, status: TestStatus): Promise<void>;
|
|
13
14
|
createLaunch(launchName: string, launchTags: string[]): Promise<void>;
|
|
14
|
-
createSession(): Promise<void>;
|
|
15
|
+
createSession(environment?: Record<string, any>): Promise<void>;
|
|
15
16
|
uploadTestResults(params: {
|
|
16
17
|
trs: TestResult[];
|
|
17
18
|
attachmentsResolver: (tr: TestResult) => Promise<any>;
|
|
18
19
|
fixturesResolver: (tr: TestResult) => Promise<any>;
|
|
20
|
+
onProgress?: () => void;
|
|
19
21
|
}): Promise<void>;
|
|
20
22
|
}
|
package/dist/client.js
CHANGED
|
@@ -9,10 +9,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
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");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _TestOpsClient_accessToken, _TestOpsClient_projectId, _TestOpsClient_oauthToken, _TestOpsClient_client, _TestOpsClient_launch, _TestOpsClient_session, _TestOpsClient_uploadInProgress;
|
|
12
|
+
var _TestOpsClient_accessToken, _TestOpsClient_projectId, _TestOpsClient_oauthToken, _TestOpsClient_client, _TestOpsClient_launch, _TestOpsClient_session, _TestOpsClient_uploadInProgress, _TestOpsClient_uploadLimit;
|
|
13
13
|
import axios from "axios";
|
|
14
14
|
import FormData from "form-data";
|
|
15
15
|
import chunk from "lodash.chunk";
|
|
16
|
+
import pLimit from "p-limit";
|
|
16
17
|
export class TestOpsClient {
|
|
17
18
|
constructor(params) {
|
|
18
19
|
_TestOpsClient_accessToken.set(this, void 0);
|
|
@@ -22,6 +23,7 @@ export class TestOpsClient {
|
|
|
22
23
|
_TestOpsClient_launch.set(this, void 0);
|
|
23
24
|
_TestOpsClient_session.set(this, void 0);
|
|
24
25
|
_TestOpsClient_uploadInProgress.set(this, false);
|
|
26
|
+
_TestOpsClient_uploadLimit.set(this, 1);
|
|
25
27
|
if (!params.accessToken) {
|
|
26
28
|
throw new Error("accessToken is required");
|
|
27
29
|
}
|
|
@@ -31,12 +33,18 @@ export class TestOpsClient {
|
|
|
31
33
|
if (!params.baseUrl) {
|
|
32
34
|
throw new Error("baseUrl is required");
|
|
33
35
|
}
|
|
36
|
+
if (params.limit && params.limit > 5) {
|
|
37
|
+
throw new Error("limit can't be greater than 5");
|
|
38
|
+
}
|
|
34
39
|
__classPrivateFieldSet(this, _TestOpsClient_accessToken, params.accessToken, "f");
|
|
35
40
|
__classPrivateFieldSet(this, _TestOpsClient_projectId, params.projectId, "f");
|
|
36
41
|
__classPrivateFieldSet(this, _TestOpsClient_client, axios.create({
|
|
37
42
|
baseURL: params.baseUrl,
|
|
38
43
|
validateStatus: (status) => status >= 200 && status < 400,
|
|
39
44
|
}), "f");
|
|
45
|
+
if (params.limit) {
|
|
46
|
+
__classPrivateFieldSet(this, _TestOpsClient_uploadLimit, params.limit, "f");
|
|
47
|
+
}
|
|
40
48
|
}
|
|
41
49
|
get launchUrl() {
|
|
42
50
|
if (!__classPrivateFieldGet(this, _TestOpsClient_launch, "f")) {
|
|
@@ -108,12 +116,13 @@ export class TestOpsClient {
|
|
|
108
116
|
});
|
|
109
117
|
__classPrivateFieldSet(this, _TestOpsClient_launch, data, "f");
|
|
110
118
|
}
|
|
111
|
-
async createSession() {
|
|
119
|
+
async createSession(environment = {}) {
|
|
112
120
|
if (!__classPrivateFieldGet(this, _TestOpsClient_launch, "f")) {
|
|
113
121
|
throw new Error("Launch isn't created! Call createLaunch first");
|
|
114
122
|
}
|
|
115
|
-
const { data } = await __classPrivateFieldGet(this, _TestOpsClient_client, "f").post("/api/
|
|
123
|
+
const { data } = await __classPrivateFieldGet(this, _TestOpsClient_client, "f").post("/api/upload/session?manual=true", {
|
|
116
124
|
launchId: __classPrivateFieldGet(this, _TestOpsClient_launch, "f").id,
|
|
125
|
+
environment: Object.entries(environment).map(([key, value]) => ({ key, value: String(value) })),
|
|
117
126
|
}, {
|
|
118
127
|
headers: {
|
|
119
128
|
Authorization: `Bearer ${__classPrivateFieldGet(this, _TestOpsClient_oauthToken, "f")}`,
|
|
@@ -125,8 +134,9 @@ export class TestOpsClient {
|
|
|
125
134
|
if (!__classPrivateFieldGet(this, _TestOpsClient_session, "f")) {
|
|
126
135
|
throw new Error("Session isn't created! Call createSession first");
|
|
127
136
|
}
|
|
128
|
-
const { trs, attachmentsResolver, fixturesResolver } = params;
|
|
137
|
+
const { trs, attachmentsResolver, fixturesResolver, onProgress } = params;
|
|
129
138
|
const trsChunks = chunk(trs, 100);
|
|
139
|
+
const uploadLimitFn = pLimit(__classPrivateFieldGet(this, _TestOpsClient_uploadLimit, "f"));
|
|
130
140
|
await Promise.all(trsChunks.map(async (trsChunk) => {
|
|
131
141
|
const { data } = await __classPrivateFieldGet(this, _TestOpsClient_client, "f").post("/api/upload/test-result", {
|
|
132
142
|
testSessionId: __classPrivateFieldGet(this, _TestOpsClient_session, "f").id,
|
|
@@ -141,7 +151,7 @@ export class TestOpsClient {
|
|
|
141
151
|
},
|
|
142
152
|
});
|
|
143
153
|
const trsTestOpsIdsByUuid = data.results.reduce((acc, { id, uuid }) => ({ ...acc, [uuid]: id }), {});
|
|
144
|
-
await Promise.all(trsChunk.map(async (
|
|
154
|
+
await Promise.all(trsChunk.map((tr) => uploadLimitFn(async () => {
|
|
145
155
|
const trTestOpsId = trsTestOpsIdsByUuid[tr.id];
|
|
146
156
|
const attachments = await attachmentsResolver(tr);
|
|
147
157
|
const fixtures = await fixturesResolver(tr);
|
|
@@ -172,8 +182,9 @@ export class TestOpsClient {
|
|
|
172
182
|
},
|
|
173
183
|
});
|
|
174
184
|
}
|
|
175
|
-
|
|
185
|
+
onProgress?.();
|
|
186
|
+
})));
|
|
176
187
|
}));
|
|
177
188
|
}
|
|
178
189
|
}
|
|
179
|
-
_TestOpsClient_accessToken = new WeakMap(), _TestOpsClient_projectId = new WeakMap(), _TestOpsClient_oauthToken = new WeakMap(), _TestOpsClient_client = new WeakMap(), _TestOpsClient_launch = new WeakMap(), _TestOpsClient_session = new WeakMap(), _TestOpsClient_uploadInProgress = new WeakMap();
|
|
190
|
+
_TestOpsClient_accessToken = new WeakMap(), _TestOpsClient_projectId = new WeakMap(), _TestOpsClient_oauthToken = new WeakMap(), _TestOpsClient_client = new WeakMap(), _TestOpsClient_launch = new WeakMap(), _TestOpsClient_session = new WeakMap(), _TestOpsClient_uploadInProgress = new WeakMap(), _TestOpsClient_uploadLimit = new WeakMap();
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { TestopsUploaderPluginOptions } from "./model.js";
|
|
2
|
-
export {
|
|
1
|
+
export type { TestopsPluginOptions as TestopsUploaderPluginOptions } from "./model.js";
|
|
2
|
+
export { TestopsPlugin as default } from "./plugin.js";
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { TestopsPlugin as default } from "./plugin.js";
|
package/dist/model.d.ts
CHANGED
|
@@ -6,9 +6,10 @@ export type TestopsUploaderOptions = {
|
|
|
6
6
|
launchName: string;
|
|
7
7
|
launchTags: string[];
|
|
8
8
|
filter?: (testResult: TestResult) => boolean;
|
|
9
|
+
limit?: number;
|
|
9
10
|
};
|
|
10
11
|
export type TemplateManifest = Record<string, string>;
|
|
11
|
-
export type
|
|
12
|
+
export type TestopsPluginOptions = TestopsUploaderOptions;
|
|
12
13
|
export type TestOpsSession = {
|
|
13
14
|
id: number;
|
|
14
15
|
jobId: number;
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { type AllureStore, type Plugin, type PluginContext, type PluginSummary } from "@allurereport/plugin-api";
|
|
2
|
-
import type {
|
|
3
|
-
export declare class
|
|
2
|
+
import type { TestopsPluginOptions } from "./model.js";
|
|
3
|
+
export declare class TestopsPlugin implements Plugin {
|
|
4
4
|
#private;
|
|
5
|
-
readonly options:
|
|
6
|
-
constructor(options:
|
|
5
|
+
readonly options: TestopsPluginOptions;
|
|
6
|
+
constructor(options: TestopsPluginOptions);
|
|
7
7
|
get ciMode(): boolean | undefined;
|
|
8
8
|
start(_context: PluginContext, store: AllureStore): Promise<void>;
|
|
9
9
|
update(_context: PluginContext, store: AllureStore): Promise<void>;
|
package/dist/plugin.js
CHANGED
|
@@ -9,31 +9,33 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
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");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var
|
|
12
|
+
var _TestopsPlugin_instances, _TestopsPlugin_ci, _TestopsPlugin_client, _TestopsPlugin_launchName, _TestopsPlugin_launchTags, _TestopsPlugin_uploadedTestResultsIds, _TestopsPlugin_upload, _TestopsPlugin_startUpload, _TestopsPlugin_stopUpload;
|
|
13
13
|
import { detect } from "@allurereport/ci";
|
|
14
14
|
import { getWorstStatus } from "@allurereport/core-api";
|
|
15
|
-
import {
|
|
15
|
+
import { createPluginSummary, } from "@allurereport/plugin-api";
|
|
16
|
+
import { env } from "node:process";
|
|
17
|
+
import ProgressBar from "progress";
|
|
16
18
|
import { TestOpsClient } from "./client.js";
|
|
17
19
|
import { resolvePluginOptions, unwrapStepsAttachments } from "./utils.js";
|
|
18
|
-
export class
|
|
20
|
+
export class TestopsPlugin {
|
|
19
21
|
constructor(options) {
|
|
20
|
-
|
|
22
|
+
_TestopsPlugin_instances.add(this);
|
|
21
23
|
this.options = options;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
_TestopsPlugin_ci.set(this, void 0);
|
|
25
|
+
_TestopsPlugin_client.set(this, void 0);
|
|
26
|
+
_TestopsPlugin_launchName.set(this, "");
|
|
27
|
+
_TestopsPlugin_launchTags.set(this, []);
|
|
28
|
+
_TestopsPlugin_uploadedTestResultsIds.set(this, []);
|
|
27
29
|
const { accessToken, endpoint, projectId, launchName, launchTags } = resolvePluginOptions(options);
|
|
28
|
-
__classPrivateFieldSet(this,
|
|
30
|
+
__classPrivateFieldSet(this, _TestopsPlugin_ci, detect(), "f");
|
|
29
31
|
if ([accessToken, endpoint, projectId].every(Boolean)) {
|
|
30
|
-
__classPrivateFieldSet(this,
|
|
32
|
+
__classPrivateFieldSet(this, _TestopsPlugin_client, new TestOpsClient({
|
|
31
33
|
baseUrl: endpoint,
|
|
32
34
|
accessToken,
|
|
33
35
|
projectId,
|
|
34
36
|
}), "f");
|
|
35
|
-
__classPrivateFieldSet(this,
|
|
36
|
-
__classPrivateFieldSet(this,
|
|
37
|
+
__classPrivateFieldSet(this, _TestopsPlugin_launchName, launchName, "f");
|
|
38
|
+
__classPrivateFieldSet(this, _TestopsPlugin_launchTags, launchTags, "f");
|
|
37
39
|
}
|
|
38
40
|
if (!accessToken) {
|
|
39
41
|
console.warn("TestOps access token is missing. Please provide a valid access token in the plugin options.");
|
|
@@ -46,64 +48,56 @@ export class TestopsUploaderPlugin {
|
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
50
|
get ciMode() {
|
|
49
|
-
return __classPrivateFieldGet(this,
|
|
51
|
+
return __classPrivateFieldGet(this, _TestopsPlugin_ci, "f") && __classPrivateFieldGet(this, _TestopsPlugin_ci, "f").type !== "local";
|
|
50
52
|
}
|
|
51
53
|
async start(_context, store) {
|
|
52
|
-
if (!__classPrivateFieldGet(this,
|
|
54
|
+
if (!__classPrivateFieldGet(this, _TestopsPlugin_client, "f")) {
|
|
53
55
|
return;
|
|
54
56
|
}
|
|
55
|
-
await __classPrivateFieldGet(this,
|
|
56
|
-
await __classPrivateFieldGet(this,
|
|
57
|
-
console.info(`TestOps launch has been created: ${__classPrivateFieldGet(this,
|
|
57
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_instances, "m", _TestopsPlugin_startUpload).call(this);
|
|
58
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_instances, "m", _TestopsPlugin_upload).call(this, store, { issueNewToken: false });
|
|
59
|
+
console.info(`TestOps launch has been created: ${__classPrivateFieldGet(this, _TestopsPlugin_client, "f").launchUrl}`);
|
|
58
60
|
}
|
|
59
61
|
async update(_context, store) {
|
|
60
|
-
if (!__classPrivateFieldGet(this,
|
|
62
|
+
if (!__classPrivateFieldGet(this, _TestopsPlugin_client, "f")) {
|
|
61
63
|
return;
|
|
62
64
|
}
|
|
63
|
-
await __classPrivateFieldGet(this,
|
|
65
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_instances, "m", _TestopsPlugin_upload).call(this, store);
|
|
64
66
|
}
|
|
65
67
|
async done(_context, store) {
|
|
66
|
-
if (!__classPrivateFieldGet(this,
|
|
68
|
+
if (!__classPrivateFieldGet(this, _TestopsPlugin_client, "f")) {
|
|
67
69
|
return;
|
|
68
70
|
}
|
|
69
71
|
const allTrs = (await store.allTestResults()).filter((tr) => this.options.filter ? this.options.filter(tr) : true);
|
|
70
72
|
const worstStatus = getWorstStatus(allTrs.map(({ status }) => status));
|
|
71
|
-
await __classPrivateFieldGet(this,
|
|
72
|
-
await __classPrivateFieldGet(this,
|
|
73
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_instances, "m", _TestopsPlugin_upload).call(this, store);
|
|
74
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_instances, "m", _TestopsPlugin_stopUpload).call(this, worstStatus || "unknown");
|
|
73
75
|
}
|
|
74
76
|
async info(context, store) {
|
|
75
|
-
if (!__classPrivateFieldGet(this,
|
|
77
|
+
if (!__classPrivateFieldGet(this, _TestopsPlugin_client, "f")?.launchUrl) {
|
|
76
78
|
return undefined;
|
|
77
79
|
}
|
|
78
|
-
const allTrs = (await store.allTestResults()).filter((tr) => this.options.filter ? this.options.filter(tr) : true);
|
|
79
|
-
const newTrs = await store.allNewTestResults();
|
|
80
|
-
const retryTrs = allTrs.filter((tr) => !!tr?.retries?.length);
|
|
81
|
-
const flakyTrs = allTrs.filter((tr) => !!tr?.flaky);
|
|
82
|
-
const duration = allTrs.reduce((acc, { duration: trDuration = 0 }) => acc + trDuration, 0);
|
|
83
|
-
const worstStatus = getWorstStatus(allTrs.map(({ status }) => status));
|
|
84
|
-
const createdAt = allTrs.reduce((acc, { stop }) => Math.max(acc, stop || 0), 0);
|
|
85
80
|
return {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
},
|
|
81
|
+
...(await createPluginSummary({
|
|
82
|
+
name: __classPrivateFieldGet(this, _TestopsPlugin_launchName, "f"),
|
|
83
|
+
plugin: "TestOps",
|
|
84
|
+
meta: {
|
|
85
|
+
reportId: context.reportUuid,
|
|
86
|
+
},
|
|
87
|
+
filter: this.options.filter,
|
|
88
|
+
history: context.history,
|
|
89
|
+
ci: context.ci,
|
|
90
|
+
store,
|
|
91
|
+
})),
|
|
92
|
+
remoteHref: __classPrivateFieldGet(this, _TestopsPlugin_client, "f").launchUrl,
|
|
99
93
|
};
|
|
100
94
|
}
|
|
101
95
|
}
|
|
102
|
-
|
|
96
|
+
_TestopsPlugin_ci = new WeakMap(), _TestopsPlugin_client = new WeakMap(), _TestopsPlugin_launchName = new WeakMap(), _TestopsPlugin_launchTags = new WeakMap(), _TestopsPlugin_uploadedTestResultsIds = new WeakMap(), _TestopsPlugin_instances = new WeakSet(), _TestopsPlugin_upload = async function _TestopsPlugin_upload(store, options) {
|
|
103
97
|
const { issueNewToken = true } = options ?? {};
|
|
104
98
|
const allTrs = await store.allTestResults();
|
|
105
99
|
const trsToUpload = allTrs.filter((tr) => {
|
|
106
|
-
const uploaded = __classPrivateFieldGet(this,
|
|
100
|
+
const uploaded = __classPrivateFieldGet(this, _TestopsPlugin_uploadedTestResultsIds, "f").includes(tr.id);
|
|
107
101
|
if (this.options.filter) {
|
|
108
102
|
return this.options.filter(tr) && !uploaded;
|
|
109
103
|
}
|
|
@@ -119,11 +113,17 @@ _TestopsUploaderPlugin_ci = new WeakMap(), _TestopsUploaderPlugin_client = new W
|
|
|
119
113
|
};
|
|
120
114
|
});
|
|
121
115
|
if (issueNewToken) {
|
|
122
|
-
await __classPrivateFieldGet(this,
|
|
116
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_client, "f").issueOauthToken();
|
|
123
117
|
}
|
|
124
|
-
|
|
125
|
-
|
|
118
|
+
const progressBar = new ProgressBar("Uploading test results [:bar] :current/:total", {
|
|
119
|
+
total: allTrsWithAttachments.length,
|
|
120
|
+
width: 20,
|
|
121
|
+
});
|
|
122
|
+
progressBar.render();
|
|
123
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_client, "f").createSession(env);
|
|
124
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_client, "f").uploadTestResults({
|
|
126
125
|
trs: allTrsWithAttachments,
|
|
126
|
+
onProgress: () => progressBar.tick(),
|
|
127
127
|
attachmentsResolver: async (tr) => {
|
|
128
128
|
const attachments = await store.attachmentsByTrId(tr.id);
|
|
129
129
|
return await Promise.all(attachments.map(async (attachment) => {
|
|
@@ -144,20 +144,20 @@ _TestopsUploaderPlugin_ci = new WeakMap(), _TestopsUploaderPlugin_client = new W
|
|
|
144
144
|
}));
|
|
145
145
|
},
|
|
146
146
|
});
|
|
147
|
-
__classPrivateFieldGet(this,
|
|
148
|
-
},
|
|
149
|
-
if (!__classPrivateFieldGet(this,
|
|
147
|
+
__classPrivateFieldGet(this, _TestopsPlugin_uploadedTestResultsIds, "f").push(...allTrsWithAttachments.map((tr) => tr.id));
|
|
148
|
+
}, _TestopsPlugin_startUpload = async function _TestopsPlugin_startUpload() {
|
|
149
|
+
if (!__classPrivateFieldGet(this, _TestopsPlugin_client, "f")) {
|
|
150
150
|
return;
|
|
151
151
|
}
|
|
152
|
-
await __classPrivateFieldGet(this,
|
|
153
|
-
await __classPrivateFieldGet(this,
|
|
152
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_client, "f").issueOauthToken();
|
|
153
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_client, "f").createLaunch(__classPrivateFieldGet(this, _TestopsPlugin_launchName, "f"), __classPrivateFieldGet(this, _TestopsPlugin_launchTags, "f"));
|
|
154
154
|
if (!this.ciMode) {
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
|
-
await __classPrivateFieldGet(this,
|
|
158
|
-
},
|
|
159
|
-
if (!this.ciMode || !__classPrivateFieldGet(this,
|
|
157
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_client, "f").startUpload(__classPrivateFieldGet(this, _TestopsPlugin_ci, "f"));
|
|
158
|
+
}, _TestopsPlugin_stopUpload = async function _TestopsPlugin_stopUpload(status) {
|
|
159
|
+
if (!this.ciMode || !__classPrivateFieldGet(this, _TestopsPlugin_client, "f")) {
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
162
|
-
await __classPrivateFieldGet(this,
|
|
162
|
+
await __classPrivateFieldGet(this, _TestopsPlugin_client, "f").stopUpload(__classPrivateFieldGet(this, _TestopsPlugin_ci, "f"), status);
|
|
163
163
|
};
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { TestStepResult } from "@allurereport/core-api";
|
|
2
|
-
import type {
|
|
2
|
+
import type { TestopsPluginOptions } from "./model.js";
|
|
3
3
|
export declare const unwrapStepsAttachments: (steps: TestStepResult[]) => TestStepResult[];
|
|
4
|
-
export declare const resolvePluginOptions: (options:
|
|
4
|
+
export declare const resolvePluginOptions: (options: TestopsPluginOptions) => Omit<TestopsPluginOptions, "filter">;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@allurereport/plugin-testops",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Allure Plugin TestOps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"allure",
|
|
@@ -32,13 +32,15 @@
|
|
|
32
32
|
"test": "rimraf ./out && vitest run"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@allurereport/ci": "3.
|
|
36
|
-
"@allurereport/core-api": "3.
|
|
37
|
-
"@allurereport/plugin-api": "3.
|
|
38
|
-
"@allurereport/reader-api": "3.
|
|
39
|
-
"axios": "^1.13.
|
|
35
|
+
"@allurereport/ci": "3.3.0",
|
|
36
|
+
"@allurereport/core-api": "3.3.0",
|
|
37
|
+
"@allurereport/plugin-api": "3.3.0",
|
|
38
|
+
"@allurereport/reader-api": "3.3.0",
|
|
39
|
+
"axios": "^1.13.5",
|
|
40
40
|
"form-data": "^4.0.5",
|
|
41
|
-
"lodash.chunk": "^4.2.0"
|
|
41
|
+
"lodash.chunk": "^4.2.0",
|
|
42
|
+
"p-limit": "^7.3.0",
|
|
43
|
+
"progress": "^2.0.3"
|
|
42
44
|
},
|
|
43
45
|
"devDependencies": {
|
|
44
46
|
"@stylistic/eslint-plugin": "^2.6.1",
|
|
@@ -47,6 +49,7 @@
|
|
|
47
49
|
"@types/form-data": "^2.5.2",
|
|
48
50
|
"@types/lodash.chunk": "^4",
|
|
49
51
|
"@types/node": "^20.17.9",
|
|
52
|
+
"@types/progress": "^2",
|
|
50
53
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
51
54
|
"@typescript-eslint/parser": "^8.0.0",
|
|
52
55
|
"@vitest/runner": "^2.1.9",
|