@qualflare/cucumberjs 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -3
- package/dist/formatter/index.cjs +22 -7
- package/dist/formatter/index.cjs.map +1 -1
- package/dist/formatter/index.js +22 -7
- package/dist/formatter/index.js.map +1 -1
- package/dist/index.d.cts +8 -0
- package/dist/index.d.ts +8 -0
- package/package.json +1 -1
package/dist/formatter/index.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
// src/formatter/formatter.ts
|
|
2
|
-
import { randomUUID as
|
|
2
|
+
import { randomUUID as randomUUID3 } from "crypto";
|
|
3
3
|
import * as fs3 from "fs";
|
|
4
4
|
import * as path4 from "path";
|
|
5
5
|
import { Formatter } from "@cucumber/cucumber";
|
|
6
6
|
|
|
7
|
+
// src/config/resolve-config.ts
|
|
8
|
+
import { randomUUID } from "crypto";
|
|
9
|
+
|
|
7
10
|
// src/shared/constants.ts
|
|
8
11
|
var RESERVED_MESSAGE_MEDIA_TYPE = "application/vnd.qualflare.message+json";
|
|
9
12
|
var MAX_SUITES_PER_LAUNCH = 2e3;
|
|
@@ -29,6 +32,7 @@ var PROVIDERS = [
|
|
|
29
32
|
detect: (env) => env.GITHUB_ACTIONS === "true",
|
|
30
33
|
providerName: "GitHub Actions",
|
|
31
34
|
buildNumber: (env) => nonEmpty(env.GITHUB_RUN_NUMBER),
|
|
35
|
+
runId: (env) => nonEmpty(env.GITHUB_RUN_ID),
|
|
32
36
|
runUrl: (env) => env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY && env.GITHUB_RUN_ID ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}` : void 0,
|
|
33
37
|
prNumber: (env) => {
|
|
34
38
|
const match = /^refs\/pull\/(\d+)\/merge$/.exec(env.GITHUB_REF ?? "");
|
|
@@ -39,6 +43,7 @@ var PROVIDERS = [
|
|
|
39
43
|
detect: (env) => env.GITLAB_CI === "true",
|
|
40
44
|
providerName: "GitLab CI",
|
|
41
45
|
buildNumber: (env) => nonEmpty(env.CI_PIPELINE_IID),
|
|
46
|
+
runId: (env) => nonEmpty(env.CI_PIPELINE_ID),
|
|
42
47
|
runUrl: (env) => nonEmpty(env.CI_PIPELINE_URL),
|
|
43
48
|
prNumber: (env) => parsePositiveInt(env.CI_MERGE_REQUEST_IID)
|
|
44
49
|
},
|
|
@@ -46,6 +51,7 @@ var PROVIDERS = [
|
|
|
46
51
|
detect: (env) => env.CIRCLECI === "true",
|
|
47
52
|
providerName: "CircleCI",
|
|
48
53
|
buildNumber: (env) => nonEmpty(env.CIRCLE_BUILD_NUM),
|
|
54
|
+
runId: (env) => nonEmpty(env.CIRCLE_WORKFLOW_ID ?? env.CIRCLE_BUILD_NUM),
|
|
49
55
|
runUrl: (env) => nonEmpty(env.CIRCLE_BUILD_URL),
|
|
50
56
|
prNumber: (env) => parsePositiveInt(env.CIRCLE_PR_NUMBER)
|
|
51
57
|
},
|
|
@@ -53,6 +59,7 @@ var PROVIDERS = [
|
|
|
53
59
|
detect: (env) => env.BUILDKITE === "true",
|
|
54
60
|
providerName: "Buildkite",
|
|
55
61
|
buildNumber: (env) => nonEmpty(env.BUILDKITE_BUILD_NUMBER),
|
|
62
|
+
runId: (env) => nonEmpty(env.BUILDKITE_BUILD_ID),
|
|
56
63
|
runUrl: (env) => nonEmpty(env.BUILDKITE_BUILD_URL),
|
|
57
64
|
prNumber: (env) => {
|
|
58
65
|
const raw = env.BUILDKITE_PULL_REQUEST;
|
|
@@ -68,6 +75,7 @@ var PROVIDERS = [
|
|
|
68
75
|
detect: (env) => Boolean(env.JENKINS_URL),
|
|
69
76
|
providerName: "Jenkins",
|
|
70
77
|
buildNumber: (env) => nonEmpty(env.BUILD_NUMBER),
|
|
78
|
+
runId: (env) => nonEmpty(env.BUILD_TAG ?? env.BUILD_NUMBER),
|
|
71
79
|
runUrl: (env) => nonEmpty(env.BUILD_URL)
|
|
72
80
|
// Jenkins has no standardized PR-number env var across its many PR
|
|
73
81
|
// plugins (Multibranch, GitHub Branch Source, etc.) — deliberately
|
|
@@ -77,6 +85,7 @@ var PROVIDERS = [
|
|
|
77
85
|
detect: (env) => env.TF_BUILD === "True" || env.TF_BUILD === "true",
|
|
78
86
|
providerName: "Azure Pipelines",
|
|
79
87
|
buildNumber: (env) => nonEmpty(env.BUILD_BUILDID),
|
|
88
|
+
runId: (env) => nonEmpty(env.BUILD_BUILDID),
|
|
80
89
|
runUrl: (env) => {
|
|
81
90
|
const collectionUri = env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI;
|
|
82
91
|
const project = env.SYSTEM_TEAMPROJECT;
|
|
@@ -92,6 +101,7 @@ var PROVIDERS = [
|
|
|
92
101
|
detect: (env) => Boolean(env.BITBUCKET_BUILD_NUMBER),
|
|
93
102
|
providerName: "Bitbucket Pipelines",
|
|
94
103
|
buildNumber: (env) => nonEmpty(env.BITBUCKET_BUILD_NUMBER),
|
|
104
|
+
runId: (env) => nonEmpty(env.BITBUCKET_BUILD_NUMBER),
|
|
95
105
|
runUrl: (env) => {
|
|
96
106
|
const origin = env.BITBUCKET_GIT_HTTP_ORIGIN;
|
|
97
107
|
if (!origin) {
|
|
@@ -113,6 +123,8 @@ function detectCi(env = process.env) {
|
|
|
113
123
|
if (runUrl !== void 0) result.ciRunUrl = runUrl;
|
|
114
124
|
const prNumber = provider.prNumber?.(env);
|
|
115
125
|
if (prNumber !== void 0) result.ciPrNumber = prNumber;
|
|
126
|
+
const runId = provider.runId?.(env);
|
|
127
|
+
if (runId !== void 0) result.ciRunId = runId;
|
|
116
128
|
return result;
|
|
117
129
|
}
|
|
118
130
|
if (ciInfo.name) {
|
|
@@ -220,6 +232,7 @@ function resolveConfig(options, deps = {}) {
|
|
|
220
232
|
const ciBuildNumber = options.ciBuildNumber ?? detectedCi.ciBuildNumber;
|
|
221
233
|
const ciRunUrl = options.ciRunUrl ?? detectedCi.ciRunUrl;
|
|
222
234
|
const ciPrNumber = options.ciPrNumber ?? detectedCi.ciPrNumber;
|
|
235
|
+
const runId = options.runId ?? firstEnv2("QUALFLARE_RUN_ID") ?? detectedCi.ciRunId ?? randomUUID();
|
|
223
236
|
return {
|
|
224
237
|
// `||` (truthy check), not `??`, for these three REQUIRED-non-empty wire
|
|
225
238
|
// fields — an explicit `''` option must not silently win over the
|
|
@@ -239,6 +252,7 @@ function resolveConfig(options, deps = {}) {
|
|
|
239
252
|
ciBuildNumber,
|
|
240
253
|
ciRunUrl,
|
|
241
254
|
ciPrNumber,
|
|
255
|
+
runId,
|
|
242
256
|
attachScreenshots: options.attachScreenshots ?? envBool("QUALFLARE_ATTACH_SCREENSHOTS") ?? true,
|
|
243
257
|
includeStepHooks: options.includeStepHooks ?? envBool("QUALFLARE_INCLUDE_STEP_HOOKS") ?? false,
|
|
244
258
|
maxAttachmentBytes: options.maxAttachmentBytes ?? envInt("QUALFLARE_MAX_ATTACHMENT_BYTES") ?? 15e5,
|
|
@@ -272,8 +286,8 @@ var logger = {
|
|
|
272
286
|
import * as fs2 from "fs";
|
|
273
287
|
import * as path2 from "path";
|
|
274
288
|
|
|
275
|
-
// src/formatter/video-
|
|
276
|
-
import { randomUUID } from "crypto";
|
|
289
|
+
// src/formatter/video-writer.ts
|
|
290
|
+
import { randomUUID as randomUUID2 } from "crypto";
|
|
277
291
|
import * as fs from "fs";
|
|
278
292
|
import * as path from "path";
|
|
279
293
|
var VIDEO_MIME_TYPES_BY_EXTENSION = {
|
|
@@ -302,7 +316,7 @@ function writeVideoAttachment(pending, outputDir, maxVideoBytes) {
|
|
|
302
316
|
logger.warn(`skipping video attachment "${pending.name}": unsupported video format.`);
|
|
303
317
|
return void 0;
|
|
304
318
|
}
|
|
305
|
-
const localVideoPath = `${
|
|
319
|
+
const localVideoPath = `${randomUUID2()}${resolved.extension}`;
|
|
306
320
|
const destination = path.join(outputDir, localVideoPath);
|
|
307
321
|
if (pending.path !== void 0) {
|
|
308
322
|
let fileSize;
|
|
@@ -953,7 +967,7 @@ function timestampMs(ts) {
|
|
|
953
967
|
import * as os from "os";
|
|
954
968
|
|
|
955
969
|
// src/config/version.ts
|
|
956
|
-
var PACKAGE_VERSION = "0.
|
|
970
|
+
var PACKAGE_VERSION = "0.3.0";
|
|
957
971
|
|
|
958
972
|
// src/formatter/collect-builder.ts
|
|
959
973
|
function resolveOs(config) {
|
|
@@ -976,7 +990,8 @@ function buildCollectPayload(suites, config) {
|
|
|
976
990
|
metadata: {
|
|
977
991
|
version: PACKAGE_VERSION,
|
|
978
992
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
979
|
-
cliName: "qualflare-cucumberjs"
|
|
993
|
+
cliName: "qualflare-cucumberjs",
|
|
994
|
+
runId: config.runId
|
|
980
995
|
},
|
|
981
996
|
properties: config.properties,
|
|
982
997
|
suites,
|
|
@@ -1309,7 +1324,7 @@ var QualflareCucumberFormatter = class extends Formatter {
|
|
|
1309
1324
|
}
|
|
1310
1325
|
}
|
|
1311
1326
|
fs3.mkdirSync(this.config.outputDir, { recursive: true });
|
|
1312
|
-
const outputPath = path4.join(this.config.outputDir, `${
|
|
1327
|
+
const outputPath = path4.join(this.config.outputDir, `${randomUUID3()}.json`);
|
|
1313
1328
|
fs3.writeFileSync(outputPath, JSON.stringify(payload));
|
|
1314
1329
|
logger.info(
|
|
1315
1330
|
`wrote Collect payload to ${outputPath} \u2014 run \`qualflare-cli collect ${this.config.outputDir}\` to upload it.`
|