From b3b99014eb254ee8a0a84d95e5a57b48639e7881 Mon Sep 17 00:00:00 2001 From: Nick Fyson Date: Fri, 11 Sep 2020 18:30:07 +0100 Subject: [PATCH] make ErrorMatcher an object rather than a tuple --- lib/error-matcher.js | 10 +++++----- lib/error-matcher.js.map | 2 +- lib/error-matcher.test.js | 4 ++-- lib/error-matcher.test.js.map | 2 +- lib/toolrunner-error-catcher.js | 10 +++++----- lib/toolrunner-error-catcher.js.map | 2 +- lib/toolrunner-error-catcher.test.js | 20 ++++++++++---------- lib/toolrunner-error-catcher.test.js.map | 2 +- src/error-matcher.test.ts | 4 ++-- src/error-matcher.ts | 20 +++++++++++++------- src/toolrunner-error-catcher.test.ts | 20 ++++++++++---------- src/toolrunner-error-catcher.ts | 10 +++++++--- 12 files changed, 58 insertions(+), 48 deletions(-) diff --git a/lib/error-matcher.js b/lib/error-matcher.js index 3881dac19..4bc56bdcf 100644 --- a/lib/error-matcher.js +++ b/lib/error-matcher.js @@ -5,12 +5,12 @@ exports.namedMatchersForTesting = { /* In due course it may be possible to remove the regex, if/when javascript also exits with code 32. */ - noSourceCodeFound: [ - 32, - new RegExp("No JavaScript or TypeScript code found\\."), - "No code found during the build. Please see:\n" + + noSourceCodeFound: { + exitCode: 32, + outputRegex: new RegExp("No JavaScript or TypeScript code found\\."), + message: "No code found during the build. Please see:\n" + "https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/troubleshooting-code-scanning#no-code-found-during-the-build" - ], + }, }; // we collapse the matches into an array for use in execErrorCatcher exports.errorMatchers = Object.values(exports.namedMatchersForTesting); diff --git a/lib/error-matcher.js.map b/lib/error-matcher.js.map index dd41806ff..bfd9adcac 100644 --- a/lib/error-matcher.js.map +++ b/lib/error-matcher.js.map @@ -1 +1 @@ -{"version":3,"file":"error-matcher.js","sourceRoot":"","sources":["../src/error-matcher.ts"],"names":[],"mappings":";;AAGA,qCAAqC;AACxB,QAAA,uBAAuB,GAAoC;IACtE;;MAEE;IACF,iBAAiB,EAAE;QACjB,EAAE;QACF,IAAI,MAAM,CAAC,2CAA2C,CAAC;QACvD,+CAA+C;YAC/C,yJAAyJ;KAC1J;CACF,CAAC;AAEF,oEAAoE;AACvD,QAAA,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,+BAAuB,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"error-matcher.js","sourceRoot":"","sources":["../src/error-matcher.ts"],"names":[],"mappings":";;AASA,qCAAqC;AACxB,QAAA,uBAAuB,GAAoC;IACtE;;MAEE;IACF,iBAAiB,EAAE;QACjB,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,IAAI,MAAM,CAAC,2CAA2C,CAAC;QACpE,OAAO,EAAE,+CAA+C;YAC/C,yJAAyJ;KACnK;CACF,CAAC;AAEF,oEAAoE;AACvD,QAAA,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,+BAAuB,CAAC,CAAC"} \ No newline at end of file diff --git a/lib/error-matcher.test.js b/lib/error-matcher.test.js index c79bf5719..1d8601120 100644 --- a/lib/error-matcher.test.js +++ b/lib/error-matcher.test.js @@ -20,8 +20,8 @@ function testErrorMatcher(matcherName, logSample) { if (!(matcherName in error_matcher_1.namedMatchersForTesting)) { throw new Error(`Unknown matcher ${matcherName}`); } - const regex = error_matcher_1.namedMatchersForTesting[matcherName][1]; - if (regex === null) { + const regex = error_matcher_1.namedMatchersForTesting[matcherName].outputRegex; + if (regex === undefined) { throw new Error(`Cannot test matcher ${matcherName} with null regex`); } return regex.test(logSample); diff --git a/lib/error-matcher.test.js.map b/lib/error-matcher.test.js.map index 321a28a65..660294611 100644 --- a/lib/error-matcher.test.js.map +++ b/lib/error-matcher.test.js.map @@ -1 +1 @@ -{"version":3,"file":"error-matcher.test.js","sourceRoot":"","sources":["../src/error-matcher.test.ts"],"names":[],"mappings":";;;;;AACA,8CAAuB;AAEvB,mDAA0D;AAE1D;;EAEE;AAEF,aAAI,CAAC,6DAA6D,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC5E,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;;;;;GAK9C,CAAC,CAAC,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,WAAmB,EAAE,SAAiB;IAE9D,IAAI,CAAC,CAAC,WAAW,IAAI,uCAAuB,CAAC,EAAE;QAC7C,MAAM,IAAI,KAAK,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;KACnD;IACD,MAAM,KAAK,GAAG,uCAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,uBAAuB,WAAW,kBAAkB,CAAC,CAAC;KACvE;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC"} \ No newline at end of file +{"version":3,"file":"error-matcher.test.js","sourceRoot":"","sources":["../src/error-matcher.test.ts"],"names":[],"mappings":";;;;;AACA,8CAAuB;AAEvB,mDAA0D;AAE1D;;EAEE;AAEF,aAAI,CAAC,6DAA6D,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC5E,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,EAAE;;;;;GAK9C,CAAC,CAAC,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,WAAmB,EAAE,SAAiB;IAE9D,IAAI,CAAC,CAAC,WAAW,IAAI,uCAAuB,CAAC,EAAE;QAC7C,MAAM,IAAI,KAAK,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;KACnD;IACD,MAAM,KAAK,GAAG,uCAAuB,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC;IAC/D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,WAAW,kBAAkB,CAAC,CAAC;KACvE;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC"} \ No newline at end of file diff --git a/lib/toolrunner-error-catcher.js b/lib/toolrunner-error-catcher.js index ec1ebdad8..ead5ec0b5 100644 --- a/lib/toolrunner-error-catcher.js +++ b/lib/toolrunner-error-catcher.js @@ -20,7 +20,7 @@ const toolrunnner = __importStar(require("@actions/exec/lib/toolrunner")); * @returns Promise exit code */ async function toolrunnerErrorCatcher(commandLine, args, matchers, options) { - var _a; + var _a, _b, _c; let stdout = ''; let stderr = ''; let listeners = { @@ -63,15 +63,15 @@ async function toolrunnerErrorCatcher(commandLine, args, matchers, options) { if (returnState === 0) return returnState; if (matchers) { - for (const [customCode, regex, message] of matchers) { - if (customCode === returnState || regex && (regex.test(stderr) || regex.test(stdout))) { - throw new Error(message); + for (const matcher of matchers) { + if (matcher.exitCode === returnState || ((_a = matcher.outputRegex) === null || _a === void 0 ? void 0 : _a.test(stderr)) || ((_b = matcher.outputRegex) === null || _b === void 0 ? void 0 : _b.test(stdout))) { + throw new Error(matcher.message); } } } if (typeof returnState === 'number') { // only if we were instructed to ignore the return code do we ever return it non-zero - if ((_a = options) === null || _a === void 0 ? void 0 : _a.ignoreReturnCode) { + if ((_c = options) === null || _c === void 0 ? void 0 : _c.ignoreReturnCode) { return returnState; } else { diff --git a/lib/toolrunner-error-catcher.js.map b/lib/toolrunner-error-catcher.js.map index 1ccaea597..ee483b129 100644 --- a/lib/toolrunner-error-catcher.js.map +++ b/lib/toolrunner-error-catcher.js.map @@ -1 +1 @@ -{"version":3,"file":"toolrunner-error-catcher.js","sourceRoot":"","sources":["../src/toolrunner-error-catcher.ts"],"names":[],"mappings":";;;;;;;;;AACA,0EAA4D;AAI5D;;;;;;;;;;GAUG;AACI,KAAK,UAAU,sBAAsB,CAAC,WAAmB,EAAE,IAAe,EACpC,QAAyB,EACzB,OAAwB;;IAEnE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,SAAS,GAAG;QACd,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;;YACvB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,aAAA,OAAO,0CAAE,SAAS,0CAAE,MAAM,MAAK,SAAS,EAAE;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAChC;iBAAM;gBACL,4FAA4F;gBAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC5B;QAEH,CAAC;QACD,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;;YACvB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,aAAA,OAAO,0CAAE,SAAS,0CAAE,MAAM,MAAK,SAAS,EAAE;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAChC;iBAAM;gBACL,4FAA4F;gBAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC5B;QACH,CAAC;KACF,CAAC;IAEF,0GAA0G;IAC1G,IAAI,WAAyB,CAAC;IAC9B,IAAI;QACF,WAAW,GAAG,MAAM,IAAI,WAAW,CAAC,UAAU,CAC5C,WAAW,EACX,IAAI,EACJ;YACE,GAAG,OAAO;YACV,SAAS,EAAE,SAAS;YACpB,gBAAgB,EAAE,IAAI;SACvB,CACA,CAAC,IAAI,EAAE,CAAC;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,WAAW,GAAG,CAAC,CAAC;KACjB;IAED,mEAAmE;IACnE,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAE1C,IAAI,QAAQ,EAAE;QACZ,KAAK,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE;YACnD,IAAI,UAAU,KAAK,WAAW,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAG;gBACtF,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;aAC1B;SACF;KACF;IAED,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;QACnC,qFAAqF;QACrF,UAAI,OAAO,0CAAE,gBAAgB,EAAE;YAC7B,OAAO,WAAW,CAAC;SACpB;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,4BAA4B,WAAW,EAAE,CAAC,CAAC;SACxF;KACF;SAAM;QACL,MAAM,WAAW,CAAC;KACnB;AACH,CAAC;AAlED,wDAkEC"} \ No newline at end of file +{"version":3,"file":"toolrunner-error-catcher.js","sourceRoot":"","sources":["../src/toolrunner-error-catcher.ts"],"names":[],"mappings":";;;;;;;;;AACA,0EAA4D;AAI5D;;;;;;;;;;GAUG;AACI,KAAK,UAAU,sBAAsB,CAAC,WAAmB,EAAE,IAAe,EACpC,QAAyB,EACzB,OAAwB;;IAEnE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,SAAS,GAAG;QACd,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;;YACvB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,aAAA,OAAO,0CAAE,SAAS,0CAAE,MAAM,MAAK,SAAS,EAAE;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAChC;iBAAM;gBACL,4FAA4F;gBAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC5B;QAEH,CAAC;QACD,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;;YACvB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,aAAA,OAAO,0CAAE,SAAS,0CAAE,MAAM,MAAK,SAAS,EAAE;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAChC;iBAAM;gBACL,4FAA4F;gBAC5F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC5B;QACH,CAAC;KACF,CAAC;IAEF,0GAA0G;IAC1G,IAAI,WAAyB,CAAC;IAC9B,IAAI;QACF,WAAW,GAAG,MAAM,IAAI,WAAW,CAAC,UAAU,CAC5C,WAAW,EACX,IAAI,EACJ;YACE,GAAG,OAAO;YACV,SAAS,EAAE,SAAS;YACpB,gBAAgB,EAAE,IAAI;SACvB,CACA,CAAC,IAAI,EAAE,CAAC;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,WAAW,GAAG,CAAC,CAAC;KACjB;IAED,mEAAmE;IACnE,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IAE1C,IAAI,QAAQ,EAAE;QACZ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IACE,OAAO,CAAC,QAAQ,KAAK,WAAW,WAChC,OAAO,CAAC,WAAW,0CAAE,IAAI,CAAC,MAAM,EAAC,WACjC,OAAO,CAAC,WAAW,0CAAE,IAAI,CAAC,MAAM,EAAC,EAC/B;gBACF,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aAClC;SACF;KACF;IAED,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;QACnC,qFAAqF;QACrF,UAAI,OAAO,0CAAE,gBAAgB,EAAE;YAC7B,OAAO,WAAW,CAAC;SACpB;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,4BAA4B,WAAW,EAAE,CAAC,CAAC;SACxF;KACF;SAAM;QACL,MAAM,WAAW,CAAC;KACnB;AACH,CAAC;AAtED,wDAsEC"} \ No newline at end of file diff --git a/lib/toolrunner-error-catcher.test.js b/lib/toolrunner-error-catcher.test.js index 12446ae52..a088397bf 100644 --- a/lib/toolrunner-error-catcher.test.js +++ b/lib/toolrunner-error-catcher.test.js @@ -17,41 +17,41 @@ const toolrunner_error_catcher_1 = require("./toolrunner-error-catcher"); testing_utils_1.setupTests(ava_1.default); ava_1.default('matchers are never applied if non-error exit', async (t) => { const testArgs = buildDummyArgs("foo bar\\nblort qux", "foo bar\\nblort qux", '', 0); - const matchers = [[123, new RegExp("foo bar"), 'error!!!']]; + const matchers = [{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: 'error!!!' }]; t.deepEqual(await exec.exec('node', testArgs), 0); t.deepEqual(await toolrunner_error_catcher_1.toolrunnerErrorCatcher('node', testArgs, matchers), 0); }); ava_1.default('regex matchers are applied to stdout for non-zero exit code', async (t) => { const testArgs = buildDummyArgs("foo bar\\nblort qux", '', '', 1); - const matchers = [[123, new RegExp("foo bar"), '🦄']]; + const matchers = [{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: '🦄' }]; await t.throwsAsync(exec.exec('node', testArgs), { instanceOf: Error, message: 'The process \'node\' failed with exit code 1' }); await t.throwsAsync(toolrunner_error_catcher_1.toolrunnerErrorCatcher('node', testArgs, matchers), { instanceOf: Error, message: '🦄' }); }); ava_1.default('regex matchers are applied to stderr for non-zero exit code', async (t) => { const testArgs = buildDummyArgs("non matching string", 'foo bar\\nblort qux', '', 1); - const matchers = [[123, new RegExp("foo bar"), '🦄']]; + const matchers = [{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: '🦄' }]; await t.throwsAsync(exec.exec('node', testArgs), { instanceOf: Error, message: 'The process \'node\' failed with exit code 1' }); await t.throwsAsync(toolrunner_error_catcher_1.toolrunnerErrorCatcher('node', testArgs, matchers), { instanceOf: Error, message: '🦄' }); }); ava_1.default('matcher returns correct error message when multiple matchers defined', async (t) => { const testArgs = buildDummyArgs("non matching string", 'foo bar\\nblort qux', '', 1); - const matchers = [[456, new RegExp("lorem ipsum"), '😩'], - [123, new RegExp("foo bar"), '🦄'], - [789, new RegExp("blah blah"), '🤦‍♂️']]; + const matchers = [{ exitCode: 456, outputRegex: new RegExp("lorem ipsum"), message: '😩' }, + { exitCode: 123, outputRegex: new RegExp("foo bar"), message: '🦄' }, + { exitCode: 789, outputRegex: new RegExp("blah blah"), message: '🤦‍♂️' }]; await t.throwsAsync(exec.exec('node', testArgs), { instanceOf: Error, message: 'The process \'node\' failed with exit code 1' }); await t.throwsAsync(toolrunner_error_catcher_1.toolrunnerErrorCatcher('node', testArgs, matchers), { instanceOf: Error, message: '🦄' }); }); ava_1.default('matcher returns first match to regex when multiple matches', async (t) => { const testArgs = buildDummyArgs("non matching string", 'foo bar\\nblort qux', '', 1); - const matchers = [[123, new RegExp("foo bar"), '🦄'], - [789, new RegExp("blah blah"), '🤦‍♂️'], - [987, new RegExp("foo bar"), '🚫']]; + const matchers = [{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: '🦄' }, + { exitCode: 789, outputRegex: new RegExp("blah blah"), message: '🤦‍♂️' }, + { exitCode: 987, outputRegex: new RegExp("foo bar"), message: '🚫' }]; await t.throwsAsync(exec.exec('node', testArgs), { instanceOf: Error, message: 'The process \'node\' failed with exit code 1' }); await t.throwsAsync(toolrunner_error_catcher_1.toolrunnerErrorCatcher('node', testArgs, matchers), { instanceOf: Error, message: '🦄' }); }); ava_1.default('exit code matchers are applied', async (t) => { const testArgs = buildDummyArgs("non matching string", 'foo bar\\nblort qux', '', 123); - const matchers = [[123, new RegExp("this will not match"), '🦄']]; + const matchers = [{ exitCode: 123, outputRegex: new RegExp("this will not match"), message: '🦄' }]; await t.throwsAsync(exec.exec('node', testArgs), { instanceOf: Error, message: 'The process \'node\' failed with exit code 123' }); await t.throwsAsync(toolrunner_error_catcher_1.toolrunnerErrorCatcher('node', testArgs, matchers), { instanceOf: Error, message: '🦄' }); }); diff --git a/lib/toolrunner-error-catcher.test.js.map b/lib/toolrunner-error-catcher.test.js.map index 27ae17803..c47222015 100644 --- a/lib/toolrunner-error-catcher.test.js.map +++ b/lib/toolrunner-error-catcher.test.js.map @@ -1 +1 @@ -{"version":3,"file":"toolrunner-error-catcher.test.js","sourceRoot":"","sources":["../src/toolrunner-error-catcher.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"toolrunner-error-catcher.test.js","sourceRoot":"","sources":["../src/toolrunner-error-catcher.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/error-matcher.test.ts b/src/error-matcher.test.ts index fadfb2381..2f62211d8 100644 --- a/src/error-matcher.test.ts +++ b/src/error-matcher.test.ts @@ -21,8 +21,8 @@ function testErrorMatcher(matcherName: string, logSample: string): boolean { if (!(matcherName in namedMatchersForTesting)) { throw new Error(`Unknown matcher ${matcherName}`); } - const regex = namedMatchersForTesting[matcherName][1]; - if (regex === null) { + const regex = namedMatchersForTesting[matcherName].outputRegex; + if (regex === undefined) { throw new Error(`Cannot test matcher ${matcherName} with null regex`); } return regex.test(logSample); diff --git a/src/error-matcher.ts b/src/error-matcher.ts index ba4a684ee..d4e5c15d4 100644 --- a/src/error-matcher.ts +++ b/src/error-matcher.ts @@ -1,17 +1,23 @@ -export type ErrorMatcher = [number|null, RegExp|null, string]; +// defines properties to match against the result of executed commands, +// and a custom error to return when a match is found +export interface ErrorMatcher { + exitCode?: number; // exit code of the run process + outputRegex?: RegExp; // pattern to match against either stdout or stderr + message: string; // the error message that will be thrown for a matching process +} // exported only for testing purposes export const namedMatchersForTesting: { [key: string]: ErrorMatcher } = { /* In due course it may be possible to remove the regex, if/when javascript also exits with code 32. */ - noSourceCodeFound: [ - 32, - new RegExp("No JavaScript or TypeScript code found\\."), - "No code found during the build. Please see:\n" + - "https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/troubleshooting-code-scanning#no-code-found-during-the-build" - ], + noSourceCodeFound: { + exitCode: 32, + outputRegex: new RegExp("No JavaScript or TypeScript code found\\."), + message: "No code found during the build. Please see:\n" + + "https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/troubleshooting-code-scanning#no-code-found-during-the-build" + }, }; // we collapse the matches into an array for use in execErrorCatcher diff --git a/src/toolrunner-error-catcher.test.ts b/src/toolrunner-error-catcher.test.ts index 389882dc4..26f32a4fd 100644 --- a/src/toolrunner-error-catcher.test.ts +++ b/src/toolrunner-error-catcher.test.ts @@ -11,7 +11,7 @@ test('matchers are never applied if non-error exit', async t => { const testArgs = buildDummyArgs("foo bar\\nblort qux", "foo bar\\nblort qux", '', 0); - const matchers: ErrorMatcher[] = [[123, new RegExp("foo bar"), 'error!!!']]; + const matchers: ErrorMatcher[] = [{exitCode: 123, outputRegex: new RegExp("foo bar"), message: 'error!!!' }]; t.deepEqual(await exec.exec('node', testArgs), 0); @@ -23,7 +23,7 @@ test('regex matchers are applied to stdout for non-zero exit code', async t => { const testArgs = buildDummyArgs("foo bar\\nblort qux", '', '', 1); - const matchers: ErrorMatcher[] = [[123, new RegExp("foo bar"), '🦄']]; + const matchers: ErrorMatcher[] = [{exitCode: 123, outputRegex: new RegExp("foo bar"), message: '🦄' }]; await t.throwsAsync(exec.exec('node', testArgs), {instanceOf: Error, message: 'The process \'node\' failed with exit code 1'}); @@ -38,7 +38,7 @@ test('regex matchers are applied to stderr for non-zero exit code', async t => { const testArgs = buildDummyArgs("non matching string", 'foo bar\\nblort qux', '', 1); - const matchers: ErrorMatcher[] = [[123, new RegExp("foo bar"), '🦄']]; + const matchers: ErrorMatcher[] = [{exitCode: 123, outputRegex: new RegExp("foo bar"), message: '🦄' }]; await t.throwsAsync(exec.exec('node', testArgs), {instanceOf: Error, message: 'The process \'node\' failed with exit code 1'}); @@ -53,9 +53,9 @@ test('matcher returns correct error message when multiple matchers defined', asy const testArgs = buildDummyArgs("non matching string", 'foo bar\\nblort qux', '', 1); - const matchers: ErrorMatcher[] = [[456, new RegExp("lorem ipsum"), '😩'], - [123, new RegExp("foo bar"), '🦄'], - [789, new RegExp("blah blah"), '🤦‍♂️']]; + const matchers: ErrorMatcher[] = [{exitCode: 456, outputRegex: new RegExp("lorem ipsum"), message: '😩'}, + {exitCode: 123, outputRegex: new RegExp("foo bar"), message: '🦄'}, + {exitCode: 789, outputRegex: new RegExp("blah blah"), message: '🤦‍♂️'}]; await t.throwsAsync(exec.exec('node', testArgs), {instanceOf: Error, message: 'The process \'node\' failed with exit code 1'}); @@ -70,9 +70,9 @@ test('matcher returns first match to regex when multiple matches', async t => { const testArgs = buildDummyArgs("non matching string", 'foo bar\\nblort qux', '', 1); - const matchers: ErrorMatcher[] = [[123, new RegExp("foo bar"), '🦄'], - [789, new RegExp("blah blah"), '🤦‍♂️'], - [987, new RegExp("foo bar"), '🚫']]; + const matchers: ErrorMatcher[] = [{exitCode: 123, outputRegex: new RegExp("foo bar"), message: '🦄'}, + {exitCode: 789, outputRegex: new RegExp("blah blah"), message: '🤦‍♂️'}, + {exitCode: 987, outputRegex: new RegExp("foo bar"), message: '🚫'}]; await t.throwsAsync(exec.exec('node', testArgs), {instanceOf: Error, message: 'The process \'node\' failed with exit code 1'}); @@ -87,7 +87,7 @@ test('exit code matchers are applied', async t => { const testArgs = buildDummyArgs("non matching string", 'foo bar\\nblort qux', '', 123); - const matchers: ErrorMatcher[] = [[123, new RegExp("this will not match"), '🦄']]; + const matchers: ErrorMatcher[] = [{exitCode: 123, outputRegex: new RegExp("this will not match"), message: '🦄' }]; await t.throwsAsync(exec.exec('node', testArgs), {instanceOf: Error, message: 'The process \'node\' failed with exit code 123'}); diff --git a/src/toolrunner-error-catcher.ts b/src/toolrunner-error-catcher.ts index e423e427e..140186684 100644 --- a/src/toolrunner-error-catcher.ts +++ b/src/toolrunner-error-catcher.ts @@ -63,9 +63,13 @@ export async function toolrunnerErrorCatcher(commandLine: string, args?: string[ if (returnState === 0) return returnState; if (matchers) { - for (const [customCode, regex, message] of matchers) { - if (customCode === returnState || regex && (regex.test(stderr) || regex.test(stdout)) ) { - throw new Error(message); + for (const matcher of matchers) { + if ( + matcher.exitCode === returnState || + matcher.outputRegex?.test(stderr) || + matcher.outputRegex?.test(stdout) + ) { + throw new Error(matcher.message); } } }