mirror of https://github.com/actions/toolkit
core: Add new utility method to extract AnnotationProperties from Error instances
parent
ef77c9d60b
commit
4379135168
|
@ -0,0 +1,26 @@
|
||||||
|
import {toAnnotationProperties} from '../src/utils'
|
||||||
|
|
||||||
|
describe('@actions/core/src/utils', () => {
|
||||||
|
describe('.toAnnotationProperties', () => {
|
||||||
|
it('extracts title only from Error instance without a parseable stack', () => {
|
||||||
|
const error = new TypeError('Test error')
|
||||||
|
error.stack = ''
|
||||||
|
expect(toAnnotationProperties(error)).toEqual({
|
||||||
|
title: 'TypeError',
|
||||||
|
file: undefined,
|
||||||
|
startLine: undefined,
|
||||||
|
startColumn: undefined
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('extracts AnnotationProperties from Error instance', () => {
|
||||||
|
const error = new ReferenceError('Test error')
|
||||||
|
expect(toAnnotationProperties(error)).toEqual({
|
||||||
|
title: 'ReferenceError',
|
||||||
|
file: expect.stringMatching(/utils\.test\.ts$/),
|
||||||
|
startLine: expect.any(Number),
|
||||||
|
startColumn: expect.any(Number)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
|
@ -11,6 +11,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/http-client": "^2.0.1",
|
"@actions/http-client": "^2.0.1",
|
||||||
|
"error-stack-parser": "^2.1.4",
|
||||||
"uuid": "^8.3.2"
|
"uuid": "^8.3.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -51,6 +52,19 @@
|
||||||
"integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
|
"integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"node_modules/error-stack-parser": {
|
||||||
|
"version": "2.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
|
||||||
|
"integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"stackframe": "^1.3.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/stackframe": {
|
||||||
|
"version": "1.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
|
||||||
|
"integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="
|
||||||
|
},
|
||||||
"node_modules/tunnel": {
|
"node_modules/tunnel": {
|
||||||
"version": "0.0.6",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
||||||
|
@ -102,6 +116,19 @@
|
||||||
"integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
|
"integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"error-stack-parser": {
|
||||||
|
"version": "2.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
|
||||||
|
"integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
|
||||||
|
"requires": {
|
||||||
|
"stackframe": "^1.3.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stackframe": {
|
||||||
|
"version": "1.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
|
||||||
|
"integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="
|
||||||
|
},
|
||||||
"tunnel": {
|
"tunnel": {
|
||||||
"version": "0.0.6",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.1.1",
|
||||||
"@actions/http-client": "^2.0.1",
|
"@actions/http-client": "^2.0.1",
|
||||||
|
"error-stack-parser": "^2.1.4",
|
||||||
"uuid": "^8.3.2"
|
"uuid": "^8.3.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
import {AnnotationProperties} from './core'
|
import {AnnotationProperties} from './core'
|
||||||
import {CommandProperties} from './command'
|
import {CommandProperties} from './command'
|
||||||
|
import ErrorStackParser from 'error-stack-parser'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
* Sanitizes an input into a string so it can be passed into issueCommand safely
|
||||||
|
@ -39,3 +40,21 @@ export function toCommandProperties(
|
||||||
endColumn: annotationProperties.endColumn
|
endColumn: annotationProperties.endColumn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function toAnnotationProperties(error: Error): AnnotationProperties {
|
||||||
|
let firstFrame
|
||||||
|
|
||||||
|
try {
|
||||||
|
const stack = ErrorStackParser.parse(error)
|
||||||
|
firstFrame = stack?.[0]
|
||||||
|
} catch (parseError) {
|
||||||
|
// If we can't parse the stack, we'll just skip it
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
title: error.name,
|
||||||
|
file: firstFrame?.fileName,
|
||||||
|
startLine: firstFrame?.lineNumber,
|
||||||
|
startColumn: firstFrame?.columnNumber
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue