@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 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/rs/upload/session?manual=true", {
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 (tr) => {
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 { TestopsUploaderPlugin as default } from "./plugin.js";
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 { TestopsUploaderPlugin as default } from "./plugin.js";
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 TestopsUploaderPluginOptions = TestopsUploaderOptions;
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 { TestopsUploaderPluginOptions } from "./model.js";
3
- export declare class TestopsUploaderPlugin implements Plugin {
2
+ import type { TestopsPluginOptions } from "./model.js";
3
+ export declare class TestopsPlugin implements Plugin {
4
4
  #private;
5
- readonly options: TestopsUploaderPluginOptions;
6
- constructor(options: TestopsUploaderPluginOptions);
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 _TestopsUploaderPlugin_instances, _TestopsUploaderPlugin_ci, _TestopsUploaderPlugin_client, _TestopsUploaderPlugin_launchName, _TestopsUploaderPlugin_launchTags, _TestopsUploaderPlugin_uploadedTestResultsIds, _TestopsUploaderPlugin_upload, _TestopsUploaderPlugin_startUpload, _TestopsUploaderPlugin_stopUpload;
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 { convertToSummaryTestResult, } from "@allurereport/plugin-api";
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 TestopsUploaderPlugin {
20
+ export class TestopsPlugin {
19
21
  constructor(options) {
20
- _TestopsUploaderPlugin_instances.add(this);
22
+ _TestopsPlugin_instances.add(this);
21
23
  this.options = options;
22
- _TestopsUploaderPlugin_ci.set(this, void 0);
23
- _TestopsUploaderPlugin_client.set(this, void 0);
24
- _TestopsUploaderPlugin_launchName.set(this, "");
25
- _TestopsUploaderPlugin_launchTags.set(this, []);
26
- _TestopsUploaderPlugin_uploadedTestResultsIds.set(this, []);
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, _TestopsUploaderPlugin_ci, detect(), "f");
30
+ __classPrivateFieldSet(this, _TestopsPlugin_ci, detect(), "f");
29
31
  if ([accessToken, endpoint, projectId].every(Boolean)) {
30
- __classPrivateFieldSet(this, _TestopsUploaderPlugin_client, new TestOpsClient({
32
+ __classPrivateFieldSet(this, _TestopsPlugin_client, new TestOpsClient({
31
33
  baseUrl: endpoint,
32
34
  accessToken,
33
35
  projectId,
34
36
  }), "f");
35
- __classPrivateFieldSet(this, _TestopsUploaderPlugin_launchName, launchName, "f");
36
- __classPrivateFieldSet(this, _TestopsUploaderPlugin_launchTags, launchTags, "f");
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, _TestopsUploaderPlugin_ci, "f") && __classPrivateFieldGet(this, _TestopsUploaderPlugin_ci, "f").type !== "local";
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, _TestopsUploaderPlugin_client, "f")) {
54
+ if (!__classPrivateFieldGet(this, _TestopsPlugin_client, "f")) {
53
55
  return;
54
56
  }
55
- await __classPrivateFieldGet(this, _TestopsUploaderPlugin_instances, "m", _TestopsUploaderPlugin_startUpload).call(this);
56
- await __classPrivateFieldGet(this, _TestopsUploaderPlugin_instances, "m", _TestopsUploaderPlugin_upload).call(this, store, { issueNewToken: false });
57
- console.info(`TestOps launch has been created: ${__classPrivateFieldGet(this, _TestopsUploaderPlugin_client, "f").launchUrl}`);
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, _TestopsUploaderPlugin_client, "f")) {
62
+ if (!__classPrivateFieldGet(this, _TestopsPlugin_client, "f")) {
61
63
  return;
62
64
  }
63
- await __classPrivateFieldGet(this, _TestopsUploaderPlugin_instances, "m", _TestopsUploaderPlugin_upload).call(this, store);
65
+ await __classPrivateFieldGet(this, _TestopsPlugin_instances, "m", _TestopsPlugin_upload).call(this, store);
64
66
  }
65
67
  async done(_context, store) {
66
- if (!__classPrivateFieldGet(this, _TestopsUploaderPlugin_client, "f")) {
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, _TestopsUploaderPlugin_instances, "m", _TestopsUploaderPlugin_upload).call(this, store);
72
- await __classPrivateFieldGet(this, _TestopsUploaderPlugin_instances, "m", _TestopsUploaderPlugin_stopUpload).call(this, worstStatus || "unknown");
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, _TestopsUploaderPlugin_client, "f")?.launchUrl) {
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
- name: __classPrivateFieldGet(this, _TestopsUploaderPlugin_launchName, "f"),
87
- remoteHref: __classPrivateFieldGet(this, _TestopsUploaderPlugin_client, "f").launchUrl,
88
- stats: await store.testsStatistic(this.options.filter),
89
- status: worstStatus ?? "passed",
90
- duration,
91
- createdAt,
92
- plugin: "Awesome",
93
- newTests: newTrs.map(convertToSummaryTestResult),
94
- flakyTests: flakyTrs.map(convertToSummaryTestResult),
95
- retryTests: retryTrs.map(convertToSummaryTestResult),
96
- meta: {
97
- reportId: context.reportUuid,
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
- _TestopsUploaderPlugin_ci = new WeakMap(), _TestopsUploaderPlugin_client = new WeakMap(), _TestopsUploaderPlugin_launchName = new WeakMap(), _TestopsUploaderPlugin_launchTags = new WeakMap(), _TestopsUploaderPlugin_uploadedTestResultsIds = new WeakMap(), _TestopsUploaderPlugin_instances = new WeakSet(), _TestopsUploaderPlugin_upload = async function _TestopsUploaderPlugin_upload(store, options) {
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, _TestopsUploaderPlugin_uploadedTestResultsIds, "f").includes(tr.id);
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, _TestopsUploaderPlugin_client, "f").issueOauthToken();
116
+ await __classPrivateFieldGet(this, _TestopsPlugin_client, "f").issueOauthToken();
123
117
  }
124
- await __classPrivateFieldGet(this, _TestopsUploaderPlugin_client, "f").createSession();
125
- await __classPrivateFieldGet(this, _TestopsUploaderPlugin_client, "f").uploadTestResults({
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, _TestopsUploaderPlugin_uploadedTestResultsIds, "f").push(...allTrsWithAttachments.map((tr) => tr.id));
148
- }, _TestopsUploaderPlugin_startUpload = async function _TestopsUploaderPlugin_startUpload() {
149
- if (!__classPrivateFieldGet(this, _TestopsUploaderPlugin_client, "f")) {
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, _TestopsUploaderPlugin_client, "f").issueOauthToken();
153
- await __classPrivateFieldGet(this, _TestopsUploaderPlugin_client, "f").createLaunch(__classPrivateFieldGet(this, _TestopsUploaderPlugin_launchName, "f"), __classPrivateFieldGet(this, _TestopsUploaderPlugin_launchTags, "f"));
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, _TestopsUploaderPlugin_client, "f").startUpload(__classPrivateFieldGet(this, _TestopsUploaderPlugin_ci, "f"));
158
- }, _TestopsUploaderPlugin_stopUpload = async function _TestopsUploaderPlugin_stopUpload(status) {
159
- if (!this.ciMode || !__classPrivateFieldGet(this, _TestopsUploaderPlugin_client, "f")) {
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, _TestopsUploaderPlugin_client, "f").stopUpload(__classPrivateFieldGet(this, _TestopsUploaderPlugin_ci, "f"), status);
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 { TestopsUploaderPluginOptions } from "./model.js";
2
+ import type { TestopsPluginOptions } from "./model.js";
3
3
  export declare const unwrapStepsAttachments: (steps: TestStepResult[]) => TestStepResult[];
4
- export declare const resolvePluginOptions: (options: TestopsUploaderPluginOptions) => Omit<TestopsUploaderPluginOptions, "filter">;
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.1.0",
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.1.0",
36
- "@allurereport/core-api": "3.1.0",
37
- "@allurereport/plugin-api": "3.1.0",
38
- "@allurereport/reader-api": "3.1.0",
39
- "axios": "^1.13.2",
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",