UNPKG

2.6 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', {
4 value: true
5});
6exports.default = void 0;
7function _stripAnsi() {
8 const data = _interopRequireDefault(require('strip-ansi'));
9 _stripAnsi = function () {
10 return data;
11 };
12 return data;
13}
14function _jestMessageUtil() {
15 const data = require('jest-message-util');
16 _jestMessageUtil = function () {
17 return data;
18 };
19 return data;
20}
21var _BaseReporter = _interopRequireDefault(require('./BaseReporter'));
22function _interopRequireDefault(obj) {
23 return obj && obj.__esModule ? obj : {default: obj};
24}
25/**
26 * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
27 *
28 * This source code is licensed under the MIT license found in the
29 * LICENSE file in the root directory of this source tree.
30 */
31
32const titleSeparator = ' \u203A ';
33class GitHubActionsReporter extends _BaseReporter.default {
34 static filename = __filename;
35 onTestFileResult({context}, {testResults}) {
36 testResults.forEach(result => {
37 const title = [...result.ancestorTitles, result.title].join(
38 titleSeparator
39 );
40 result.retryReasons?.forEach((retryReason, index) => {
41 this.#createAnnotation({
42 ...this.#getMessageDetails(retryReason, context.config),
43 title: `RETRY ${index + 1}: ${title}`,
44 type: 'warning'
45 });
46 });
47 result.failureMessages.forEach(failureMessage => {
48 this.#createAnnotation({
49 ...this.#getMessageDetails(failureMessage, context.config),
50 title,
51 type: 'error'
52 });
53 });
54 });
55 }
56 #getMessageDetails(failureMessage, config) {
57 const {message, stack} = (0, _jestMessageUtil().separateMessageFromStack)(
58 failureMessage
59 );
60 const stackLines = (0, _jestMessageUtil().getStackTraceLines)(stack);
61 const topFrame = (0, _jestMessageUtil().getTopFrame)(stackLines);
62 const normalizedStackLines = stackLines.map(line =>
63 (0, _jestMessageUtil().formatPath)(line, config)
64 );
65 const messageText = [message, ...normalizedStackLines].join('\n');
66 return {
67 file: topFrame?.file,
68 line: topFrame?.line,
69 message: messageText
70 };
71 }
72 #createAnnotation({file, line, message, title, type}) {
73 message = (0, _stripAnsi().default)(
74 // copied from: https://github.com/actions/toolkit/blob/main/packages/core/src/command.ts
75 message.replace(/%/g, '%25').replace(/\r/g, '%0D').replace(/\n/g, '%0A')
76 );
77 this.log(
78 `\n::${type} file=${file},line=${line},title=${title}::${message}`
79 );
80 }
81}
82exports.default = GitHubActionsReporter;