@testream/dotnet-reporter 0.4.4 → 0.4.6

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/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { parseTrxFile, parseTrxFiles } from './trx-parser';
2
- export { uploadToApi, detectGitContext, detectCIContext, defaultLogger } from './uploader';
3
- export type { Logger, UploadToApiOptions, CIContext } from './uploader';
2
+ export { uploadToApi, detectGitContext, defaultLogger } from './uploader';
3
+ export type { Logger, UploadToApiOptions } from './uploader';
4
4
  export type { DotnetReporterConfig } from './types';
5
5
  export type { CTRFReport, CTRFTest, CTRFSummary, CTRFResults, UploadResult, } from '@jira-test-manager/shared-types';
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/jira-test-manager/jira-test-manager/packages/dotnet-reporter/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3F,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxE,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,GACb,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///home/runner/work/jira-test-manager/jira-test-manager/packages/dotnet-reporter/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1E,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,YAAY,GACb,MAAM,iCAAiC,CAAC"}
package/dist/index.js CHANGED
@@ -2157,6 +2157,133 @@ module.exports = toNumber;
2157
2157
 
2158
2158
  /***/ }),
2159
2159
 
2160
+ /***/ 406:
2161
+ /***/ ((__unused_webpack_module, exports) => {
2162
+
2163
+ "use strict";
2164
+
2165
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
2166
+ exports.detectCIContext = detectCIContext;
2167
+ /**
2168
+ * Detect CI context from environment variables
2169
+ * Supports: GitHub Actions, GitLab CI, Azure Pipelines, CircleCI, Jenkins, Bitbucket Pipelines
2170
+ */
2171
+ function detectCIContext() {
2172
+ const env = process.env;
2173
+ // GitHub Actions
2174
+ if (env.GITHUB_ACTIONS === 'true') {
2175
+ return {
2176
+ branch: env.GITHUB_HEAD_REF || env.GITHUB_REF_NAME || env.GITHUB_REF?.replace('refs/heads/', ''),
2177
+ commitSha: env.GITHUB_SHA,
2178
+ repositoryUrl: env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY
2179
+ ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}`
2180
+ : undefined,
2181
+ buildNumber: env.GITHUB_RUN_NUMBER,
2182
+ buildUrl: env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY && env.GITHUB_RUN_ID
2183
+ ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}`
2184
+ : undefined,
2185
+ };
2186
+ }
2187
+ // GitLab CI
2188
+ if (env.GITLAB_CI === 'true') {
2189
+ return {
2190
+ branch: env.CI_COMMIT_BRANCH || env.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,
2191
+ commitSha: env.CI_COMMIT_SHA,
2192
+ repositoryUrl: env.CI_PROJECT_URL,
2193
+ buildNumber: env.CI_PIPELINE_IID,
2194
+ buildUrl: env.CI_PIPELINE_URL,
2195
+ };
2196
+ }
2197
+ // Azure Pipelines
2198
+ if (env.TF_BUILD === 'True') {
2199
+ return {
2200
+ branch: env.BUILD_SOURCEBRANCH?.replace('refs/heads/', ''),
2201
+ commitSha: env.BUILD_SOURCEVERSION,
2202
+ repositoryUrl: env.BUILD_REPOSITORY_URI,
2203
+ buildNumber: env.BUILD_BUILDNUMBER,
2204
+ buildUrl: env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI && env.SYSTEM_TEAMPROJECT && env.BUILD_BUILDID
2205
+ ? `${env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${env.SYSTEM_TEAMPROJECT}/_build/results?buildId=${env.BUILD_BUILDID}`
2206
+ : undefined,
2207
+ };
2208
+ }
2209
+ // CircleCI
2210
+ if (env.CIRCLECI === 'true') {
2211
+ return {
2212
+ branch: env.CIRCLE_BRANCH,
2213
+ commitSha: env.CIRCLE_SHA1,
2214
+ repositoryUrl: env.CIRCLE_REPOSITORY_URL,
2215
+ buildNumber: env.CIRCLE_BUILD_NUM,
2216
+ buildUrl: env.CIRCLE_BUILD_URL,
2217
+ };
2218
+ }
2219
+ // Jenkins
2220
+ if (env.JENKINS_URL) {
2221
+ return {
2222
+ branch: env.GIT_BRANCH?.replace('origin/', ''),
2223
+ commitSha: env.GIT_COMMIT,
2224
+ repositoryUrl: env.GIT_URL,
2225
+ buildNumber: env.BUILD_NUMBER,
2226
+ buildUrl: env.BUILD_URL,
2227
+ };
2228
+ }
2229
+ // Bitbucket Pipelines
2230
+ if (env.BITBUCKET_BUILD_NUMBER) {
2231
+ return {
2232
+ branch: env.BITBUCKET_BRANCH,
2233
+ commitSha: env.BITBUCKET_COMMIT,
2234
+ repositoryUrl: env.BITBUCKET_GIT_HTTP_ORIGIN,
2235
+ buildNumber: env.BITBUCKET_BUILD_NUMBER,
2236
+ buildUrl: env.BITBUCKET_REPO_FULL_NAME && env.BITBUCKET_BUILD_NUMBER
2237
+ ? `https://bitbucket.org/${env.BITBUCKET_REPO_FULL_NAME}/pipelines/results/${env.BITBUCKET_BUILD_NUMBER}`
2238
+ : undefined,
2239
+ };
2240
+ }
2241
+ return {};
2242
+ }
2243
+ //# sourceMappingURL=ci-detection.js.map
2244
+
2245
+ /***/ }),
2246
+
2247
+ /***/ 827:
2248
+ /***/ ((__unused_webpack_module, exports) => {
2249
+
2250
+ "use strict";
2251
+
2252
+ // CTRF (Common Test Report Format) Type Definitions
2253
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
2254
+ //# sourceMappingURL=ctrf.js.map
2255
+
2256
+ /***/ }),
2257
+
2258
+ /***/ 322:
2259
+ /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
2260
+
2261
+ "use strict";
2262
+
2263
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2264
+ if (k2 === undefined) k2 = k;
2265
+ var desc = Object.getOwnPropertyDescriptor(m, k);
2266
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
2267
+ desc = { enumerable: true, get: function() { return m[k]; } };
2268
+ }
2269
+ Object.defineProperty(o, k2, desc);
2270
+ }) : (function(o, m, k, k2) {
2271
+ if (k2 === undefined) k2 = k;
2272
+ o[k2] = m[k];
2273
+ }));
2274
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
2275
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
2276
+ };
2277
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
2278
+ exports.detectCIContext = void 0;
2279
+ // CTRF types
2280
+ __exportStar(__nccwpck_require__(827), exports);
2281
+ var ci_detection_1 = __nccwpck_require__(406);
2282
+ Object.defineProperty(exports, "detectCIContext", ({ enumerable: true, get: function () { return ci_detection_1.detectCIContext; } }));
2283
+ //# sourceMappingURL=index.js.map
2284
+
2285
+ /***/ }),
2286
+
2160
2287
  /***/ 328:
2161
2288
  /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
2162
2289
 
@@ -2217,7 +2344,6 @@ Required arguments:
2217
2344
  Optional arguments:
2218
2345
  --project <path> Path to .NET project/solution (defaults to current directory)
2219
2346
  --trx-path <path> Skip running tests, use existing TRX file(s) instead
2220
- --test-tool Test framework name (xunit, nunit, mstest). Auto-detected.
2221
2347
 
2222
2348
  Git context (auto-detected in CI):
2223
2349
  --branch Git branch name
@@ -2311,10 +2437,6 @@ function parseArgs(args) {
2311
2437
  options.trxPath = nextArg;
2312
2438
  i++;
2313
2439
  break;
2314
- case '--test-tool':
2315
- options.testTool = nextArg;
2316
- i++;
2317
- break;
2318
2440
  // Git context
2319
2441
  case '--branch':
2320
2442
  options.branch = nextArg;
@@ -2483,8 +2605,7 @@ async function main() {
2483
2605
  logger.info('');
2484
2606
  // Parse TRX files to CTRF
2485
2607
  logger.info('Converting TRX to CTRF format...');
2486
- const report = await (0, trx_parser_1.parseTrxFiles)(trxFiles, options.testTool);
2487
- logger.info(` Detected tool: ${report.results.tool.name}`);
2608
+ const report = await (0, trx_parser_1.parseTrxFiles)(trxFiles);
2488
2609
  logger.info('');
2489
2610
  // Skip upload if disabled
2490
2611
  if (!options.uploadEnabled) {
@@ -2590,6 +2711,7 @@ exports.parseTrxFile = parseTrxFile;
2590
2711
  exports.parseTrxFiles = parseTrxFiles;
2591
2712
  const fs = __importStar(__nccwpck_require__(943));
2592
2713
  const fast_xml_parser_1 = __nccwpck_require__(537);
2714
+ const TOOL_NAME = 'dotnet';
2593
2715
  // Simple UUID v4 generator (avoid extra dependency)
2594
2716
  function generateUUID() {
2595
2717
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
@@ -2664,26 +2786,10 @@ function extractFilePath(stackTrace) {
2664
2786
  const match = stackTrace.match(/([A-Za-z]:\\[^\s:]+\.cs|\/[^\s:]+\.cs)/);
2665
2787
  return match ? match[1] : undefined;
2666
2788
  }
2667
- /**
2668
- * Detect test tool from TRX adapter type
2669
- */
2670
- function detectTestTool(testDefinitions) {
2671
- if (!testDefinitions || testDefinitions.length === 0)
2672
- return 'dotnet';
2673
- const firstTest = testDefinitions[0];
2674
- const adapter = firstTest?.TestMethod?.['@_adapterTypeName'] || '';
2675
- if (adapter.includes('xunit'))
2676
- return 'xunit';
2677
- if (adapter.includes('nunit'))
2678
- return 'nunit';
2679
- if (adapter.includes('mstest'))
2680
- return 'mstest';
2681
- return 'dotnet';
2682
- }
2683
2789
  /**
2684
2790
  * Parse a TRX file and convert to CTRF format
2685
2791
  */
2686
- async function parseTrxFile(trxPath, testTool) {
2792
+ async function parseTrxFile(trxPath) {
2687
2793
  // Read TRX file
2688
2794
  const content = await fs.readFile(trxPath, 'utf-8');
2689
2795
  // Parse XML
@@ -2706,8 +2812,8 @@ async function parseTrxFile(trxPath, testTool) {
2706
2812
  for (const test of unitTests) {
2707
2813
  testDefinitions.set(test['@_id'], test);
2708
2814
  }
2709
- // Detect test tool if not provided
2710
- const toolName = testTool || detectTestTool(unitTests);
2815
+ // Force tool name to 'dotnet' (ignoring testTool parameter)
2816
+ const toolName = TOOL_NAME;
2711
2817
  // Parse test results
2712
2818
  const results = testRun.Results?.UnitTestResult || [];
2713
2819
  const tests = [];
@@ -2802,15 +2908,15 @@ async function parseTrxFile(trxPath, testTool) {
2802
2908
  /**
2803
2909
  * Parse multiple TRX files and merge into a single CTRF report
2804
2910
  */
2805
- async function parseTrxFiles(trxPaths, testTool) {
2911
+ async function parseTrxFiles(trxPaths) {
2806
2912
  if (trxPaths.length === 0) {
2807
2913
  throw new Error('No TRX files provided');
2808
2914
  }
2809
2915
  if (trxPaths.length === 1) {
2810
- return parseTrxFile(trxPaths[0], testTool);
2916
+ return parseTrxFile(trxPaths[0]);
2811
2917
  }
2812
2918
  // Parse all files
2813
- const reports = await Promise.all(trxPaths.map((path) => parseTrxFile(path, testTool)));
2919
+ const reports = await Promise.all(trxPaths.map((path) => parseTrxFile(path)));
2814
2920
  // Merge reports
2815
2921
  const allTests = [];
2816
2922
  let passed = 0;
@@ -2847,7 +2953,7 @@ async function parseTrxFiles(trxPaths, testTool) {
2847
2953
  generatedBy: '@testream/dotnet-reporter',
2848
2954
  results: {
2849
2955
  tool: {
2850
- name: testTool || reports[0].results.tool.name,
2956
+ name: TOOL_NAME,
2851
2957
  },
2852
2958
  summary: {
2853
2959
  tests: allTests.length,
@@ -2877,7 +2983,7 @@ async function parseTrxFiles(trxPaths, testTool) {
2877
2983
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2878
2984
  exports.detectGitContext = exports.defaultLogger = void 0;
2879
2985
  exports.uploadToApi = uploadToApi;
2880
- exports.detectCIContext = detectCIContext;
2986
+ const shared_types_1 = __nccwpck_require__(322);
2881
2987
  const crypto_1 = __nccwpck_require__(982);
2882
2988
  /**
2883
2989
  * Hardcoded API URL for Testream backend
@@ -2905,7 +3011,6 @@ async function uploadToApi(options) {
2905
3011
  logger.info('='.repeat(60));
2906
3012
  logger.info('Testream - .NET Test Results Upload');
2907
3013
  logger.info('='.repeat(60));
2908
- logger.info(`API URL: ${API_URL}`);
2909
3014
  logger.info(`Project Key: ${projectKey}`);
2910
3015
  logger.info(`Test Tool: ${report.results.tool.name}`);
2911
3016
  logger.info('');
@@ -3044,80 +3149,8 @@ async function uploadToApi(options) {
3044
3149
  };
3045
3150
  }
3046
3151
  }
3047
- function detectCIContext() {
3048
- const env = process.env;
3049
- // GitHub Actions
3050
- if (env.GITHUB_ACTIONS === 'true') {
3051
- return {
3052
- branch: env.GITHUB_HEAD_REF || env.GITHUB_REF_NAME || env.GITHUB_REF?.replace('refs/heads/', ''),
3053
- commitSha: env.GITHUB_SHA,
3054
- repositoryUrl: env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY
3055
- ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}`
3056
- : undefined,
3057
- buildNumber: env.GITHUB_RUN_NUMBER,
3058
- buildUrl: env.GITHUB_SERVER_URL && env.GITHUB_REPOSITORY && env.GITHUB_RUN_ID
3059
- ? `${env.GITHUB_SERVER_URL}/${env.GITHUB_REPOSITORY}/actions/runs/${env.GITHUB_RUN_ID}`
3060
- : undefined,
3061
- };
3062
- }
3063
- // GitLab CI
3064
- if (env.GITLAB_CI === 'true') {
3065
- return {
3066
- branch: env.CI_COMMIT_BRANCH || env.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,
3067
- commitSha: env.CI_COMMIT_SHA,
3068
- repositoryUrl: env.CI_PROJECT_URL,
3069
- buildNumber: env.CI_PIPELINE_IID,
3070
- buildUrl: env.CI_PIPELINE_URL,
3071
- };
3072
- }
3073
- // Azure Pipelines
3074
- if (env.TF_BUILD === 'True') {
3075
- return {
3076
- branch: env.BUILD_SOURCEBRANCH?.replace('refs/heads/', ''),
3077
- commitSha: env.BUILD_SOURCEVERSION,
3078
- repositoryUrl: env.BUILD_REPOSITORY_URI,
3079
- buildNumber: env.BUILD_BUILDNUMBER,
3080
- buildUrl: env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI && env.SYSTEM_TEAMPROJECT && env.BUILD_BUILDID
3081
- ? `${env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI}${env.SYSTEM_TEAMPROJECT}/_build/results?buildId=${env.BUILD_BUILDID}`
3082
- : undefined,
3083
- };
3084
- }
3085
- // CircleCI
3086
- if (env.CIRCLECI === 'true') {
3087
- return {
3088
- branch: env.CIRCLE_BRANCH,
3089
- commitSha: env.CIRCLE_SHA1,
3090
- repositoryUrl: env.CIRCLE_REPOSITORY_URL,
3091
- buildNumber: env.CIRCLE_BUILD_NUM,
3092
- buildUrl: env.CIRCLE_BUILD_URL,
3093
- };
3094
- }
3095
- // Jenkins
3096
- if (env.JENKINS_URL) {
3097
- return {
3098
- branch: env.GIT_BRANCH?.replace('origin/', ''),
3099
- commitSha: env.GIT_COMMIT,
3100
- repositoryUrl: env.GIT_URL,
3101
- buildNumber: env.BUILD_NUMBER,
3102
- buildUrl: env.BUILD_URL,
3103
- };
3104
- }
3105
- // Bitbucket Pipelines
3106
- if (env.BITBUCKET_BUILD_NUMBER) {
3107
- return {
3108
- branch: env.BITBUCKET_BRANCH,
3109
- commitSha: env.BITBUCKET_COMMIT,
3110
- repositoryUrl: env.BITBUCKET_GIT_HTTP_ORIGIN,
3111
- buildNumber: env.BITBUCKET_BUILD_NUMBER,
3112
- buildUrl: env.BITBUCKET_REPO_FULL_NAME && env.BITBUCKET_BUILD_NUMBER
3113
- ? `https://bitbucket.org/${env.BITBUCKET_REPO_FULL_NAME}/pipelines/results/${env.BITBUCKET_BUILD_NUMBER}`
3114
- : undefined,
3115
- };
3116
- }
3117
- return {};
3118
- }
3119
3152
  // Keep old function name for backwards compatibility
3120
- exports.detectGitContext = detectCIContext;
3153
+ exports.detectGitContext = shared_types_1.detectCIContext;
3121
3154
 
3122
3155
 
3123
3156
  /***/ }),