From a184d50a26b974fb200e5e9eb406ec6bc8ed88ca Mon Sep 17 00:00:00 2001 From: Chris Raynor Date: Mon, 14 Sep 2020 10:44:43 +0100 Subject: [PATCH] Running lint-fix --- lib/analysis-paths.js | 23 +- lib/analysis-paths.js.map | 2 +- lib/analysis-paths.test.js | 20 +- lib/analysis-paths.test.js.map | 2 +- lib/analyze-action.js | 16 +- lib/analyze-action.js.map | 2 +- lib/analyze.js | 26 +- lib/analyze.js.map | 2 +- lib/api-client.js | 12 +- lib/api-client.js.map | 2 +- lib/autobuild-action.js | 18 +- lib/autobuild-action.js.map | 2 +- lib/autobuild.js | 4 +- lib/autobuild.js.map | 2 +- lib/codeql.js | 230 ++++----- lib/codeql.js.map | 2 +- lib/codeql.test.js | 62 +-- lib/codeql.test.js.map | 2 +- lib/config-utils.js | 191 ++++---- lib/config-utils.js.map | 2 +- lib/config-utils.test.js | 335 ++++++------- lib/config-utils.test.js.map | 2 +- lib/external-queries.js | 19 +- lib/external-queries.js.map | 2 +- lib/external-queries.test.js | 68 +-- lib/external-queries.test.js.map | 2 +- lib/fingerprints.js | 41 +- lib/fingerprints.js.map | 2 +- lib/fingerprints.test.js | 60 ++- lib/fingerprints.test.js.map | 2 +- lib/init-action.js | 50 +- lib/init-action.js.map | 2 +- lib/init.js | 20 +- lib/init.js.map | 2 +- lib/languages.js | 10 +- lib/languages.js.map | 2 +- lib/languages.test.js | 32 +- lib/languages.test.js.map | 2 +- lib/repository.js | 2 +- lib/runner.js | 154 +++--- lib/runner.js.map | 2 +- lib/shared-environment.js | 4 +- lib/testing-utils.js | 12 +- lib/testing-utils.js.map | 2 +- lib/tracer-config.js | 76 +-- lib/tracer-config.js.map | 2 +- lib/tracer-config.test.js | 234 ++++----- lib/tracer-config.test.js.map | 2 +- lib/upload-lib.js | 102 ++-- lib/upload-lib.js.map | 2 +- lib/upload-lib.test.js | 8 +- lib/upload-lib.test.js.map | 2 +- lib/upload-sarif-action.js | 12 +- lib/upload-sarif-action.js.map | 2 +- lib/util.js | 108 ++--- lib/util.js.map | 2 +- lib/util.test.js | 55 ++- lib/util.test.js.map | 2 +- src/analysis-paths.test.ts | 39 +- src/analysis-paths.ts | 43 +- src/analyze-action.ts | 81 ++-- src/analyze.ts | 113 +++-- src/api-client.ts | 36 +- src/autobuild-action.ts | 60 ++- src/autobuild.ts | 23 +- src/codeql.test.ts | 108 +++-- src/codeql.ts | 440 ++++++++++------- src/config-utils.test.ts | 792 ++++++++++++++++++------------- src/config-utils.ts | 529 +++++++++++++-------- src/external-queries.test.ts | 92 ++-- src/external-queries.ts | 35 +- src/fingerprints.test.ts | 261 +++++----- src/fingerprints.ts | 91 ++-- src/init-action.ts | 150 +++--- src/init.ts | 76 +-- src/languages.test.ts | 43 +- src/languages.ts | 25 +- src/logging.ts | 2 +- src/repository.ts | 2 +- src/runner.ts | 303 +++++++----- src/shared-environment.ts | 4 +- src/testing-utils.ts | 31 +- src/tracer-config.test.ts | 328 +++++++------ src/tracer-config.ts | 136 ++++-- src/upload-lib.test.ts | 24 +- src/upload-lib.ts | 182 ++++--- src/upload-sarif-action.ts | 73 +-- src/util.test.ts | 75 ++- src/util.ts | 222 +++++---- 89 files changed, 3658 insertions(+), 2821 deletions(-) diff --git a/lib/analysis-paths.js b/lib/analysis-paths.js index dfc1ca21b..0858eafac 100644 --- a/lib/analysis-paths.js +++ b/lib/analysis-paths.js @@ -1,25 +1,24 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function isInterpretedLanguage(language) { - return language === 'javascript' || language === 'python'; + return language === "javascript" || language === "python"; } // Matches a string containing only characters that are legal to include in paths on windows. exports.legalWindowsPathCharactersRegex = /^[^<>:"\|?]*$/; // Builds an environment variable suitable for LGTM_INDEX_INCLUDE or LGTM_INDEX_EXCLUDE function buildIncludeExcludeEnvVar(paths) { // Ignore anything containing a * - paths = paths.filter(p => p.indexOf('*') === -1); + paths = paths.filter((p) => p.indexOf("*") === -1); // Some characters are illegal in path names in windows - if (process.platform === 'win32') { - paths = paths.filter(p => p.match(exports.legalWindowsPathCharactersRegex)); + if (process.platform === "win32") { + paths = paths.filter((p) => p.match(exports.legalWindowsPathCharactersRegex)); } - return paths.join('\n'); + return paths.join("\n"); } function printPathFiltersWarning(config, logger) { // Index include/exclude/filters only work in javascript and python. // If any other languages are detected/configured then show a warning. - if ((config.paths.length !== 0 || - config.pathsIgnore.length !== 0) && + if ((config.paths.length !== 0 || config.pathsIgnore.length !== 0) && !config.languages.every(isInterpretedLanguage)) { logger.warning('The "paths"/"paths-ignore" fields of the config only have effect for Javascript and Python'); } @@ -34,19 +33,19 @@ function includeAndExcludeAnalysisPaths(config) { // traverse the entire file tree to determine which files are matched. // Any paths containing "*" are not included in these. if (config.paths.length !== 0) { - process.env['LGTM_INDEX_INCLUDE'] = buildIncludeExcludeEnvVar(config.paths); + process.env["LGTM_INDEX_INCLUDE"] = buildIncludeExcludeEnvVar(config.paths); } if (config.pathsIgnore.length !== 0) { - process.env['LGTM_INDEX_EXCLUDE'] = buildIncludeExcludeEnvVar(config.pathsIgnore); + process.env["LGTM_INDEX_EXCLUDE"] = buildIncludeExcludeEnvVar(config.pathsIgnore); } // The 'LGTM_INDEX_FILTERS' environment variable controls which files are // extracted or ignored. It does not control which directories are traversed. // This does understand the glob and double-glob syntax. const filters = []; - filters.push(...config.paths.map(p => 'include:' + p)); - filters.push(...config.pathsIgnore.map(p => 'exclude:' + p)); + filters.push(...config.paths.map((p) => `include:${p}`)); + filters.push(...config.pathsIgnore.map((p) => `exclude:${p}`)); if (filters.length !== 0) { - process.env['LGTM_INDEX_FILTERS'] = filters.join('\n'); + process.env["LGTM_INDEX_FILTERS"] = filters.join("\n"); } } exports.includeAndExcludeAnalysisPaths = includeAndExcludeAnalysisPaths; diff --git a/lib/analysis-paths.js.map b/lib/analysis-paths.js.map index c7ab7bcf9..8a533e86f 100644 --- a/lib/analysis-paths.js.map +++ b/lib/analysis-paths.js.map @@ -1 +1 @@ -{"version":3,"file":"analysis-paths.js","sourceRoot":"","sources":["../src/analysis-paths.ts"],"names":[],"mappings":";;AAGA,SAAS,qBAAqB,CAAC,QAAQ;IACrC,OAAO,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,QAAQ,CAAC;AAC5D,CAAC;AAED,6FAA6F;AAChF,QAAA,+BAA+B,GAAG,eAAe,CAAC;AAE/D,uFAAuF;AACvF,SAAS,yBAAyB,CAAC,KAAe;IAChD,iCAAiC;IACjC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjD,uDAAuD;IACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uCAA+B,CAAC,CAAC,CAAC;KACrE;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,uBAAuB,CAAC,MAA0B,EAAE,MAAc;IAChF,oEAAoE;IACpE,sEAAsE;IACtE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;QAChC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE;QAEhD,MAAM,CAAC,OAAO,CAAC,4FAA4F,CAAC,CAAC;KAC9G;AACH,CAAC;AATD,0DASC;AAED,SAAgB,8BAA8B,CAAC,MAA0B;IACvE,0EAA0E;IAC1E,+DAA+D;IAC/D,sEAAsE;IACtE,qDAAqD;IACrD,gFAAgF;IAChF,sEAAsE;IACtE,sDAAsD;IACtD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC7E;IACD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;KACnF;IAED,yEAAyE;IACzE,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxD;AACH,CAAC;AAxBD,wEAwBC"} \ No newline at end of file +{"version":3,"file":"analysis-paths.js","sourceRoot":"","sources":["../src/analysis-paths.ts"],"names":[],"mappings":";;AAGA,SAAS,qBAAqB,CAAC,QAAQ;IACrC,OAAO,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,QAAQ,CAAC;AAC5D,CAAC;AAED,6FAA6F;AAChF,QAAA,+BAA+B,GAAG,eAAe,CAAC;AAE/D,uFAAuF;AACvF,SAAS,yBAAyB,CAAC,KAAe;IAChD,iCAAiC;IACjC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnD,uDAAuD;IACvD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;QAChC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,uCAA+B,CAAC,CAAC,CAAC;KACvE;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAgB,uBAAuB,CACrC,MAA0B,EAC1B,MAAc;IAEd,oEAAoE;IACpE,sEAAsE;IACtE,IACE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;QAC9D,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAC9C;QACA,MAAM,CAAC,OAAO,CACZ,4FAA4F,CAC7F,CAAC;KACH;AACH,CAAC;AAdD,0DAcC;AAED,SAAgB,8BAA8B,CAAC,MAA0B;IACvE,0EAA0E;IAC1E,+DAA+D;IAC/D,sEAAsE;IACtE,qDAAqD;IACrD,gFAAgF;IAChF,sEAAsE;IACtE,sDAAsD;IACtD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC7E;IACD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;QACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,yBAAyB,CAC3D,MAAM,CAAC,WAAW,CACnB,CAAC;KACH;IAED,yEAAyE;IACzE,6EAA6E;IAC7E,wDAAwD;IACxD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACxD;AACH,CAAC;AA1BD,wEA0BC"} \ No newline at end of file diff --git a/lib/analysis-paths.test.js b/lib/analysis-paths.test.js index b3707e6be..1c5263738 100644 --- a/lib/analysis-paths.test.js +++ b/lib/analysis-paths.test.js @@ -25,12 +25,12 @@ ava_1.default("emptyPaths", async (t) => { originalUserInput: {}, tempDir: tmpDir, toolCacheDir: tmpDir, - codeQLCmd: '', + codeQLCmd: "", }; analysisPaths.includeAndExcludeAnalysisPaths(config); - t.is(process.env['LGTM_INDEX_INCLUDE'], undefined); - t.is(process.env['LGTM_INDEX_EXCLUDE'], undefined); - t.is(process.env['LGTM_INDEX_FILTERS'], undefined); + t.is(process.env["LGTM_INDEX_INCLUDE"], undefined); + t.is(process.env["LGTM_INDEX_EXCLUDE"], undefined); + t.is(process.env["LGTM_INDEX_FILTERS"], undefined); }); }); ava_1.default("nonEmptyPaths", async (t) => { @@ -38,17 +38,17 @@ ava_1.default("nonEmptyPaths", async (t) => { const config = { languages: [], queries: {}, - paths: ['path1', 'path2', '**/path3'], - pathsIgnore: ['path4', 'path5', 'path6/**'], + paths: ["path1", "path2", "**/path3"], + pathsIgnore: ["path4", "path5", "path6/**"], originalUserInput: {}, tempDir: tmpDir, toolCacheDir: tmpDir, - codeQLCmd: '', + codeQLCmd: "", }; analysisPaths.includeAndExcludeAnalysisPaths(config); - t.is(process.env['LGTM_INDEX_INCLUDE'], 'path1\npath2'); - t.is(process.env['LGTM_INDEX_EXCLUDE'], 'path4\npath5'); - t.is(process.env['LGTM_INDEX_FILTERS'], 'include:path1\ninclude:path2\ninclude:**/path3\nexclude:path4\nexclude:path5\nexclude:path6/**'); + t.is(process.env["LGTM_INDEX_INCLUDE"], "path1\npath2"); + t.is(process.env["LGTM_INDEX_EXCLUDE"], "path4\npath5"); + t.is(process.env["LGTM_INDEX_FILTERS"], "include:path1\ninclude:path2\ninclude:**/path3\nexclude:path4\nexclude:path5\nexclude:path6/**"); }); }); //# sourceMappingURL=analysis-paths.test.js.map \ No newline at end of file diff --git a/lib/analysis-paths.test.js.map b/lib/analysis-paths.test.js.map index cf4958c1b..5feb620b9 100644 --- a/lib/analysis-paths.test.js.map +++ b/lib/analysis-paths.test.js.map @@ -1 +1 @@ -{"version":3,"file":"analysis-paths.test.js","sourceRoot":"","sources":["../src/analysis-paths.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAuB;AAEvB,gEAAkD;AAClD,mDAA2C;AAC3C,6CAA+B;AAE/B,0BAAU,CAAC,aAAI,CAAC,CAAC;AAEjB,aAAI,CAAC,YAAY,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC3B,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QAC1C,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,EAAE;YACT,iBAAiB,EAAE,EAAE;YACrB,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;SACd,CAAC;QACF,aAAa,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,eAAe,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IAC9B,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QAC1C,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;YACrC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;YAC3C,iBAAiB,EAAE,EAAE;YACrB,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;SACd,CAAC;QACF,aAAa,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,cAAc,CAAC,CAAC;QACxD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,cAAc,CAAC,CAAC;QACxD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,gGAAgG,CAAC,CAAC;IAC5I,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"analysis-paths.test.js","sourceRoot":"","sources":["../src/analysis-paths.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAuB;AAEvB,gEAAkD;AAClD,mDAA6C;AAC7C,6CAA+B;AAE/B,0BAAU,CAAC,aAAI,CAAC,CAAC;AAEjB,aAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC7B,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,EAAE;YACT,iBAAiB,EAAE,EAAE;YACrB,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;SACd,CAAC;QACF,aAAa,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChC,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5C,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;YACrC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;YAC3C,iBAAiB,EAAE,EAAE;YACrB,OAAO,EAAE,MAAM;YACf,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;SACd,CAAC;QACF,aAAa,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,cAAc,CAAC,CAAC;QACxD,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,cAAc,CAAC,CAAC;QACxD,CAAC,CAAC,EAAE,CACF,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EACjC,gGAAgG,CACjG,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 3626838dd..6f7a8728a 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -15,8 +15,10 @@ const repository_1 = require("./repository"); const util = __importStar(require("./util")); async function sendStatusReport(startedAt, stats, error) { var _a, _b, _c; - const status = ((_a = stats) === null || _a === void 0 ? void 0 : _a.analyze_failure_language) !== undefined || error !== undefined ? 'failure' : 'success'; - const statusReportBase = await util.createStatusReportBase('finish', status, startedAt, (_b = error) === null || _b === void 0 ? void 0 : _b.message, (_c = error) === null || _c === void 0 ? void 0 : _c.stack); + const status = ((_a = stats) === null || _a === void 0 ? void 0 : _a.analyze_failure_language) !== undefined || error !== undefined + ? "failure" + : "success"; + const statusReportBase = await util.createStatusReportBase("finish", status, startedAt, (_b = error) === null || _b === void 0 ? void 0 : _b.message, (_c = error) === null || _c === void 0 ? void 0 : _c.stack); const statusReport = { ...statusReportBase, ...(stats || {}), @@ -28,15 +30,15 @@ async function run() { let stats = undefined; try { util.prepareLocalRunEnvironment(); - if (!await util.sendStatusReport(await util.createStatusReportBase('finish', 'starting', startedAt), true)) { + if (!(await util.sendStatusReport(await util.createStatusReportBase("finish", "starting", startedAt), true))) { return; } const logger = logging_1.getActionsLogger(); - const config = await config_utils_1.getConfig(util.getRequiredEnvParam('RUNNER_TEMP'), logger); + const config = await config_utils_1.getConfig(util.getRequiredEnvParam("RUNNER_TEMP"), logger); if (config === undefined) { throw new Error("Config file could not be found at expected location. Has the 'init' action been called?"); } - stats = await analyze_1.runAnalyze(repository_1.parseRepositoryNwo(util.getRequiredEnvParam('GITHUB_REPOSITORY')), await util.getCommitOid(), util.getRef(), await util.getAnalysisKey(), util.getRequiredEnvParam('GITHUB_WORKFLOW'), util.getWorkflowRunID(), core.getInput('checkout_path'), core.getInput('matrix'), core.getInput('token'), util.getRequiredEnvParam('GITHUB_SERVER_URL'), core.getInput('upload') === 'true', 'actions', core.getInput('output'), util.getMemoryFlag(core.getInput('ram')), util.getAddSnippetsFlag(core.getInput('add-snippets')), util.getThreadsFlag(core.getInput('threads'), logger), config, logger); + stats = await analyze_1.runAnalyze(repository_1.parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")), await util.getCommitOid(), util.getRef(), await util.getAnalysisKey(), util.getRequiredEnvParam("GITHUB_WORKFLOW"), util.getWorkflowRunID(), core.getInput("checkout_path"), core.getInput("matrix"), core.getInput("token"), util.getRequiredEnvParam("GITHUB_SERVER_URL"), core.getInput("upload") === "true", "actions", core.getInput("output"), util.getMemoryFlag(core.getInput("ram")), util.getAddSnippetsFlag(core.getInput("add-snippets")), util.getThreadsFlag(core.getInput("threads"), logger), config, logger); } catch (error) { core.setFailed(error.message); @@ -46,8 +48,8 @@ async function run() { } await sendStatusReport(startedAt, stats); } -run().catch(e => { - core.setFailed("analyze action failed: " + e); +run().catch((e) => { + core.setFailed(`analyze action failed: ${e}`); console.log(e); }); //# sourceMappingURL=analyze-action.js.map \ No newline at end of file diff --git a/lib/analyze-action.js.map b/lib/analyze-action.js.map index 1228c2d4c..521bfd003 100644 --- a/lib/analyze-action.js.map +++ b/lib/analyze-action.js.map @@ -1 +1 @@ -{"version":3,"file":"analyze-action.js","sourceRoot":"","sources":["../src/analyze-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"analyze-action.js","sourceRoot":"","sources":["../src/analyze-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/analyze.js b/lib/analyze.js index c430f248e..94ecea9af 100644 --- a/lib/analyze.js +++ b/lib/analyze.js @@ -22,7 +22,7 @@ async function createdDBForScannedLanguages(config, logger) { const codeql = codeql_1.getCodeQL(config.codeQLCmd); for (const language of config.languages) { if (languages_1.isScannedLanguage(language)) { - logger.startGroup('Extracting ' + language); + logger.startGroup(`Extracting ${language}`); await codeql.extractScannedLanguage(util.getCodeQLDatabasePath(config.tempDir, language), language); logger.endGroup(); } @@ -32,7 +32,7 @@ async function finalizeDatabaseCreation(config, logger) { await createdDBForScannedLanguages(config, logger); const codeql = codeql_1.getCodeQL(config.codeQLCmd); for (const language of config.languages) { - logger.startGroup('Finalizing ' + language); + logger.startGroup(`Finalizing ${language}`); await codeql.finalizeDatabase(util.getCodeQLDatabasePath(config.tempDir, language)); logger.endGroup(); } @@ -40,23 +40,23 @@ async function finalizeDatabaseCreation(config, logger) { // Runs queries and creates sarif files in the given folder async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag, config, logger) { const codeql = codeql_1.getCodeQL(config.codeQLCmd); - for (let language of config.languages) { - logger.startGroup('Analyzing ' + language); + for (const language of config.languages) { + logger.startGroup(`Analyzing ${language}`); const queries = config.queries[language] || []; if (queries.length === 0) { - throw new Error('Unable to analyse ' + language + ' as no queries were selected for this language'); + throw new Error(`Unable to analyse ${language} as no queries were selected for this language`); } try { const databasePath = util.getCodeQLDatabasePath(config.tempDir, language); // Pass the queries to codeql using a file instead of using the command // line to avoid command line length restrictions, particularly on windows. - const querySuite = databasePath + '-queries.qls'; - const querySuiteContents = queries.map(q => '- query: ' + q).join('\n'); + const querySuite = `${databasePath}-queries.qls`; + const querySuiteContents = queries.map((q) => `- query: ${q}`).join("\n"); fs.writeFileSync(querySuite, querySuiteContents); - logger.debug('Query suite file for ' + language + '...\n' + querySuiteContents); - const sarifFile = path.join(sarifFolder, language + '.sarif'); + logger.debug(`Query suite file for ${language}...\n${querySuiteContents}`); + const sarifFile = path.join(sarifFolder, `${language}.sarif`); await codeql.databaseAnalyze(databasePath, sarifFile, querySuite, memoryFlag, addSnippetsFlag, threadsFlag); - logger.debug('SARIF results for database ' + language + ' created at "' + sarifFile + '"'); + logger.debug(`SARIF results for database ${language} created at "${sarifFile}"`); logger.endGroup(); } catch (e) { @@ -72,12 +72,12 @@ async function runAnalyze(repositoryNwo, commitOid, ref, analysisKey, analysisNa // Delete the tracer config env var to avoid tracing ourselves delete process.env[sharedEnv.ODASA_TRACER_CONFIGURATION]; fs.mkdirSync(outputDir, { recursive: true }); - logger.info('Finalizing database creation'); + logger.info("Finalizing database creation"); await finalizeDatabaseCreation(config, logger); - logger.info('Analyzing database'); + logger.info("Analyzing database"); const queriesStats = await runQueries(outputDir, memoryFlag, addSnippetsFlag, threadsFlag, config, logger); if (!doUpload) { - logger.info('Not uploading results'); + logger.info("Not uploading results"); return { ...queriesStats }; } const uploadStats = await upload_lib.upload(outputDir, repositoryNwo, commitOid, ref, analysisKey, analysisName, workflowRunID, checkoutPath, environment, githubAuth, githubUrl, mode, logger); diff --git a/lib/analyze.js.map b/lib/analyze.js.map index 9e096792e..85cdf2253 100644 --- a/lib/analyze.js.map +++ b/lib/analyze.js.map @@ -1 +1 @@ -{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,gEAAkD;AAClD,qCAAqC;AAErC,2CAAgD;AAGhD,gEAAkD;AAClD,yDAA2C;AAC3C,6CAA+B;AAmC/B,KAAK,UAAU,4BAA4B,CACzC,MAA0B,EAC1B,MAAc;IAEd,sEAAsE;IACtE,oCAAoC;IACpC,aAAa,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,kBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;QACvC,IAAI,6BAAiB,CAAC,QAAQ,CAAC,EAAE;YAC/B,MAAM,CAAC,UAAU,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;YAC5C,MAAM,MAAM,CAAC,sBAAsB,CACjC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,EACpD,QAAQ,CACT,CAAC;YACF,MAAM,CAAC,QAAQ,EAAE,CAAC;SACnB;KACF;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,MAA0B,EAC1B,MAAc;IAEd,MAAM,4BAA4B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnD,MAAM,MAAM,GAAG,kBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;QACvC,MAAM,CAAC,UAAU,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,CAAC,gBAAgB,CAC3B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CACrD,CAAC;QACF,MAAM,CAAC,QAAQ,EAAE,CAAC;KACnB;AACH,CAAC;AAED,2DAA2D;AAC3D,KAAK,UAAU,UAAU,CACvB,WAAmB,EACnB,UAAkB,EAClB,eAAuB,EACvB,WAAmB,EACnB,MAA0B,EAC1B,MAAc;IAEd,MAAM,MAAM,GAAG,kBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE;QACvC,MAAM,CAAC,UAAU,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,qBAAqB,QAAQ,gDAAgD,CAC9E,CAAC;SACH;QAED,IAAI;YACF,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC1E,uEAAuE;YACvE,2EAA2E;YAC3E,MAAM,UAAU,GAAG,GAAG,YAAY,cAAc,CAAC;YACjD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1E,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CACV,wBAAwB,QAAQ,QAAQ,kBAAkB,EAAE,CAC7D,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,QAAQ,CAAC,CAAC;YAE9D,MAAM,MAAM,CAAC,eAAe,CAC1B,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,eAAe,EACf,WAAW,CACZ,CAAC;YAEF,MAAM,CAAC,KAAK,CACV,8BAA8B,QAAQ,gBAAgB,SAAS,GAAG,CACnE,CAAC;YACF,MAAM,CAAC,QAAQ,EAAE,CAAC;SACnB;QAAC,OAAO,CAAC,EAAE;YACV,+DAA+D;YAC/D,OAAO;gBACL,wBAAwB,EAAE,QAAQ;aACnC,CAAC;SACH;KACF;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAEM,KAAK,UAAU,UAAU,CAC9B,aAA4B,EAC5B,SAAiB,EACjB,GAAW,EACX,WAA+B,EAC/B,YAAgC,EAChC,aAAiC,EACjC,YAAoB,EACpB,WAA+B,EAC/B,UAAkB,EAClB,SAAiB,EACjB,QAAiB,EACjB,IAAe,EACf,SAAiB,EACjB,UAAkB,EAClB,eAAuB,EACvB,WAAmB,EACnB,MAA0B,EAC1B,MAAc;IAEd,8DAA8D;IAC9D,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAEzD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5C,MAAM,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,MAAM,UAAU,CACnC,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACX,MAAM,EACN,MAAM,CACP,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;KAC5B;IAED,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,CACzC,SAAS,EACT,aAAa,EACb,SAAS,EACT,GAAG,EACH,WAAW,EACX,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,CACP,CAAC;IAEF,OAAO,EAAE,GAAG,YAAY,EAAE,GAAG,WAAW,EAAE,CAAC;AAC7C,CAAC;AA5DD,gCA4DC"} \ No newline at end of file diff --git a/lib/api-client.js b/lib/api-client.js index 0534e62a0..964acb6e1 100644 --- a/lib/api-client.js +++ b/lib/api-client.js @@ -17,31 +17,31 @@ const path = __importStar(require("path")); const util_1 = require("./util"); exports.getApiClient = function (githubAuth, githubUrl, allowLocalRun = false) { if (util_1.isLocalRun() && !allowLocalRun) { - throw new Error('Invalid API call in local run'); + throw new Error("Invalid API call in local run"); } return new github.GitHub({ auth: githubAuth, baseUrl: getApiUrl(githubUrl), userAgent: "CodeQL Action", - log: console_log_level_1.default({ level: "debug" }) + log: console_log_level_1.default({ level: "debug" }), }); }; function getApiUrl(githubUrl) { const url = new URL(githubUrl); // If we detect this is trying to be to github.com // then return with a fixed canonical URL. - if (url.hostname === 'github.com' || url.hostname === 'api.github.com') { - return 'https://api.github.com'; + if (url.hostname === "github.com" || url.hostname === "api.github.com") { + return "https://api.github.com"; } // Add the /api/v3 API prefix - url.pathname = path.join(url.pathname, 'api', 'v3'); + url.pathname = path.join(url.pathname, "api", "v3"); return url.toString(); } // Temporary function to aid in the transition to running on and off of github actions. // Once all code has been coverted this function should be removed or made canonical // and called only from the action entrypoints. function getActionsApiClient(allowLocalRun = false) { - return exports.getApiClient(core.getInput('token'), util_1.getRequiredEnvParam('GITHUB_SERVER_URL'), allowLocalRun); + return exports.getApiClient(core.getInput("token"), util_1.getRequiredEnvParam("GITHUB_SERVER_URL"), allowLocalRun); } exports.getActionsApiClient = getActionsApiClient; //# sourceMappingURL=api-client.js.map \ No newline at end of file diff --git a/lib/api-client.js.map b/lib/api-client.js.map index 8d3ecd4cb..e142a23eb 100644 --- a/lib/api-client.js.map +++ b/lib/api-client.js.map @@ -1 +1 @@ -{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsC;AACtC,wDAA0C;AAC1C,0EAAgD;AAChD,2CAA6B;AAE7B,iCAAyD;AAE5C,QAAA,YAAY,GAAG,UAAS,UAAkB,EAAE,SAAiB,EAAE,aAAa,GAAG,KAAK;IAC/F,IAAI,iBAAU,EAAE,IAAI,CAAC,aAAa,EAAE;QAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;KAClD;IACD,OAAO,IAAI,MAAM,CAAC,MAAM,CACtB;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC;QAC7B,SAAS,EAAE,eAAe;QAC1B,GAAG,EAAE,2BAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACzC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,SAAS,SAAS,CAAC,SAAiB;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAE/B,kDAAkD;IAClD,0CAA0C;IAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE;QACtE,OAAO,wBAAwB,CAAC;KACjC;IAED,6BAA6B;IAC7B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,uFAAuF;AACvF,oFAAoF;AACpF,+CAA+C;AAC/C,SAAgB,mBAAmB,CAAC,aAAa,GAAG,KAAK;IACvD,OAAO,oBAAY,CACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EACtB,0BAAmB,CAAC,mBAAmB,CAAC,EACxC,aAAa,CAAC,CAAC;AACnB,CAAC;AALD,kDAKC"} \ No newline at end of file +{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oDAAsC;AACtC,wDAA0C;AAC1C,0EAAgD;AAChD,2CAA6B;AAE7B,iCAAyD;AAE5C,QAAA,YAAY,GAAG,UAC1B,UAAkB,EAClB,SAAiB,EACjB,aAAa,GAAG,KAAK;IAErB,IAAI,iBAAU,EAAE,IAAI,CAAC,aAAa,EAAE;QAClC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;KAClD;IACD,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC;QAC7B,SAAS,EAAE,eAAe;QAC1B,GAAG,EAAE,2BAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;KACzC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,SAAS,SAAS,CAAC,SAAiB;IAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAE/B,kDAAkD;IAClD,0CAA0C;IAC1C,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,gBAAgB,EAAE;QACtE,OAAO,wBAAwB,CAAC;KACjC;IAED,6BAA6B;IAC7B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,uFAAuF;AACvF,oFAAoF;AACpF,+CAA+C;AAC/C,SAAgB,mBAAmB,CAAC,aAAa,GAAG,KAAK;IACvD,OAAO,oBAAY,CACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EACtB,0BAAmB,CAAC,mBAAmB,CAAC,EACxC,aAAa,CACd,CAAC;AACJ,CAAC;AAND,kDAMC"} \ No newline at end of file diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index 2fe517c64..c908988cc 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -14,11 +14,13 @@ const logging_1 = require("./logging"); const util = __importStar(require("./util")); async function sendCompletedStatusReport(startedAt, allLanguages, failingLanguage, cause) { var _a, _b; - const status = failingLanguage !== undefined || cause !== undefined ? 'failure' : 'success'; - const statusReportBase = await util.createStatusReportBase('autobuild', status, startedAt, (_a = cause) === null || _a === void 0 ? void 0 : _a.message, (_b = cause) === null || _b === void 0 ? void 0 : _b.stack); + const status = failingLanguage !== undefined || cause !== undefined + ? "failure" + : "success"; + const statusReportBase = await util.createStatusReportBase("autobuild", status, startedAt, (_a = cause) === null || _a === void 0 ? void 0 : _a.message, (_b = cause) === null || _b === void 0 ? void 0 : _b.stack); const statusReport = { ...statusReportBase, - autobuild_languages: allLanguages.join(','), + autobuild_languages: allLanguages.join(","), autobuild_failure: failingLanguage, }; await util.sendStatusReport(statusReport); @@ -29,10 +31,10 @@ async function run() { let language = undefined; try { util.prepareLocalRunEnvironment(); - if (!await util.sendStatusReport(await util.createStatusReportBase('autobuild', 'starting', startedAt), true)) { + if (!(await util.sendStatusReport(await util.createStatusReportBase("autobuild", "starting", startedAt), true))) { return; } - const config = await config_utils.getConfig(util.getRequiredEnvParam('RUNNER_TEMP'), logger); + const config = await config_utils.getConfig(util.getRequiredEnvParam("RUNNER_TEMP"), logger); if (config === undefined) { throw new Error("Config file could not be found at expected location. Has the 'init' action been called?"); } @@ -42,15 +44,15 @@ async function run() { } } catch (error) { - core.setFailed("We were unable to automatically build your code. Please replace the call to the autobuild action with your custom build steps. " + error.message); + core.setFailed(`We were unable to automatically build your code. Please replace the call to the autobuild action with your custom build steps. ${error.message}`); console.log(error); await sendCompletedStatusReport(startedAt, language ? [language] : [], language, error); return; } await sendCompletedStatusReport(startedAt, language ? [language] : []); } -run().catch(e => { - core.setFailed("autobuild action failed. " + e); +run().catch((e) => { + core.setFailed(`autobuild action failed. ${e}`); console.log(e); }); //# sourceMappingURL=autobuild-action.js.map \ No newline at end of file diff --git a/lib/autobuild-action.js.map b/lib/autobuild-action.js.map index bb9098acc..8c6dbb2ba 100644 --- a/lib/autobuild-action.js.map +++ b/lib/autobuild-action.js.map @@ -1 +1 @@ -{"version":3,"file":"autobuild-action.js","sourceRoot":"","sources":["../src/autobuild-action.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAsC;AAEtC,2CAAuE;AACvE,6DAA+C;AAE/C,uCAA6C;AAC7C,6CAA+B;AAS/B,KAAK,UAAU,yBAAyB,CACtC,SAAe,EACf,YAAsB,EACtB,eAAwB,EACxB,KAAa;;IAEb,MAAM,MAAM,GAAG,eAAe,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CACxD,WAAW,EACX,MAAM,EACN,SAAS,QACT,KAAK,0CAAE,OAAO,QACd,KAAK,0CAAE,KAAK,CAAC,CAAC;IAChB,MAAM,YAAY,GAA0B;QAC1C,GAAG,gBAAgB;QACnB,mBAAmB,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3C,iBAAiB,EAAE,eAAe;KACnC,CAAC;IACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,MAAM,GAAG,0BAAgB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAyB,SAAS,CAAC;IAC/C,IAAI;QACF,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE;YAC7G,OAAO;SACR;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7F,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;SAC5G;QACD,QAAQ,GAAG,sCAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,MAAM,wBAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAC9C;KAEF;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CAAC,kIAAkI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QACnK,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,yBAAyB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACxF,OAAO;KACR;IAED,MAAM,yBAAyB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACd,IAAI,CAAC,SAAS,CAAC,4BAA4B,GAAG,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"autobuild-action.js","sourceRoot":"","sources":["../src/autobuild-action.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAsC;AAEtC,2CAAuE;AACvE,6DAA+C;AAE/C,uCAA6C;AAC7C,6CAA+B;AAS/B,KAAK,UAAU,yBAAyB,CACtC,SAAe,EACf,YAAsB,EACtB,eAAwB,EACxB,KAAa;;IAEb,MAAM,MAAM,GACV,eAAe,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAClD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CACxD,WAAW,EACX,MAAM,EACN,SAAS,QACT,KAAK,0CAAE,OAAO,QACd,KAAK,0CAAE,KAAK,CACb,CAAC;IACF,MAAM,YAAY,GAA0B;QAC1C,GAAG,gBAAgB;QACnB,mBAAmB,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3C,iBAAiB,EAAE,eAAe;KACnC,CAAC;IACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,MAAM,GAAG,0BAAgB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,IAAI,QAAQ,GAAyB,SAAS,CAAC;IAC/C,IAAI;QACF,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,IACE,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAC3B,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,EACrE,IAAI,CACL,CAAC,EACF;YACA,OAAO;SACR;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,CACzC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,EACvC,MAAM,CACP,CAAC;QACF,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;SACH;QACD,QAAQ,GAAG,sCAA0B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtD,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,MAAM,wBAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAC9C;KACF;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CACZ,mIAAmI,KAAK,CAAC,OAAO,EAAE,CACnJ,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,yBAAyB,CAC7B,SAAS,EACT,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAC1B,QAAQ,EACR,KAAK,CACN,CAAC;QACF,OAAO;KACR;IAED,MAAM,yBAAyB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IAChB,IAAI,CAAC,SAAS,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/lib/autobuild.js b/lib/autobuild.js index b367764cd..72bac1a1c 100644 --- a/lib/autobuild.js +++ b/lib/autobuild.js @@ -15,7 +15,9 @@ function determineAutobuildLanguage(config, logger) { } logger.debug(`Detected dominant traced language: ${language}`); if (autobuildLanguages.length > 1) { - logger.warning(`We will only automatically build ${language} code. If you wish to scan ${autobuildLanguages.slice(1).join(' and ')}, you must replace this call with custom build steps.`); + logger.warning(`We will only automatically build ${language} code. If you wish to scan ${autobuildLanguages + .slice(1) + .join(" and ")}, you must replace this call with custom build steps.`); } return language; } diff --git a/lib/autobuild.js.map b/lib/autobuild.js.map index c13b201cd..0d5d67111 100644 --- a/lib/autobuild.js.map +++ b/lib/autobuild.js.map @@ -1 +1 @@ -{"version":3,"file":"autobuild.js","sourceRoot":"","sources":["../src/autobuild.ts"],"names":[],"mappings":";;AAAA,qCAAqC;AAErC,2CAAyD;AAGzD,SAAgB,0BAA0B,CACxC,MAA2B,EAC3B,MAAc;IAGd,0CAA0C;IAC1C,mFAAmF;IACnF,oFAAoF;IACpF,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,4BAAgB,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC/E,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;IAE/D,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;QACjC,MAAM,CAAC,OAAO,CAAC,oCAAoC,QAAQ,8BAA8B,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC;KAC5L;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAxBD,gEAwBC;AAEM,KAAK,UAAU,YAAY,CAChC,QAAkB,EAClB,MAA2B,EAC3B,MAAc;IAEd,MAAM,CAAC,UAAU,CAAC,qCAAqC,QAAQ,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,kBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpB,CAAC;AATD,oCASC"} \ No newline at end of file +{"version":3,"file":"autobuild.js","sourceRoot":"","sources":["../src/autobuild.ts"],"names":[],"mappings":";;AAAA,qCAAqC;AAErC,2CAAyD;AAGzD,SAAgB,0BAA0B,CACxC,MAA2B,EAC3B,MAAc;IAEd,0CAA0C;IAC1C,mFAAmF;IACnF,oFAAoF;IACpF,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,4BAAgB,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,CAAC,IAAI,CACT,iEAAiE,CAClE,CAAC;QACF,OAAO,SAAS,CAAC;KAClB;IAED,MAAM,CAAC,KAAK,CAAC,sCAAsC,QAAQ,EAAE,CAAC,CAAC;IAE/D,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;QACjC,MAAM,CAAC,OAAO,CACZ,oCAAoC,QAAQ,8BAA8B,kBAAkB;aACzF,KAAK,CAAC,CAAC,CAAC;aACR,IAAI,CAAC,OAAO,CAAC,uDAAuD,CACxE,CAAC;KACH;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AA7BD,gEA6BC;AAEM,KAAK,UAAU,YAAY,CAChC,QAAkB,EAClB,MAA2B,EAC3B,MAAc;IAEd,MAAM,CAAC,UAAU,CAAC,qCAAqC,QAAQ,OAAO,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,kBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,CAAC,QAAQ,EAAE,CAAC;AACpB,CAAC;AATD,oCASC"} \ No newline at end of file diff --git a/lib/codeql.js b/lib/codeql.js index 5d83bb450..b9e5a0705 100644 --- a/lib/codeql.js +++ b/lib/codeql.js @@ -31,7 +31,7 @@ const CODEQL_BUNDLE_VERSION = defaults.bundleVersion; const CODEQL_BUNDLE_NAME = "codeql-bundle.tar.gz"; const CODEQL_DEFAULT_ACTION_REPOSITORY = "github/codeql-action"; function getCodeQLActionRepository(mode) { - if (mode !== 'actions') { + if (mode !== "actions") { return CODEQL_DEFAULT_ACTION_REPOSITORY; } // Actions do not know their own repository name, @@ -42,11 +42,12 @@ function getCodeQLActionRepository(mode) { const relativeScriptPath = path.relative(actionsDirectory, __filename); // This handles the case where the Action does not come from an Action repository, // e.g. our integration tests which use the Action code from the current checkout. - if (relativeScriptPath.startsWith("..") || path.isAbsolute(relativeScriptPath)) { + if (relativeScriptPath.startsWith("..") || + path.isAbsolute(relativeScriptPath)) { return CODEQL_DEFAULT_ACTION_REPOSITORY; } const relativeScriptPathParts = relativeScriptPath.split(path.sep); - return relativeScriptPathParts[0] + "/" + relativeScriptPathParts[1]; + return `${relativeScriptPathParts[0]}/${relativeScriptPathParts[1]}`; } async function getCodeQLBundleDownloadURL(githubAuth, githubUrl, mode, logger) { const codeQLActionRepository = getCodeQLActionRepository(mode); @@ -61,20 +62,23 @@ async function getCodeQLBundleDownloadURL(githubAuth, githubUrl, mode, logger) { // We now filter out any duplicates. // Duplicates will happen either because the GitHub instance is GitHub.com, or because the Action is not a fork. const uniqueDownloadSources = potentialDownloadSources.filter((url, index, self) => index === self.indexOf(url)); - for (let downloadSource of uniqueDownloadSources) { - let [apiURL, repository] = downloadSource; + for (const downloadSource of uniqueDownloadSources) { + const [apiURL, repository] = downloadSource; // If we've reached the final case, short-circuit the API check since we know the bundle exists and is public. - if (apiURL === util.GITHUB_DOTCOM_URL && repository === CODEQL_DEFAULT_ACTION_REPOSITORY) { + if (apiURL === util.GITHUB_DOTCOM_URL && + repository === CODEQL_DEFAULT_ACTION_REPOSITORY) { break; } - let [repositoryOwner, repositoryName] = repository.split("/"); + const [repositoryOwner, repositoryName] = repository.split("/"); try { - const release = await api.getApiClient(githubAuth, githubUrl).repos.getReleaseByTag({ + const release = await api + .getApiClient(githubAuth, githubUrl) + .repos.getReleaseByTag({ owner: repositoryOwner, repo: repositoryName, - tag: CODEQL_BUNDLE_VERSION + tag: CODEQL_BUNDLE_VERSION, }); - for (let asset of release.data.assets) { + for (const asset of release.data.assets) { if (asset.name === CODEQL_BUNDLE_NAME) { logger.info(`Found CodeQL bundle in ${downloadSource[1]} on ${downloadSource[0]} with URL ${asset.url}.`); return asset.url; @@ -90,7 +94,7 @@ async function getCodeQLBundleDownloadURL(githubAuth, githubUrl, mode, logger) { // We have to download CodeQL manually because the toolcache doesn't support Accept headers. // This can be removed once https://github.com/actions/toolkit/pull/530 is merged and released. async function toolcacheDownloadTool(url, headers, tempDir, logger) { - const client = new http.HttpClient('CodeQL Action'); + const client = new http.HttpClient("CodeQL Action"); const dest = path.join(tempDir, v4_1.default()); const response = await client.get(url, headers); if (response.message.statusCode !== 200) { @@ -106,11 +110,11 @@ async function setupCodeQL(codeqlURL, githubAuth, githubUrl, tempDir, toolsDir, // Setting these two env vars makes the toolcache code safe to use outside, // of actions but this is obviously not a great thing we're doing and it would // be better to write our own implementation to use outside of actions. - process.env['RUNNER_TEMP'] = tempDir; - process.env['RUNNER_TOOL_CACHE'] = toolsDir; + process.env["RUNNER_TEMP"] = tempDir; + process.env["RUNNER_TOOL_CACHE"] = toolsDir; try { const codeqlURLVersion = getCodeQLURLVersion(codeqlURL || `/${CODEQL_BUNDLE_VERSION}/`, logger); - let codeqlFolder = toolcache.find('CodeQL', codeqlURLVersion); + let codeqlFolder = toolcache.find("CodeQL", codeqlURLVersion); if (codeqlFolder) { logger.debug(`CodeQL found in cache ${codeqlFolder}`); } @@ -118,29 +122,29 @@ async function setupCodeQL(codeqlURL, githubAuth, githubUrl, tempDir, toolsDir, if (!codeqlURL) { codeqlURL = await getCodeQLBundleDownloadURL(githubAuth, githubUrl, mode, logger); } - const headers = { accept: 'application/octet-stream' }; + const headers = { accept: "application/octet-stream" }; // We only want to provide an authorization header if we are downloading // from the same GitHub instance the Action is running on. // This avoids leaking Enterprise tokens to dotcom. - if (codeqlURL.startsWith(githubUrl + "/")) { - logger.debug('Downloading CodeQL bundle with token.'); + if (codeqlURL.startsWith(`${githubUrl}/`)) { + logger.debug("Downloading CodeQL bundle with token."); headers.authorization = `token ${githubAuth}`; } else { - logger.debug('Downloading CodeQL bundle without token.'); + logger.debug("Downloading CodeQL bundle without token."); } logger.info(`Downloading CodeQL tools from ${codeqlURL}. This may take a while.`); - let codeqlPath = await toolcacheDownloadTool(codeqlURL, headers, tempDir, logger); + const codeqlPath = await toolcacheDownloadTool(codeqlURL, headers, tempDir, logger); logger.debug(`CodeQL bundle download to ${codeqlPath} complete.`); const codeqlExtracted = await toolcache.extractTar(codeqlPath); - codeqlFolder = await toolcache.cacheDir(codeqlExtracted, 'CodeQL', codeqlURLVersion); + codeqlFolder = await toolcache.cacheDir(codeqlExtracted, "CodeQL", codeqlURLVersion); } - let codeqlCmd = path.join(codeqlFolder, 'codeql', 'codeql'); - if (process.platform === 'win32') { + let codeqlCmd = path.join(codeqlFolder, "codeql", "codeql"); + if (process.platform === "win32") { codeqlCmd += ".exe"; } - else if (process.platform !== 'linux' && process.platform !== 'darwin') { - throw new Error("Unsupported platform: " + process.platform); + else if (process.platform !== "linux" && process.platform !== "darwin") { + throw new Error(`Unsupported platform: ${process.platform}`); } cachedCodeQL = getCodeQLForCmd(codeqlCmd); return cachedCodeQL; @@ -159,7 +163,7 @@ function getCodeQLURLVersion(url, logger) { let version = match[1]; if (!semver.valid(version)) { logger.debug(`Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.`); - version = '0.0.0-' + version; + version = `0.0.0-${version}`; } const s = semver.clean(version); if (!s) { @@ -179,12 +183,12 @@ function getCodeQL(cmd) { } exports.getCodeQL = getCodeQL; function resolveFunction(partialCodeql, methodName, defaultImplementation) { - if (typeof partialCodeql[methodName] !== 'function') { + if (typeof partialCodeql[methodName] !== "function") { if (defaultImplementation !== undefined) { return defaultImplementation; } const dummyMethod = () => { - throw new Error('CodeQL ' + methodName + ' method not correctly defined'); + throw new Error(`CodeQL ${methodName} method not correctly defined`); }; return dummyMethod; } @@ -198,15 +202,15 @@ function resolveFunction(partialCodeql, methodName, defaultImplementation) { */ function setCodeQL(partialCodeql) { cachedCodeQL = { - getPath: resolveFunction(partialCodeql, 'getPath', () => '/tmp/dummy-path'), - printVersion: resolveFunction(partialCodeql, 'printVersion'), - getTracerEnv: resolveFunction(partialCodeql, 'getTracerEnv'), - databaseInit: resolveFunction(partialCodeql, 'databaseInit'), - runAutobuild: resolveFunction(partialCodeql, 'runAutobuild'), - extractScannedLanguage: resolveFunction(partialCodeql, 'extractScannedLanguage'), - finalizeDatabase: resolveFunction(partialCodeql, 'finalizeDatabase'), - resolveQueries: resolveFunction(partialCodeql, 'resolveQueries'), - databaseAnalyze: resolveFunction(partialCodeql, 'databaseAnalyze') + getPath: resolveFunction(partialCodeql, "getPath", () => "/tmp/dummy-path"), + printVersion: resolveFunction(partialCodeql, "printVersion"), + getTracerEnv: resolveFunction(partialCodeql, "getTracerEnv"), + databaseInit: resolveFunction(partialCodeql, "databaseInit"), + runAutobuild: resolveFunction(partialCodeql, "runAutobuild"), + extractScannedLanguage: resolveFunction(partialCodeql, "extractScannedLanguage"), + finalizeDatabase: resolveFunction(partialCodeql, "finalizeDatabase"), + resolveQueries: resolveFunction(partialCodeql, "resolveQueries"), + databaseAnalyze: resolveFunction(partialCodeql, "databaseAnalyze"), }; return cachedCodeQL; } @@ -220,25 +224,25 @@ exports.setCodeQL = setCodeQL; function getCachedCodeQL() { if (cachedCodeQL === undefined) { // Should never happen as setCodeQL is called by testing-utils.setupTests - throw new Error('cachedCodeQL undefined'); + throw new Error("cachedCodeQL undefined"); } return cachedCodeQL; } exports.getCachedCodeQL = getCachedCodeQL; function getCodeQLForCmd(cmd) { return { - getPath: function () { + getPath() { return cmd; }, - printVersion: async function () { + async printVersion() { await new toolrunnner.ToolRunner(cmd, [ - 'version', - '--format=json' + "version", + "--format=json", ]).exec(); }, - getTracerEnv: async function (databasePath) { + async getTracerEnv(databasePath) { // Write tracer-env.js to a temp location. - const tracerEnvJs = path.resolve(databasePath, 'working', 'tracer-env.js'); + const tracerEnvJs = path.resolve(databasePath, "working", "tracer-env.js"); fs.mkdirSync(path.dirname(tracerEnvJs), { recursive: true }); fs.writeFileSync(tracerEnvJs, ` const fs = require('fs'); @@ -252,119 +256,127 @@ function getCodeQLForCmd(cmd) { } process.stdout.write(process.argv[2]); fs.writeFileSync(process.argv[2], JSON.stringify(env), 'utf-8');`); - const envFile = path.resolve(databasePath, 'working', 'env.tmp'); + const envFile = path.resolve(databasePath, "working", "env.tmp"); await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'trace-command', + "database", + "trace-command", databasePath, - ...getExtraOptionsFromEnv(['database', 'trace-command']), + ...getExtraOptionsFromEnv(["database", "trace-command"]), process.execPath, tracerEnvJs, - envFile + envFile, ]).exec(); - return JSON.parse(fs.readFileSync(envFile, 'utf-8')); + return JSON.parse(fs.readFileSync(envFile, "utf-8")); }, - databaseInit: async function (databasePath, language, sourceRoot) { + async databaseInit(databasePath, language, sourceRoot) { await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'init', + "database", + "init", databasePath, - '--language=' + language, - '--source-root=' + sourceRoot, - ...getExtraOptionsFromEnv(['database', 'init']), + `--language=${language}`, + `--source-root=${sourceRoot}`, + ...getExtraOptionsFromEnv(["database", "init"]), ]).exec(); }, - runAutobuild: async function (language) { - const cmdName = process.platform === 'win32' ? 'autobuild.cmd' : 'autobuild.sh'; - const autobuildCmd = path.join(path.dirname(cmd), language, 'tools', cmdName); + async runAutobuild(language) { + const cmdName = process.platform === "win32" ? "autobuild.cmd" : "autobuild.sh"; + const autobuildCmd = path.join(path.dirname(cmd), language, "tools", cmdName); // Update JAVA_TOOL_OPTIONS to contain '-Dhttp.keepAlive=false' // This is because of an issue with Azure pipelines timing out connections after 4 minutes // and Maven not properly handling closed connections // Otherwise long build processes will timeout when pulling down Java packages // https://developercommunity.visualstudio.com/content/problem/292284/maven-hosted-agent-connection-timeout.html - let javaToolOptions = process.env['JAVA_TOOL_OPTIONS'] || ""; - process.env['JAVA_TOOL_OPTIONS'] = [...javaToolOptions.split(/\s+/), '-Dhttp.keepAlive=false', '-Dmaven.wagon.http.pool=false'].join(' '); + const javaToolOptions = process.env["JAVA_TOOL_OPTIONS"] || ""; + process.env["JAVA_TOOL_OPTIONS"] = [ + ...javaToolOptions.split(/\s+/), + "-Dhttp.keepAlive=false", + "-Dmaven.wagon.http.pool=false", + ].join(" "); await new toolrunnner.ToolRunner(autobuildCmd).exec(); }, - extractScannedLanguage: async function (databasePath, language) { + async extractScannedLanguage(databasePath, language) { // Get extractor location - let extractorPath = ''; + let extractorPath = ""; await new toolrunnner.ToolRunner(cmd, [ - 'resolve', - 'extractor', - '--format=json', - '--language=' + language, - ...getExtraOptionsFromEnv(['resolve', 'extractor']), + "resolve", + "extractor", + "--format=json", + `--language=${language}`, + ...getExtraOptionsFromEnv(["resolve", "extractor"]), ], { silent: true, listeners: { - stdout: (data) => { extractorPath += data.toString(); }, - stderr: (data) => { process.stderr.write(data); } - } + stdout: (data) => { + extractorPath += data.toString(); + }, + stderr: (data) => { + process.stderr.write(data); + }, + }, }).exec(); // Set trace command - const ext = process.platform === 'win32' ? '.cmd' : '.sh'; - const traceCommand = path.resolve(JSON.parse(extractorPath), 'tools', 'autobuild' + ext); + const ext = process.platform === "win32" ? ".cmd" : ".sh"; + const traceCommand = path.resolve(JSON.parse(extractorPath), "tools", `autobuild${ext}`); // Run trace command await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'trace-command', - ...getExtraOptionsFromEnv(['database', 'trace-command']), + "database", + "trace-command", + ...getExtraOptionsFromEnv(["database", "trace-command"]), databasePath, - '--', - traceCommand + "--", + traceCommand, ]).exec(); }, - finalizeDatabase: async function (databasePath) { + async finalizeDatabase(databasePath) { await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'finalize', - ...getExtraOptionsFromEnv(['database', 'finalize']), - databasePath + "database", + "finalize", + ...getExtraOptionsFromEnv(["database", "finalize"]), + databasePath, ]).exec(); }, - resolveQueries: async function (queries, extraSearchPath) { + async resolveQueries(queries, extraSearchPath) { const codeqlArgs = [ - 'resolve', - 'queries', + "resolve", + "queries", ...queries, - '--format=bylanguage', - ...getExtraOptionsFromEnv(['resolve', 'queries']) + "--format=bylanguage", + ...getExtraOptionsFromEnv(["resolve", "queries"]), ]; if (extraSearchPath !== undefined) { - codeqlArgs.push('--search-path', extraSearchPath); + codeqlArgs.push("--search-path", extraSearchPath); } - let output = ''; + let output = ""; await new toolrunnner.ToolRunner(cmd, codeqlArgs, { listeners: { stdout: (data) => { output += data.toString(); - } - } + }, + }, }).exec(); return JSON.parse(output); }, - databaseAnalyze: async function (databasePath, sarifFile, querySuite, memoryFlag, addSnippetsFlag, threadsFlag) { + async databaseAnalyze(databasePath, sarifFile, querySuite, memoryFlag, addSnippetsFlag, threadsFlag) { await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'analyze', + "database", + "analyze", memoryFlag, threadsFlag, databasePath, - '--format=sarif-latest', - '--output=' + sarifFile, + "--format=sarif-latest", + `--output=${sarifFile}`, addSnippetsFlag, - ...getExtraOptionsFromEnv(['database', 'analyze']), - querySuite + ...getExtraOptionsFromEnv(["database", "analyze"]), + querySuite, ]).exec(); - } + }, }; } /** * Gets the options for `path` of `options` as an array of extra option strings. */ function getExtraOptionsFromEnv(path) { - let options = util.getExtraOptionsEnvParam(); + const options = util.getExtraOptionsEnvParam(); return getExtraOptions(options, path, []); } /** @@ -385,22 +397,22 @@ function getExtraOptions(options, path, pathInfo) { return []; } if (!Array.isArray(options)) { - const msg = `The extra options for '${pathInfo.join('.')}' ('${JSON.stringify(options)}') are not in an array.`; + const msg = `The extra options for '${pathInfo.join(".")}' ('${JSON.stringify(options)}') are not in an array.`; throw new Error(msg); } - return options.map(o => { + return options.map((o) => { const t = typeof o; - if (t !== 'string' && t !== 'number' && t !== 'boolean') { - const msg = `The extra option for '${pathInfo.join('.')}' ('${JSON.stringify(o)}') is not a primitive value.`; + if (t !== "string" && t !== "number" && t !== "boolean") { + const msg = `The extra option for '${pathInfo.join(".")}' ('${JSON.stringify(o)}') is not a primitive value.`; throw new Error(msg); } - return o + ''; + return `${o}`; }); } - let all = asExtraOptions((_a = options) === null || _a === void 0 ? void 0 : _a['*'], pathInfo.concat('*')); - let specific = path.length === 0 ? - asExtraOptions(options, pathInfo) : - getExtraOptions((_b = options) === null || _b === void 0 ? void 0 : _b[path[0]], (_c = path) === null || _c === void 0 ? void 0 : _c.slice(1), pathInfo.concat(path[0])); + const all = asExtraOptions((_a = options) === null || _a === void 0 ? void 0 : _a["*"], pathInfo.concat("*")); + const specific = path.length === 0 + ? asExtraOptions(options, pathInfo) + : getExtraOptions((_b = options) === null || _b === void 0 ? void 0 : _b[path[0]], (_c = path) === null || _c === void 0 ? void 0 : _c.slice(1), pathInfo.concat(path[0])); return all.concat(specific); } exports.getExtraOptions = getExtraOptions; diff --git a/lib/codeql.js.map b/lib/codeql.js.map index 852213f26..a42fc6b81 100644 --- a/lib/codeql.js.map +++ b/lib/codeql.js.map @@ -1 +1 @@ -{"version":3,"file":"codeql.js","sourceRoot":"","sources":["../src/codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"codeql.js","sourceRoot":"","sources":["../src/codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/codeql.test.js b/lib/codeql.test.js index 861a0afcd..1f71cef7b 100644 --- a/lib/codeql.test.js +++ b/lib/codeql.test.js @@ -19,29 +19,29 @@ const logging_1 = require("./logging"); const testing_utils_1 = require("./testing-utils"); const util = __importStar(require("./util")); testing_utils_1.setupTests(ava_1.default); -ava_1.default('download codeql bundle cache', async (t) => { +ava_1.default("download codeql bundle cache", async (t) => { await util.withTmpDir(async (tmpDir) => { - const versions = ['20200601', '20200610']; + const versions = ["20200601", "20200610"]; for (let i = 0; i < versions.length; i++) { const version = versions[i]; - nock_1.default('https://example.com') + nock_1.default("https://example.com") .get(`/download/codeql-bundle-${version}/codeql-bundle.tar.gz`) .replyWithFile(200, path.join(__dirname, `/../src/testdata/codeql-bundle.tar.gz`)); - await codeql.setupCodeQL(`https://example.com/download/codeql-bundle-${version}/codeql-bundle.tar.gz`, 'token', 'https://github.example.com', tmpDir, tmpDir, 'runner', logging_1.getRunnerLogger(true)); - t.assert(toolcache.find('CodeQL', `0.0.0-${version}`)); + await codeql.setupCodeQL(`https://example.com/download/codeql-bundle-${version}/codeql-bundle.tar.gz`, "token", "https://github.example.com", tmpDir, tmpDir, "runner", logging_1.getRunnerLogger(true)); + t.assert(toolcache.find("CodeQL", `0.0.0-${version}`)); } - const cachedVersions = toolcache.findAllVersions('CodeQL'); + const cachedVersions = toolcache.findAllVersions("CodeQL"); t.is(cachedVersions.length, 2); }); }); -ava_1.default('parse codeql bundle url version', t => { +ava_1.default("parse codeql bundle url version", (t) => { const tests = { - '20200601': '0.0.0-20200601', - '20200601.0': '0.0.0-20200601.0', - '20200601.0.0': '20200601.0.0', - '1.2.3': '1.2.3', - '1.2.3-alpha': '1.2.3-alpha', - '1.2.3-beta.1': '1.2.3-beta.1', + "20200601": "0.0.0-20200601", + "20200601.0": "0.0.0-20200601.0", + "20200601.0.0": "20200601.0.0", + "1.2.3": "1.2.3", + "1.2.3-alpha": "1.2.3-alpha", + "1.2.3-beta.1": "1.2.3-beta.1", }; for (const [version, expectedVersion] of Object.entries(tests)) { const url = `https://github.com/.../codeql-bundle-${version}/...`; @@ -54,26 +54,26 @@ ava_1.default('parse codeql bundle url version', t => { } } }); -ava_1.default('getExtraOptions works for explicit paths', t => { - t.deepEqual(codeql.getExtraOptions({}, ['foo'], []), []); - t.deepEqual(codeql.getExtraOptions({ foo: [42] }, ['foo'], []), ['42']); - t.deepEqual(codeql.getExtraOptions({ foo: { bar: [42] } }, ['foo', 'bar'], []), ['42']); +ava_1.default("getExtraOptions works for explicit paths", (t) => { + t.deepEqual(codeql.getExtraOptions({}, ["foo"], []), []); + t.deepEqual(codeql.getExtraOptions({ foo: [42] }, ["foo"], []), ["42"]); + t.deepEqual(codeql.getExtraOptions({ foo: { bar: [42] } }, ["foo", "bar"], []), ["42"]); }); -ava_1.default('getExtraOptions works for wildcards', t => { - t.deepEqual(codeql.getExtraOptions({ '*': [42] }, ['foo'], []), ['42']); +ava_1.default("getExtraOptions works for wildcards", (t) => { + t.deepEqual(codeql.getExtraOptions({ "*": [42] }, ["foo"], []), ["42"]); }); -ava_1.default('getExtraOptions works for wildcards and explicit paths', t => { - let o1 = { '*': [42], foo: [87] }; - t.deepEqual(codeql.getExtraOptions(o1, ['foo'], []), ['42', '87']); - let o2 = { '*': [42], foo: [87] }; - t.deepEqual(codeql.getExtraOptions(o2, ['foo', 'bar'], []), ['42']); - let o3 = { '*': [42], foo: { '*': [87], bar: [99] } }; - let p = ['foo', 'bar']; - t.deepEqual(codeql.getExtraOptions(o3, p, []), ['42', '87', '99']); +ava_1.default("getExtraOptions works for wildcards and explicit paths", (t) => { + const o1 = { "*": [42], foo: [87] }; + t.deepEqual(codeql.getExtraOptions(o1, ["foo"], []), ["42", "87"]); + const o2 = { "*": [42], foo: [87] }; + t.deepEqual(codeql.getExtraOptions(o2, ["foo", "bar"], []), ["42"]); + const o3 = { "*": [42], foo: { "*": [87], bar: [99] } }; + const p = ["foo", "bar"]; + t.deepEqual(codeql.getExtraOptions(o3, p, []), ["42", "87", "99"]); }); -ava_1.default('getExtraOptions throws for bad content', t => { - t.throws(() => codeql.getExtraOptions({ '*': 42 }, ['foo'], [])); - t.throws(() => codeql.getExtraOptions({ foo: 87 }, ['foo'], [])); - t.throws(() => codeql.getExtraOptions({ '*': [42], foo: { '*': 87, bar: [99] } }, ['foo', 'bar'], [])); +ava_1.default("getExtraOptions throws for bad content", (t) => { + t.throws(() => codeql.getExtraOptions({ "*": 42 }, ["foo"], [])); + t.throws(() => codeql.getExtraOptions({ foo: 87 }, ["foo"], [])); + t.throws(() => codeql.getExtraOptions({ "*": [42], foo: { "*": 87, bar: [99] } }, ["foo", "bar"], [])); }); //# sourceMappingURL=codeql.test.js.map \ No newline at end of file diff --git a/lib/codeql.test.js.map b/lib/codeql.test.js.map index fd4f82665..080e0df40 100644 --- a/lib/codeql.test.js.map +++ b/lib/codeql.test.js.map @@ -1 +1 @@ -{"version":3,"file":"codeql.test.js","sourceRoot":"","sources":["../src/codeql.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"codeql.test.js","sourceRoot":"","sources":["../src/codeql.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/config-utils.js b/lib/config-utils.js index 5b0a4f62f..cd3fd3bb1 100644 --- a/lib/config-utils.js +++ b/lib/config-utils.js @@ -14,12 +14,12 @@ const api = __importStar(require("./api-client")); const externalQueries = __importStar(require("./external-queries")); const languages_1 = require("./languages"); // Property names from the user-supplied config file. -const NAME_PROPERTY = 'name'; -const DISABLE_DEFAULT_QUERIES_PROPERTY = 'disable-default-queries'; -const QUERIES_PROPERTY = 'queries'; -const QUERIES_USES_PROPERTY = 'uses'; -const PATHS_IGNORE_PROPERTY = 'paths-ignore'; -const PATHS_PROPERTY = 'paths'; +const NAME_PROPERTY = "name"; +const DISABLE_DEFAULT_QUERIES_PROPERTY = "disable-default-queries"; +const QUERIES_PROPERTY = "queries"; +const QUERIES_USES_PROPERTY = "uses"; +const PATHS_IGNORE_PROPERTY = "paths-ignore"; +const PATHS_PROPERTY = "paths"; /** * A list of queries from https://github.com/github/codeql that * we don't want to run. Disabling them here is a quicker alternative to @@ -30,14 +30,13 @@ const PATHS_PROPERTY = 'paths'; * Format is a map from language to an array of path suffixes of .ql files. */ const DISABLED_BUILTIN_QUERIES = { - 'csharp': [ - 'ql/src/Security Features/CWE-937/VulnerablePackage.ql', - 'ql/src/Security Features/CWE-451/MissingXFrameOptions.ql', - ] + csharp: [ + "ql/src/Security Features/CWE-937/VulnerablePackage.ql", + "ql/src/Security Features/CWE-451/MissingXFrameOptions.ql", + ], }; function queryIsDisabled(language, query) { - return (DISABLED_BUILTIN_QUERIES[language] || []) - .some(disabledQuery => query.endsWith(disabledQuery)); + return (DISABLED_BUILTIN_QUERIES[language] || []).some((disabledQuery) => query.endsWith(disabledQuery)); } /** * Asserts that the noDeclaredLanguage and multipleDeclaredLanguages fields are @@ -47,16 +46,14 @@ function validateQueries(resolvedQueries) { const noDeclaredLanguage = resolvedQueries.noDeclaredLanguage; const noDeclaredLanguageQueries = Object.keys(noDeclaredLanguage); if (noDeclaredLanguageQueries.length !== 0) { - throw new Error('The following queries do not declare a language. ' + - 'Their qlpack.yml files are either missing or is invalid.\n' + - noDeclaredLanguageQueries.join('\n')); + throw new Error(`${"The following queries do not declare a language. " + + "Their qlpack.yml files are either missing or is invalid.\n"}${noDeclaredLanguageQueries.join("\n")}`); } const multipleDeclaredLanguages = resolvedQueries.multipleDeclaredLanguages; const multipleDeclaredLanguagesQueries = Object.keys(multipleDeclaredLanguages); if (multipleDeclaredLanguagesQueries.length !== 0) { - throw new Error('The following queries declare multiple languages. ' + - 'Their qlpack.yml files are either missing or is invalid.\n' + - multipleDeclaredLanguagesQueries.join('\n')); + throw new Error(`${"The following queries declare multiple languages. " + + "Their qlpack.yml files are either missing or is invalid.\n"}${multipleDeclaredLanguagesQueries.join("\n")}`); } } /** @@ -68,7 +65,7 @@ async function runResolveQueries(codeQL, resultMap, toResolve, extraSearchPath, if (resultMap[language] === undefined) { resultMap[language] = []; } - resultMap[language].push(...Object.keys(queries).filter(q => !queryIsDisabled(language, q))); + resultMap[language].push(...Object.keys(queries).filter((q) => !queryIsDisabled(language, q))); } if (errorOnInvalidQueries) { validateQueries(resolvedQueries); @@ -78,11 +75,11 @@ async function runResolveQueries(codeQL, resultMap, toResolve, extraSearchPath, * Get the set of queries included by default. */ async function addDefaultQueries(codeQL, languages, resultMap) { - const suites = languages.map(l => l + '-code-scanning.qls'); + const suites = languages.map((l) => `${l}-code-scanning.qls`); await runResolveQueries(codeQL, resultMap, suites, undefined, false); } // The set of acceptable values for built-in suites from the codeql bundle -const builtinSuites = ['security-extended', 'security-and-quality']; +const builtinSuites = ["security-extended", "security-and-quality"]; /** * Determine the set of queries associated with suiteName's suites and add them to resultMap. * Throws an error if suiteName is not a valid builtin suite. @@ -92,7 +89,7 @@ async function addBuiltinSuiteQueries(languages, codeQL, resultMap, suiteName, c if (!suite) { throw new Error(getQueryUsesInvalid(configFile, suiteName)); } - const suites = languages.map(l => l + '-' + suiteName + '.qls'); + const suites = languages.map((l) => `${l}-${suiteName}.qls`); await runResolveQueries(codeQL, resultMap, suites, undefined, false); } /** @@ -118,12 +115,12 @@ async function addLocalQueries(codeQL, resultMap, localQueryPath, checkoutPath, * Retrieve the set of queries at the referenced remote repo and add them to resultMap. */ async function addRemoteQueries(codeQL, resultMap, queryUses, tempDir, githubUrl, logger, configFile) { - let tok = queryUses.split('@'); + let tok = queryUses.split("@"); if (tok.length !== 2) { throw new Error(getQueryUsesInvalid(configFile, queryUses)); } const ref = tok[1]; - tok = tok[0].split('/'); + tok = tok[0].split("/"); // The first token is the owner // The second token is the repo // The rest is a path, if there is more than one token combine them to form the full path @@ -131,14 +128,14 @@ async function addRemoteQueries(codeQL, resultMap, queryUses, tempDir, githubUrl throw new Error(getQueryUsesInvalid(configFile, queryUses)); } // Check none of the parts of the repository name are empty - if (tok[0].trim() === '' || tok[1].trim() === '') { + if (tok[0].trim() === "" || tok[1].trim() === "") { throw new Error(getQueryUsesInvalid(configFile, queryUses)); } - const nwo = tok[0] + '/' + tok[1]; + const nwo = `${tok[0]}/${tok[1]}`; // Checkout the external repository const checkoutPath = await externalQueries.checkoutExternalRepository(nwo, ref, githubUrl, tempDir, logger); const queryPath = tok.length > 2 - ? path.join(checkoutPath, tok.slice(2).join('/')) + ? path.join(checkoutPath, tok.slice(2).join("/")) : checkoutPath; await runResolveQueries(codeQL, resultMap, [queryPath], checkoutPath, true); } @@ -161,7 +158,7 @@ async function parseQueryUses(languages, codeQL, resultMap, queryUses, tempDir, return; } // Check for one of the builtin suites - if (queryUses.indexOf('/') === -1 && queryUses.indexOf('@') === -1) { + if (queryUses.indexOf("/") === -1 && queryUses.indexOf("@") === -1) { await addBuiltinSuiteQueries(languages, codeQL, resultMap, queryUses, configFile); return; } @@ -181,35 +178,35 @@ function validateAndSanitisePath(originalPath, propertyName, configFile, logger) // Take a copy so we don't modify the original path, so we can still construct error messages let path = originalPath; // All paths are relative to the src root, so strip off leading slashes. - while (path.charAt(0) === '/') { + while (path.charAt(0) === "/") { path = path.substring(1); } // Trailing ** are redundant, so strip them off - if (path.endsWith('/**')) { + if (path.endsWith("/**")) { path = path.substring(0, path.length - 2); } // An empty path is not allowed as it's meaningless - if (path === '') { - throw new Error(getConfigFilePropertyError(configFile, propertyName, '"' + originalPath + '" is not an invalid path. ' + - 'It is not necessary to include it, and it is not allowed to exclude it.')); + if (path === "") { + throw new Error(getConfigFilePropertyError(configFile, propertyName, `"${originalPath}" is not an invalid path. ` + + `It is not necessary to include it, and it is not allowed to exclude it.`)); } // Check for illegal uses of ** if (path.match(pathStarsRegex)) { - throw new Error(getConfigFilePropertyError(configFile, propertyName, '"' + originalPath + '" contains an invalid "**" wildcard. ' + - 'They must be immediately preceeded and followed by a slash as in "/**/", or come at the start or end.')); + throw new Error(getConfigFilePropertyError(configFile, propertyName, `"${originalPath}" contains an invalid "**" wildcard. ` + + `They must be immediately preceeded and followed by a slash as in "/**/", or come at the start or end.`)); } // Check for other regex characters that we don't support. // Output a warning so the user knows, but otherwise continue normally. if (path.match(filterPatternCharactersRegex)) { - logger.warning(getConfigFilePropertyError(configFile, propertyName, '"' + originalPath + '" contains an unsupported character. ' + - 'The filter pattern characters ?, +, [, ], ! are not supported and will be matched literally.')); + logger.warning(getConfigFilePropertyError(configFile, propertyName, `"${originalPath}" contains an unsupported character. ` + + `The filter pattern characters ?, +, [, ], ! are not supported and will be matched literally.`)); } // Ban any uses of backslash for now. // This may not play nicely with project layouts. // This restriction can be lifted later if we determine they are ok. - if (path.indexOf('\\') !== -1) { - throw new Error(getConfigFilePropertyError(configFile, propertyName, '"' + originalPath + '" contains an "\\" character. These are not allowed in filters. ' + - 'If running on windows we recommend using "/" instead for path filters.')); + if (path.indexOf("\\") !== -1) { + throw new Error(getConfigFilePropertyError(configFile, propertyName, `"${originalPath}" contains an "\\" character. These are not allowed in filters. ` + + `If running on windows we recommend using "/" instead for path filters.`)); } return path; } @@ -217,76 +214,74 @@ exports.validateAndSanitisePath = validateAndSanitisePath; // An undefined configFile in some of these functions indicates that // the property was in a workflow file, not a config file function getNameInvalid(configFile) { - return getConfigFilePropertyError(configFile, NAME_PROPERTY, 'must be a non-empty string'); + return getConfigFilePropertyError(configFile, NAME_PROPERTY, "must be a non-empty string"); } exports.getNameInvalid = getNameInvalid; function getDisableDefaultQueriesInvalid(configFile) { - return getConfigFilePropertyError(configFile, DISABLE_DEFAULT_QUERIES_PROPERTY, 'must be a boolean'); + return getConfigFilePropertyError(configFile, DISABLE_DEFAULT_QUERIES_PROPERTY, "must be a boolean"); } exports.getDisableDefaultQueriesInvalid = getDisableDefaultQueriesInvalid; function getQueriesInvalid(configFile) { - return getConfigFilePropertyError(configFile, QUERIES_PROPERTY, 'must be an array'); + return getConfigFilePropertyError(configFile, QUERIES_PROPERTY, "must be an array"); } exports.getQueriesInvalid = getQueriesInvalid; function getQueryUsesInvalid(configFile, queryUses) { - return getConfigFilePropertyError(configFile, QUERIES_PROPERTY + '.' + QUERIES_USES_PROPERTY, 'must be a built-in suite (' + builtinSuites.join(' or ') + - '), a relative path, or be of the form "owner/repo[/path]@ref"' + - (queryUses !== undefined ? '\n Found: ' + queryUses : '')); + return getConfigFilePropertyError(configFile, `${QUERIES_PROPERTY}.${QUERIES_USES_PROPERTY}`, `must be a built-in suite (${builtinSuites.join(" or ")}), a relative path, or be of the form "owner/repo[/path]@ref"${queryUses !== undefined ? `\n Found: ${queryUses}` : ""}`); } exports.getQueryUsesInvalid = getQueryUsesInvalid; function getPathsIgnoreInvalid(configFile) { - return getConfigFilePropertyError(configFile, PATHS_IGNORE_PROPERTY, 'must be an array of non-empty strings'); + return getConfigFilePropertyError(configFile, PATHS_IGNORE_PROPERTY, "must be an array of non-empty strings"); } exports.getPathsIgnoreInvalid = getPathsIgnoreInvalid; function getPathsInvalid(configFile) { - return getConfigFilePropertyError(configFile, PATHS_PROPERTY, 'must be an array of non-empty strings'); + return getConfigFilePropertyError(configFile, PATHS_PROPERTY, "must be an array of non-empty strings"); } exports.getPathsInvalid = getPathsInvalid; function getLocalPathOutsideOfRepository(configFile, localPath) { - return getConfigFilePropertyError(configFile, QUERIES_PROPERTY + '.' + QUERIES_USES_PROPERTY, 'is invalid as the local path "' + localPath + '" is outside of the repository'); + return getConfigFilePropertyError(configFile, `${QUERIES_PROPERTY}.${QUERIES_USES_PROPERTY}`, `is invalid as the local path "${localPath}" is outside of the repository`); } exports.getLocalPathOutsideOfRepository = getLocalPathOutsideOfRepository; function getLocalPathDoesNotExist(configFile, localPath) { - return getConfigFilePropertyError(configFile, QUERIES_PROPERTY + '.' + QUERIES_USES_PROPERTY, 'is invalid as the local path "' + localPath + '" does not exist in the repository'); + return getConfigFilePropertyError(configFile, `${QUERIES_PROPERTY}.${QUERIES_USES_PROPERTY}`, `is invalid as the local path "${localPath}" does not exist in the repository`); } exports.getLocalPathDoesNotExist = getLocalPathDoesNotExist; function getConfigFileOutsideWorkspaceErrorMessage(configFile) { - return 'The configuration file "' + configFile + '" is outside of the workspace'; + return `The configuration file "${configFile}" is outside of the workspace`; } exports.getConfigFileOutsideWorkspaceErrorMessage = getConfigFileOutsideWorkspaceErrorMessage; function getConfigFileDoesNotExistErrorMessage(configFile) { - return 'The configuration file "' + configFile + '" does not exist'; + return `The configuration file "${configFile}" does not exist`; } exports.getConfigFileDoesNotExistErrorMessage = getConfigFileDoesNotExistErrorMessage; function getConfigFileRepoFormatInvalidMessage(configFile) { - let error = 'The configuration file "' + configFile + '" is not a supported remote file reference.'; - error += ' Expected format //@'; + let error = `The configuration file "${configFile}" is not a supported remote file reference.`; + error += " Expected format //@"; return error; } exports.getConfigFileRepoFormatInvalidMessage = getConfigFileRepoFormatInvalidMessage; function getConfigFileFormatInvalidMessage(configFile) { - return 'The configuration file "' + configFile + '" could not be read'; + return `The configuration file "${configFile}" could not be read`; } exports.getConfigFileFormatInvalidMessage = getConfigFileFormatInvalidMessage; function getConfigFileDirectoryGivenMessage(configFile) { - return 'The configuration file "' + configFile + '" looks like a directory, not a file'; + return `The configuration file "${configFile}" looks like a directory, not a file`; } exports.getConfigFileDirectoryGivenMessage = getConfigFileDirectoryGivenMessage; function getConfigFilePropertyError(configFile, property, error) { if (configFile === undefined) { - return 'The workflow property "' + property + '" is invalid: ' + error; + return `The workflow property "${property}" is invalid: ${error}`; } else { - return 'The configuration file "' + configFile + '" is invalid: property "' + property + '" ' + error; + return `The configuration file "${configFile}" is invalid: property "${property}" ${error}`; } } function getNoLanguagesError() { - return "Did not detect any languages to analyze. " + - "Please update input in workflow or check that GitHub detects the correct languages in your repository."; + return ("Did not detect any languages to analyze. " + + "Please update input in workflow or check that GitHub detects the correct languages in your repository."); } exports.getNoLanguagesError = getNoLanguagesError; function getUnknownLanguagesError(languages) { - return "Did not recognise the following languages: " + languages.join(', '); + return `Did not recognise the following languages: ${languages.join(", ")}`; } exports.getUnknownLanguagesError = getUnknownLanguagesError; /** @@ -294,18 +289,20 @@ exports.getUnknownLanguagesError = getUnknownLanguagesError; */ async function getLanguagesInRepo(repository, githubAuth, githubUrl, logger) { logger.debug(`GitHub repo ${repository.owner} ${repository.repo}`); - const response = await api.getApiClient(githubAuth, githubUrl, true).repos.listLanguages({ + const response = await api + .getApiClient(githubAuth, githubUrl, true) + .repos.listLanguages({ owner: repository.owner, - repo: repository.repo + repo: repository.repo, }); - logger.debug("Languages API response: " + JSON.stringify(response)); + logger.debug(`Languages API response: ${JSON.stringify(response)}`); // The GitHub API is going to return languages in order of popularity, // When we pick a language to autobuild we want to pick the most popular traced language // Since sets in javascript maintain insertion order, using a set here and then splatting it // into an array gives us an array of languages ordered by popularity - let languages = new Set(); - for (let lang of Object.keys(response.data)) { - let parsedLang = languages_1.parseLanguage(lang); + const languages = new Set(); + for (const lang of Object.keys(response.data)) { + const parsedLang = languages_1.parseLanguage(lang); if (parsedLang !== undefined) { languages.add(parsedLang); } @@ -325,14 +322,14 @@ async function getLanguagesInRepo(repository, githubAuth, githubUrl, logger) { async function getLanguages(languagesInput, repository, githubAuth, githubUrl, logger) { // Obtain from action input 'languages' if set let languages = (languagesInput || "") - .split(',') - .map(x => x.trim()) - .filter(x => x.length > 0); - logger.info("Languages from configuration: " + JSON.stringify(languages)); + .split(",") + .map((x) => x.trim()) + .filter((x) => x.length > 0); + logger.info(`Languages from configuration: ${JSON.stringify(languages)}`); if (languages.length === 0) { // Obtain languages as all languages in the repo that can be analysed languages = await getLanguagesInRepo(repository, githubAuth, githubUrl, logger); - logger.info("Automatically detected languages: " + JSON.stringify(languages)); + logger.info(`Automatically detected languages: ${JSON.stringify(languages)}`); } // If the languages parameter was not given and no languages were // detected then fail here as this is a workflow configuration error. @@ -342,7 +339,7 @@ async function getLanguages(languagesInput, repository, githubAuth, githubUrl, l // Make sure they are supported const parsedLanguages = []; const unknownLanguages = []; - for (let language of languages) { + for (const language of languages) { const parsedLanguage = languages_1.parseLanguage(language); if (parsedLanguage === undefined) { unknownLanguages.push(language); @@ -359,8 +356,8 @@ async function getLanguages(languagesInput, repository, githubAuth, githubUrl, l async function addQueriesFromWorkflow(codeQL, queriesInput, languages, resultMap, tempDir, checkoutPath, githubUrl, logger) { queriesInput = queriesInput.trim(); // "+" means "don't override config file" - see shouldAddConfigFileQueries - queriesInput = queriesInput.replace(/^\+/, ''); - for (const query of queriesInput.split(',')) { + queriesInput = queriesInput.replace(/^\+/, ""); + for (const query of queriesInput.split(",")) { await parseQueryUses(languages, codeQL, resultMap, query, tempDir, checkoutPath, githubUrl, logger); } } @@ -370,7 +367,7 @@ async function addQueriesFromWorkflow(codeQL, queriesInput, languages, resultMap // should instead be added in addition function shouldAddConfigFileQueries(queriesInput) { if (queriesInput) { - return queriesInput.trimStart().substr(0, 1) === '+'; + return queriesInput.trimStart().substr(0, 1) === "+"; } return true; } @@ -385,8 +382,8 @@ async function getDefaultConfig(languagesInput, queriesInput, repository, tempDi await addQueriesFromWorkflow(codeQL, queriesInput, languages, queries, tempDir, checkoutPath, githubUrl, logger); } return { - languages: languages, - queries: queries, + languages, + queries, pathsIgnore: [], paths: [], originalUserInput: {}, @@ -440,12 +437,14 @@ async function loadConfig(languagesInput, queriesInput, configFile, repository, if (queriesInput) { await addQueriesFromWorkflow(codeQL, queriesInput, languages, queries, tempDir, checkoutPath, githubUrl, logger); } - if (shouldAddConfigFileQueries(queriesInput) && QUERIES_PROPERTY in parsedYAML) { + if (shouldAddConfigFileQueries(queriesInput) && + QUERIES_PROPERTY in parsedYAML) { if (!(parsedYAML[QUERIES_PROPERTY] instanceof Array)) { throw new Error(getQueriesInvalid(configFile)); } for (const query of parsedYAML[QUERIES_PROPERTY]) { - if (!(QUERIES_USES_PROPERTY in query) || typeof query[QUERIES_USES_PROPERTY] !== "string") { + if (!(QUERIES_USES_PROPERTY in query) || + typeof query[QUERIES_USES_PROPERTY] !== "string") { throw new Error(getQueryUsesInvalid(configFile)); } await parseQueryUses(languages, codeQL, queries, query[QUERIES_USES_PROPERTY], tempDir, checkoutPath, githubUrl, logger, configFile); @@ -455,8 +454,8 @@ async function loadConfig(languagesInput, queriesInput, configFile, repository, if (!(parsedYAML[PATHS_IGNORE_PROPERTY] instanceof Array)) { throw new Error(getPathsIgnoreInvalid(configFile)); } - parsedYAML[PATHS_IGNORE_PROPERTY].forEach(path => { - if (typeof path !== "string" || path === '') { + parsedYAML[PATHS_IGNORE_PROPERTY].forEach((path) => { + if (typeof path !== "string" || path === "") { throw new Error(getPathsIgnoreInvalid(configFile)); } pathsIgnore.push(validateAndSanitisePath(path, PATHS_IGNORE_PROPERTY, configFile, logger)); @@ -466,8 +465,8 @@ async function loadConfig(languagesInput, queriesInput, configFile, repository, if (!(parsedYAML[PATHS_PROPERTY] instanceof Array)) { throw new Error(getPathsInvalid(configFile)); } - parsedYAML[PATHS_PROPERTY].forEach(path => { - if (typeof path !== "string" || path === '') { + parsedYAML[PATHS_PROPERTY].forEach((path) => { + if (typeof path !== "string" || path === "") { throw new Error(getPathsInvalid(configFile)); } paths.push(validateAndSanitisePath(path, PATHS_PROPERTY, configFile, logger)); @@ -502,7 +501,7 @@ async function initConfig(languagesInput, queriesInput, configFile, repository, let config; // If no config file was provided create an empty one if (!configFile) { - logger.debug('No configuration file was provided'); + logger.debug("No configuration file was provided"); config = await getDefaultConfig(languagesInput, queriesInput, repository, tempDir, toolCacheDir, codeQL, checkoutPath, githubAuth, githubUrl, logger); } else { @@ -518,7 +517,7 @@ function isLocal(configPath) { if (configPath.indexOf("./") === 0) { return true; } - return (configPath.indexOf("@") === -1); + return configPath.indexOf("@") === -1; } function getLocalConfig(configFile, checkoutPath) { // Error if the config file is now outside of the workspace @@ -529,17 +528,19 @@ function getLocalConfig(configFile, checkoutPath) { if (!fs.existsSync(configFile)) { throw new Error(getConfigFileDoesNotExistErrorMessage(configFile)); } - return yaml.safeLoad(fs.readFileSync(configFile, 'utf8')); + return yaml.safeLoad(fs.readFileSync(configFile, "utf8")); } async function getRemoteConfig(configFile, githubAuth, githubUrl) { // retrieve the various parts of the config location, and ensure they're present - const format = new RegExp('(?[^/]+)/(?[^/]+)/(?[^@]+)@(?.*)'); + const format = new RegExp("(?[^/]+)/(?[^/]+)/(?[^@]+)@(?.*)"); const pieces = format.exec(configFile); // 5 = 4 groups + the whole expression if (pieces === null || pieces.groups === undefined || pieces.length < 5) { throw new Error(getConfigFileRepoFormatInvalidMessage(configFile)); } - const response = await api.getApiClient(githubAuth, githubUrl, true).repos.getContents({ + const response = await api + .getApiClient(githubAuth, githubUrl, true) + .repos.getContents({ owner: pieces.groups.owner, repo: pieces.groups.repo, path: pieces.groups.path, @@ -555,13 +556,13 @@ async function getRemoteConfig(configFile, githubAuth, githubUrl) { else { throw new Error(getConfigFileFormatInvalidMessage(configFile)); } - return yaml.safeLoad(Buffer.from(fileContents, 'base64').toString('binary')); + return yaml.safeLoad(Buffer.from(fileContents, "base64").toString("binary")); } /** * Get the file path where the parsed config will be stored. */ function getPathToParsedConfigFile(tempDir) { - return path.join(tempDir, 'config'); + return path.join(tempDir, "config"); } exports.getPathToParsedConfigFile = getPathToParsedConfigFile; /** @@ -571,8 +572,8 @@ async function saveConfig(config, logger) { const configString = JSON.stringify(config); const configFile = getPathToParsedConfigFile(config.tempDir); fs.mkdirSync(path.dirname(configFile), { recursive: true }); - fs.writeFileSync(configFile, configString, 'utf8'); - logger.debug('Saved config:'); + fs.writeFileSync(configFile, configString, "utf8"); + logger.debug("Saved config:"); logger.debug(configString); } /** @@ -584,8 +585,8 @@ async function getConfig(tempDir, logger) { if (!fs.existsSync(configFile)) { return undefined; } - const configString = fs.readFileSync(configFile, 'utf8'); - logger.debug('Loaded config:'); + const configString = fs.readFileSync(configFile, "utf8"); + logger.debug("Loaded config:"); logger.debug(configString); return JSON.parse(configString); } diff --git a/lib/config-utils.js.map b/lib/config-utils.js.map index 116353526..b95e2fdbf 100644 --- a/lib/config-utils.js.map +++ b/lib/config-utils.js.map @@ -1 +1 @@ -{"version":3,"file":"config-utils.js","sourceRoot":"","sources":["../src/config-utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"config-utils.js","sourceRoot":"","sources":["../src/config-utils.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uCAAyB;AACzB,8CAAgC;AAChC,2CAA6B;AAE7B,kDAAoC;AAEpC,oEAAsD;AACtD,2CAAsD;AAItD,qDAAqD;AACrD,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,MAAM,gCAAgC,GAAG,yBAAyB,CAAC;AACnE,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACnC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,qBAAqB,GAAG,cAAc,CAAC;AAC7C,MAAM,cAAc,GAAG,OAAO,CAAC;AA8D/B;;;;;;;;GAQG;AACH,MAAM,wBAAwB,GAAqC;IACjE,MAAM,EAAE;QACN,uDAAuD;QACvD,0DAA0D;KAC3D;CACF,CAAC;AAEF,SAAS,eAAe,CAAC,QAAQ,EAAE,KAAK;IACtC,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CACvE,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC9B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,eAAqC;IAC5D,MAAM,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,CAAC;IAC9D,MAAM,yBAAyB,GAAG,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClE,IAAI,yBAAyB,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1C,MAAM,IAAI,KAAK,CACb,GACE,mDAAmD;YACnD,4DACF,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1C,CAAC;KACH;IAED,MAAM,yBAAyB,GAAG,eAAe,CAAC,yBAAyB,CAAC;IAC5E,MAAM,gCAAgC,GAAG,MAAM,CAAC,IAAI,CAClD,yBAAyB,CAC1B,CAAC;IACF,IAAI,gCAAgC,CAAC,MAAM,KAAK,CAAC,EAAE;QACjD,MAAM,IAAI,KAAK,CACb,GACE,oDAAoD;YACpD,4DACF,GAAG,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjD,CAAC;KACH;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,MAAc,EACd,SAA2C,EAC3C,SAAmB,EACnB,eAAmC,EACnC,qBAA8B;IAE9B,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,cAAc,CACjD,SAAS,EACT,eAAe,CAChB,CAAC;IAEF,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAC9C,eAAe,CAAC,UAAU,CAC3B,EAAE;QACD,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;YACrC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;SAC1B;QACD,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CACtB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CACrE,CAAC;KACH;IAED,IAAI,qBAAqB,EAAE;QACzB,eAAe,CAAC,eAAe,CAAC,CAAC;KAClC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAC9B,MAAc,EACd,SAAmB,EACnB,SAA2C;IAE3C,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC9D,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,0EAA0E;AAC1E,MAAM,aAAa,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,CAAU,CAAC;AAE7E;;;GAGG;AACH,KAAK,UAAU,sBAAsB,CACnC,SAAmB,EACnB,MAAc,EACd,SAA2C,EAC3C,SAAiB,EACjB,UAAmB;IAEnB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;KAC7D;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,SAAS,MAAM,CAAC,CAAC;IAC7D,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,MAAc,EACd,SAA2C,EAC3C,cAAsB,EACtB,YAAoB,EACpB,UAAmB;IAEnB,oEAAoE;IACpE,+EAA+E;IAC/E,IAAI,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAEhE,wBAAwB;IACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;QACrC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,CAAC;KACvE;IAED,iFAAiF;IACjF,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAEvD,4EAA4E;IAC5E,IACE,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CACxC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,CACzC,EACD;QACA,MAAM,IAAI,KAAK,CACb,+BAA+B,CAAC,UAAU,EAAE,cAAc,CAAC,CAC5D,CAAC;KACH;IAED,MAAM,iBAAiB,CACrB,MAAM,EACN,SAAS,EACT,CAAC,iBAAiB,CAAC,EACnB,YAAY,EACZ,IAAI,CACL,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAC7B,MAAc,EACd,SAA2C,EAC3C,SAAiB,EACjB,OAAe,EACf,SAAiB,EACjB,MAAc,EACd,UAAmB;IAEnB,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;KAC7D;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAEnB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxB,+BAA+B;IAC/B,+BAA+B;IAC/B,yFAAyF;IACzF,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;KAC7D;IACD,2DAA2D;IAC3D,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;KAC7D;IACD,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAElC,mCAAmC;IACnC,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,0BAA0B,CACnE,GAAG,EACH,GAAG,EACH,SAAS,EACT,OAAO,EACP,MAAM,CACP,CAAC;IAEF,MAAM,SAAS,GACb,GAAG,CAAC,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC,YAAY,CAAC;IAEnB,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,cAAc,CAC3B,SAAmB,EACnB,MAAc,EACd,SAA2C,EAC3C,SAAiB,EACjB,OAAe,EACf,YAAoB,EACpB,SAAiB,EACjB,MAAc,EACd,UAAmB;IAEnB,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,SAAS,KAAK,EAAE,EAAE;QACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;KAClD;IAED,oFAAoF;IACpF,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC9B,MAAM,eAAe,CACnB,MAAM,EACN,SAAS,EACT,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAClB,YAAY,EACZ,UAAU,CACX,CAAC;QACF,OAAO;KACR;IAED,sCAAsC;IACtC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;QAClE,MAAM,sBAAsB,CAC1B,SAAS,EACT,MAAM,EACN,SAAS,EACT,SAAS,EACT,UAAU,CACX,CAAC;QACF,OAAO;KACR;IAED,iDAAiD;IACjD,MAAM,gBAAgB,CACpB,MAAM,EACN,SAAS,EACT,SAAS,EACT,OAAO,EACP,SAAS,EACT,MAAM,EACN,UAAU,CACX,CAAC;AACJ,CAAC;AAED,2DAA2D;AAC3D,+DAA+D;AAC/D,oCAAoC;AACpC,MAAM,cAAc,GAAG,mCAAmC,CAAC;AAE3D,wEAAwE;AACxE,iHAAiH;AACjH,MAAM,4BAA4B,GAAG,iBAAiB,CAAC;AAEvD,4EAA4E;AAC5E,6DAA6D;AAC7D,SAAgB,uBAAuB,CACrC,YAAoB,EACpB,YAAoB,EACpB,UAAkB,EAClB,MAAc;IAEd,6FAA6F;IAC7F,IAAI,IAAI,GAAG,YAAY,CAAC;IAExB,wEAAwE;IACxE,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;QAC7B,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC1B;IAED,+CAA+C;IAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACxB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAC3C;IAED,mDAAmD;IACnD,IAAI,IAAI,KAAK,EAAE,EAAE;QACf,MAAM,IAAI,KAAK,CACb,0BAA0B,CACxB,UAAU,EACV,YAAY,EACZ,IAAI,YAAY,4BAA4B;YAC1C,yEAAyE,CAC5E,CACF,CAAC;KACH;IAED,+BAA+B;IAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CACb,0BAA0B,CACxB,UAAU,EACV,YAAY,EACZ,IAAI,YAAY,uCAAuC;YACrD,uGAAuG,CAC1G,CACF,CAAC;KACH;IAED,0DAA0D;IAC1D,uEAAuE;IACvE,IAAI,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE;QAC5C,MAAM,CAAC,OAAO,CACZ,0BAA0B,CACxB,UAAU,EACV,YAAY,EACZ,IAAI,YAAY,uCAAuC;YACrD,8FAA8F,CACjG,CACF,CAAC;KACH;IAED,qCAAqC;IACrC,iDAAiD;IACjD,oEAAoE;IACpE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;QAC7B,MAAM,IAAI,KAAK,CACb,0BAA0B,CACxB,UAAU,EACV,YAAY,EACZ,IAAI,YAAY,kEAAkE;YAChF,wEAAwE,CAC3E,CACF,CAAC;KACH;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAvED,0DAuEC;AAED,oEAAoE;AACpE,yDAAyD;AAEzD,SAAgB,cAAc,CAAC,UAAkB;IAC/C,OAAO,0BAA0B,CAC/B,UAAU,EACV,aAAa,EACb,4BAA4B,CAC7B,CAAC;AACJ,CAAC;AAND,wCAMC;AAED,SAAgB,+BAA+B,CAAC,UAAkB;IAChE,OAAO,0BAA0B,CAC/B,UAAU,EACV,gCAAgC,EAChC,mBAAmB,CACpB,CAAC;AACJ,CAAC;AAND,0EAMC;AAED,SAAgB,iBAAiB,CAAC,UAAkB;IAClD,OAAO,0BAA0B,CAC/B,UAAU,EACV,gBAAgB,EAChB,kBAAkB,CACnB,CAAC;AACJ,CAAC;AAND,8CAMC;AAED,SAAgB,mBAAmB,CACjC,UAA8B,EAC9B,SAAkB;IAElB,OAAO,0BAA0B,CAC/B,UAAU,EACV,GAAG,gBAAgB,IAAI,qBAAqB,EAAE,EAC9C,6BAA6B,aAAa,CAAC,IAAI,CAC7C,MAAM,CACP,gEACC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC,CAAC,EACvD,EAAE,CACH,CAAC;AACJ,CAAC;AAbD,kDAaC;AAED,SAAgB,qBAAqB,CAAC,UAAkB;IACtD,OAAO,0BAA0B,CAC/B,UAAU,EACV,qBAAqB,EACrB,uCAAuC,CACxC,CAAC;AACJ,CAAC;AAND,sDAMC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAChD,OAAO,0BAA0B,CAC/B,UAAU,EACV,cAAc,EACd,uCAAuC,CACxC,CAAC;AACJ,CAAC;AAND,0CAMC;AAED,SAAgB,+BAA+B,CAC7C,UAA8B,EAC9B,SAAiB;IAEjB,OAAO,0BAA0B,CAC/B,UAAU,EACV,GAAG,gBAAgB,IAAI,qBAAqB,EAAE,EAC9C,iCAAiC,SAAS,gCAAgC,CAC3E,CAAC;AACJ,CAAC;AATD,0EASC;AAED,SAAgB,wBAAwB,CACtC,UAA8B,EAC9B,SAAiB;IAEjB,OAAO,0BAA0B,CAC/B,UAAU,EACV,GAAG,gBAAgB,IAAI,qBAAqB,EAAE,EAC9C,iCAAiC,SAAS,oCAAoC,CAC/E,CAAC;AACJ,CAAC;AATD,4DASC;AAED,SAAgB,yCAAyC,CACvD,UAAkB;IAElB,OAAO,2BAA2B,UAAU,+BAA+B,CAAC;AAC9E,CAAC;AAJD,8FAIC;AAED,SAAgB,qCAAqC,CACnD,UAAkB;IAElB,OAAO,2BAA2B,UAAU,kBAAkB,CAAC;AACjE,CAAC;AAJD,sFAIC;AAED,SAAgB,qCAAqC,CACnD,UAAkB;IAElB,IAAI,KAAK,GAAG,2BAA2B,UAAU,6CAA6C,CAAC;IAC/F,KAAK,IAAI,yDAAyD,CAAC;IAEnE,OAAO,KAAK,CAAC;AACf,CAAC;AAPD,sFAOC;AAED,SAAgB,iCAAiC,CAAC,UAAkB;IAClE,OAAO,2BAA2B,UAAU,qBAAqB,CAAC;AACpE,CAAC;AAFD,8EAEC;AAED,SAAgB,kCAAkC,CAAC,UAAkB;IACnE,OAAO,2BAA2B,UAAU,sCAAsC,CAAC;AACrF,CAAC;AAFD,gFAEC;AAED,SAAS,0BAA0B,CACjC,UAA8B,EAC9B,QAAgB,EAChB,KAAa;IAEb,IAAI,UAAU,KAAK,SAAS,EAAE;QAC5B,OAAO,0BAA0B,QAAQ,iBAAiB,KAAK,EAAE,CAAC;KACnE;SAAM;QACL,OAAO,2BAA2B,UAAU,2BAA2B,QAAQ,KAAK,KAAK,EAAE,CAAC;KAC7F;AACH,CAAC;AAED,SAAgB,mBAAmB;IACjC,OAAO,CACL,2CAA2C;QAC3C,wGAAwG,CACzG,CAAC;AACJ,CAAC;AALD,kDAKC;AAED,SAAgB,wBAAwB,CAAC,SAAmB;IAC1D,OAAO,8CAA8C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9E,CAAC;AAFD,4DAEC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAC/B,UAAyB,EACzB,UAAkB,EAClB,SAAiB,EACjB,MAAc;IAEd,MAAM,CAAC,KAAK,CAAC,eAAe,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,MAAM,GAAG;SACvB,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC;SACzC,KAAK,CAAC,aAAa,CAAC;QACnB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,IAAI,EAAE,UAAU,CAAC,IAAI;KACtB,CAAC,CAAC;IAEL,MAAM,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEpE,sEAAsE;IACtE,wFAAwF;IACxF,4FAA4F;IAC5F,qEAAqE;IACrE,MAAM,SAAS,GAAkB,IAAI,GAAG,EAAE,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QAC7C,MAAM,UAAU,GAAG,yBAAa,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,UAAU,KAAK,SAAS,EAAE;YAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;SAC3B;KACF;IACD,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,YAAY,CACzB,cAAkC,EAClC,UAAyB,EACzB,UAAkB,EAClB,SAAiB,EACjB,MAAc;IAEd,8CAA8C;IAC9C,IAAI,SAAS,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;SACnC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAE1E,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,qEAAqE;QACrE,SAAS,GAAG,MAAM,kBAAkB,CAClC,UAAU,EACV,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;QACF,MAAM,CAAC,IAAI,CACT,qCAAqC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CACjE,CAAC;KACH;IAED,iEAAiE;IACjE,qEAAqE;IACrE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;KACxC;IAED,+BAA+B;IAC/B,MAAM,eAAe,GAAe,EAAE,CAAC;IACvC,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,MAAM,cAAc,GAAG,yBAAa,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,cAAc,KAAK,SAAS,EAAE;YAChC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACjC;aAAM,IAAI,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE;YACzD,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACtC;KACF;IACD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,CAAC,CAAC;KAC7D;IAED,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,MAAc,EACd,YAAoB,EACpB,SAAmB,EACnB,SAA2C,EAC3C,OAAe,EACf,YAAoB,EACpB,SAAiB,EACjB,MAAc;IAEd,YAAY,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;IACnC,0EAA0E;IAC1E,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE/C,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC3C,MAAM,cAAc,CAClB,SAAS,EACT,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,MAAM,CACP,CAAC;KACH;AACH,CAAC;AAED,mEAAmE;AACnE,sEAAsE;AACtE,iEAAiE;AACjE,sCAAsC;AACtC,SAAS,0BAA0B,CAAC,YAAgC;IAClE,IAAI,YAAY,EAAE;QAChB,OAAO,YAAY,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC;KACtD;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CACpC,cAAkC,EAClC,YAAgC,EAChC,UAAyB,EACzB,OAAe,EACf,YAAoB,EACpB,MAAc,EACd,YAAoB,EACpB,UAAkB,EAClB,SAAiB,EACjB,MAAc;IAEd,MAAM,SAAS,GAAG,MAAM,YAAY,CAClC,cAAc,EACd,UAAU,EACV,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;IACF,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,YAAY,EAAE;QAChB,MAAM,sBAAsB,CAC1B,MAAM,EACN,YAAY,EACZ,SAAS,EACT,OAAO,EACP,OAAO,EACP,YAAY,EACZ,SAAS,EACT,MAAM,CACP,CAAC;KACH;IAED,OAAO;QACL,SAAS;QACT,OAAO;QACP,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,EAAE;QACT,iBAAiB,EAAE,EAAE;QACrB,OAAO;QACP,YAAY;QACZ,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE;KAC5B,CAAC;AACJ,CAAC;AA5CD,4CA4CC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CACvB,cAAkC,EAClC,YAAgC,EAChC,UAAkB,EAClB,UAAyB,EACzB,OAAe,EACf,YAAoB,EACpB,MAAc,EACd,YAAoB,EACpB,UAAkB,EAClB,SAAiB,EACjB,MAAc;IAEd,IAAI,UAAsB,CAAC;IAE3B,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;QACvB,qDAAqD;QACrD,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACpD,UAAU,GAAG,cAAc,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;KACvD;SAAM;QACL,UAAU,GAAG,MAAM,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;KACvE;IAED,8DAA8D;IAC9D,0CAA0C;IAC1C,IAAI,aAAa,IAAI,UAAU,EAAE;QAC/B,IAAI,OAAO,UAAU,CAAC,aAAa,CAAC,KAAK,QAAQ,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;SAC7C;QACD,IAAI,UAAU,CAAC,aAAa,CAAE,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;SAC7C;KACF;IAED,MAAM,SAAS,GAAG,MAAM,YAAY,CAClC,cAAc,EACd,UAAU,EACV,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;IAEF,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,qBAAqB,GAAG,KAAK,CAAC;IAClC,IAAI,gCAAgC,IAAI,UAAU,EAAE;QAClD,IAAI,OAAO,UAAU,CAAC,gCAAgC,CAAC,KAAK,SAAS,EAAE;YACrE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC,CAAC;SAC9D;QACD,qBAAqB,GAAG,UAAU,CAAC,gCAAgC,CAAE,CAAC;KACvE;IACD,IAAI,CAAC,qBAAqB,EAAE;QAC1B,MAAM,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KACrD;IAED,qEAAqE;IACrE,kEAAkE;IAClE,wEAAwE;IACxE,sBAAsB;IACtB,IAAI,YAAY,EAAE;QAChB,MAAM,sBAAsB,CAC1B,MAAM,EACN,YAAY,EACZ,SAAS,EACT,OAAO,EACP,OAAO,EACP,YAAY,EACZ,SAAS,EACT,MAAM,CACP,CAAC;KACH;IACD,IACE,0BAA0B,CAAC,YAAY,CAAC;QACxC,gBAAgB,IAAI,UAAU,EAC9B;QACA,IAAI,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,YAAY,KAAK,CAAC,EAAE;YACpD,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;SAChD;QACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,gBAAgB,CAAE,EAAE;YACjD,IACE,CAAC,CAAC,qBAAqB,IAAI,KAAK,CAAC;gBACjC,OAAO,KAAK,CAAC,qBAAqB,CAAC,KAAK,QAAQ,EAChD;gBACA,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;aAClD;YACD,MAAM,cAAc,CAClB,SAAS,EACT,MAAM,EACN,OAAO,EACP,KAAK,CAAC,qBAAqB,CAAC,EAC5B,OAAO,EACP,YAAY,EACZ,SAAS,EACT,MAAM,EACN,UAAU,CACX,CAAC;SACH;KACF;IAED,IAAI,qBAAqB,IAAI,UAAU,EAAE;QACvC,IAAI,CAAC,CAAC,UAAU,CAAC,qBAAqB,CAAC,YAAY,KAAK,CAAC,EAAE;YACzD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;SACpD;QACD,UAAU,CAAC,qBAAqB,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,EAAE;gBAC3C,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;aACpD;YACD,WAAW,CAAC,IAAI,CACd,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,CAAC,CACzE,CAAC;QACJ,CAAC,CAAC,CAAC;KACJ;IAED,IAAI,cAAc,IAAI,UAAU,EAAE;QAChC,IAAI,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,YAAY,KAAK,CAAC,EAAE;YAClD,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;SAC9C;QACD,UAAU,CAAC,cAAc,CAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,EAAE;gBAC3C,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;aAC9C;YACD,KAAK,CAAC,IAAI,CACR,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC,CAClE,CAAC;QACJ,CAAC,CAAC,CAAC;KACJ;IAED,0EAA0E;IAC1E,oCAAoC;IACpC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACrE,MAAM,IAAI,KAAK,CACb,yCAAyC,QAAQ,IAAI;gBACnD,8FAA8F,CACjG,CAAC;SACH;KACF;IAED,OAAO;QACL,SAAS;QACT,OAAO;QACP,WAAW;QACX,KAAK;QACL,iBAAiB,EAAE,UAAU;QAC7B,OAAO;QACP,YAAY;QACZ,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,UAAU,CAC9B,cAAkC,EAClC,YAAgC,EAChC,UAA8B,EAC9B,UAAyB,EACzB,OAAe,EACf,YAAoB,EACpB,MAAc,EACd,YAAoB,EACpB,UAAkB,EAClB,SAAiB,EACjB,MAAc;IAEd,IAAI,MAAc,CAAC;IAEnB,qDAAqD;IACrD,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACnD,MAAM,GAAG,MAAM,gBAAgB,CAC7B,cAAc,EACd,YAAY,EACZ,UAAU,EACV,OAAO,EACP,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;SAAM;QACL,MAAM,GAAG,MAAM,UAAU,CACvB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,UAAU,EACV,OAAO,EACP,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,UAAU,EACV,SAAS,EACT,MAAM,CACP,CAAC;KACH;IAED,iEAAiE;IACjE,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAjDD,gCAiDC;AAED,SAAS,OAAO,CAAC,UAAkB;IACjC,2CAA2C;IAC3C,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAClC,OAAO,IAAI,CAAC;KACb;IAED,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,YAAoB;IAC9D,2DAA2D;IAC3D,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE;QAChE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,UAAU,CAAC,CAAC,CAAC;KACxE;IAED,mCAAmC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,UAAU,CAAC,CAAC,CAAC;KACpE;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,UAAkB,EAClB,UAAkB,EAClB,SAAiB;IAEjB,gFAAgF;IAChF,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,0DAA0D,CAC3D,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvC,sCAAsC;IACtC,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACvE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,UAAU,CAAC,CAAC,CAAC;KACpE;IAED,MAAM,QAAQ,GAAG,MAAM,GAAG;SACvB,YAAY,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC;SACzC,KAAK,CAAC,WAAW,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;QAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QACxB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;KACvB,CAAC,CAAC;IAEL,IAAI,YAAoB,CAAC;IACzB,IAAI,SAAS,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;QACrE,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;KACtC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,UAAU,CAAC,CAAC,CAAC;KACjE;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,UAAU,CAAC,CAAC,CAAC;KAChE;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,OAAe;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAFD,8DAEC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,MAAc;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,SAAS,CAC7B,OAAe,EACf,MAAc;IAEd,MAAM,UAAU,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QAC9B,OAAO,SAAS,CAAC;KAClB;IACD,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAZD,8BAYC"} \ No newline at end of file diff --git a/lib/config-utils.test.js b/lib/config-utils.test.js index f23790c75..a4255078d 100644 --- a/lib/config-utils.test.js +++ b/lib/config-utils.test.js @@ -25,23 +25,25 @@ const util = __importStar(require("./util")); testing_utils_1.setupTests(ava_1.default); // Returns the filepath of the newly-created file function createConfigFile(inputFileContents, tmpDir) { - const configFilePath = path.join(tmpDir, 'input'); - fs.writeFileSync(configFilePath, inputFileContents, 'utf8'); + const configFilePath = path.join(tmpDir, "input"); + fs.writeFileSync(configFilePath, inputFileContents, "utf8"); return configFilePath; } function mockGetContents(content) { // Passing an auth token is required, so we just use a dummy value - let client = new github.GitHub('123'); + const client = new github.GitHub("123"); const response = { - data: content + data: content, }; - const spyGetContents = sinon_1.default.stub(client.repos, "getContents").resolves(response); + const spyGetContents = sinon_1.default + .stub(client.repos, "getContents") + .resolves(response); sinon_1.default.stub(api, "getApiClient").value(() => client); return spyGetContents; } function mockListLanguages(languages) { // Passing an auth token is required, so we just use a dummy value - let client = new github.GitHub('123'); + const client = new github.GitHub("123"); const response = { data: {}, }; @@ -54,9 +56,9 @@ function mockListLanguages(languages) { ava_1.default("load empty config", async (t) => { return await util.withTmpDir(async (tmpDir) => { const logger = logging_1.getRunnerLogger(true); - const languages = 'javascript,python'; + const languages = "javascript,python"; const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function () { + async resolveQueries() { return { byLanguage: {}, noDeclaredLanguage: {}, @@ -64,15 +66,15 @@ ava_1.default("load empty config", async (t) => { }; }, }); - const config = await configUtils.initConfig(languages, undefined, undefined, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logger); - t.deepEqual(config, await configUtils.getDefaultConfig(languages, undefined, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logger)); + const config = await configUtils.initConfig(languages, undefined, undefined, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logger); + t.deepEqual(config, await configUtils.getDefaultConfig(languages, undefined, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logger)); }); }); ava_1.default("loading config saves config", async (t) => { return await util.withTmpDir(async (tmpDir) => { const logger = logging_1.getRunnerLogger(true); const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function () { + async resolveQueries() { return { byLanguage: {}, noDeclaredLanguage: {}, @@ -84,7 +86,7 @@ ava_1.default("loading config saves config", async (t) => { t.false(fs.existsSync(configUtils.getPathToParsedConfigFile(tmpDir))); // Sanity check that getConfig returns undefined before we have called initConfig t.deepEqual(await configUtils.getConfig(tmpDir, logger), undefined); - const config1 = await configUtils.initConfig('javascript,python', undefined, undefined, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logger); + const config1 = await configUtils.initConfig("javascript,python", undefined, undefined, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logger); // The saved config file should now exist t.true(fs.existsSync(configUtils.getPathToParsedConfigFile(tmpDir))); // And that same newly-initialised config should now be returned by getConfig @@ -95,50 +97,50 @@ ava_1.default("loading config saves config", async (t) => { ava_1.default("load input outside of workspace", async (t) => { return await util.withTmpDir(async (tmpDir) => { try { - await configUtils.initConfig(undefined, undefined, '../input', { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + await configUtils.initConfig(undefined, undefined, "../input", { owner: "github", repo: "example " }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getConfigFileOutsideWorkspaceErrorMessage(path.join(tmpDir, '../input')))); + t.deepEqual(err, new Error(configUtils.getConfigFileOutsideWorkspaceErrorMessage(path.join(tmpDir, "../input")))); } }); }); ava_1.default("load non-local input with invalid repo syntax", async (t) => { return await util.withTmpDir(async (tmpDir) => { // no filename given, just a repo - const configFile = 'octo-org/codeql-config@main'; + const configFile = "octo-org/codeql-config@main"; try { - await configUtils.initConfig(undefined, undefined, configFile, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + await configUtils.initConfig(undefined, undefined, configFile, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getConfigFileRepoFormatInvalidMessage('octo-org/codeql-config@main'))); + t.deepEqual(err, new Error(configUtils.getConfigFileRepoFormatInvalidMessage("octo-org/codeql-config@main"))); } }); }); ava_1.default("load non-existent input", async (t) => { return await util.withTmpDir(async (tmpDir) => { - const languages = 'javascript'; - const configFile = 'input'; + const languages = "javascript"; + const configFile = "input"; t.false(fs.existsSync(path.join(tmpDir, configFile))); try { - await configUtils.initConfig(languages, undefined, configFile, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + await configUtils.initConfig(languages, undefined, configFile, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getConfigFileDoesNotExistErrorMessage(path.join(tmpDir, 'input')))); + t.deepEqual(err, new Error(configUtils.getConfigFileDoesNotExistErrorMessage(path.join(tmpDir, "input")))); } }); }); ava_1.default("load non-empty input", async (t) => { return await util.withTmpDir(async (tmpDir) => { const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function () { + async resolveQueries() { return { byLanguage: { - 'javascript': { - '/foo/a.ql': {}, - '/bar/b.ql': {}, + javascript: { + "/foo/a.ql": {}, + "/bar/b.ql": {}, }, }, noDeclaredLanguage: {}, @@ -157,27 +159,27 @@ ava_1.default("load non-empty input", async (t) => { - b paths: - c/d`; - fs.mkdirSync(path.join(tmpDir, 'foo')); + fs.mkdirSync(path.join(tmpDir, "foo")); // And the config we expect it to parse to const expectedConfig = { languages: [languages_1.Language.javascript], - queries: { 'javascript': ['/foo/a.ql', '/bar/b.ql'] }, - pathsIgnore: ['a', 'b'], - paths: ['c/d'], + queries: { javascript: ["/foo/a.ql", "/bar/b.ql"] }, + pathsIgnore: ["a", "b"], + paths: ["c/d"], originalUserInput: { - name: 'my config', - 'disable-default-queries': true, - queries: [{ uses: './foo' }], - 'paths-ignore': ['a', 'b'], - paths: ['c/d'], + name: "my config", + "disable-default-queries": true, + queries: [{ uses: "./foo" }], + "paths-ignore": ["a", "b"], + paths: ["c/d"], }, tempDir: tmpDir, toolCacheDir: tmpDir, codeQLCmd: codeQL.getPath(), }; - const languages = 'javascript'; + const languages = "javascript"; const configFilePath = createConfigFile(inputFileContents, tmpDir); - const actualConfig = await configUtils.initConfig(languages, undefined, configFilePath, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); + const actualConfig = await configUtils.initConfig(languages, undefined, configFilePath, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); // Should exactly equal the object we constructed earlier t.deepEqual(actualConfig, expectedConfig); }); @@ -191,12 +193,12 @@ ava_1.default("Default queries are used", async (t) => { // with the correct arguments. const resolveQueriesArgs = []; const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function (queries, extraSearchPath) { + async resolveQueries(queries, extraSearchPath) { resolveQueriesArgs.push({ queries, extraSearchPath }); return { byLanguage: { - 'javascript': { - 'foo.ql': {}, + javascript: { + "foo.ql": {}, }, }, noDeclaredLanguage: {}, @@ -210,13 +212,15 @@ ava_1.default("Default queries are used", async (t) => { const inputFileContents = ` paths: - foo`; - fs.mkdirSync(path.join(tmpDir, 'foo')); - const languages = 'javascript'; + fs.mkdirSync(path.join(tmpDir, "foo")); + const languages = "javascript"; const configFilePath = createConfigFile(inputFileContents, tmpDir); - await configUtils.initConfig(languages, undefined, configFilePath, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); + await configUtils.initConfig(languages, undefined, configFilePath, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); // Check resolve queries was called correctly t.deepEqual(resolveQueriesArgs.length, 1); - t.deepEqual(resolveQueriesArgs[0].queries, ['javascript-code-scanning.qls']); + t.deepEqual(resolveQueriesArgs[0].queries, [ + "javascript-code-scanning.qls", + ]); t.deepEqual(resolveQueriesArgs[0].extraSearchPath, undefined); }); }); @@ -227,10 +231,12 @@ ava_1.default("Default queries are used", async (t) => { */ function queriesToResolvedQueryForm(queries) { const dummyResolvedQueries = {}; - queries.forEach(q => { dummyResolvedQueries[q] = {}; }); + queries.forEach((q) => { + dummyResolvedQueries[q] = {}; + }); return { byLanguage: { - 'javascript': dummyResolvedQueries, + javascript: dummyResolvedQueries, }, noDeclaredLanguage: {}, multipleDeclaredLanguages: {}, @@ -243,16 +249,16 @@ ava_1.default("Queries can be specified in config file", async (t) => { queries: - uses: ./foo`; const configFilePath = createConfigFile(inputFileContents, tmpDir); - fs.mkdirSync(path.join(tmpDir, 'foo')); + fs.mkdirSync(path.join(tmpDir, "foo")); const resolveQueriesArgs = []; const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function (queries, extraSearchPath) { + async resolveQueries(queries, extraSearchPath) { resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; - const config = await configUtils.initConfig(languages, undefined, configFilePath, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); + const languages = "javascript"; + const config = await configUtils.initConfig(languages, undefined, configFilePath, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); // Check resolveQueries was called correctly // It'll be called once for the default queries // and once for `./foo` from the config file. @@ -260,9 +266,9 @@ ava_1.default("Queries can be specified in config file", async (t) => { t.deepEqual(resolveQueriesArgs[1].queries.length, 1); t.regex(resolveQueriesArgs[1].queries[0], /.*\/foo$/); // Now check that the end result contains the default queries and the query from config - t.deepEqual(config.queries['javascript'].length, 2); - t.regex(config.queries['javascript'][0], /javascript-code-scanning.qls$/); - t.regex(config.queries['javascript'][1], /.*\/foo$/); + t.deepEqual(config.queries["javascript"].length, 2); + t.regex(config.queries["javascript"][0], /javascript-code-scanning.qls$/); + t.regex(config.queries["javascript"][1], /.*\/foo$/); }); }); ava_1.default("Queries from config file can be overridden in workflow file", async (t) => { @@ -273,18 +279,18 @@ ava_1.default("Queries from config file can be overridden in workflow file", asy - uses: ./foo`; const configFilePath = createConfigFile(inputFileContents, tmpDir); // This config item should take precedence over the config file but shouldn't affect the default queries. - const queries = './override'; - fs.mkdirSync(path.join(tmpDir, 'foo')); - fs.mkdirSync(path.join(tmpDir, 'override')); + const queries = "./override"; + fs.mkdirSync(path.join(tmpDir, "foo")); + fs.mkdirSync(path.join(tmpDir, "override")); const resolveQueriesArgs = []; const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function (queries, extraSearchPath) { + async resolveQueries(queries, extraSearchPath) { resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; - const config = await configUtils.initConfig(languages, queries, configFilePath, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); + const languages = "javascript"; + const config = await configUtils.initConfig(languages, queries, configFilePath, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); // Check resolveQueries was called correctly // It'll be called once for the default queries and once for `./override`, // but won't be called for './foo' from the config file. @@ -292,30 +298,30 @@ ava_1.default("Queries from config file can be overridden in workflow file", asy t.deepEqual(resolveQueriesArgs[1].queries.length, 1); t.regex(resolveQueriesArgs[1].queries[0], /.*\/override$/); // Now check that the end result contains only the default queries and the override query - t.deepEqual(config.queries['javascript'].length, 2); - t.regex(config.queries['javascript'][0], /javascript-code-scanning.qls$/); - t.regex(config.queries['javascript'][1], /.*\/override$/); + t.deepEqual(config.queries["javascript"].length, 2); + t.regex(config.queries["javascript"][0], /javascript-code-scanning.qls$/); + t.regex(config.queries["javascript"][1], /.*\/override$/); }); }); ava_1.default("Queries in workflow file can be used in tandem with the 'disable default queries' option", async (t) => { return await util.withTmpDir(async (tmpDir) => { - process.env['RUNNER_TEMP'] = tmpDir; - process.env['GITHUB_WORKSPACE'] = tmpDir; + process.env["RUNNER_TEMP"] = tmpDir; + process.env["GITHUB_WORKSPACE"] = tmpDir; const inputFileContents = ` name: my config disable-default-queries: true`; const configFilePath = createConfigFile(inputFileContents, tmpDir); - const queries = './workflow-query'; - fs.mkdirSync(path.join(tmpDir, 'workflow-query')); + const queries = "./workflow-query"; + fs.mkdirSync(path.join(tmpDir, "workflow-query")); const resolveQueriesArgs = []; const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function (queries, extraSearchPath) { + async resolveQueries(queries, extraSearchPath) { resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; - const config = await configUtils.initConfig(languages, queries, configFilePath, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); + const languages = "javascript"; + const config = await configUtils.initConfig(languages, queries, configFilePath, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); // Check resolveQueries was called correctly // It'll be called once for `./workflow-query`, // but won't be called for the default one since that was disabled @@ -323,24 +329,24 @@ ava_1.default("Queries in workflow file can be used in tandem with the 'disable t.deepEqual(resolveQueriesArgs[0].queries.length, 1); t.regex(resolveQueriesArgs[0].queries[0], /.*\/workflow-query$/); // Now check that the end result contains only the workflow query, and not the default one - t.deepEqual(config.queries['javascript'].length, 1); - t.regex(config.queries['javascript'][0], /.*\/workflow-query$/); + t.deepEqual(config.queries["javascript"].length, 1); + t.regex(config.queries["javascript"][0], /.*\/workflow-query$/); }); }); ava_1.default("Multiple queries can be specified in workflow file, no config file required", async (t) => { return await util.withTmpDir(async (tmpDir) => { - fs.mkdirSync(path.join(tmpDir, 'override1')); - fs.mkdirSync(path.join(tmpDir, 'override2')); - const queries = './override1,./override2'; + fs.mkdirSync(path.join(tmpDir, "override1")); + fs.mkdirSync(path.join(tmpDir, "override2")); + const queries = "./override1,./override2"; const resolveQueriesArgs = []; const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function (queries, extraSearchPath) { + async resolveQueries(queries, extraSearchPath) { resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; - const config = await configUtils.initConfig(languages, queries, undefined, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); + const languages = "javascript"; + const config = await configUtils.initConfig(languages, queries, undefined, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); // Check resolveQueries was called correctly: // It'll be called once for the default queries, // and then once for each of the two queries from the workflow @@ -350,35 +356,35 @@ ava_1.default("Multiple queries can be specified in workflow file, no config fil t.regex(resolveQueriesArgs[1].queries[0], /.*\/override1$/); t.regex(resolveQueriesArgs[2].queries[0], /.*\/override2$/); // Now check that the end result contains both the queries from the workflow, as well as the defaults - t.deepEqual(config.queries['javascript'].length, 3); - t.regex(config.queries['javascript'][0], /javascript-code-scanning.qls$/); - t.regex(config.queries['javascript'][1], /.*\/override1$/); - t.regex(config.queries['javascript'][2], /.*\/override2$/); + t.deepEqual(config.queries["javascript"].length, 3); + t.regex(config.queries["javascript"][0], /javascript-code-scanning.qls$/); + t.regex(config.queries["javascript"][1], /.*\/override1$/); + t.regex(config.queries["javascript"][2], /.*\/override2$/); }); }); ava_1.default("Queries in workflow file can be added to the set of queries without overriding config file", async (t) => { return await util.withTmpDir(async (tmpDir) => { - process.env['RUNNER_TEMP'] = tmpDir; - process.env['GITHUB_WORKSPACE'] = tmpDir; + process.env["RUNNER_TEMP"] = tmpDir; + process.env["GITHUB_WORKSPACE"] = tmpDir; const inputFileContents = ` name: my config queries: - uses: ./foo`; const configFilePath = createConfigFile(inputFileContents, tmpDir); // These queries shouldn't override anything, because the value is prefixed with "+" - const queries = '+./additional1,./additional2'; - fs.mkdirSync(path.join(tmpDir, 'foo')); - fs.mkdirSync(path.join(tmpDir, 'additional1')); - fs.mkdirSync(path.join(tmpDir, 'additional2')); + const queries = "+./additional1,./additional2"; + fs.mkdirSync(path.join(tmpDir, "foo")); + fs.mkdirSync(path.join(tmpDir, "additional1")); + fs.mkdirSync(path.join(tmpDir, "additional2")); const resolveQueriesArgs = []; const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function (queries, extraSearchPath) { + async resolveQueries(queries, extraSearchPath) { resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; - const config = await configUtils.initConfig(languages, queries, configFilePath, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); + const languages = "javascript"; + const config = await configUtils.initConfig(languages, queries, configFilePath, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); // Check resolveQueries was called correctly // It'll be called once for the default queries, // once for each of additional1 and additional2, @@ -391,24 +397,24 @@ ava_1.default("Queries in workflow file can be added to the set of queries witho t.deepEqual(resolveQueriesArgs[3].queries.length, 1); t.regex(resolveQueriesArgs[3].queries[0], /.*\/foo$/); // Now check that the end result contains all the queries - t.deepEqual(config.queries['javascript'].length, 4); - t.regex(config.queries['javascript'][0], /javascript-code-scanning.qls$/); - t.regex(config.queries['javascript'][1], /.*\/additional1$/); - t.regex(config.queries['javascript'][2], /.*\/additional2$/); - t.regex(config.queries['javascript'][3], /.*\/foo$/); + t.deepEqual(config.queries["javascript"].length, 4); + t.regex(config.queries["javascript"][0], /javascript-code-scanning.qls$/); + t.regex(config.queries["javascript"][1], /.*\/additional1$/); + t.regex(config.queries["javascript"][2], /.*\/additional2$/); + t.regex(config.queries["javascript"][3], /.*\/foo$/); }); }); ava_1.default("Invalid queries in workflow file handled correctly", async (t) => { return await util.withTmpDir(async (tmpDir) => { - const queries = 'foo/bar@v1@v3'; - const languages = 'javascript'; + const queries = "foo/bar@v1@v3"; + const languages = "javascript"; // This function just needs to be type-correct; it doesn't need to do anything, // since we're deliberately passing in invalid data const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function (_queries, _extraSearchPath) { + async resolveQueries(_queries, _extraSearchPath) { return { byLanguage: { - 'javascript': {}, + javascript: {}, }, noDeclaredLanguage: {}, multipleDeclaredLanguages: {}, @@ -416,8 +422,8 @@ ava_1.default("Invalid queries in workflow file handled correctly", async (t) => }, }); try { - await configUtils.initConfig(languages, queries, undefined, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - t.fail('initConfig did not throw error'); + await configUtils.initConfig(languages, queries, undefined, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + t.fail("initConfig did not throw error"); } catch (err) { t.deepEqual(err, new Error(configUtils.getQueryUsesInvalid(undefined, "foo/bar@v1@v3"))); @@ -427,11 +433,11 @@ ava_1.default("Invalid queries in workflow file handled correctly", async (t) => ava_1.default("API client used when reading remote config", async (t) => { return await util.withTmpDir(async (tmpDir) => { const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function () { + async resolveQueries() { return { byLanguage: { - 'javascript': { - 'foo.ql': {}, + javascript: { + "foo.ql": {}, }, }, noDeclaredLanguage: {}, @@ -456,10 +462,10 @@ ava_1.default("API client used when reading remote config", async (t) => { }; const spyGetContents = mockGetContents(dummyResponse); // Create checkout directory for remote queries repository - fs.mkdirSync(path.join(tmpDir, 'foo/bar/dev'), { recursive: true }); - const configFile = 'octo-org/codeql-config/config.yaml@main'; - const languages = 'javascript'; - await configUtils.initConfig(languages, undefined, configFile, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); + fs.mkdirSync(path.join(tmpDir, "foo/bar/dev"), { recursive: true }); + const configFile = "octo-org/codeql-config/config.yaml@main"; + const languages = "javascript"; + await configUtils.initConfig(languages, undefined, configFile, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); t.assert(spyGetContents.called); }); }); @@ -467,10 +473,10 @@ ava_1.default("Remote config handles the case where a directory is provided", as return await util.withTmpDir(async (tmpDir) => { const dummyResponse = []; // directories are returned as arrays mockGetContents(dummyResponse); - const repoReference = 'octo-org/codeql-config/config.yaml@main'; + const repoReference = "octo-org/codeql-config/config.yaml@main"; try { - await configUtils.initConfig(undefined, undefined, repoReference, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + await configUtils.initConfig(undefined, undefined, repoReference, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + throw new Error("initConfig did not throw error"); } catch (err) { t.deepEqual(err, new Error(configUtils.getConfigFileDirectoryGivenMessage(repoReference))); @@ -483,10 +489,10 @@ ava_1.default("Invalid format of remote config handled correctly", async (t) => // note no "content" property here }; mockGetContents(dummyResponse); - const repoReference = 'octo-org/codeql-config/config.yaml@main'; + const repoReference = "octo-org/codeql-config/config.yaml@main"; try { - await configUtils.initConfig(undefined, undefined, repoReference, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + await configUtils.initConfig(undefined, undefined, repoReference, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + throw new Error("initConfig did not throw error"); } catch (err) { t.deepEqual(err, new Error(configUtils.getConfigFileFormatInvalidMessage(repoReference))); @@ -497,8 +503,8 @@ ava_1.default("No detected languages", async (t) => { return await util.withTmpDir(async (tmpDir) => { mockListLanguages([]); try { - await configUtils.initConfig(undefined, undefined, undefined, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + await configUtils.initConfig(undefined, undefined, undefined, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + throw new Error("initConfig did not throw error"); } catch (err) { t.deepEqual(err, new Error(configUtils.getNoLanguagesError())); @@ -507,21 +513,21 @@ ava_1.default("No detected languages", async (t) => { }); ava_1.default("Unknown languages", async (t) => { return await util.withTmpDir(async (tmpDir) => { - const languages = 'ruby,english'; + const languages = "ruby,english"; try { - await configUtils.initConfig(languages, undefined, undefined, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + await configUtils.initConfig(languages, undefined, undefined, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeql_1.getCachedCodeQL(), tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getUnknownLanguagesError(['ruby', 'english']))); + t.deepEqual(err, new Error(configUtils.getUnknownLanguagesError(["ruby", "english"]))); } }); }); function doInvalidInputTest(testName, inputFileContents, expectedErrorMessageGenerator) { - ava_1.default("load invalid input - " + testName, async (t) => { + ava_1.default(`load invalid input - ${testName}`, async (t) => { return await util.withTmpDir(async (tmpDir) => { const codeQL = codeql_1.setCodeQL({ - resolveQueries: async function () { + async resolveQueries() { return { byLanguage: {}, noDeclaredLanguage: {}, @@ -529,13 +535,13 @@ function doInvalidInputTest(testName, inputFileContents, expectedErrorMessageGen }; }, }); - const languages = 'javascript'; - const configFile = 'input'; + const languages = "javascript"; + const configFile = "input"; const inputFile = path.join(tmpDir, configFile); - fs.writeFileSync(inputFile, inputFileContents, 'utf8'); + fs.writeFileSync(inputFile, inputFileContents, "utf8"); try { - await configUtils.initConfig(languages, undefined, configFile, { owner: 'github', repo: 'example ' }, tmpDir, tmpDir, codeQL, tmpDir, 'token', 'https://github.example.com', logging_1.getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + await configUtils.initConfig(languages, undefined, configFile, { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, "token", "https://github.example.com", logging_1.getRunnerLogger(true)); + throw new Error("initConfig did not throw error"); } catch (err) { t.deepEqual(err, new Error(expectedErrorMessageGenerator(inputFile))); @@ -543,14 +549,14 @@ function doInvalidInputTest(testName, inputFileContents, expectedErrorMessageGen }); }); } -doInvalidInputTest('name invalid type', ` +doInvalidInputTest("name invalid type", ` name: - foo: bar`, configUtils.getNameInvalid); -doInvalidInputTest('disable-default-queries invalid type', `disable-default-queries: 42`, configUtils.getDisableDefaultQueriesInvalid); -doInvalidInputTest('queries invalid type', `queries: foo`, configUtils.getQueriesInvalid); -doInvalidInputTest('paths-ignore invalid type', `paths-ignore: bar`, configUtils.getPathsIgnoreInvalid); -doInvalidInputTest('paths invalid type', `paths: 17`, configUtils.getPathsInvalid); -doInvalidInputTest('queries uses invalid type', ` +doInvalidInputTest("disable-default-queries invalid type", `disable-default-queries: 42`, configUtils.getDisableDefaultQueriesInvalid); +doInvalidInputTest("queries invalid type", `queries: foo`, configUtils.getQueriesInvalid); +doInvalidInputTest("paths-ignore invalid type", `paths-ignore: bar`, configUtils.getPathsIgnoreInvalid); +doInvalidInputTest("paths invalid type", `paths: 17`, configUtils.getPathsInvalid); +doInvalidInputTest("queries uses invalid type", ` queries: - uses: - hello: world`, configUtils.getQueryUsesInvalid); @@ -561,38 +567,33 @@ function doInvalidQueryUsesTest(input, expectedErrorMessageGenerator) { name: my config queries: - name: foo - uses: ` + input; - doInvalidInputTest("queries uses \"" + input + "\"", inputFileContents, expectedErrorMessageGenerator); + uses: ${input}`; + doInvalidInputTest(`queries uses "${input}"`, inputFileContents, expectedErrorMessageGenerator); } // Various "uses" fields, and the errors they should produce -doInvalidQueryUsesTest("''", c => configUtils.getQueryUsesInvalid(c, undefined)); -doInvalidQueryUsesTest("foo/bar", c => configUtils.getQueryUsesInvalid(c, "foo/bar")); -doInvalidQueryUsesTest("foo/bar@v1@v2", c => configUtils.getQueryUsesInvalid(c, "foo/bar@v1@v2")); -doInvalidQueryUsesTest("foo@master", c => configUtils.getQueryUsesInvalid(c, "foo@master")); -doInvalidQueryUsesTest("https://github.com/foo/bar@master", c => configUtils.getQueryUsesInvalid(c, "https://github.com/foo/bar@master")); -doInvalidQueryUsesTest("./foo", c => configUtils.getLocalPathDoesNotExist(c, "foo")); -doInvalidQueryUsesTest("./..", c => configUtils.getLocalPathOutsideOfRepository(c, "..")); +doInvalidQueryUsesTest("''", (c) => configUtils.getQueryUsesInvalid(c, undefined)); +doInvalidQueryUsesTest("foo/bar", (c) => configUtils.getQueryUsesInvalid(c, "foo/bar")); +doInvalidQueryUsesTest("foo/bar@v1@v2", (c) => configUtils.getQueryUsesInvalid(c, "foo/bar@v1@v2")); +doInvalidQueryUsesTest("foo@master", (c) => configUtils.getQueryUsesInvalid(c, "foo@master")); +doInvalidQueryUsesTest("https://github.com/foo/bar@master", (c) => configUtils.getQueryUsesInvalid(c, "https://github.com/foo/bar@master")); +doInvalidQueryUsesTest("./foo", (c) => configUtils.getLocalPathDoesNotExist(c, "foo")); +doInvalidQueryUsesTest("./..", (c) => configUtils.getLocalPathOutsideOfRepository(c, "..")); const validPaths = [ - 'foo', - 'foo/', - 'foo/**', - 'foo/**/', - 'foo/**/**', - 'foo/**/bar/**/baz', - '**/', - '**/foo', - '/foo', -]; -const invalidPaths = [ - 'a/***/b', - 'a/**b', - 'a/b**', - '**', + "foo", + "foo/", + "foo/**", + "foo/**/", + "foo/**/**", + "foo/**/bar/**/baz", + "**/", + "**/foo", + "/foo", ]; -ava_1.default('path validations', t => { +const invalidPaths = ["a/***/b", "a/**b", "a/b**", "**"]; +ava_1.default("path validations", (t) => { // Dummy values to pass to validateAndSanitisePath - const propertyName = 'paths'; - const configFile = './.github/codeql/config.yml'; + const propertyName = "paths"; + const configFile = "./.github/codeql/config.yml"; for (const path of validPaths) { t.truthy(configUtils.validateAndSanitisePath(path, propertyName, configFile, logging_1.getRunnerLogger(true))); } @@ -600,13 +601,13 @@ ava_1.default('path validations', t => { t.throws(() => configUtils.validateAndSanitisePath(path, propertyName, configFile, logging_1.getRunnerLogger(true))); } }); -ava_1.default('path sanitisation', t => { +ava_1.default("path sanitisation", (t) => { // Dummy values to pass to validateAndSanitisePath - const propertyName = 'paths'; - const configFile = './.github/codeql/config.yml'; + const propertyName = "paths"; + const configFile = "./.github/codeql/config.yml"; // Valid paths are not modified - t.deepEqual(configUtils.validateAndSanitisePath('foo/bar', propertyName, configFile, logging_1.getRunnerLogger(true)), 'foo/bar'); + t.deepEqual(configUtils.validateAndSanitisePath("foo/bar", propertyName, configFile, logging_1.getRunnerLogger(true)), "foo/bar"); // Trailing stars are stripped - t.deepEqual(configUtils.validateAndSanitisePath('foo/**', propertyName, configFile, logging_1.getRunnerLogger(true)), 'foo/'); + t.deepEqual(configUtils.validateAndSanitisePath("foo/**", propertyName, configFile, logging_1.getRunnerLogger(true)), "foo/"); }); //# sourceMappingURL=config-utils.test.js.map \ No newline at end of file diff --git a/lib/config-utils.test.js.map b/lib/config-utils.test.js.map index ef56568d6..122386a7a 100644 --- a/lib/config-utils.test.js.map +++ b/lib/config-utils.test.js.map @@ -1 +1 @@ -{"version":3,"file":"config-utils.test.js","sourceRoot":"","sources":["../src/config-utils.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"config-utils.test.js","sourceRoot":"","sources":["../src/config-utils.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/external-queries.js b/lib/external-queries.js index 6d79504ab..f8b46ea6a 100644 --- a/lib/external-queries.js +++ b/lib/external-queries.js @@ -14,19 +14,24 @@ const path = __importStar(require("path")); * Check out repository at the given ref, and return the directory of the checkout. */ async function checkoutExternalRepository(repository, ref, githubUrl, tempDir, logger) { - logger.info('Checking out ' + repository); + logger.info(`Checking out ${repository}`); const checkoutLocation = path.join(tempDir, repository, ref); if (!checkoutLocation.startsWith(tempDir)) { // this still permits locations that mess with sibling repositories in `tempDir`, but that is acceptable throw new Error(`'${repository}@${ref}' is not a valid repository and reference.`); } if (!fs.existsSync(checkoutLocation)) { - const repoURL = githubUrl + '/' + repository; - await new toolrunnner.ToolRunner('git', ['clone', repoURL, checkoutLocation]).exec(); - await new toolrunnner.ToolRunner('git', [ - '--work-tree=' + checkoutLocation, - '--git-dir=' + checkoutLocation + '/.git', - 'checkout', ref, + const repoURL = `${githubUrl}/${repository}`; + await new toolrunnner.ToolRunner("git", [ + "clone", + repoURL, + checkoutLocation, + ]).exec(); + await new toolrunnner.ToolRunner("git", [ + `--work-tree=${checkoutLocation}`, + `--git-dir=${checkoutLocation}/.git`, + "checkout", + ref, ]).exec(); } return checkoutLocation; diff --git a/lib/external-queries.js.map b/lib/external-queries.js.map index 103003b45..634cf9efb 100644 --- a/lib/external-queries.js.map +++ b/lib/external-queries.js.map @@ -1 +1 @@ -{"version":3,"file":"external-queries.js","sourceRoot":"","sources":["../src/external-queries.ts"],"names":[],"mappings":";;;;;;;;;AAAA,0EAA4D;AAC5D,uCAAyB;AACzB,2CAA6B;AAI7B;;GAEG;AACI,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,OAAe,EACf,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,CAAC;IAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAE7D,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACzC,wGAAwG;QACxG,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,IAAI,GAAG,4CAA4C,CAAC,CAAC;KACpF;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QACpC,MAAM,OAAO,GAAG,SAAS,GAAG,GAAG,GAAG,UAAU,CAAC;QAC7C,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrF,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE;YACtC,cAAc,GAAG,gBAAgB;YACjC,YAAY,GAAG,gBAAgB,GAAG,OAAO;YACzC,UAAU,EAAE,GAAG;SAChB,CAAC,CAAC,IAAI,EAAE,CAAC;KACX;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AA3BD,gEA2BC"} \ No newline at end of file +{"version":3,"file":"external-queries.js","sourceRoot":"","sources":["../src/external-queries.ts"],"names":[],"mappings":";;;;;;;;;AAAA,0EAA4D;AAC5D,uCAAyB;AACzB,2CAA6B;AAI7B;;GAEG;AACI,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,GAAW,EACX,SAAiB,EACjB,OAAe,EACf,MAAc;IAEd,MAAM,CAAC,IAAI,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;IAE1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAE7D,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QACzC,wGAAwG;QACxG,MAAM,IAAI,KAAK,CACb,IAAI,UAAU,IAAI,GAAG,4CAA4C,CAClE,CAAC;KACH;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QACpC,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC;QAC7C,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE;YACtC,OAAO;YACP,OAAO;YACP,gBAAgB;SACjB,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE;YACtC,eAAe,gBAAgB,EAAE;YACjC,aAAa,gBAAgB,OAAO;YACpC,UAAU;YACV,GAAG;SACJ,CAAC,CAAC,IAAI,EAAE,CAAC;KACX;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAlCD,gEAkCC"} \ No newline at end of file diff --git a/lib/external-queries.test.js b/lib/external-queries.test.js index acc42403a..744055d5d 100644 --- a/lib/external-queries.test.js +++ b/lib/external-queries.test.js @@ -26,62 +26,70 @@ ava_1.default("checkoutExternalQueries", async (t) => { // - the first commit contains files 'a' and 'b' // - the second commit contains only 'a' // Place the repo in a subdir because we're going to checkout a copy in tmpDir - const testRepoBaseDir = path.join(tmpDir, 'test-repo-dir'); - const repoName = 'some/repo'; + const testRepoBaseDir = path.join(tmpDir, "test-repo-dir"); + const repoName = "some/repo"; const repoPath = path.join(testRepoBaseDir, repoName); - const repoGitDir = path.join(repoPath, '.git'); + const repoGitDir = path.join(repoPath, ".git"); // Run the given git command, and return the output. // Passes --git-dir and --work-tree. // Any stderr output is suppressed until the command fails. const runGit = async function (command) { - let stdout = ''; - let stderr = ''; - command = [`--git-dir=${repoGitDir}`, `--work-tree=${repoPath}`, ...command]; - console.log('Running: git ' + command.join(' ')); + let stdout = ""; + let stderr = ""; + command = [ + `--git-dir=${repoGitDir}`, + `--work-tree=${repoPath}`, + ...command, + ]; + console.log(`Running: git ${command.join(" ")}`); try { - await new toolrunnner.ToolRunner('git', command, { + await new toolrunnner.ToolRunner("git", command, { silent: true, listeners: { - stdout: (data) => { stdout += data.toString(); }, - stderr: (data) => { stderr += data.toString(); }, - } + stdout: (data) => { + stdout += data.toString(); + }, + stderr: (data) => { + stderr += data.toString(); + }, + }, }).exec(); } catch (e) { - console.log('Command failed: git ' + command.join(' ')); + console.log(`Command failed: git ${command.join(" ")}`); process.stderr.write(stderr); throw e; } return stdout.trim(); }; fs.mkdirSync(repoPath, { recursive: true }); - await runGit(['init', repoPath]); - await runGit(['config', 'user.email', 'test@github.com']); - await runGit(['config', 'user.name', 'Test Test']); - fs.writeFileSync(path.join(repoPath, 'a'), 'a content'); - await runGit(['add', 'a']); - await runGit(['commit', '-m', 'commit1']); - fs.writeFileSync(path.join(repoPath, 'b'), 'b content'); - await runGit(['add', 'b']); - await runGit(['commit', '-m', 'commit1']); - const commit1Sha = await runGit(['rev-parse', 'HEAD']); - fs.unlinkSync(path.join(repoPath, 'b')); - await runGit(['add', 'b']); - await runGit(['commit', '-m', 'commit2']); - const commit2Sha = await runGit(['rev-parse', 'HEAD']); + await runGit(["init", repoPath]); + await runGit(["config", "user.email", "test@github.com"]); + await runGit(["config", "user.name", "Test Test"]); + fs.writeFileSync(path.join(repoPath, "a"), "a content"); + await runGit(["add", "a"]); + await runGit(["commit", "-m", "commit1"]); + fs.writeFileSync(path.join(repoPath, "b"), "b content"); + await runGit(["add", "b"]); + await runGit(["commit", "-m", "commit1"]); + const commit1Sha = await runGit(["rev-parse", "HEAD"]); + fs.unlinkSync(path.join(repoPath, "b")); + await runGit(["add", "b"]); + await runGit(["commit", "-m", "commit2"]); + const commit2Sha = await runGit(["rev-parse", "HEAD"]); // Checkout the first commit, which should contain 'a' and 'b' t.false(fs.existsSync(path.join(tmpDir, repoName))); await externalQueries.checkoutExternalRepository(repoName, commit1Sha, `file://${testRepoBaseDir}`, tmpDir, logging_1.getRunnerLogger(true)); t.true(fs.existsSync(path.join(tmpDir, repoName))); t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, 'a'))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, 'b'))); + t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, "a"))); + t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, "b"))); // Checkout the second commit as well, which should only contain 'a' t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha))); await externalQueries.checkoutExternalRepository(repoName, commit2Sha, `file://${testRepoBaseDir}`, tmpDir, logging_1.getRunnerLogger(true)); t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, 'a'))); - t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, 'b'))); + t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, "a"))); + t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, "b"))); }); }); //# sourceMappingURL=external-queries.test.js.map \ No newline at end of file diff --git a/lib/external-queries.test.js.map b/lib/external-queries.test.js.map index 1f21efe57..1b0c9a3fc 100644 --- a/lib/external-queries.test.js.map +++ b/lib/external-queries.test.js.map @@ -1 +1 @@ -{"version":3,"file":"external-queries.test.js","sourceRoot":"","sources":["../src/external-queries.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"external-queries.test.js","sourceRoot":"","sources":["../src/external-queries.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0EAA4D;AAC5D,8CAAuB;AACvB,uCAAyB;AACzB,2CAA6B;AAE7B,oEAAsD;AACtD,uCAA4C;AAC5C,mDAA6C;AAC7C,6CAA+B;AAE/B,0BAAU,CAAC,aAAI,CAAC,CAAC;AAEjB,aAAI,CAAC,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1C,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACrC,kDAAkD;QAClD,mFAAmF;QACnF,gDAAgD;QAChD,wCAAwC;QACxC,8EAA8E;QAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE/C,oDAAoD;QACpD,oCAAoC;QACpC,2DAA2D;QAC3D,MAAM,MAAM,GAAG,KAAK,WAAW,OAAiB;YAC9C,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,OAAO,GAAG;gBACR,aAAa,UAAU,EAAE;gBACzB,eAAe,QAAQ,EAAE;gBACzB,GAAG,OAAO;aACX,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI;gBACF,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE;oBAC/C,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE;wBACT,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;4BACf,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC5B,CAAC;wBACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;4BACf,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;wBAC5B,CAAC;qBACF;iBACF,CAAC,CAAC,IAAI,EAAE,CAAC;aACX;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM,CAAC,CAAC;aACT;YACD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC;QAEF,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACjC,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAEnD,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAE1C,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC;QACxD,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAEvD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAEvD,8DAA8D;QAC9D,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,eAAe,CAAC,0BAA0B,CAC9C,QAAQ,EACR,UAAU,EACV,UAAU,eAAe,EAAE,EAC3B,MAAM,EACN,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;QACF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAEpE,oEAAoE;QACpE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,eAAe,CAAC,0BAA0B,CAC9C,QAAQ,EACR,UAAU,EACV,UAAU,eAAe,EAAE,EAC3B,MAAM,EACN,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;QACF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/lib/fingerprints.js b/lib/fingerprints.js index f2545c40c..deab00d6c 100644 --- a/lib/fingerprints.js +++ b/lib/fingerprints.js @@ -12,10 +12,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const fs = __importStar(require("fs")); const long_1 = __importDefault(require("long")); -const tab = '\t'.charCodeAt(0); -const space = ' '.charCodeAt(0); -const lf = '\n'.charCodeAt(0); -const cr = '\r'.charCodeAt(0); +const tab = "\t".charCodeAt(0); +const space = " ".charCodeAt(0); +const lf = "\n".charCodeAt(0); +const cr = "\r".charCodeAt(0); const BLOCK_SIZE = 100; const MOD = long_1.default.fromInt(37); // L // Compute the starting point for the hash mod @@ -47,7 +47,7 @@ function hash(callback, input) { const lineNumbers = Array(BLOCK_SIZE).fill(-1); // The current hash value, updated as we read each character let hash = long_1.default.ZERO; - let firstMod = computeFirstMod(); + const firstMod = computeFirstMod(); // The current index in the window, will wrap around to zero when we reach BLOCK_SIZE let index = 0; // The line number of the character we are currently processing from the input @@ -61,12 +61,12 @@ function hash(callback, input) { const hashCounts = {}; // Output the current hash and line number to the callback function const outputHash = function () { - let hashValue = hash.toUnsigned().toString(16); + const hashValue = hash.toUnsigned().toString(16); if (!hashCounts[hashValue]) { hashCounts[hashValue] = 0; } hashCounts[hashValue]++; - callback(lineNumbers[index], hashValue + ":" + hashCounts[hashValue]); + callback(lineNumbers[index], `${hashValue}:${hashCounts[hashValue]}`); lineNumbers[index] = -1; }; // Update the current hash value and increment the index in the window @@ -145,10 +145,7 @@ function locationUpdateCallback(result, location, logger) { result.partialFingerprints.primaryLocationLineHash = hash; } else if (existingFingerprint !== hash) { - logger.warning('Calculated fingerprint of ' + hash + - ' for file ' + location.physicalLocation.artifactLocation.uri + - ' line ' + lineNumber + - ', but found existing inconsistent fingerprint value ' + existingFingerprint); + logger.warning(`Calculated fingerprint of ${hash} for file ${location.physicalLocation.artifactLocation.uri} line ${lineNumber}, but found existing inconsistent fingerprint value ${existingFingerprint}`); } }; } @@ -159,40 +156,40 @@ function locationUpdateCallback(result, location, logger) { function resolveUriToFile(location, artifacts, checkoutPath, logger) { // This may be referencing an artifact if (!location.uri && location.index !== undefined) { - if (typeof location.index !== 'number' || + if (typeof location.index !== "number" || location.index < 0 || location.index >= artifacts.length || - typeof artifacts[location.index].location !== 'object') { + typeof artifacts[location.index].location !== "object") { logger.debug(`Ignoring location as URI "${location.index}" is invalid`); return undefined; } location = artifacts[location.index].location; } // Get the URI and decode - if (typeof location.uri !== 'string') { + if (typeof location.uri !== "string") { logger.debug(`Ignoring location as index "${location.uri}" is invalid`); return undefined; } let uri = decodeURIComponent(location.uri); // Remove a file scheme, and abort if the scheme is anything else - const fileUriPrefix = 'file://'; + const fileUriPrefix = "file://"; if (uri.startsWith(fileUriPrefix)) { uri = uri.substring(fileUriPrefix.length); } - if (uri.indexOf('://') !== -1) { + if (uri.indexOf("://") !== -1) { logger.debug(`Ignoring location URI "${uri}" as the scheme is not recognised`); return undefined; } // Discard any absolute paths that aren't in the src root - const srcRootPrefix = checkoutPath + '/'; - if (uri.startsWith('/') && !uri.startsWith(srcRootPrefix)) { + const srcRootPrefix = `${checkoutPath}/`; + if (uri.startsWith("/") && !uri.startsWith(srcRootPrefix)) { logger.debug(`Ignoring location URI "${uri}" as it is outside of the src root`); return undefined; } // Just assume a relative path is relative to the src root. // This is not necessarily true but should be a good approximation // and here we likely want to err on the side of handling more cases. - if (!uri.startsWith('/')) { + if (!uri.startsWith("/")) { uri = srcRootPrefix + uri; } // Check the file exists @@ -207,13 +204,13 @@ exports.resolveUriToFile = resolveUriToFile; // and return an updated sarif file contents. function addFingerprints(sarifContents, checkoutPath, logger) { var _a, _b; - let sarif = JSON.parse(sarifContents); + const sarif = JSON.parse(sarifContents); // Gather together results for the same file and construct // callbacks to accept hashes for that file and update the location const callbacksByFile = {}; for (const run of sarif.runs || []) { // We may need the list of artifacts to resolve against - let artifacts = run.artifacts || []; + const artifacts = run.artifacts || []; for (const result of run.results || []) { // Check the primary location is defined correctly and is in the src root const primaryLocation = (result.locations || [])[0]; @@ -235,7 +232,7 @@ function addFingerprints(sarifContents, checkoutPath, logger) { Object.entries(callbacksByFile).forEach(([filepath, callbacks]) => { // A callback that forwards the hash to all other callbacks for that file const teeCallback = function (lineNumber, hash) { - Object.values(callbacks).forEach(c => c(lineNumber, hash)); + Object.values(callbacks).forEach((c) => c(lineNumber, hash)); }; const fileContents = fs.readFileSync(filepath).toString(); hash(teeCallback, fileContents); diff --git a/lib/fingerprints.js.map b/lib/fingerprints.js.map index 62584c85f..c6ffa8927 100644 --- a/lib/fingerprints.js.map +++ b/lib/fingerprints.js.map @@ -1 +1 @@ -{"version":3,"file":"fingerprints.js","sourceRoot":"","sources":["../src/fingerprints.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fingerprints.js","sourceRoot":"","sources":["../src/fingerprints.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/fingerprints.test.js b/lib/fingerprints.test.js index 51a536e38..73e4b1a5e 100644 --- a/lib/fingerprints.test.js +++ b/lib/fingerprints.test.js @@ -19,7 +19,7 @@ const testing_utils_1 = require("./testing-utils"); testing_utils_1.setupTests(ava_1.default); function testHash(t, input, expectedHashes) { let index = 0; - let callback = function (lineNumber, hash) { + const callback = function (lineNumber, hash) { t.is(lineNumber, index + 1); t.is(hash, expectedHashes[index]); index++; @@ -27,7 +27,7 @@ function testHash(t, input, expectedHashes) { fingerprints.hash(callback, input); t.is(index, input.split(/\r\n|\r|\n/).length); } -ava_1.default('hash', (t) => { +ava_1.default("hash", (t) => { // Try empty file testHash(t, "", ["c129715d7a2bc9a3:1"]); // Try various combinations of newline characters @@ -35,7 +35,7 @@ ava_1.default('hash', (t) => { "271789c17abda88f:1", "54703d4cd895b18:1", "180aee12dab6264:1", - "a23a3dc5e078b07b:1" + "a23a3dc5e078b07b:1", ]); testHash(t, " hello; \t\nworld!!!\n\n\n \t\tGreetings\n End", [ "8b7cf3e952e7aeb2:1", @@ -93,7 +93,7 @@ ava_1.default('hash', (t) => { "a9cf91f7bbf1862b:1", "55ec222b86bcae53:1", "cc97dc7b1d7d8f7b:1", - "c129715d7a2bc9a3:1" + "c129715d7a2bc9a3:1", ]); testHash(t, "x = 2\nx = 1\nprint(x)\nx = 3\nprint(x)\nx = 4\nprint(x)\n", [ "e54938cc54b302f1:1", @@ -103,67 +103,75 @@ ava_1.default('hash', (t) => { "54517377da7028d2:1", "2c644846cb18d53e:1", "f1b89f20de0d133:1", - "c129715d7a2bc9a3:1" + "c129715d7a2bc9a3:1", ]); }); function testResolveUriToFile(uri, index, artifactsURIs) { - const location = { "uri": uri, "index": index }; - const artifacts = artifactsURIs.map(uri => ({ "location": { "uri": uri } })); + const location = { uri, index }; + const artifacts = artifactsURIs.map((uri) => ({ location: { uri } })); return fingerprints.resolveUriToFile(location, artifacts, process.cwd(), logging_1.getRunnerLogger(true)); } -ava_1.default('resolveUriToFile', t => { +ava_1.default("resolveUriToFile", (t) => { // The resolveUriToFile method checks that the file exists and is in the right directory // so we need to give it real files to look at. We will use this file as an example. // For this to work we require the current working directory to be a parent, but this // should generally always be the case so this is fine. const cwd = process.cwd(); const filepath = __filename; - t.true(filepath.startsWith(cwd + '/')); + t.true(filepath.startsWith(`${cwd}/`)); const relativeFilepaht = filepath.substring(cwd.length + 1); // Absolute paths are unmodified t.is(testResolveUriToFile(filepath, undefined, []), filepath); - t.is(testResolveUriToFile('file://' + filepath, undefined, []), filepath); + t.is(testResolveUriToFile(`file://${filepath}`, undefined, []), filepath); // Relative paths are made absolute t.is(testResolveUriToFile(relativeFilepaht, undefined, []), filepath); - t.is(testResolveUriToFile('file://' + relativeFilepaht, undefined, []), filepath); + t.is(testResolveUriToFile(`file://${relativeFilepaht}`, undefined, []), filepath); // Absolute paths outside the src root are discarded - t.is(testResolveUriToFile('/src/foo/bar.js', undefined, []), undefined); - t.is(testResolveUriToFile('file:///src/foo/bar.js', undefined, []), undefined); + t.is(testResolveUriToFile("/src/foo/bar.js", undefined, []), undefined); + t.is(testResolveUriToFile("file:///src/foo/bar.js", undefined, []), undefined); // Other schemes are discarded - t.is(testResolveUriToFile('https://' + filepath, undefined, []), undefined); - t.is(testResolveUriToFile('ftp://' + filepath, undefined, []), undefined); + t.is(testResolveUriToFile(`https://${filepath}`, undefined, []), undefined); + t.is(testResolveUriToFile(`ftp://${filepath}`, undefined, []), undefined); // Invalid URIs are discarded t.is(testResolveUriToFile(1, undefined, []), undefined); t.is(testResolveUriToFile(undefined, undefined, []), undefined); // Non-existant files are discarded - t.is(testResolveUriToFile(filepath + '2', undefined, []), undefined); + t.is(testResolveUriToFile(`${filepath}2`, undefined, []), undefined); // Index is resolved t.is(testResolveUriToFile(undefined, 0, [filepath]), filepath); - t.is(testResolveUriToFile(undefined, 1, ['foo', filepath]), filepath); + t.is(testResolveUriToFile(undefined, 1, ["foo", filepath]), filepath); // Invalid indexes are discarded t.is(testResolveUriToFile(undefined, 1, [filepath]), undefined); - t.is(testResolveUriToFile(undefined, '0', [filepath]), undefined); + t.is(testResolveUriToFile(undefined, "0", [filepath]), undefined); }); -ava_1.default('addFingerprints', t => { +ava_1.default("addFingerprints", (t) => { // Run an end-to-end test on a test file - let input = fs.readFileSync(__dirname + '/../src/testdata/fingerprinting.input.sarif').toString(); - let expected = fs.readFileSync(__dirname + '/../src/testdata/fingerprinting.expected.sarif').toString(); + let input = fs + .readFileSync(`${__dirname}/../src/testdata/fingerprinting.input.sarif`) + .toString(); + let expected = fs + .readFileSync(`${__dirname}/../src/testdata/fingerprinting.expected.sarif`) + .toString(); // The test files are stored prettified, but addFingerprints outputs condensed JSON input = JSON.stringify(JSON.parse(input)); expected = JSON.stringify(JSON.parse(expected)); // The URIs in the SARIF files resolve to files in the testdata directory - const checkoutPath = path.normalize(__dirname + '/../src/testdata'); + const checkoutPath = path.normalize(`${__dirname}/../src/testdata`); t.deepEqual(fingerprints.addFingerprints(input, checkoutPath, logging_1.getRunnerLogger(true)), expected); }); -ava_1.default('missingRegions', t => { +ava_1.default("missingRegions", (t) => { // Run an end-to-end test on a test file - let input = fs.readFileSync(__dirname + '/../src/testdata/fingerprinting2.input.sarif').toString(); - let expected = fs.readFileSync(__dirname + '/../src/testdata/fingerprinting2.expected.sarif').toString(); + let input = fs + .readFileSync(`${__dirname}/../src/testdata/fingerprinting2.input.sarif`) + .toString(); + let expected = fs + .readFileSync(`${__dirname}/../src/testdata/fingerprinting2.expected.sarif`) + .toString(); // The test files are stored prettified, but addFingerprints outputs condensed JSON input = JSON.stringify(JSON.parse(input)); expected = JSON.stringify(JSON.parse(expected)); // The URIs in the SARIF files resolve to files in the testdata directory - const checkoutPath = path.normalize(__dirname + '/../src/testdata'); + const checkoutPath = path.normalize(`${__dirname}/../src/testdata`); t.deepEqual(fingerprints.addFingerprints(input, checkoutPath, logging_1.getRunnerLogger(true)), expected); }); //# sourceMappingURL=fingerprints.test.js.map \ No newline at end of file diff --git a/lib/fingerprints.test.js.map b/lib/fingerprints.test.js.map index f0731dfbb..1b2b1c17f 100644 --- a/lib/fingerprints.test.js.map +++ b/lib/fingerprints.test.js.map @@ -1 +1 @@ -{"version":3,"file":"fingerprints.test.js","sourceRoot":"","sources":["../src/fingerprints.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"fingerprints.test.js","sourceRoot":"","sources":["../src/fingerprints.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/init-action.js b/lib/init-action.js index ff1b3206b..cbef3a6b2 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -13,21 +13,25 @@ const logging_1 = require("./logging"); const repository_1 = require("./repository"); const util = __importStar(require("./util")); async function sendSuccessStatusReport(startedAt, config) { - const statusReportBase = await util.createStatusReportBase('init', 'success', startedAt); - const languages = config.languages.join(','); - const workflowLanguages = core.getInput('languages', { required: false }); - const paths = (config.originalUserInput.paths || []).join(','); - const pathsIgnore = (config.originalUserInput['paths-ignore'] || []).join(','); - const disableDefaultQueries = config.originalUserInput['disable-default-queries'] ? languages : ''; - const queries = (config.originalUserInput.queries || []).map(q => q.uses).join(','); + const statusReportBase = await util.createStatusReportBase("init", "success", startedAt); + const languages = config.languages.join(","); + const workflowLanguages = core.getInput("languages", { required: false }); + const paths = (config.originalUserInput.paths || []).join(","); + const pathsIgnore = (config.originalUserInput["paths-ignore"] || []).join(","); + const disableDefaultQueries = config.originalUserInput["disable-default-queries"] + ? languages + : ""; + const queries = (config.originalUserInput.queries || []) + .map((q) => q.uses) + .join(","); const statusReport = { ...statusReportBase, - languages: languages, + languages, workflow_languages: workflowLanguages, - paths: paths, + paths, paths_ignore: pathsIgnore, disable_default_queries: disableDefaultQueries, - queries: queries, + queries, }; await util.sendStatusReport(statusReport); } @@ -38,46 +42,46 @@ async function run() { let codeql; try { util.prepareLocalRunEnvironment(); - if (!await util.sendStatusReport(await util.createStatusReportBase('init', 'starting', startedAt), true)) { + if (!(await util.sendStatusReport(await util.createStatusReportBase("init", "starting", startedAt), true))) { return; } - codeql = await init_1.initCodeQL(core.getInput('tools'), core.getInput('token'), util.getRequiredEnvParam('GITHUB_SERVER_URL'), util.getRequiredEnvParam('RUNNER_TEMP'), util.getRequiredEnvParam('RUNNER_TOOL_CACHE'), 'actions', logger); - config = await init_1.initConfig(core.getInput('languages'), core.getInput('queries'), core.getInput('config-file'), repository_1.parseRepositoryNwo(util.getRequiredEnvParam('GITHUB_REPOSITORY')), util.getRequiredEnvParam('RUNNER_TEMP'), util.getRequiredEnvParam('RUNNER_TOOL_CACHE'), codeql, util.getRequiredEnvParam('GITHUB_WORKSPACE'), core.getInput('token'), util.getRequiredEnvParam('GITHUB_SERVER_URL'), logger); + codeql = await init_1.initCodeQL(core.getInput("tools"), core.getInput("token"), util.getRequiredEnvParam("GITHUB_SERVER_URL"), util.getRequiredEnvParam("RUNNER_TEMP"), util.getRequiredEnvParam("RUNNER_TOOL_CACHE"), "actions", logger); + config = await init_1.initConfig(core.getInput("languages"), core.getInput("queries"), core.getInput("config-file"), repository_1.parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")), util.getRequiredEnvParam("RUNNER_TEMP"), util.getRequiredEnvParam("RUNNER_TOOL_CACHE"), codeql, util.getRequiredEnvParam("GITHUB_WORKSPACE"), core.getInput("token"), util.getRequiredEnvParam("GITHUB_SERVER_URL"), logger); } catch (e) { core.setFailed(e.message); console.log(e); - await util.sendStatusReport(await util.createStatusReportBase('init', 'aborted', startedAt, e.message)); + await util.sendStatusReport(await util.createStatusReportBase("init", "aborted", startedAt, e.message)); return; } try { // Forward Go flags - const goFlags = process.env['GOFLAGS']; + const goFlags = process.env["GOFLAGS"]; if (goFlags) { - core.exportVariable('GOFLAGS', goFlags); + core.exportVariable("GOFLAGS", goFlags); core.warning("Passing the GOFLAGS env parameter to the init action is deprecated. Please move this to the analyze action."); } // Setup CODEQL_RAM flag (todo improve this https://github.com/github/dsp-code-scanning/issues/935) - const codeqlRam = process.env['CODEQL_RAM'] || '6500'; - core.exportVariable('CODEQL_RAM', codeqlRam); + const codeqlRam = process.env["CODEQL_RAM"] || "6500"; + core.exportVariable("CODEQL_RAM", codeqlRam); const tracerConfig = await init_1.runInit(codeql, config); if (tracerConfig !== undefined) { Object.entries(tracerConfig.env).forEach(([key, value]) => core.exportVariable(key, value)); - if (process.platform === 'win32') { - await init_1.injectWindowsTracer('Runner.Worker.exe', undefined, config, codeql, tracerConfig); + if (process.platform === "win32") { + await init_1.injectWindowsTracer("Runner.Worker.exe", undefined, config, codeql, tracerConfig); } } } catch (error) { core.setFailed(error.message); console.log(error); - await util.sendStatusReport(await util.createStatusReportBase('init', 'failure', startedAt, error.message, error.stack)); + await util.sendStatusReport(await util.createStatusReportBase("init", "failure", startedAt, error.message, error.stack)); return; } await sendSuccessStatusReport(startedAt, config); } -run().catch(e => { - core.setFailed("init action failed: " + e); +run().catch((e) => { + core.setFailed(`init action failed: ${e}`); console.log(e); }); //# sourceMappingURL=init-action.js.map \ No newline at end of file diff --git a/lib/init-action.js.map b/lib/init-action.js.map index d9a715298..3a5dd56fb 100644 --- a/lib/init-action.js.map +++ b/lib/init-action.js.map @@ -1 +1 @@ -{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/init.js b/lib/init.js index 3a476381f..bfa6bd9d5 100644 --- a/lib/init.js +++ b/lib/init.js @@ -16,7 +16,7 @@ const configUtils = __importStar(require("./config-utils")); const tracer_config_1 = require("./tracer-config"); const util = __importStar(require("./util")); async function initCodeQL(codeqlURL, githubAuth, githubUrl, tempDir, toolsDir, mode, logger) { - logger.startGroup('Setup CodeQL tools'); + logger.startGroup("Setup CodeQL tools"); const codeql = await codeql_1.setupCodeQL(codeqlURL, githubAuth, githubUrl, tempDir, toolsDir, mode, logger); await codeql.printVersion(); logger.endGroup(); @@ -24,7 +24,7 @@ async function initCodeQL(codeqlURL, githubAuth, githubUrl, tempDir, toolsDir, m } exports.initCodeQL = initCodeQL; async function initConfig(languagesInput, queriesInput, configFile, repository, tempDir, toolCacheDir, codeQL, checkoutPath, githubAuth, githubUrl, logger) { - logger.startGroup('Load language configuration'); + logger.startGroup("Load language configuration"); const config = await configUtils.initConfig(languagesInput, queriesInput, configFile, repository, tempDir, toolCacheDir, codeQL, checkoutPath, githubAuth, githubUrl, logger); analysisPaths.printPathFiltersWarning(config, logger); logger.endGroup(); @@ -35,7 +35,7 @@ async function runInit(codeql, config) { const sourceRoot = path.resolve(); fs.mkdirSync(util.getCodeQLDatabasesDir(config.tempDir), { recursive: true }); // TODO: replace this code once CodeQL supports multi-language tracing - for (let language of config.languages) { + for (const language of config.languages) { // Init language database await codeql.databaseInit(util.getCodeQLDatabasePath(config.tempDir, language), language, sourceRoot); } @@ -110,13 +110,15 @@ async function injectWindowsTracer(processName, processLevel, config, codeql, tr Invoke-Expression "&$tracer --inject=$id"`; } - const injectTracerPath = path.join(config.tempDir, 'inject-tracer.ps1'); + const injectTracerPath = path.join(config.tempDir, "inject-tracer.ps1"); fs.writeFileSync(injectTracerPath, script); - await new toolrunnner.ToolRunner('powershell', [ - '-ExecutionPolicy', 'Bypass', - '-file', injectTracerPath, - path.resolve(path.dirname(codeql.getPath()), 'tools', 'win64', 'tracer.exe'), - ], { env: { 'ODASA_TRACER_CONFIGURATION': tracerConfig.spec } }).exec(); + await new toolrunnner.ToolRunner("powershell", [ + "-ExecutionPolicy", + "Bypass", + "-file", + injectTracerPath, + path.resolve(path.dirname(codeql.getPath()), "tools", "win64", "tracer.exe"), + ], { env: { ODASA_TRACER_CONFIGURATION: tracerConfig.spec } }).exec(); } exports.injectWindowsTracer = injectWindowsTracer; //# sourceMappingURL=init.js.map \ No newline at end of file diff --git a/lib/init.js.map b/lib/init.js.map index 39c99f3aa..de3a10d9e 100644 --- a/lib/init.js.map +++ b/lib/init.js.map @@ -1 +1 @@ -{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/languages.js b/lib/languages.js index 2e839b098..8bdf3cbe1 100644 --- a/lib/languages.js +++ b/lib/languages.js @@ -12,10 +12,10 @@ var Language; })(Language = exports.Language || (exports.Language = {})); // Additional names for languages const LANGUAGE_ALIASES = { - 'c': Language.cpp, - 'c++': Language.cpp, - 'c#': Language.csharp, - 'typescript': Language.javascript, + c: Language.cpp, + "c++": Language.cpp, + "c#": Language.csharp, + typescript: Language.javascript, }; // Translate from user input or GitHub's API names for languages to CodeQL's names for languages function parseLanguage(language) { @@ -33,7 +33,7 @@ function parseLanguage(language) { } exports.parseLanguage = parseLanguage; function isTracedLanguage(language) { - return ['cpp', 'java', 'csharp'].includes(language); + return ["cpp", "java", "csharp"].includes(language); } exports.isTracedLanguage = isTracedLanguage; function isScannedLanguage(language) { diff --git a/lib/languages.js.map b/lib/languages.js.map index 8cb6df90a..b98b19b73 100644 --- a/lib/languages.js.map +++ b/lib/languages.js.map @@ -1 +1 @@ -{"version":3,"file":"languages.js","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":";;AAAA,wCAAwC;AACxC,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,uBAAW,CAAA;IACX,qBAAS,CAAA;IACT,yBAAa,CAAA;IACb,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;AACnB,CAAC,EAPW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAOnB;AAED,iCAAiC;AACjC,MAAM,gBAAgB,GAA+B;IACnD,GAAG,EAAE,QAAQ,CAAC,GAAG;IACjB,KAAK,EAAE,QAAQ,CAAC,GAAG;IACnB,IAAI,EAAE,QAAQ,CAAC,MAAM;IACrB,YAAY,EAAE,QAAQ,CAAC,UAAU;CAClC,CAAC;AAEF,gGAAgG;AAChG,SAAgB,aAAa,CAAC,QAAgB;IAC5C,0BAA0B;IAC1B,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAElC,6BAA6B;IAC7B,IAAI,QAAQ,IAAI,QAAQ,EAAE;QACxB,OAAO,QAAoB,CAAC;KAC7B;IAED,yBAAyB;IACzB,IAAI,QAAQ,IAAI,gBAAgB,EAAE;QAChC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACnC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAfD,sCAeC;AAGD,SAAgB,gBAAgB,CAAC,QAAkB;IACjD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAFD,4CAEC;AAED,SAAgB,iBAAiB,CAAC,QAAkB;IAClD,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAFD,8CAEC"} \ No newline at end of file +{"version":3,"file":"languages.js","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":";;AAAA,wCAAwC;AACxC,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,6BAAiB,CAAA;IACjB,uBAAW,CAAA;IACX,qBAAS,CAAA;IACT,yBAAa,CAAA;IACb,qCAAyB,CAAA;IACzB,6BAAiB,CAAA;AACnB,CAAC,EAPW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAOnB;AAED,iCAAiC;AACjC,MAAM,gBAAgB,GAAiC;IACrD,CAAC,EAAE,QAAQ,CAAC,GAAG;IACf,KAAK,EAAE,QAAQ,CAAC,GAAG;IACnB,IAAI,EAAE,QAAQ,CAAC,MAAM;IACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;CAChC,CAAC;AAEF,gGAAgG;AAChG,SAAgB,aAAa,CAAC,QAAgB;IAC5C,0BAA0B;IAC1B,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAElC,6BAA6B;IAC7B,IAAI,QAAQ,IAAI,QAAQ,EAAE;QACxB,OAAO,QAAoB,CAAC;KAC7B;IAED,yBAAyB;IACzB,IAAI,QAAQ,IAAI,gBAAgB,EAAE;QAChC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KACnC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAfD,sCAeC;AAED,SAAgB,gBAAgB,CAAC,QAAkB;IACjD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAFD,4CAEC;AAED,SAAgB,iBAAiB,CAAC,QAAkB;IAClD,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAFD,8CAEC"} \ No newline at end of file diff --git a/lib/languages.test.js b/lib/languages.test.js index 9de8b4173..d3b6e6cd8 100644 --- a/lib/languages.test.js +++ b/lib/languages.test.js @@ -7,25 +7,25 @@ const ava_1 = __importDefault(require("ava")); const languages_1 = require("./languages"); const testing_utils_1 = require("./testing-utils"); testing_utils_1.setupTests(ava_1.default); -ava_1.default('parseLangauge', async (t) => { +ava_1.default("parseLangauge", async (t) => { // Exact matches - t.deepEqual(languages_1.parseLanguage('csharp'), languages_1.Language.csharp); - t.deepEqual(languages_1.parseLanguage('cpp'), languages_1.Language.cpp); - t.deepEqual(languages_1.parseLanguage('go'), languages_1.Language.go); - t.deepEqual(languages_1.parseLanguage('java'), languages_1.Language.java); - t.deepEqual(languages_1.parseLanguage('javascript'), languages_1.Language.javascript); - t.deepEqual(languages_1.parseLanguage('python'), languages_1.Language.python); + t.deepEqual(languages_1.parseLanguage("csharp"), languages_1.Language.csharp); + t.deepEqual(languages_1.parseLanguage("cpp"), languages_1.Language.cpp); + t.deepEqual(languages_1.parseLanguage("go"), languages_1.Language.go); + t.deepEqual(languages_1.parseLanguage("java"), languages_1.Language.java); + t.deepEqual(languages_1.parseLanguage("javascript"), languages_1.Language.javascript); + t.deepEqual(languages_1.parseLanguage("python"), languages_1.Language.python); // Aliases - t.deepEqual(languages_1.parseLanguage('c'), languages_1.Language.cpp); - t.deepEqual(languages_1.parseLanguage('c++'), languages_1.Language.cpp); - t.deepEqual(languages_1.parseLanguage('c#'), languages_1.Language.csharp); - t.deepEqual(languages_1.parseLanguage('typescript'), languages_1.Language.javascript); + t.deepEqual(languages_1.parseLanguage("c"), languages_1.Language.cpp); + t.deepEqual(languages_1.parseLanguage("c++"), languages_1.Language.cpp); + t.deepEqual(languages_1.parseLanguage("c#"), languages_1.Language.csharp); + t.deepEqual(languages_1.parseLanguage("typescript"), languages_1.Language.javascript); // Not matches - t.deepEqual(languages_1.parseLanguage('foo'), undefined); - t.deepEqual(languages_1.parseLanguage(' '), undefined); - t.deepEqual(languages_1.parseLanguage(''), undefined); + t.deepEqual(languages_1.parseLanguage("foo"), undefined); + t.deepEqual(languages_1.parseLanguage(" "), undefined); + t.deepEqual(languages_1.parseLanguage(""), undefined); }); -ava_1.default('isTracedLanguage', async (t) => { +ava_1.default("isTracedLanguage", async (t) => { t.true(languages_1.isTracedLanguage(languages_1.Language.cpp)); t.true(languages_1.isTracedLanguage(languages_1.Language.java)); t.true(languages_1.isTracedLanguage(languages_1.Language.csharp)); @@ -33,7 +33,7 @@ ava_1.default('isTracedLanguage', async (t) => { t.false(languages_1.isTracedLanguage(languages_1.Language.javascript)); t.false(languages_1.isTracedLanguage(languages_1.Language.python)); }); -ava_1.default('isScannedLanguage', async (t) => { +ava_1.default("isScannedLanguage", async (t) => { t.false(languages_1.isScannedLanguage(languages_1.Language.cpp)); t.false(languages_1.isScannedLanguage(languages_1.Language.java)); t.false(languages_1.isScannedLanguage(languages_1.Language.csharp)); diff --git a/lib/languages.test.js.map b/lib/languages.test.js.map index e732925fe..d3cc751dc 100644 --- a/lib/languages.test.js.map +++ b/lib/languages.test.js.map @@ -1 +1 @@ -{"version":3,"file":"languages.test.js","sourceRoot":"","sources":["../src/languages.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"languages.test.js","sourceRoot":"","sources":["../src/languages.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/repository.js b/lib/repository.js index 0db08445c..7546a58ac 100644 --- a/lib/repository.js +++ b/lib/repository.js @@ -1,7 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function parseRepositoryNwo(input) { - const parts = input.split('/'); + const parts = input.split("/"); if (parts.length !== 2) { throw new Error(`"${input}" is not a valid repository name`); } diff --git a/lib/runner.js b/lib/runner.js index 6f3878bbc..6222fa92a 100644 --- a/lib/runner.js +++ b/lib/runner.js @@ -22,18 +22,18 @@ const repository_1 = require("./repository"); const upload_lib = __importStar(require("./upload-lib")); const util_1 = require("./util"); const program = new commander_1.Command(); -program.version('0.0.1'); +program.version("0.0.1"); function parseGithubUrl(inputUrl) { try { const url = new URL(inputUrl); // If we detect this is trying to be to github.com // then return with a fixed canonical URL. - if (url.hostname === 'github.com' || url.hostname === 'api.github.com') { - return 'https://github.com'; + if (url.hostname === "github.com" || url.hostname === "api.github.com") { + return "https://github.com"; } // Remove the API prefix if it's present - if (url.pathname.indexOf('/api/v3') !== -1) { - url.pathname = url.pathname.substring(0, url.pathname.indexOf('/api/v3')); + if (url.pathname.indexOf("/api/v3") !== -1) { + url.pathname = url.pathname.substring(0, url.pathname.indexOf("/api/v3")); } return url.toString(); } @@ -42,42 +42,42 @@ function parseGithubUrl(inputUrl) { } } function getTempDir(userInput) { - const tempDir = path.join(userInput || process.cwd(), 'codeql-runner'); + const tempDir = path.join(userInput || process.cwd(), "codeql-runner"); if (!fs.existsSync(tempDir)) { fs.mkdirSync(tempDir, { recursive: true }); } return tempDir; } function getToolsDir(userInput) { - const toolsDir = userInput || path.join(os.homedir(), 'codeql-runner-tools'); + const toolsDir = userInput || path.join(os.homedir(), "codeql-runner-tools"); if (!fs.existsSync(toolsDir)) { fs.mkdirSync(toolsDir, { recursive: true }); } return toolsDir; } -const codeqlEnvJsonFilename = 'codeql-env.json'; +const codeqlEnvJsonFilename = "codeql-env.json"; // Imports the environment from codeqlEnvJsonFilename if not already present function importTracerEnvironment(config) { - if (!('ODASA_TRACER_CONFIGURATION' in process.env)) { + if (!("ODASA_TRACER_CONFIGURATION" in process.env)) { const jsonEnvFile = path.join(config.tempDir, codeqlEnvJsonFilename); - const env = JSON.parse(fs.readFileSync(jsonEnvFile).toString('utf-8')); - Object.keys(env).forEach(key => process.env[key] = env[key]); + const env = JSON.parse(fs.readFileSync(jsonEnvFile).toString("utf-8")); + Object.keys(env).forEach((key) => (process.env[key] = env[key])); } } // Allow the user to specify refs in full refs/heads/branch format // or just the short branch name and prepend "refs/heads/" to it. function parseRef(userInput) { - if (userInput.startsWith('refs/')) { + if (userInput.startsWith("refs/")) { return userInput; } else { - return 'refs/heads/' + userInput; + return `refs/heads/${userInput}`; } } // Parses the --trace-process-name arg from process.argv, or returns undefined function parseTraceProcessName() { for (let i = 0; i < process.argv.length - 1; i++) { - if (process.argv[i] === '--trace-process-name') { + if (process.argv[i] === "--trace-process-name") { return process.argv[i + 1]; } } @@ -86,7 +86,7 @@ function parseTraceProcessName() { // Parses the --trace-process-level arg from process.argv, or returns undefined function parseTraceProcessLevel() { for (let i = 0; i < process.argv.length - 1; i++) { - if (process.argv[i] === '--trace-process-level') { + if (process.argv[i] === "--trace-process-level") { const v = parseInt(process.argv[i + 1], 10); return isNaN(v) ? undefined : v; } @@ -94,19 +94,19 @@ function parseTraceProcessLevel() { return undefined; } program - .command('init') - .description('Initializes CodeQL') - .requiredOption('--repository ', 'Repository name. (Required)') - .requiredOption('--github-url ', 'URL of GitHub instance. (Required)') - .requiredOption('--github-auth ', 'GitHub Apps token or personal access token. (Required)') - .option('--languages ', 'Comma-separated list of languages to analyze. Otherwise detects and analyzes all supported languages from the repo.') - .option('--queries ', 'Comma-separated list of additional queries to run. This overrides the same setting in a configuration file.') - .option('--config-file ', 'Path to config file.') - .option('--codeql-path ', 'Path to a copy of the CodeQL CLI executable to use. Otherwise downloads a copy.') - .option('--temp-dir ', 'Directory to use for temporary files. Default is "./codeql-runner".') - .option('--tools-dir ', 'Directory to use for CodeQL tools and other files to store between runs. Default is a subdirectory of the home directory.') - .option('--checkout-path ', 'Checkout path. Default is the current working directory.') - .option('--debug', 'Print more verbose output', false) + .command("init") + .description("Initializes CodeQL") + .requiredOption("--repository ", "Repository name. (Required)") + .requiredOption("--github-url ", "URL of GitHub instance. (Required)") + .requiredOption("--github-auth ", "GitHub Apps token or personal access token. (Required)") + .option("--languages ", "Comma-separated list of languages to analyze. Otherwise detects and analyzes all supported languages from the repo.") + .option("--queries ", "Comma-separated list of additional queries to run. This overrides the same setting in a configuration file.") + .option("--config-file ", "Path to config file.") + .option("--codeql-path ", "Path to a copy of the CodeQL CLI executable to use. Otherwise downloads a copy.") + .option("--temp-dir ", 'Directory to use for temporary files. Default is "./codeql-runner".') + .option("--tools-dir ", "Directory to use for CodeQL tools and other files to store between runs. Default is a subdirectory of the home directory.") + .option("--checkout-path ", "Checkout path. Default is the current working directory.") + .option("--debug", "Print more verbose output", false) // This prevents a message like: error: unknown option '--trace-process-level' // Remove this if commander.js starts supporting hidden options. .allowUnknownOption() @@ -124,29 +124,29 @@ program codeql = codeql_1.getCodeQL(cmd.codeqlPath); } else { - codeql = await init_1.initCodeQL(undefined, cmd.githubAuth, parseGithubUrl(cmd.githubUrl), tempDir, toolsDir, 'runner', logger); + codeql = await init_1.initCodeQL(undefined, cmd.githubAuth, parseGithubUrl(cmd.githubUrl), tempDir, toolsDir, "runner", logger); } const config = await init_1.initConfig(cmd.languages, cmd.queries, cmd.configFile, repository_1.parseRepositoryNwo(cmd.repository), tempDir, toolsDir, codeql, cmd.checkoutPath || process.cwd(), cmd.githubAuth, parseGithubUrl(cmd.githubUrl), logger); const tracerConfig = await init_1.runInit(codeql, config); if (tracerConfig === undefined) { return; } - if (process.platform === 'win32') { + if (process.platform === "win32") { await init_1.injectWindowsTracer(parseTraceProcessName(), parseTraceProcessLevel(), config, codeql, tracerConfig); } // Always output a json file of the env that can be consumed programatically const jsonEnvFile = path.join(config.tempDir, codeqlEnvJsonFilename); fs.writeFileSync(jsonEnvFile, JSON.stringify(tracerConfig.env)); - if (process.platform === 'win32') { - const batEnvFile = path.join(config.tempDir, 'codeql-env.bat'); + if (process.platform === "win32") { + const batEnvFile = path.join(config.tempDir, "codeql-env.bat"); const batEnvFileContents = Object.entries(tracerConfig.env) .map(([key, value]) => `Set ${key}=${value}`) - .join('\n'); + .join("\n"); fs.writeFileSync(batEnvFile, batEnvFileContents); - const powershellEnvFile = path.join(config.tempDir, 'codeql-env.sh'); + const powershellEnvFile = path.join(config.tempDir, "codeql-env.sh"); const powershellEnvFileContents = Object.entries(tracerConfig.env) .map(([key, value]) => `$env:${key}="${value}"`) - .join('\n'); + .join("\n"); fs.writeFileSync(powershellEnvFile, powershellEnvFileContents); logger.info(`\nCodeQL environment output to "${jsonEnvFile}", "${batEnvFile}" and "${powershellEnvFile}". ` + `Please export these variables to future processes so the build can be traced. ` + @@ -155,11 +155,11 @@ program } else { // Assume that anything that's not windows is using a unix-style shell - const shEnvFile = path.join(config.tempDir, 'codeql-env.sh'); + const shEnvFile = path.join(config.tempDir, "codeql-env.sh"); const shEnvFileContents = Object.entries(tracerConfig.env) // Some vars contain ${LIB} that we do not want to be expanded when executing this script - .map(([key, value]) => `export ${key}="${value.replace('$', '\\$')}"`) - .join('\n'); + .map(([key, value]) => `export ${key}="${value.replace("$", "\\$")}"`) + .join("\n"); fs.writeFileSync(shEnvFile, shEnvFileContents); logger.info(`\nCodeQL environment output to "${jsonEnvFile}" and "${shEnvFile}". ` + `Please export these variables to future processes so the build can be traced, ` + @@ -167,17 +167,17 @@ program } } catch (e) { - logger.error('Init failed'); + logger.error("Init failed"); logger.error(e); process.exitCode = 1; } }); program - .command('autobuild') - .description('Attempts to automatically build code') - .option('--language ', 'The language to build. Otherwise will detect the dominant compiled language.') - .option('--temp-dir ', 'Directory to use for temporary files. Default is "./codeql-runner".') - .option('--debug', 'Print more verbose output', false) + .command("autobuild") + .description("Attempts to automatically build code") + .option("--language ", "The language to build. Otherwise will detect the dominant compiled language.") + .option("--temp-dir ", 'Directory to use for temporary files. Default is "./codeql-runner".') + .option("--debug", "Print more verbose output", false) .action(async (cmd) => { const logger = logging_1.getRunnerLogger(cmd.debug); try { @@ -192,7 +192,7 @@ program language = languages_1.parseLanguage(cmd.language); if (language === undefined || !config.languages.includes(language)) { throw new Error(`"${cmd.language}" is not a recognised language. ` + - `Known languages in this project are ${config.languages.join(', ')}.`); + `Known languages in this project are ${config.languages.join(", ")}.`); } } else { @@ -203,64 +203,64 @@ program } } catch (e) { - logger.error('Autobuild failed'); + logger.error("Autobuild failed"); logger.error(e); process.exitCode = 1; } }); program - .command('analyze') - .description('Finishes extracting code and runs CodeQL queries') - .requiredOption('--repository ', 'Repository name. (Required)') - .requiredOption('--commit ', 'SHA of commit that was analyzed. (Required)') - .requiredOption('--ref ', 'Name of ref that was analyzed. (Required)') - .requiredOption('--github-url ', 'URL of GitHub instance. (Required)') - .requiredOption('--github-auth ', 'GitHub Apps token or personal access token. (Required)') - .option('--checkout-path ', 'Checkout path. Default is the current working directory.') - .option('--no-upload', 'Do not upload results after analysis.') - .option('--output-dir ', 'Directory to output SARIF files to. Default is in the temp directory.') - .option('--ram ', 'Amount of memory to use when running queries. Default is to use all available memory.') - .option('--no-add-snippets', 'Specify whether to include code snippets in the sarif output.') - .option('--threads ', 'Number of threads to use when running queries. ' + - 'Default is to use all available cores.') - .option('--temp-dir ', 'Directory to use for temporary files. Default is "./codeql-runner".') - .option('--debug', 'Print more verbose output', false) + .command("analyze") + .description("Finishes extracting code and runs CodeQL queries") + .requiredOption("--repository ", "Repository name. (Required)") + .requiredOption("--commit ", "SHA of commit that was analyzed. (Required)") + .requiredOption("--ref ", "Name of ref that was analyzed. (Required)") + .requiredOption("--github-url ", "URL of GitHub instance. (Required)") + .requiredOption("--github-auth ", "GitHub Apps token or personal access token. (Required)") + .option("--checkout-path ", "Checkout path. Default is the current working directory.") + .option("--no-upload", "Do not upload results after analysis.") + .option("--output-dir ", "Directory to output SARIF files to. Default is in the temp directory.") + .option("--ram ", "Amount of memory to use when running queries. Default is to use all available memory.") + .option("--no-add-snippets", "Specify whether to include code snippets in the sarif output.") + .option("--threads ", "Number of threads to use when running queries. " + + "Default is to use all available cores.") + .option("--temp-dir ", 'Directory to use for temporary files. Default is "./codeql-runner".') + .option("--debug", "Print more verbose output", false) .action(async (cmd) => { const logger = logging_1.getRunnerLogger(cmd.debug); try { const tempDir = getTempDir(cmd.tempDir); - const outputDir = cmd.outputDir || path.join(tempDir, 'codeql-sarif'); + const outputDir = cmd.outputDir || path.join(tempDir, "codeql-sarif"); const config = await config_utils_1.getConfig(getTempDir(cmd.tempDir), logger); if (config === undefined) { throw new Error("Config file could not be found at expected location. " + "Was the 'init' command run with the same '--temp-dir' argument as this command."); } - await analyze_1.runAnalyze(repository_1.parseRepositoryNwo(cmd.repository), cmd.commit, parseRef(cmd.ref), undefined, undefined, undefined, cmd.checkoutPath || process.cwd(), undefined, cmd.githubAuth, parseGithubUrl(cmd.githubUrl), cmd.upload, 'runner', outputDir, util_1.getMemoryFlag(cmd.ram), util_1.getAddSnippetsFlag(cmd.addSnippets), util_1.getThreadsFlag(cmd.threads, logger), config, logger); + await analyze_1.runAnalyze(repository_1.parseRepositoryNwo(cmd.repository), cmd.commit, parseRef(cmd.ref), undefined, undefined, undefined, cmd.checkoutPath || process.cwd(), undefined, cmd.githubAuth, parseGithubUrl(cmd.githubUrl), cmd.upload, "runner", outputDir, util_1.getMemoryFlag(cmd.ram), util_1.getAddSnippetsFlag(cmd.addSnippets), util_1.getThreadsFlag(cmd.threads, logger), config, logger); } catch (e) { - logger.error('Analyze failed'); + logger.error("Analyze failed"); logger.error(e); process.exitCode = 1; } }); program - .command('upload') - .description('Uploads a SARIF file, or all SARIF files from a directory, to code scanning') - .requiredOption('--sarif-file ', 'SARIF file to upload, or a directory containing multiple SARIF files. (Required)') - .requiredOption('--repository ', 'Repository name. (Required)') - .requiredOption('--commit ', 'SHA of commit that was analyzed. (Required)') - .requiredOption('--ref ', 'Name of ref that was analyzed. (Required)') - .requiredOption('--github-url ', 'URL of GitHub instance. (Required)') - .requiredOption('--github-auth ', 'GitHub Apps token or personal access token. (Required)') - .option('--checkout-path ', 'Checkout path. Default is the current working directory.') - .option('--debug', 'Print more verbose output', false) + .command("upload") + .description("Uploads a SARIF file, or all SARIF files from a directory, to code scanning") + .requiredOption("--sarif-file ", "SARIF file to upload, or a directory containing multiple SARIF files. (Required)") + .requiredOption("--repository ", "Repository name. (Required)") + .requiredOption("--commit ", "SHA of commit that was analyzed. (Required)") + .requiredOption("--ref ", "Name of ref that was analyzed. (Required)") + .requiredOption("--github-url ", "URL of GitHub instance. (Required)") + .requiredOption("--github-auth ", "GitHub Apps token or personal access token. (Required)") + .option("--checkout-path ", "Checkout path. Default is the current working directory.") + .option("--debug", "Print more verbose output", false) .action(async (cmd) => { const logger = logging_1.getRunnerLogger(cmd.debug); try { - await upload_lib.upload(cmd.sarifFile, repository_1.parseRepositoryNwo(cmd.repository), cmd.commit, parseRef(cmd.ref), undefined, undefined, undefined, cmd.checkoutPath || process.cwd(), undefined, cmd.githubAuth, parseGithubUrl(cmd.githubUrl), 'runner', logger); + await upload_lib.upload(cmd.sarifFile, repository_1.parseRepositoryNwo(cmd.repository), cmd.commit, parseRef(cmd.ref), undefined, undefined, undefined, cmd.checkoutPath || process.cwd(), undefined, cmd.githubAuth, parseGithubUrl(cmd.githubUrl), "runner", logger); } catch (e) { - logger.error('Upload failed'); + logger.error("Upload failed"); logger.error(e); process.exitCode = 1; } diff --git a/lib/runner.js.map b/lib/runner.js.map index 11a646a60..5d525d8df 100644 --- a/lib/runner.js.map +++ b/lib/runner.js.map @@ -1 +1 @@ -{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/shared-environment.js b/lib/shared-environment.js index bb41ba94b..9437cb22a 100644 --- a/lib/shared-environment.js +++ b/lib/shared-environment.js @@ -1,10 +1,10 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ODASA_TRACER_CONFIGURATION = 'ODASA_TRACER_CONFIGURATION'; +exports.ODASA_TRACER_CONFIGURATION = "ODASA_TRACER_CONFIGURATION"; // The time at which the first action (normally init) started executing. // If a workflow invokes a different action without first invoking the init // action (i.e. the upload action is being used by a third-party integrator) // then this variable will be assigned the start time of the action invoked // rather that the init action. -exports.CODEQL_WORKFLOW_STARTED_AT = 'CODEQL_WORKFLOW_STARTED_AT'; +exports.CODEQL_WORKFLOW_STARTED_AT = "CODEQL_WORKFLOW_STARTED_AT"; //# sourceMappingURL=shared-environment.js.map \ No newline at end of file diff --git a/lib/testing-utils.js b/lib/testing-utils.js index 87666fa19..0dc40ed72 100644 --- a/lib/testing-utils.js +++ b/lib/testing-utils.js @@ -19,19 +19,19 @@ function wrapOutput(context) { // write(str: Uint8Array | string, encoding?: string, cb?: (err?: Error) => void): boolean; return (chunk, encoding, cb) => { // Work out which method overload we are in - if (cb === undefined && typeof encoding === 'function') { + if (cb === undefined && typeof encoding === "function") { cb = encoding; encoding = undefined; } // Record the output - if (typeof chunk === 'string') { + if (typeof chunk === "string") { context.testOutput += chunk; } else { - context.testOutput += new TextDecoder(encoding || 'utf-8').decode(chunk); + context.testOutput += new TextDecoder(encoding || "utf-8").decode(chunk); } // Satisfy contract by calling callback when done - if (cb !== undefined && typeof cb === 'function') { + if (cb !== undefined && typeof cb === "function") { cb(); } return true; @@ -39,7 +39,7 @@ function wrapOutput(context) { } function setupTests(test) { const typedTest = test; - typedTest.beforeEach(t => { + typedTest.beforeEach((t) => { // Set an empty CodeQL object so that all method calls will fail // unless the test explicitly sets one up. CodeQL.setCodeQL({}); @@ -57,7 +57,7 @@ function setupTests(test) { t.context.env = {}; Object.assign(t.context.env, process.env); }); - typedTest.afterEach.always(t => { + typedTest.afterEach.always((t) => { // Restore stdout and stderr // The captured output is only replayed if the test failed process.stdout.write = t.context.stdoutWrite; diff --git a/lib/testing-utils.js.map b/lib/testing-utils.js.map index 2af2295b8..0689df539 100644 --- a/lib/testing-utils.js.map +++ b/lib/testing-utils.js.map @@ -1 +1 @@ -{"version":3,"file":"testing-utils.js","sourceRoot":"","sources":["../src/testing-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,kDAA0B;AAE1B,iDAAmC;AAInC,SAAS,UAAU,CAAC,OAAoB;IACtC,8CAA8C;IAC9C,gCAAgC;IAChC,2EAA2E;IAC3E,2FAA2F;IAC3F,OAAO,CAAC,KAA0B,EAAE,QAAiB,EAAE,EAA0B,EAAW,EAAE;QAC5F,2CAA2C;QAC3C,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YACtD,EAAE,GAAG,QAAQ,CAAC;YACd,QAAQ,GAAG,SAAS,CAAC;SACtB;QAED,oBAAoB;QACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;SAC7B;aAAM;YACL,OAAO,CAAC,UAAU,IAAI,IAAI,WAAW,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC1E;QAED,iDAAiD;QACjD,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAChD,EAAE,EAAE,CAAC;SACN;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAC,IAAwB;IACjD,MAAM,SAAS,GAAG,IAAkC,CAAC;IAErD,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QACvB,gEAAgE;QAChE,0CAA0C;QAC1C,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAErB,iEAAiE;QACjE,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;QAC1B,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,kBAAkB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAQ,CAAC;QACpD,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,kBAAkB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAQ,CAAC;QAEpD,mEAAmE;QACnE,wEAAwE;QACxE,kEAAkE;QAClE,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC7B,4BAA4B;QAC5B,0DAA0D;QAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;SAC5C;QAED,uCAAuC;QACvC,eAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,oCAAoC;QACpC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAvCD,gCAuCC"} \ No newline at end of file +{"version":3,"file":"testing-utils.js","sourceRoot":"","sources":["../src/testing-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,kDAA0B;AAE1B,iDAAmC;AASnC,SAAS,UAAU,CAAC,OAAoB;IACtC,8CAA8C;IAC9C,gCAAgC;IAChC,2EAA2E;IAC3E,2FAA2F;IAC3F,OAAO,CACL,KAA0B,EAC1B,QAAiB,EACjB,EAA0B,EACjB,EAAE;QACX,2CAA2C;QAC3C,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;YACtD,EAAE,GAAG,QAAQ,CAAC;YACd,QAAQ,GAAG,SAAS,CAAC;SACtB;QAED,oBAAoB;QACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;SAC7B;aAAM;YACL,OAAO,CAAC,UAAU,IAAI,IAAI,WAAW,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC1E;QAED,iDAAiD;QACjD,IAAI,EAAE,KAAK,SAAS,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;YAChD,EAAE,EAAE,CAAC;SACN;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAC,IAAwB;IACjD,MAAM,SAAS,GAAG,IAAkC,CAAC;IAErD,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;QACzB,gEAAgE;QAChE,0CAA0C;QAC1C,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAErB,iEAAiE;QACjE,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;QAC1B,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,kBAAkB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAQ,CAAC;QACpD,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrE,CAAC,CAAC,OAAO,CAAC,WAAW,GAAG,kBAAkB,CAAC;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAQ,CAAC;QAEpD,mEAAmE;QACnE,wEAAwE;QACxE,kEAAkE;QAClE,CAAC,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACnB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,4BAA4B;QAC5B,0DAA0D;QAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;SAC5C;QAED,uCAAuC;QACvC,eAAK,CAAC,OAAO,EAAE,CAAC;QAEhB,oCAAoC;QACpC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAvCD,gCAuCC"} \ No newline at end of file diff --git a/lib/tracer-config.js b/lib/tracer-config.js index 22c439a78..62da688cd 100644 --- a/lib/tracer-config.js +++ b/lib/tracer-config.js @@ -11,35 +11,38 @@ const fs = __importStar(require("fs")); const path = __importStar(require("path")); const languages_1 = require("./languages"); const util = __importStar(require("./util")); -const CRITICAL_TRACER_VARS = new Set(['SEMMLE_PRELOAD_libtrace', +const CRITICAL_TRACER_VARS = new Set([ + "SEMMLE_PRELOAD_libtrace", , - 'SEMMLE_RUNNER', + "SEMMLE_RUNNER", , - 'SEMMLE_COPY_EXECUTABLES_ROOT', + "SEMMLE_COPY_EXECUTABLES_ROOT", , - 'SEMMLE_DEPTRACE_SOCKET', + "SEMMLE_DEPTRACE_SOCKET", , - 'SEMMLE_JAVA_TOOL_OPTIONS' + "SEMMLE_JAVA_TOOL_OPTIONS", ]); async function getTracerConfigForLanguage(codeql, config, language) { const env = await codeql.getTracerEnv(util.getCodeQLDatabasePath(config.tempDir, language)); - const spec = env['ODASA_TRACER_CONFIGURATION']; + const spec = env["ODASA_TRACER_CONFIGURATION"]; const info = { spec, env: {} }; // Extract critical tracer variables from the environment - for (let entry of Object.entries(env)) { + for (const entry of Object.entries(env)) { const key = entry[0]; const value = entry[1]; // skip ODASA_TRACER_CONFIGURATION as it is handled separately - if (key === 'ODASA_TRACER_CONFIGURATION') { + if (key === "ODASA_TRACER_CONFIGURATION") { continue; } // skip undefined values - if (typeof value === 'undefined') { + if (typeof value === "undefined") { continue; } // Keep variables that do not exist in current environment. In addition always keep // critical and CODEQL_ variables - if (typeof process.env[key] === 'undefined' || CRITICAL_TRACER_VARS.has(key) || key.startsWith('CODEQL_')) { + if (typeof process.env[key] === "undefined" || + CRITICAL_TRACER_VARS.has(key) || + key.startsWith("CODEQL_")) { info.env[key] = value; } } @@ -54,17 +57,16 @@ function concatTracerConfigs(tracerConfigs, config) { let copyExecutables = false; let envSize = 0; for (const v of Object.values(tracerConfigs)) { - for (let e of Object.entries(v.env)) { + for (const e of Object.entries(v.env)) { const name = e[0]; const value = e[1]; // skip SEMMLE_COPY_EXECUTABLES_ROOT as it is handled separately - if (name === 'SEMMLE_COPY_EXECUTABLES_ROOT') { + if (name === "SEMMLE_COPY_EXECUTABLES_ROOT") { copyExecutables = true; } else if (name in env) { if (env[name] !== value) { - throw Error('Incompatible values in environment parameter ' + - name + ': ' + env[name] + ' and ' + value); + throw Error(`Incompatible values in environment parameter ${name}: ${env[name]} and ${value}`); } } else { @@ -74,44 +76,50 @@ function concatTracerConfigs(tracerConfigs, config) { } } // Concatenate spec files into a new spec file - let languages = Object.keys(tracerConfigs); - const cppIndex = languages.indexOf('cpp'); + const languages = Object.keys(tracerConfigs); + const cppIndex = languages.indexOf("cpp"); // Make sure cpp is the last language, if it's present since it must be concatenated last if (cppIndex !== -1) { - let lastLang = languages[languages.length - 1]; + const lastLang = languages[languages.length - 1]; languages[languages.length - 1] = languages[cppIndex]; languages[cppIndex] = lastLang; } - let totalLines = []; + const totalLines = []; let totalCount = 0; - for (let lang of languages) { - const lines = fs.readFileSync(tracerConfigs[lang].spec, 'utf8').split(/\r?\n/); + for (const lang of languages) { + const lines = fs + .readFileSync(tracerConfigs[lang].spec, "utf8") + .split(/\r?\n/); const count = parseInt(lines[1], 10); totalCount += count; totalLines.push(...lines.slice(2)); } - const newLogFilePath = path.resolve(config.tempDir, 'compound-build-tracer.log'); - const spec = path.resolve(config.tempDir, 'compound-spec'); - const compoundTempFolder = path.resolve(config.tempDir, 'compound-temp'); - const newSpecContent = [newLogFilePath, totalCount.toString(10), ...totalLines]; + const newLogFilePath = path.resolve(config.tempDir, "compound-build-tracer.log"); + const spec = path.resolve(config.tempDir, "compound-spec"); + const compoundTempFolder = path.resolve(config.tempDir, "compound-temp"); + const newSpecContent = [ + newLogFilePath, + totalCount.toString(10), + ...totalLines, + ]; if (copyExecutables) { - env['SEMMLE_COPY_EXECUTABLES_ROOT'] = compoundTempFolder; + env["SEMMLE_COPY_EXECUTABLES_ROOT"] = compoundTempFolder; envSize += 1; } - fs.writeFileSync(spec, newSpecContent.join('\n')); + fs.writeFileSync(spec, newSpecContent.join("\n")); // Prepare the content of the compound environment file let buffer = Buffer.alloc(4); buffer.writeInt32LE(envSize, 0); - for (let e of Object.entries(env)) { + for (const e of Object.entries(env)) { const key = e[0]; const value = e[1]; - const lineBuffer = new Buffer(key + '=' + value + '\0', 'utf8'); + const lineBuffer = new Buffer(`${key}=${value}\0`, "utf8"); const sizeBuffer = Buffer.alloc(4); sizeBuffer.writeInt32LE(lineBuffer.length, 0); buffer = Buffer.concat([buffer, sizeBuffer, lineBuffer]); } // Write the compound environment - const envPath = spec + '.environment'; + const envPath = `${spec}.environment`; fs.writeFileSync(envPath, buffer); return { env, spec }; } @@ -129,13 +137,13 @@ async function getCombinedTracerConfig(config, codeql) { } const mainTracerConfig = concatTracerConfigs(tracedLanguageConfigs, config); // Add a couple more variables - mainTracerConfig.env['ODASA_TRACER_CONFIGURATION'] = mainTracerConfig.spec; + mainTracerConfig.env["ODASA_TRACER_CONFIGURATION"] = mainTracerConfig.spec; const codeQLDir = path.dirname(codeql.getPath()); - if (process.platform === 'darwin') { - mainTracerConfig.env['DYLD_INSERT_LIBRARIES'] = path.join(codeQLDir, 'tools', 'osx64', 'libtrace.dylib'); + if (process.platform === "darwin") { + mainTracerConfig.env["DYLD_INSERT_LIBRARIES"] = path.join(codeQLDir, "tools", "osx64", "libtrace.dylib"); } - else if (process.platform !== 'win32') { - mainTracerConfig.env['LD_PRELOAD'] = path.join(codeQLDir, 'tools', 'linux64', '${LIB}trace.so'); + else if (process.platform !== "win32") { + mainTracerConfig.env["LD_PRELOAD"] = path.join(codeQLDir, "tools", "linux64", "${LIB}trace.so"); } return mainTracerConfig; } diff --git a/lib/tracer-config.js.map b/lib/tracer-config.js.map index 077fa3ff4..44ea05f3c 100644 --- a/lib/tracer-config.js.map +++ b/lib/tracer-config.js.map @@ -1 +1 @@ -{"version":3,"file":"tracer-config.js","sourceRoot":"","sources":["../src/tracer-config.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tracer-config.js","sourceRoot":"","sources":["../src/tracer-config.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/tracer-config.test.js b/lib/tracer-config.test.js index 20bd00b81..c3d919757 100644 --- a/lib/tracer-config.test.js +++ b/lib/tracer-config.test.js @@ -28,249 +28,249 @@ function getTestConfig(tmpDir) { originalUserInput: {}, tempDir: tmpDir, toolCacheDir: tmpDir, - codeQLCmd: '', + codeQLCmd: "", }; } // A very minimal setup -ava_1.default('getTracerConfigForLanguage - minimal setup', async (t) => { +ava_1.default("getTracerConfigForLanguage - minimal setup", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); const codeQL = codeql_1.setCodeQL({ - getTracerEnv: async function () { + async getTracerEnv() { return { - 'ODASA_TRACER_CONFIGURATION': 'abc', - 'foo': 'bar' + ODASA_TRACER_CONFIGURATION: "abc", + foo: "bar", }; }, }); const result = await tracer_config_1.getTracerConfigForLanguage(codeQL, config, languages_1.Language.javascript); - t.deepEqual(result, { spec: 'abc', env: { 'foo': 'bar' } }); + t.deepEqual(result, { spec: "abc", env: { foo: "bar" } }); }); }); // Existing vars should not be overwritten, unless they are critical or prefixed with CODEQL_ -ava_1.default('getTracerConfigForLanguage - existing / critical vars', async (t) => { +ava_1.default("getTracerConfigForLanguage - existing / critical vars", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); // Set up some variables in the environment - process.env['foo'] = 'abc'; - process.env['SEMMLE_PRELOAD_libtrace'] = 'abc'; - process.env['SEMMLE_RUNNER'] = 'abc'; - process.env['SEMMLE_COPY_EXECUTABLES_ROOT'] = 'abc'; - process.env['SEMMLE_DEPTRACE_SOCKET'] = 'abc'; - process.env['SEMMLE_JAVA_TOOL_OPTIONS'] = 'abc'; - process.env['SEMMLE_DEPTRACE_SOCKET'] = 'abc'; - process.env['CODEQL_VAR'] = 'abc'; + process.env["foo"] = "abc"; + process.env["SEMMLE_PRELOAD_libtrace"] = "abc"; + process.env["SEMMLE_RUNNER"] = "abc"; + process.env["SEMMLE_COPY_EXECUTABLES_ROOT"] = "abc"; + process.env["SEMMLE_DEPTRACE_SOCKET"] = "abc"; + process.env["SEMMLE_JAVA_TOOL_OPTIONS"] = "abc"; + process.env["SEMMLE_DEPTRACE_SOCKET"] = "abc"; + process.env["CODEQL_VAR"] = "abc"; // Now CodeQL returns all these variables, and one more, with different values const codeQL = codeql_1.setCodeQL({ - getTracerEnv: async function () { + async getTracerEnv() { return { - 'ODASA_TRACER_CONFIGURATION': 'abc', - 'foo': 'bar', - 'baz': 'qux', - 'SEMMLE_PRELOAD_libtrace': 'SEMMLE_PRELOAD_libtrace', - 'SEMMLE_RUNNER': 'SEMMLE_RUNNER', - 'SEMMLE_COPY_EXECUTABLES_ROOT': 'SEMMLE_COPY_EXECUTABLES_ROOT', - 'SEMMLE_DEPTRACE_SOCKET': 'SEMMLE_DEPTRACE_SOCKET', - 'SEMMLE_JAVA_TOOL_OPTIONS': 'SEMMLE_JAVA_TOOL_OPTIONS', - 'CODEQL_VAR': 'CODEQL_VAR', + ODASA_TRACER_CONFIGURATION: "abc", + foo: "bar", + baz: "qux", + SEMMLE_PRELOAD_libtrace: "SEMMLE_PRELOAD_libtrace", + SEMMLE_RUNNER: "SEMMLE_RUNNER", + SEMMLE_COPY_EXECUTABLES_ROOT: "SEMMLE_COPY_EXECUTABLES_ROOT", + SEMMLE_DEPTRACE_SOCKET: "SEMMLE_DEPTRACE_SOCKET", + SEMMLE_JAVA_TOOL_OPTIONS: "SEMMLE_JAVA_TOOL_OPTIONS", + CODEQL_VAR: "CODEQL_VAR", }; }, }); const result = await tracer_config_1.getTracerConfigForLanguage(codeQL, config, languages_1.Language.javascript); t.deepEqual(result, { - spec: 'abc', + spec: "abc", env: { // Should contain all variables except 'foo', because that already existed in the // environment with a different value, and is not deemed a "critical" variable. - 'baz': 'qux', - 'SEMMLE_PRELOAD_libtrace': 'SEMMLE_PRELOAD_libtrace', - 'SEMMLE_RUNNER': 'SEMMLE_RUNNER', - 'SEMMLE_COPY_EXECUTABLES_ROOT': 'SEMMLE_COPY_EXECUTABLES_ROOT', - 'SEMMLE_DEPTRACE_SOCKET': 'SEMMLE_DEPTRACE_SOCKET', - 'SEMMLE_JAVA_TOOL_OPTIONS': 'SEMMLE_JAVA_TOOL_OPTIONS', - 'CODEQL_VAR': 'CODEQL_VAR', - } + baz: "qux", + SEMMLE_PRELOAD_libtrace: "SEMMLE_PRELOAD_libtrace", + SEMMLE_RUNNER: "SEMMLE_RUNNER", + SEMMLE_COPY_EXECUTABLES_ROOT: "SEMMLE_COPY_EXECUTABLES_ROOT", + SEMMLE_DEPTRACE_SOCKET: "SEMMLE_DEPTRACE_SOCKET", + SEMMLE_JAVA_TOOL_OPTIONS: "SEMMLE_JAVA_TOOL_OPTIONS", + CODEQL_VAR: "CODEQL_VAR", + }, }); }); }); -ava_1.default('concatTracerConfigs - minimal configs correctly combined', async (t) => { +ava_1.default("concatTracerConfigs - minimal configs correctly combined", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec1 = path.join(tmpDir, 'spec1'); - fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const spec1 = path.join(tmpDir, "spec1"); + fs.writeFileSync(spec1, "foo.log\n2\nabc\ndef"); const tc1 = { spec: spec1, env: { - 'a': 'a', - 'b': 'b', - } + a: "a", + b: "b", + }, }; - const spec2 = path.join(tmpDir, 'spec2'); - fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const spec2 = path.join(tmpDir, "spec2"); + fs.writeFileSync(spec2, "foo.log\n1\nghi"); const tc2 = { spec: spec2, env: { - 'c': 'c', - } + c: "c", + }, }; - const result = tracer_config_1.concatTracerConfigs({ 'javascript': tc1, 'python': tc2 }, config); + const result = tracer_config_1.concatTracerConfigs({ javascript: tc1, python: tc2 }, config); t.deepEqual(result, { - spec: path.join(tmpDir, 'compound-spec'), + spec: path.join(tmpDir, "compound-spec"), env: { - 'a': 'a', - 'b': 'b', - 'c': 'c', - } + a: "a", + b: "b", + c: "c", + }, }); t.true(fs.existsSync(result.spec)); - t.deepEqual(fs.readFileSync(result.spec, 'utf8'), path.join(tmpDir, 'compound-build-tracer.log') + '\n3\nabc\ndef\nghi'); + t.deepEqual(fs.readFileSync(result.spec, "utf8"), `${path.join(tmpDir, "compound-build-tracer.log")}\n3\nabc\ndef\nghi`); }); }); -ava_1.default('concatTracerConfigs - conflicting env vars', async (t) => { +ava_1.default("concatTracerConfigs - conflicting env vars", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec = path.join(tmpDir, 'spec'); - fs.writeFileSync(spec, 'foo.log\n0'); + const spec = path.join(tmpDir, "spec"); + fs.writeFileSync(spec, "foo.log\n0"); // Ok if env vars have the same name and the same value t.deepEqual(tracer_config_1.concatTracerConfigs({ - 'javascript': { spec: spec, env: { 'a': 'a', 'b': 'b' } }, - 'python': { spec: spec, env: { 'b': 'b', 'c': 'c' } }, + javascript: { spec, env: { a: "a", b: "b" } }, + python: { spec, env: { b: "b", c: "c" } }, }, config).env, { - 'a': 'a', - 'b': 'b', - 'c': 'c', + a: "a", + b: "b", + c: "c", }); // Throws if env vars have same name but different values const e = t.throws(() => tracer_config_1.concatTracerConfigs({ - 'javascript': { spec: spec, env: { 'a': 'a', 'b': 'b' } }, - 'python': { spec: spec, env: { 'b': 'c' } }, + javascript: { spec, env: { a: "a", b: "b" } }, + python: { spec, env: { b: "c" } }, }, config)); - t.deepEqual(e.message, 'Incompatible values in environment parameter b: b and c'); + t.deepEqual(e.message, "Incompatible values in environment parameter b: b and c"); }); }); -ava_1.default('concatTracerConfigs - cpp spec lines come last if present', async (t) => { +ava_1.default("concatTracerConfigs - cpp spec lines come last if present", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec1 = path.join(tmpDir, 'spec1'); - fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const spec1 = path.join(tmpDir, "spec1"); + fs.writeFileSync(spec1, "foo.log\n2\nabc\ndef"); const tc1 = { spec: spec1, env: { - 'a': 'a', - 'b': 'b', - } + a: "a", + b: "b", + }, }; - const spec2 = path.join(tmpDir, 'spec2'); - fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const spec2 = path.join(tmpDir, "spec2"); + fs.writeFileSync(spec2, "foo.log\n1\nghi"); const tc2 = { spec: spec2, env: { - 'c': 'c', - } + c: "c", + }, }; - const result = tracer_config_1.concatTracerConfigs({ 'cpp': tc1, 'python': tc2 }, config); + const result = tracer_config_1.concatTracerConfigs({ cpp: tc1, python: tc2 }, config); t.deepEqual(result, { - spec: path.join(tmpDir, 'compound-spec'), + spec: path.join(tmpDir, "compound-spec"), env: { - 'a': 'a', - 'b': 'b', - 'c': 'c', - } + a: "a", + b: "b", + c: "c", + }, }); t.true(fs.existsSync(result.spec)); - t.deepEqual(fs.readFileSync(result.spec, 'utf8'), path.join(tmpDir, 'compound-build-tracer.log') + '\n3\nghi\nabc\ndef'); + t.deepEqual(fs.readFileSync(result.spec, "utf8"), `${path.join(tmpDir, "compound-build-tracer.log")}\n3\nghi\nabc\ndef`); }); }); -ava_1.default('concatTracerConfigs - SEMMLE_COPY_EXECUTABLES_ROOT is updated to point to compound spec', async (t) => { +ava_1.default("concatTracerConfigs - SEMMLE_COPY_EXECUTABLES_ROOT is updated to point to compound spec", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec = path.join(tmpDir, 'spec'); - fs.writeFileSync(spec, 'foo.log\n0'); + const spec = path.join(tmpDir, "spec"); + fs.writeFileSync(spec, "foo.log\n0"); const result = tracer_config_1.concatTracerConfigs({ - 'javascript': { spec: spec, env: { 'a': 'a', 'b': 'b' } }, - 'python': { spec: spec, env: { 'SEMMLE_COPY_EXECUTABLES_ROOT': 'foo' } }, + javascript: { spec, env: { a: "a", b: "b" } }, + python: { spec, env: { SEMMLE_COPY_EXECUTABLES_ROOT: "foo" } }, }, config); t.deepEqual(result.env, { - 'a': 'a', - 'b': 'b', - 'SEMMLE_COPY_EXECUTABLES_ROOT': path.join(tmpDir, 'compound-temp') + a: "a", + b: "b", + SEMMLE_COPY_EXECUTABLES_ROOT: path.join(tmpDir, "compound-temp"), }); }); }); -ava_1.default('concatTracerConfigs - compound environment file is created correctly', async (t) => { +ava_1.default("concatTracerConfigs - compound environment file is created correctly", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec1 = path.join(tmpDir, 'spec1'); - fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const spec1 = path.join(tmpDir, "spec1"); + fs.writeFileSync(spec1, "foo.log\n2\nabc\ndef"); const tc1 = { spec: spec1, env: { - 'a': 'a', - } + a: "a", + }, }; - const spec2 = path.join(tmpDir, 'spec2'); - fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const spec2 = path.join(tmpDir, "spec2"); + fs.writeFileSync(spec2, "foo.log\n1\nghi"); const tc2 = { spec: spec2, env: { - 'foo': 'bar_baz', - } + foo: "bar_baz", + }, }; - const result = tracer_config_1.concatTracerConfigs({ 'javascript': tc1, 'python': tc2 }, config); - const envPath = result.spec + '.environment'; + const result = tracer_config_1.concatTracerConfigs({ javascript: tc1, python: tc2 }, config); + const envPath = `${result.spec}.environment`; t.true(fs.existsSync(envPath)); const buffer = fs.readFileSync(envPath); // Contents is binary data t.deepEqual(buffer.length, 28); t.deepEqual(buffer.readInt32LE(0), 2); // number of env vars t.deepEqual(buffer.readInt32LE(4), 4); // length of env var definition - t.deepEqual(buffer.toString('utf8', 8, 12), 'a=a\0'); // [key]=[value]\0 + t.deepEqual(buffer.toString("utf8", 8, 12), "a=a\0"); // [key]=[value]\0 t.deepEqual(buffer.readInt32LE(12), 12); // length of env var definition - t.deepEqual(buffer.toString('utf8', 16, 28), 'foo=bar_baz\0'); // [key]=[value]\0 + t.deepEqual(buffer.toString("utf8", 16, 28), "foo=bar_baz\0"); // [key]=[value]\0 }); }); -ava_1.default('getCombinedTracerConfig - return undefined when no languages are traced languages', async (t) => { +ava_1.default("getCombinedTracerConfig - return undefined when no languages are traced languages", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); // No traced languages config.languages = [languages_1.Language.javascript, languages_1.Language.python]; const codeQL = codeql_1.setCodeQL({ - getTracerEnv: async function () { + async getTracerEnv() { return { - 'ODASA_TRACER_CONFIGURATION': 'abc', - 'foo': 'bar' + ODASA_TRACER_CONFIGURATION: "abc", + foo: "bar", }; }, }); t.deepEqual(await tracer_config_1.getCombinedTracerConfig(config, codeQL), undefined); }); }); -ava_1.default('getCombinedTracerConfig - valid spec file', async (t) => { +ava_1.default("getCombinedTracerConfig - valid spec file", async (t) => { await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec = path.join(tmpDir, 'spec'); - fs.writeFileSync(spec, 'foo.log\n2\nabc\ndef'); + const spec = path.join(tmpDir, "spec"); + fs.writeFileSync(spec, "foo.log\n2\nabc\ndef"); const codeQL = codeql_1.setCodeQL({ - getTracerEnv: async function () { + async getTracerEnv() { return { - 'ODASA_TRACER_CONFIGURATION': spec, - 'foo': 'bar', + ODASA_TRACER_CONFIGURATION: spec, + foo: "bar", }; }, }); const result = await tracer_config_1.getCombinedTracerConfig(config, codeQL); const expectedEnv = { - 'foo': 'bar', - 'ODASA_TRACER_CONFIGURATION': result.spec, + foo: "bar", + ODASA_TRACER_CONFIGURATION: result.spec, }; - if (process.platform === 'darwin') { - expectedEnv['DYLD_INSERT_LIBRARIES'] = path.join(path.dirname(codeQL.getPath()), 'tools', 'osx64', 'libtrace.dylib'); + if (process.platform === "darwin") { + expectedEnv["DYLD_INSERT_LIBRARIES"] = path.join(path.dirname(codeQL.getPath()), "tools", "osx64", "libtrace.dylib"); } - else if (process.platform !== 'win32') { - expectedEnv['LD_PRELOAD'] = path.join(path.dirname(codeQL.getPath()), 'tools', 'linux64', '${LIB}trace.so'); + else if (process.platform !== "win32") { + expectedEnv["LD_PRELOAD"] = path.join(path.dirname(codeQL.getPath()), "tools", "linux64", "${LIB}trace.so"); } t.deepEqual(result, { - spec: path.join(tmpDir, 'compound-spec'), + spec: path.join(tmpDir, "compound-spec"), env: expectedEnv, }); }); diff --git a/lib/tracer-config.test.js.map b/lib/tracer-config.test.js.map index ccd2c3f0d..fd7e47647 100644 --- a/lib/tracer-config.test.js.map +++ b/lib/tracer-config.test.js.map @@ -1 +1 @@ -{"version":3,"file":"tracer-config.test.js","sourceRoot":"","sources":["../src/tracer-config.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tracer-config.test.js","sourceRoot":"","sources":["../src/tracer-config.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/upload-lib.js b/lib/upload-lib.js index 654cd4b28..f6d0b2fdb 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -23,18 +23,18 @@ const util = __importStar(require("./util")); // Takes a list of paths to sarif files and combines them together, // returning the contents of the combined sarif file. function combineSarifFiles(sarifFiles) { - let combinedSarif = { + const combinedSarif = { version: null, - runs: [] + runs: [], }; - for (let sarifFile of sarifFiles) { - let sarifObject = JSON.parse(fs.readFileSync(sarifFile, 'utf8')); + for (const sarifFile of sarifFiles) { + const sarifObject = JSON.parse(fs.readFileSync(sarifFile, "utf8")); // Check SARIF version if (combinedSarif.version === null) { combinedSarif.version = sarifObject.version; } else if (combinedSarif.version !== sarifObject.version) { - throw "Different SARIF versions encountered: " + combinedSarif.version + " and " + sarifObject.version; + throw `Different SARIF versions encountered: ${combinedSarif.version} and ${sarifObject.version}`; } combinedSarif.runs.push(...sarifObject.runs); } @@ -44,9 +44,9 @@ exports.combineSarifFiles = combineSarifFiles; // Upload the given payload. // If the request fails then this will retry a small number of times. async function uploadPayload(payload, repositoryNwo, githubAuth, githubUrl, mode, logger) { - logger.info('Uploading results'); + logger.info("Uploading results"); // If in test mode we don't want to upload the results - const testMode = process.env['TEST_MODE'] === 'true' || false; + const testMode = process.env["TEST_MODE"] === "true" || false; if (testMode) { return; } @@ -57,15 +57,15 @@ async function uploadPayload(payload, repositoryNwo, githubAuth, githubUrl, mode const backoffPeriods = [1, 5, 15]; const client = api.getApiClient(githubAuth, githubUrl); for (let attempt = 0; attempt <= backoffPeriods.length; attempt++) { - const reqURL = mode === 'actions' - ? 'PUT /repos/:owner/:repo/code-scanning/analysis' - : 'POST /repos/:owner/:repo/code-scanning/sarifs'; - const response = await client.request(reqURL, ({ + const reqURL = mode === "actions" + ? "PUT /repos/:owner/:repo/code-scanning/analysis" + : "POST /repos/:owner/:repo/code-scanning/sarifs"; + const response = await client.request(reqURL, { owner: repositoryNwo.owner, repo: repositoryNwo.repo, data: payload, - })); - logger.debug('response status: ' + response.status); + }); + logger.debug(`response status: ${response.status}`); const statusCode = response.status; if (statusCode === 202) { logger.info("Successfully uploaded results"); @@ -74,28 +74,26 @@ async function uploadPayload(payload, repositoryNwo, githubAuth, githubUrl, mode const requestID = response.headers["x-github-request-id"]; // On any other status code that's not 5xx mark the upload as failed if (!statusCode || statusCode < 500 || statusCode >= 600) { - throw new Error('Upload failed (' + requestID + '): (' + statusCode + ') ' + JSON.stringify(response.data)); + throw new Error(`Upload failed (${requestID}): (${statusCode}) ${JSON.stringify(response.data)}`); } // On a 5xx status code we may retry the request if (attempt < backoffPeriods.length) { // Log the failure as a warning but don't mark the action as failed yet - logger.warning('Upload attempt (' + (attempt + 1) + ' of ' + (backoffPeriods.length + 1) + - ') failed (' + requestID + '). Retrying in ' + backoffPeriods[attempt] + - ' seconds: (' + statusCode + ') ' + JSON.stringify(response.data)); + logger.warning(`Upload attempt (${attempt + 1} of ${backoffPeriods.length + 1}) failed (${requestID}). Retrying in ${backoffPeriods[attempt]} seconds: (${statusCode}) ${JSON.stringify(response.data)}`); // Sleep for the backoff period - await new Promise(r => setTimeout(r, backoffPeriods[attempt] * 1000)); + await new Promise((r) => setTimeout(r, backoffPeriods[attempt] * 1000)); continue; } else { // If the upload fails with 5xx then we assume it is a temporary problem // and not an error that the user has caused or can fix. // We avoid marking the job as failed to avoid breaking CI workflows. - throw new Error('Upload failed (' + requestID + '): (' + statusCode + ') ' + JSON.stringify(response.data)); + throw new Error(`Upload failed (${requestID}): (${statusCode}) ${JSON.stringify(response.data)}`); } } // This case shouldn't ever happen as the final iteration of the loop // will always throw an error instead of exiting to here. - throw new Error('Upload failed'); + throw new Error("Upload failed"); } // Uploads a single sarif file or a directory of sarif files // depending on what the path happens to refer to. @@ -107,11 +105,11 @@ async function upload(sarifPath, repositoryNwo, commitOid, ref, analysisKey, ana } if (fs.lstatSync(sarifPath).isDirectory()) { fs.readdirSync(sarifPath) - .filter(f => f.endsWith(".sarif")) - .map(f => path.resolve(sarifPath, f)) - .forEach(f => sarifFiles.push(f)); + .filter((f) => f.endsWith(".sarif")) + .map((f) => path.resolve(sarifPath, f)) + .forEach((f) => sarifFiles.push(f)); if (sarifFiles.length === 0) { - throw new Error("No SARIF files found to upload in \"" + sarifPath + "\"."); + throw new Error(`No SARIF files found to upload in "${sarifPath}".`); } } else { @@ -132,28 +130,28 @@ exports.countResultsInSarif = countResultsInSarif; // Validates that the given file path refers to a valid SARIF file. // Throws an error if the file is invalid. function validateSarifFileSchema(sarifFilePath, logger) { - const sarif = JSON.parse(fs.readFileSync(sarifFilePath, 'utf8')); - const schema = require('../src/sarif_v2.1.0_schema.json'); + const sarif = JSON.parse(fs.readFileSync(sarifFilePath, "utf8")); + const schema = require("../src/sarif_v2.1.0_schema.json"); const result = new jsonschema.Validator().validate(sarif, schema); if (!result.valid) { // Output the more verbose error messages in groups as these may be very large. for (const error of result.errors) { - logger.startGroup("Error details: " + error.stack); + logger.startGroup(`Error details: ${error.stack}`); logger.info(JSON.stringify(error, null, 2)); logger.endGroup(); } // Set the main error message to the stacks of all the errors. // This should be of a manageable size and may even give enough to fix the error. - const sarifErrors = result.errors.map(e => "- " + e.stack); - throw new Error("Unable to upload \"" + sarifFilePath + "\" as it is not valid SARIF:\n" + sarifErrors.join("\n")); + const sarifErrors = result.errors.map((e) => `- ${e.stack}`); + throw new Error(`Unable to upload "${sarifFilePath}" as it is not valid SARIF:\n${sarifErrors.join("\n")}`); } } exports.validateSarifFileSchema = validateSarifFileSchema; // Uploads the given set of sarif files. // Returns true iff the upload occurred and succeeded async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKey, analysisName, workflowRunID, checkoutPath, environment, githubAuth, githubUrl, mode, logger) { - logger.info("Uploading sarif files: " + JSON.stringify(sarifFiles)); - if (mode === 'actions') { + logger.info(`Uploading sarif files: ${JSON.stringify(sarifFiles)}`); + if (mode === "actions") { // This check only works on actions as env vars don't persist between calls to the runner const sentinelEnvVar = "CODEQL_UPLOAD_SARIF"; if (process.env[sentinelEnvVar]) { @@ -167,40 +165,40 @@ async function uploadFiles(sarifFiles, repositoryNwo, commitOid, ref, analysisKe } let sarifPayload = combineSarifFiles(sarifFiles); sarifPayload = fingerprints.addFingerprints(sarifPayload, checkoutPath, logger); - const zipped_sarif = zlib_1.default.gzipSync(sarifPayload).toString('base64'); - let checkoutURI = file_url_1.default(checkoutPath); + const zipped_sarif = zlib_1.default.gzipSync(sarifPayload).toString("base64"); + const checkoutURI = file_url_1.default(checkoutPath); const toolNames = util.getToolNames(sarifPayload); let payload; - if (mode === 'actions') { + if (mode === "actions") { payload = JSON.stringify({ - "commit_oid": commitOid, - "ref": ref, - "analysis_key": analysisKey, - "analysis_name": analysisName, - "sarif": zipped_sarif, - "workflow_run_id": workflowRunID, - "checkout_uri": checkoutURI, - "environment": environment, - "started_at": process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT], - "tool_names": toolNames, + commit_oid: commitOid, + ref, + analysis_key: analysisKey, + analysis_name: analysisName, + sarif: zipped_sarif, + workflow_run_id: workflowRunID, + checkout_uri: checkoutURI, + environment, + started_at: process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT], + tool_names: toolNames, }); } else { payload = JSON.stringify({ - "commit_sha": commitOid, - "ref": ref, - "sarif": zipped_sarif, - "checkout_uri": checkoutURI, - "tool_name": toolNames[0], + commit_sha: commitOid, + ref, + sarif: zipped_sarif, + checkout_uri: checkoutURI, + tool_name: toolNames[0], }); } // Log some useful debug info about the info const rawUploadSizeBytes = sarifPayload.length; - logger.debug("Raw upload size: " + rawUploadSizeBytes + " bytes"); + logger.debug(`Raw upload size: ${rawUploadSizeBytes} bytes`); const zippedUploadSizeBytes = zipped_sarif.length; - logger.debug("Base64 zipped upload size: " + zippedUploadSizeBytes + " bytes"); + logger.debug(`Base64 zipped upload size: ${zippedUploadSizeBytes} bytes`); const numResultInSarif = countResultsInSarif(sarifPayload); - logger.debug("Number of results in upload: " + numResultInSarif); + logger.debug(`Number of results in upload: ${numResultInSarif}`); // Make the upload await uploadPayload(payload, repositoryNwo, githubAuth, githubUrl, mode, logger); return { diff --git a/lib/upload-lib.js.map b/lib/upload-lib.js.map index 958cfdb16..89848dc3d 100644 --- a/lib/upload-lib.js.map +++ b/lib/upload-lib.js.map @@ -1 +1 @@ -{"version":3,"file":"upload-lib.js","sourceRoot":"","sources":["../src/upload-lib.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"upload-lib.js","sourceRoot":"","sources":["../src/upload-lib.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/upload-lib.test.js b/lib/upload-lib.test.js index 7be97bc20..3975f9c0b 100644 --- a/lib/upload-lib.test.js +++ b/lib/upload-lib.test.js @@ -15,12 +15,12 @@ const logging_1 = require("./logging"); const testing_utils_1 = require("./testing-utils"); const uploadLib = __importStar(require("./upload-lib")); testing_utils_1.setupTests(ava_1.default); -ava_1.default('validateSarifFileSchema - valid', t => { - const inputFile = __dirname + '/../src/testdata/valid-sarif.sarif'; +ava_1.default("validateSarifFileSchema - valid", (t) => { + const inputFile = `${__dirname}/../src/testdata/valid-sarif.sarif`; t.notThrows(() => uploadLib.validateSarifFileSchema(inputFile, logging_1.getRunnerLogger(true))); }); -ava_1.default('validateSarifFileSchema - invalid', t => { - const inputFile = __dirname + '/../src/testdata/invalid-sarif.sarif'; +ava_1.default("validateSarifFileSchema - invalid", (t) => { + const inputFile = `${__dirname}/../src/testdata/invalid-sarif.sarif`; t.throws(() => uploadLib.validateSarifFileSchema(inputFile, logging_1.getRunnerLogger(true))); }); //# sourceMappingURL=upload-lib.test.js.map \ No newline at end of file diff --git a/lib/upload-lib.test.js.map b/lib/upload-lib.test.js.map index c2158326b..7ea343f68 100644 --- a/lib/upload-lib.test.js.map +++ b/lib/upload-lib.test.js.map @@ -1 +1 @@ -{"version":3,"file":"upload-lib.test.js","sourceRoot":"","sources":["../src/upload-lib.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAuB;AAEvB,uCAA4C;AAC5C,mDAA2C;AAC3C,wDAA0C;AAE1C,0BAAU,CAAC,aAAI,CAAC,CAAC;AAEjB,aAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE;IAC1C,MAAM,SAAS,GAAG,SAAS,GAAG,oCAAoC,CAAC;IACnE,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,uBAAuB,CAAC,SAAS,EAAE,yBAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,mCAAmC,EAAE,CAAC,CAAC,EAAE;IAC5C,MAAM,SAAS,GAAG,SAAS,GAAG,sCAAsC,CAAC;IACrE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,uBAAuB,CAAC,SAAS,EAAE,yBAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"upload-lib.test.js","sourceRoot":"","sources":["../src/upload-lib.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8CAAuB;AAEvB,uCAA4C;AAC5C,mDAA6C;AAC7C,wDAA0C;AAE1C,0BAAU,CAAC,aAAI,CAAC,CAAC;AAEjB,aAAI,CAAC,iCAAiC,EAAE,CAAC,CAAC,EAAE,EAAE;IAC5C,MAAM,SAAS,GAAG,GAAG,SAAS,oCAAoC,CAAC;IACnE,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,CACf,SAAS,CAAC,uBAAuB,CAAC,SAAS,EAAE,yBAAe,CAAC,IAAI,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,mCAAmC,EAAE,CAAC,CAAC,EAAE,EAAE;IAC9C,MAAM,SAAS,GAAG,GAAG,SAAS,sCAAsC,CAAC;IACrE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CACZ,SAAS,CAAC,uBAAuB,CAAC,SAAS,EAAE,yBAAe,CAAC,IAAI,CAAC,CAAC,CACpE,CAAC;AACJ,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index f84d33db5..4602caa81 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -13,7 +13,7 @@ const repository_1 = require("./repository"); const upload_lib = __importStar(require("./upload-lib")); const util = __importStar(require("./util")); async function sendSuccessStatusReport(startedAt, uploadStats) { - const statusReportBase = await util.createStatusReportBase('upload-sarif', 'success', startedAt); + const statusReportBase = await util.createStatusReportBase("upload-sarif", "success", startedAt); const statusReport = { ...statusReportBase, ...uploadStats, @@ -22,22 +22,22 @@ async function sendSuccessStatusReport(startedAt, uploadStats) { } async function run() { const startedAt = new Date(); - if (!await util.sendStatusReport(await util.createStatusReportBase('upload-sarif', 'starting', startedAt), true)) { + if (!(await util.sendStatusReport(await util.createStatusReportBase("upload-sarif", "starting", startedAt), true))) { return; } try { - const uploadStats = await upload_lib.upload(core.getInput('sarif_file'), repository_1.parseRepositoryNwo(util.getRequiredEnvParam('GITHUB_REPOSITORY')), await util.getCommitOid(), util.getRef(), await util.getAnalysisKey(), util.getRequiredEnvParam('GITHUB_WORKFLOW'), util.getWorkflowRunID(), core.getInput('checkout_path'), core.getInput('matrix'), core.getInput('token'), util.getRequiredEnvParam('GITHUB_SERVER_URL'), 'actions', logging_1.getActionsLogger()); + const uploadStats = await upload_lib.upload(core.getInput("sarif_file"), repository_1.parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")), await util.getCommitOid(), util.getRef(), await util.getAnalysisKey(), util.getRequiredEnvParam("GITHUB_WORKFLOW"), util.getWorkflowRunID(), core.getInput("checkout_path"), core.getInput("matrix"), core.getInput("token"), util.getRequiredEnvParam("GITHUB_SERVER_URL"), "actions", logging_1.getActionsLogger()); await sendSuccessStatusReport(startedAt, uploadStats); } catch (error) { core.setFailed(error.message); console.log(error); - await util.sendStatusReport(await util.createStatusReportBase('upload-sarif', 'failure', startedAt, error.message, error.stack)); + await util.sendStatusReport(await util.createStatusReportBase("upload-sarif", "failure", startedAt, error.message, error.stack)); return; } } -run().catch(e => { - core.setFailed("codeql/upload-sarif action failed: " + e); +run().catch((e) => { + core.setFailed(`codeql/upload-sarif action failed: ${e}`); console.log(e); }); //# sourceMappingURL=upload-sarif-action.js.map \ No newline at end of file diff --git a/lib/upload-sarif-action.js.map b/lib/upload-sarif-action.js.map index fa293b410..0af8c2f68 100644 --- a/lib/upload-sarif-action.js.map +++ b/lib/upload-sarif-action.js.map @@ -1 +1 @@ -{"version":3,"file":"upload-sarif-action.js","sourceRoot":"","sources":["../src/upload-sarif-action.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAsC;AAEtC,uCAA6C;AAC7C,6CAAkD;AAClD,yDAA2C;AAC3C,6CAA+B;AAI/B,KAAK,UAAU,uBAAuB,CAAC,SAAe,EAAE,WAA0C;IAChG,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACjG,MAAM,YAAY,GAA4B;QAC5C,GAAG,gBAAgB;QACnB,GAAI,WAAW;KAChB,CAAC;IACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE;QAChH,OAAO;KACR;IAED,IAAI;QACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,CACzC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC3B,+BAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,EACjE,MAAM,IAAI,CAAC,YAAY,EAAE,EACzB,IAAI,CAAC,MAAM,EAAE,EACb,MAAM,IAAI,CAAC,cAAc,EAAE,EAC3B,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAC3C,IAAI,CAAC,gBAAgB,EAAE,EACvB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EACtB,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,EAC7C,SAAS,EACT,0BAAgB,EAAE,CAAC,CAAC;QACtB,MAAM,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;KAEvD;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,IAAI,CAAC,sBAAsB,CAC3D,cAAc,EACd,SAAS,EACT,SAAS,EACT,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAChB,OAAO;KACR;AACH,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACd,IAAI,CAAC,SAAS,CAAC,qCAAqC,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"} \ No newline at end of file +{"version":3,"file":"upload-sarif-action.js","sourceRoot":"","sources":["../src/upload-sarif-action.ts"],"names":[],"mappings":";;;;;;;;;AAAA,oDAAsC;AAEtC,uCAA6C;AAC7C,6CAAkD;AAClD,yDAA2C;AAC3C,6CAA+B;AAM/B,KAAK,UAAU,uBAAuB,CACpC,SAAe,EACf,WAA0C;IAE1C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CACxD,cAAc,EACd,SAAS,EACT,SAAS,CACV,CAAC;IACF,MAAM,YAAY,GAA4B;QAC5C,GAAG,gBAAgB;QACnB,GAAG,WAAW;KACf,CAAC;IACF,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,IACE,CAAC,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAC3B,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,UAAU,EAAE,SAAS,CAAC,EACxE,IAAI,CACL,CAAC,EACF;QACA,OAAO;KACR;IAED,IAAI;QACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,CACzC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC3B,+BAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,EACjE,MAAM,IAAI,CAAC,YAAY,EAAE,EACzB,IAAI,CAAC,MAAM,EAAE,EACb,MAAM,IAAI,CAAC,cAAc,EAAE,EAC3B,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAC3C,IAAI,CAAC,gBAAgB,EAAE,EACvB,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAC9B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EACtB,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,EAC7C,SAAS,EACT,0BAAgB,EAAE,CACnB,CAAC;QACF,MAAM,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;KACvD;IAAC,OAAO,KAAK,EAAE;QACd,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,MAAM,IAAI,CAAC,gBAAgB,CACzB,MAAM,IAAI,CAAC,sBAAsB,CAC/B,cAAc,EACd,SAAS,EACT,SAAS,EACT,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,KAAK,CACZ,CACF,CAAC;QACF,OAAO;KACR;AACH,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IAChB,IAAI,CAAC,SAAS,CAAC,sCAAsC,CAAC,EAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/lib/util.js b/lib/util.js index e61258326..f3d7e8446 100644 --- a/lib/util.js +++ b/lib/util.js @@ -24,9 +24,9 @@ exports.GITHUB_DOTCOM_URL = "https://github.com"; function getRequiredEnvParam(paramName) { const value = process.env[paramName]; if (value === undefined || value.length === 0) { - throw new Error(paramName + ' environment variable must be set'); + throw new Error(`${paramName} environment variable must be set`); } - core.debug(paramName + '=' + value); + core.debug(`${paramName}=${value}`); return value; } exports.getRequiredEnvParam = getRequiredEnvParam; @@ -34,7 +34,7 @@ exports.getRequiredEnvParam = getRequiredEnvParam; * Get the extra options for the codeql commands. */ function getExtraOptionsEnvParam() { - const varName = 'CODEQL_ACTION_EXTRA_OPTIONS'; + const varName = "CODEQL_ACTION_EXTRA_OPTIONS"; const raw = process.env[varName]; if (raw === undefined || raw.length === 0) { return {}; @@ -43,16 +43,14 @@ function getExtraOptionsEnvParam() { return JSON.parse(raw); } catch (e) { - throw new Error(varName + - ' environment variable is set, but does not contain valid JSON: ' + - e.message); + throw new Error(`${varName} environment variable is set, but does not contain valid JSON: ${e.message}`); } } exports.getExtraOptionsEnvParam = getExtraOptionsEnvParam; function isLocalRun() { - return !!process.env.CODEQL_LOCAL_RUN - && process.env.CODEQL_LOCAL_RUN !== 'false' - && process.env.CODEQL_LOCAL_RUN !== '0'; + return (!!process.env.CODEQL_LOCAL_RUN && + process.env.CODEQL_LOCAL_RUN !== "false" && + process.env.CODEQL_LOCAL_RUN !== "0"); } exports.isLocalRun = isLocalRun; /** @@ -62,9 +60,9 @@ function prepareLocalRunEnvironment() { if (!isLocalRun()) { return; } - core.debug('Action is running locally.'); + core.debug("Action is running locally."); if (!process.env.GITHUB_JOB) { - core.exportVariable('GITHUB_JOB', 'UNKNOWN-JOB'); + core.exportVariable("GITHUB_JOB", "UNKNOWN-JOB"); } } exports.prepareLocalRunEnvironment = prepareLocalRunEnvironment; @@ -80,19 +78,23 @@ async function getCommitOid() { // Even if this does go wrong, it's not a huge problem for the alerts to // reported on the merge commit. try { - let commitOid = ''; - await new toolrunnner.ToolRunner('git', ['rev-parse', 'HEAD'], { + let commitOid = ""; + await new toolrunnner.ToolRunner("git", ["rev-parse", "HEAD"], { silent: true, listeners: { - stdout: (data) => { commitOid += data.toString(); }, - stderr: (data) => { process.stderr.write(data); } - } + stdout: (data) => { + commitOid += data.toString(); + }, + stderr: (data) => { + process.stderr.write(data); + }, + }, }).exec(); return commitOid.trim(); } catch (e) { - core.info("Failed to call git to get current commit. Continuing with data from environment: " + e); - return getRequiredEnvParam('GITHUB_SHA'); + core.info(`Failed to call git to get current commit. Continuing with data from environment: ${e}`); + return getRequiredEnvParam("GITHUB_SHA"); } } exports.getCommitOid = getCommitOid; @@ -100,27 +102,27 @@ exports.getCommitOid = getCommitOid; * Get the path of the currently executing workflow. */ async function getWorkflowPath() { - const repo_nwo = getRequiredEnvParam('GITHUB_REPOSITORY').split("/"); + const repo_nwo = getRequiredEnvParam("GITHUB_REPOSITORY").split("/"); const owner = repo_nwo[0]; const repo = repo_nwo[1]; - const run_id = Number(getRequiredEnvParam('GITHUB_RUN_ID')); + const run_id = Number(getRequiredEnvParam("GITHUB_RUN_ID")); const apiClient = api.getActionsApiClient(); - const runsResponse = await apiClient.request('GET /repos/:owner/:repo/actions/runs/:run_id', { + const runsResponse = await apiClient.request("GET /repos/:owner/:repo/actions/runs/:run_id", { owner, repo, - run_id + run_id, }); const workflowUrl = runsResponse.data.workflow_url; - const workflowResponse = await apiClient.request('GET ' + workflowUrl); + const workflowResponse = await apiClient.request(`GET ${workflowUrl}`); return workflowResponse.data.path; } /** * Get the workflow run ID. */ function getWorkflowRunID() { - const workflowRunID = parseInt(getRequiredEnvParam('GITHUB_RUN_ID'), 10); + const workflowRunID = parseInt(getRequiredEnvParam("GITHUB_RUN_ID"), 10); if (Number.isNaN(workflowRunID)) { - throw new Error('GITHUB_RUN_ID must define a non NaN workflow run ID'); + throw new Error("GITHUB_RUN_ID must define a non NaN workflow run ID"); } return workflowRunID; } @@ -133,14 +135,14 @@ exports.getWorkflowRunID = getWorkflowRunID; * the github API, but after that the result will be cached. */ async function getAnalysisKey() { - const analysisKeyEnvVar = 'CODEQL_ACTION_ANALYSIS_KEY'; + const analysisKeyEnvVar = "CODEQL_ACTION_ANALYSIS_KEY"; let analysisKey = process.env[analysisKeyEnvVar]; if (analysisKey !== undefined) { return analysisKey; } const workflowPath = await getWorkflowPath(); - const jobName = getRequiredEnvParam('GITHUB_JOB'); - analysisKey = workflowPath + ':' + jobName; + const jobName = getRequiredEnvParam("GITHUB_JOB"); + analysisKey = `${workflowPath}:${jobName}`; core.exportVariable(analysisKeyEnvVar, analysisKey); return analysisKey; } @@ -151,14 +153,14 @@ exports.getAnalysisKey = getAnalysisKey; function getRef() { // Will be in the form "refs/heads/master" on a push event // or in the form "refs/pull/N/merge" on a pull_request event - const ref = getRequiredEnvParam('GITHUB_REF'); + const ref = getRequiredEnvParam("GITHUB_REF"); // For pull request refs we want to convert from the 'merge' ref // to the 'head' ref, as that is what we want to analyse. // There should have been some code earlier in the workflow to do // the checkout, but we have no way of verifying that here. const pull_ref_regex = /refs\/pull\/(\d+)\/merge/; if (pull_ref_regex.test(ref)) { - return ref.replace(pull_ref_regex, 'refs/pull/$1/head'); + return ref.replace(pull_ref_regex, "refs/pull/$1/head"); } else { return ref; @@ -175,33 +177,33 @@ exports.getRef = getRef; * @param exception Exception (only supply if status is 'failure') */ async function createStatusReportBase(actionName, status, actionStartedAt, cause, exception) { - const commitOid = process.env['GITHUB_SHA'] || ''; + const commitOid = process.env["GITHUB_SHA"] || ""; const ref = getRef(); - const workflowRunIDStr = process.env['GITHUB_RUN_ID']; + const workflowRunIDStr = process.env["GITHUB_RUN_ID"]; let workflowRunID = -1; if (workflowRunIDStr) { workflowRunID = parseInt(workflowRunIDStr, 10); } - const workflowName = process.env['GITHUB_WORKFLOW'] || ''; - const jobName = process.env['GITHUB_JOB'] || ''; + const workflowName = process.env["GITHUB_WORKFLOW"] || ""; + const jobName = process.env["GITHUB_JOB"] || ""; const analysis_key = await getAnalysisKey(); let workflowStartedAt = process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT]; if (workflowStartedAt === undefined) { workflowStartedAt = actionStartedAt.toISOString(); core.exportVariable(sharedEnv.CODEQL_WORKFLOW_STARTED_AT, workflowStartedAt); } - let statusReport = { + const statusReport = { workflow_run_id: workflowRunID, workflow_name: workflowName, job_name: jobName, - analysis_key: analysis_key, + analysis_key, commit_oid: commitOid, - ref: ref, + ref, action_name: actionName, action_oid: "unknown", started_at: workflowStartedAt, action_started_at: actionStartedAt.toISOString(), - status: status + status, }; // Add optional parameters if (cause) { @@ -210,10 +212,10 @@ async function createStatusReportBase(actionName, status, actionStartedAt, cause if (exception) { statusReport.exception = exception; } - if (status === 'success' || status === 'failure' || status === 'aborted') { + if (status === "success" || status === "failure" || status === "aborted") { statusReport.completed_at = new Date().toISOString(); } - let matrix = core.getInput('matrix'); + const matrix = core.getInput("matrix"); if (matrix) { statusReport.matrix_vars = matrix; } @@ -239,13 +241,13 @@ async function sendStatusReport(statusReport, ignoreFailures) { return true; } const statusReportJSON = JSON.stringify(statusReport); - core.debug('Sending status report: ' + statusReportJSON); + core.debug(`Sending status report: ${statusReportJSON}`); const nwo = getRequiredEnvParam("GITHUB_REPOSITORY"); const [owner, repo] = nwo.split("/"); const client = api.getActionsApiClient(); - const statusResponse = await client.request('PUT /repos/:owner/:repo/code-scanning/analysis/status', { - owner: owner, - repo: repo, + const statusResponse = await client.request("PUT /repos/:owner/:repo/code-scanning/analysis/status", { + owner, + repo, data: statusReportJSON, }); if (!ignoreFailures) { @@ -256,11 +258,11 @@ async function sendStatusReport(statusReport, ignoreFailures) { // Other failure responses (or lack thereof) could be transitory and should not // cause the action to fail. if (statusResponse.status === 403) { - core.setFailed('The repo on which this action is running is not opted-in to CodeQL code scanning.'); + core.setFailed("The repo on which this action is running is not opted-in to CodeQL code scanning."); return false; } if (statusResponse.status === 404) { - core.setFailed('Not authorized to used the CodeQL code scanning feature on this repo.'); + core.setFailed("Not authorized to used the CodeQL code scanning feature on this repo."); return false; } } @@ -288,11 +290,11 @@ exports.getToolNames = getToolNames; // Creates a random temporary directory, runs the given body, and then deletes the directory. // Mostly intended for use within tests. async function withTmpDir(body) { - const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'codeql-action-')); - const realSubdir = path.join(tmpDir, 'real'); + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "codeql-action-")); + const realSubdir = path.join(tmpDir, "real"); fs.mkdirSync(realSubdir); - const symlinkSubdir = path.join(tmpDir, 'symlink'); - fs.symlinkSync(realSubdir, symlinkSubdir, 'dir'); + const symlinkSubdir = path.join(tmpDir, "symlink"); + fs.symlinkSync(realSubdir, symlinkSubdir, "dir"); const result = await body(symlinkSubdir); fs.rmdirSync(tmpDir, { recursive: true }); return result; @@ -309,7 +311,7 @@ function getMemoryFlag(userInput) { if (userInput) { memoryToUseMegaBytes = Number(userInput); if (Number.isNaN(memoryToUseMegaBytes) || memoryToUseMegaBytes <= 0) { - throw new Error("Invalid RAM setting \"" + userInput + "\", specified."); + throw new Error(`Invalid RAM setting "${userInput}", specified.`); } } else { @@ -318,7 +320,7 @@ function getMemoryFlag(userInput) { const systemReservedMemoryMegaBytes = 256; memoryToUseMegaBytes = totalMemoryMegaBytes - systemReservedMemoryMegaBytes; } - return "--ram=" + Math.floor(memoryToUseMegaBytes); + return `--ram=${Math.floor(memoryToUseMegaBytes)}`; } exports.getMemoryFlag = getMemoryFlag; /** @@ -371,7 +373,7 @@ exports.getThreadsFlag = getThreadsFlag; * Get the directory where CodeQL databases should be placed. */ function getCodeQLDatabasesDir(tempDir) { - return path.resolve(tempDir, 'codeql_databases'); + return path.resolve(tempDir, "codeql_databases"); } exports.getCodeQLDatabasesDir = getCodeQLDatabasesDir; /** diff --git a/lib/util.js.map b/lib/util.js.map index 7aaa5a381..4fdc54f57 100644 --- a/lib/util.js.map +++ b/lib/util.js.map @@ -1 +1 @@ -{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/util.test.js b/lib/util.test.js index 225385022..9ca3a37ca 100644 --- a/lib/util.test.js +++ b/lib/util.test.js @@ -17,12 +17,12 @@ const logging_1 = require("./logging"); const testing_utils_1 = require("./testing-utils"); const util = __importStar(require("./util")); testing_utils_1.setupTests(ava_1.default); -ava_1.default('getToolNames', t => { - const input = fs.readFileSync(__dirname + '/../src/testdata/tool-names.sarif', 'utf8'); +ava_1.default("getToolNames", (t) => { + const input = fs.readFileSync(`${__dirname}/../src/testdata/tool-names.sarif`, "utf8"); const toolNames = util.getToolNames(input); t.deepEqual(toolNames, ["CodeQL command-line toolchain", "ESLint"]); }); -ava_1.default('getMemoryFlag() should return the correct --ram flag', t => { +ava_1.default("getMemoryFlag() should return the correct --ram flag", (t) => { const totalMem = Math.floor(os.totalmem() / (1024 * 1024)); const tests = { "": `--ram=${totalMem - 256}`, @@ -33,12 +33,12 @@ ava_1.default('getMemoryFlag() should return the correct --ram flag', t => { t.deepEqual(flag, expectedFlag); } }); -ava_1.default('getMemoryFlag() throws if the ram input is < 0 or NaN', t => { +ava_1.default("getMemoryFlag() throws if the ram input is < 0 or NaN", (t) => { for (const input of ["-1", "hello!"]) { t.throws(() => util.getMemoryFlag(input)); } }); -ava_1.default('getAddSnippetsFlag() should return the correct flag', t => { +ava_1.default("getAddSnippetsFlag() should return the correct flag", (t) => { t.deepEqual(util.getAddSnippetsFlag(true), "--sarif-add-snippets"); t.deepEqual(util.getAddSnippetsFlag("true"), "--sarif-add-snippets"); t.deepEqual(util.getAddSnippetsFlag(false), "--no-sarif-add-snippets"); @@ -46,73 +46,72 @@ ava_1.default('getAddSnippetsFlag() should return the correct flag', t => { t.deepEqual(util.getAddSnippetsFlag("false"), "--no-sarif-add-snippets"); t.deepEqual(util.getAddSnippetsFlag("foo bar"), "--no-sarif-add-snippets"); }); -ava_1.default('getThreadsFlag() should return the correct --threads flag', t => { +ava_1.default("getThreadsFlag() should return the correct --threads flag", (t) => { const numCpus = os.cpus().length; const tests = { "0": "--threads=0", "1": "--threads=1", [`${numCpus + 1}`]: `--threads=${numCpus}`, - [`${-numCpus - 1}`]: `--threads=${-numCpus}` + [`${-numCpus - 1}`]: `--threads=${-numCpus}`, }; for (const [input, expectedFlag] of Object.entries(tests)) { const flag = util.getThreadsFlag(input, logging_1.getRunnerLogger(true)); t.deepEqual(flag, expectedFlag); } }); -ava_1.default('getThreadsFlag() throws if the threads input is not an integer', t => { +ava_1.default("getThreadsFlag() throws if the threads input is not an integer", (t) => { t.throws(() => util.getThreadsFlag("hello!", logging_1.getRunnerLogger(true))); }); -ava_1.default('getRef() throws on the empty string', t => { +ava_1.default("getRef() throws on the empty string", (t) => { process.env["GITHUB_REF"] = ""; t.throws(util.getRef); }); -ava_1.default('isLocalRun() runs correctly', t => { +ava_1.default("isLocalRun() runs correctly", (t) => { const origLocalRun = process.env.CODEQL_LOCAL_RUN; - process.env.CODEQL_LOCAL_RUN = ''; + process.env.CODEQL_LOCAL_RUN = ""; t.assert(!util.isLocalRun()); - process.env.CODEQL_LOCAL_RUN = 'false'; + process.env.CODEQL_LOCAL_RUN = "false"; t.assert(!util.isLocalRun()); - process.env.CODEQL_LOCAL_RUN = '0'; + process.env.CODEQL_LOCAL_RUN = "0"; t.assert(!util.isLocalRun()); - process.env.CODEQL_LOCAL_RUN = 'true'; + process.env.CODEQL_LOCAL_RUN = "true"; t.assert(util.isLocalRun()); - process.env.CODEQL_LOCAL_RUN = 'hucairz'; + process.env.CODEQL_LOCAL_RUN = "hucairz"; t.assert(util.isLocalRun()); process.env.CODEQL_LOCAL_RUN = origLocalRun; }); -ava_1.default('prepareEnvironment() when a local run', t => { +ava_1.default("prepareEnvironment() when a local run", (t) => { const origLocalRun = process.env.CODEQL_LOCAL_RUN; - process.env.CODEQL_LOCAL_RUN = 'false'; - process.env.GITHUB_JOB = 'YYY'; + process.env.CODEQL_LOCAL_RUN = "false"; + process.env.GITHUB_JOB = "YYY"; util.prepareLocalRunEnvironment(); // unchanged - t.deepEqual(process.env.GITHUB_JOB, 'YYY'); - process.env.CODEQL_LOCAL_RUN = 'true'; + t.deepEqual(process.env.GITHUB_JOB, "YYY"); + process.env.CODEQL_LOCAL_RUN = "true"; util.prepareLocalRunEnvironment(); // unchanged - t.deepEqual(process.env.GITHUB_JOB, 'YYY'); - process.env.GITHUB_JOB = ''; + t.deepEqual(process.env.GITHUB_JOB, "YYY"); + process.env.GITHUB_JOB = ""; util.prepareLocalRunEnvironment(); // updated - t.deepEqual(process.env.GITHUB_JOB, 'UNKNOWN-JOB'); + t.deepEqual(process.env.GITHUB_JOB, "UNKNOWN-JOB"); process.env.CODEQL_LOCAL_RUN = origLocalRun; }); -ava_1.default('getExtraOptionsEnvParam() succeeds on valid JSON with invalid options (for now)', t => { +ava_1.default("getExtraOptionsEnvParam() succeeds on valid JSON with invalid options (for now)", (t) => { const origExtraOptions = process.env.CODEQL_ACTION_EXTRA_OPTIONS; const options = { foo: 42 }; process.env.CODEQL_ACTION_EXTRA_OPTIONS = JSON.stringify(options); t.deepEqual(util.getExtraOptionsEnvParam(), options); process.env.CODEQL_ACTION_EXTRA_OPTIONS = origExtraOptions; }); -ava_1.default('getExtraOptionsEnvParam() succeeds on valid options', t => { +ava_1.default("getExtraOptionsEnvParam() succeeds on valid options", (t) => { const origExtraOptions = process.env.CODEQL_ACTION_EXTRA_OPTIONS; const options = { database: { init: ["--debug"] } }; - process.env.CODEQL_ACTION_EXTRA_OPTIONS = - JSON.stringify(options); + process.env.CODEQL_ACTION_EXTRA_OPTIONS = JSON.stringify(options); t.deepEqual(util.getExtraOptionsEnvParam(), options); process.env.CODEQL_ACTION_EXTRA_OPTIONS = origExtraOptions; }); -ava_1.default('getExtraOptionsEnvParam() fails on invalid JSON', t => { +ava_1.default("getExtraOptionsEnvParam() fails on invalid JSON", (t) => { const origExtraOptions = process.env.CODEQL_ACTION_EXTRA_OPTIONS; process.env.CODEQL_ACTION_EXTRA_OPTIONS = "{{invalid-json}}"; t.throws(util.getExtraOptionsEnvParam); diff --git a/lib/util.test.js.map b/lib/util.test.js.map index 5e6c9e646..957fc49c0 100644 --- a/lib/util.test.js.map +++ b/lib/util.test.js.map @@ -1 +1 @@ -{"version":3,"file":"util.test.js","sourceRoot":"","sources":["../src/util.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"util.test.js","sourceRoot":"","sources":["../src/util.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/analysis-paths.test.ts b/src/analysis-paths.test.ts index 2b830a154..c84c343d8 100644 --- a/src/analysis-paths.test.ts +++ b/src/analysis-paths.test.ts @@ -1,13 +1,13 @@ -import test from 'ava'; +import test from "ava"; -import * as analysisPaths from './analysis-paths'; -import {setupTests} from './testing-utils'; -import * as util from './util'; +import * as analysisPaths from "./analysis-paths"; +import { setupTests } from "./testing-utils"; +import * as util from "./util"; setupTests(test); -test("emptyPaths", async t => { - return await util.withTmpDir(async tmpDir => { +test("emptyPaths", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const config = { languages: [], queries: {}, @@ -16,30 +16,33 @@ test("emptyPaths", async t => { originalUserInput: {}, tempDir: tmpDir, toolCacheDir: tmpDir, - codeQLCmd: '', + codeQLCmd: "", }; analysisPaths.includeAndExcludeAnalysisPaths(config); - t.is(process.env['LGTM_INDEX_INCLUDE'], undefined); - t.is(process.env['LGTM_INDEX_EXCLUDE'], undefined); - t.is(process.env['LGTM_INDEX_FILTERS'], undefined); + t.is(process.env["LGTM_INDEX_INCLUDE"], undefined); + t.is(process.env["LGTM_INDEX_EXCLUDE"], undefined); + t.is(process.env["LGTM_INDEX_FILTERS"], undefined); }); }); -test("nonEmptyPaths", async t => { - return await util.withTmpDir(async tmpDir => { +test("nonEmptyPaths", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const config = { languages: [], queries: {}, - paths: ['path1', 'path2', '**/path3'], - pathsIgnore: ['path4', 'path5', 'path6/**'], + paths: ["path1", "path2", "**/path3"], + pathsIgnore: ["path4", "path5", "path6/**"], originalUserInput: {}, tempDir: tmpDir, toolCacheDir: tmpDir, - codeQLCmd: '', + codeQLCmd: "", }; analysisPaths.includeAndExcludeAnalysisPaths(config); - t.is(process.env['LGTM_INDEX_INCLUDE'], 'path1\npath2'); - t.is(process.env['LGTM_INDEX_EXCLUDE'], 'path4\npath5'); - t.is(process.env['LGTM_INDEX_FILTERS'], 'include:path1\ninclude:path2\ninclude:**/path3\nexclude:path4\nexclude:path5\nexclude:path6/**'); + t.is(process.env["LGTM_INDEX_INCLUDE"], "path1\npath2"); + t.is(process.env["LGTM_INDEX_EXCLUDE"], "path4\npath5"); + t.is( + process.env["LGTM_INDEX_FILTERS"], + "include:path1\ninclude:path2\ninclude:**/path3\nexclude:path4\nexclude:path5\nexclude:path6/**" + ); }); }); diff --git a/src/analysis-paths.ts b/src/analysis-paths.ts index d6076f2de..1a5708547 100644 --- a/src/analysis-paths.ts +++ b/src/analysis-paths.ts @@ -1,8 +1,8 @@ -import * as configUtils from './config-utils'; -import { Logger } from './logging'; +import * as configUtils from "./config-utils"; +import { Logger } from "./logging"; function isInterpretedLanguage(language): boolean { - return language === 'javascript' || language === 'python'; + return language === "javascript" || language === "python"; } // Matches a string containing only characters that are legal to include in paths on windows. @@ -11,24 +11,29 @@ export const legalWindowsPathCharactersRegex = /^[^<>:"\|?]*$/; // Builds an environment variable suitable for LGTM_INDEX_INCLUDE or LGTM_INDEX_EXCLUDE function buildIncludeExcludeEnvVar(paths: string[]): string { // Ignore anything containing a * - paths = paths.filter(p => p.indexOf('*') === -1); + paths = paths.filter((p) => p.indexOf("*") === -1); // Some characters are illegal in path names in windows - if (process.platform === 'win32') { - paths = paths.filter(p => p.match(legalWindowsPathCharactersRegex)); + if (process.platform === "win32") { + paths = paths.filter((p) => p.match(legalWindowsPathCharactersRegex)); } - return paths.join('\n'); + return paths.join("\n"); } -export function printPathFiltersWarning(config: configUtils.Config, logger: Logger) { +export function printPathFiltersWarning( + config: configUtils.Config, + logger: Logger +) { // Index include/exclude/filters only work in javascript and python. // If any other languages are detected/configured then show a warning. - if ((config.paths.length !== 0 || - config.pathsIgnore.length !== 0) && - !config.languages.every(isInterpretedLanguage)) { - - logger.warning('The "paths"/"paths-ignore" fields of the config only have effect for Javascript and Python'); + if ( + (config.paths.length !== 0 || config.pathsIgnore.length !== 0) && + !config.languages.every(isInterpretedLanguage) + ) { + logger.warning( + 'The "paths"/"paths-ignore" fields of the config only have effect for Javascript and Python' + ); } } @@ -41,19 +46,21 @@ export function includeAndExcludeAnalysisPaths(config: configUtils.Config) { // traverse the entire file tree to determine which files are matched. // Any paths containing "*" are not included in these. if (config.paths.length !== 0) { - process.env['LGTM_INDEX_INCLUDE'] = buildIncludeExcludeEnvVar(config.paths); + process.env["LGTM_INDEX_INCLUDE"] = buildIncludeExcludeEnvVar(config.paths); } if (config.pathsIgnore.length !== 0) { - process.env['LGTM_INDEX_EXCLUDE'] = buildIncludeExcludeEnvVar(config.pathsIgnore); + process.env["LGTM_INDEX_EXCLUDE"] = buildIncludeExcludeEnvVar( + config.pathsIgnore + ); } // The 'LGTM_INDEX_FILTERS' environment variable controls which files are // extracted or ignored. It does not control which directories are traversed. // This does understand the glob and double-glob syntax. const filters: string[] = []; - filters.push(...config.paths.map(p => 'include:' + p)); - filters.push(...config.pathsIgnore.map(p => 'exclude:' + p)); + filters.push(...config.paths.map((p) => `include:${p}`)); + filters.push(...config.pathsIgnore.map((p) => `exclude:${p}`)); if (filters.length !== 0) { - process.env['LGTM_INDEX_FILTERS'] = filters.join('\n'); + process.env["LGTM_INDEX_FILTERS"] = filters.join("\n"); } } diff --git a/src/analyze-action.ts b/src/analyze-action.ts index 65dc8a3bf..3cdefeba6 100644 --- a/src/analyze-action.ts +++ b/src/analyze-action.ts @@ -1,20 +1,31 @@ -import * as core from '@actions/core'; +import * as core from "@actions/core"; -import { AnalysisStatusReport, runAnalyze } from './analyze'; -import { getConfig } from './config-utils'; -import { getActionsLogger } from './logging'; -import { parseRepositoryNwo } from './repository'; -import * as util from './util'; +import { AnalysisStatusReport, runAnalyze } from "./analyze"; +import { getConfig } from "./config-utils"; +import { getActionsLogger } from "./logging"; +import { parseRepositoryNwo } from "./repository"; +import * as util from "./util"; -interface FinishStatusReport extends util.StatusReportBase, AnalysisStatusReport {} +interface FinishStatusReport + extends util.StatusReportBase, + AnalysisStatusReport {} async function sendStatusReport( startedAt: Date, stats: AnalysisStatusReport | undefined, - error?: Error) { - - const status = stats?.analyze_failure_language !== undefined || error !== undefined ? 'failure' : 'success'; - const statusReportBase = await util.createStatusReportBase('finish', status, startedAt, error?.message, error?.stack); + error?: Error +) { + const status = + stats?.analyze_failure_language !== undefined || error !== undefined + ? "failure" + : "success"; + const statusReportBase = await util.createStatusReportBase( + "finish", + status, + startedAt, + error?.message, + error?.stack + ); const statusReport: FinishStatusReport = { ...statusReportBase, ...(stats || {}), @@ -27,34 +38,44 @@ async function run() { let stats: AnalysisStatusReport | undefined = undefined; try { util.prepareLocalRunEnvironment(); - if (!await util.sendStatusReport(await util.createStatusReportBase('finish', 'starting', startedAt), true)) { + if ( + !(await util.sendStatusReport( + await util.createStatusReportBase("finish", "starting", startedAt), + true + )) + ) { return; } const logger = getActionsLogger(); - const config = await getConfig(util.getRequiredEnvParam('RUNNER_TEMP'), logger); + const config = await getConfig( + util.getRequiredEnvParam("RUNNER_TEMP"), + logger + ); if (config === undefined) { - throw new Error("Config file could not be found at expected location. Has the 'init' action been called?"); + throw new Error( + "Config file could not be found at expected location. Has the 'init' action been called?" + ); } stats = await runAnalyze( - parseRepositoryNwo(util.getRequiredEnvParam('GITHUB_REPOSITORY')), + parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")), await util.getCommitOid(), util.getRef(), await util.getAnalysisKey(), - util.getRequiredEnvParam('GITHUB_WORKFLOW'), + util.getRequiredEnvParam("GITHUB_WORKFLOW"), util.getWorkflowRunID(), - core.getInput('checkout_path'), - core.getInput('matrix'), - core.getInput('token'), - util.getRequiredEnvParam('GITHUB_SERVER_URL'), - core.getInput('upload') === 'true', - 'actions', - core.getInput('output'), - util.getMemoryFlag(core.getInput('ram')), - util.getAddSnippetsFlag(core.getInput('add-snippets')), - util.getThreadsFlag(core.getInput('threads'), logger), + core.getInput("checkout_path"), + core.getInput("matrix"), + core.getInput("token"), + util.getRequiredEnvParam("GITHUB_SERVER_URL"), + core.getInput("upload") === "true", + "actions", + core.getInput("output"), + util.getMemoryFlag(core.getInput("ram")), + util.getAddSnippetsFlag(core.getInput("add-snippets")), + util.getThreadsFlag(core.getInput("threads"), logger), config, - logger); - + logger + ); } catch (error) { core.setFailed(error.message); console.log(error); @@ -65,7 +86,7 @@ async function run() { await sendStatusReport(startedAt, stats); } -run().catch(e => { - core.setFailed("analyze action failed: " + e); +run().catch((e) => { + core.setFailed(`analyze action failed: ${e}`); console.log(e); }); diff --git a/src/analyze.ts b/src/analyze.ts index a03d3126b..7f22bc99c 100644 --- a/src/analyze.ts +++ b/src/analyze.ts @@ -1,15 +1,15 @@ -import * as fs from 'fs'; -import * as path from 'path'; - -import * as analysisPaths from './analysis-paths'; -import { getCodeQL } from './codeql'; -import * as configUtils from './config-utils'; -import { isScannedLanguage } from './languages'; -import { Logger } from './logging'; -import { RepositoryNwo } from './repository'; -import * as sharedEnv from './shared-environment'; -import * as upload_lib from './upload-lib'; -import * as util from './util'; +import * as fs from "fs"; +import * as path from "path"; + +import * as analysisPaths from "./analysis-paths"; +import { getCodeQL } from "./codeql"; +import * as configUtils from "./config-utils"; +import { isScannedLanguage } from "./languages"; +import { Logger } from "./logging"; +import { RepositoryNwo } from "./repository"; +import * as sharedEnv from "./shared-environment"; +import * as upload_lib from "./upload-lib"; +import * as util from "./util"; export interface QueriesStatusReport { // Time taken in ms to analyze builtin queries for cpp (or undefined if this language was not analyzed) @@ -40,12 +40,14 @@ export interface QueriesStatusReport { analyze_failure_language?: string; } -export interface AnalysisStatusReport extends upload_lib.UploadStatusReport, QueriesStatusReport {} +export interface AnalysisStatusReport + extends upload_lib.UploadStatusReport, + QueriesStatusReport {} async function createdDBForScannedLanguages( config: configUtils.Config, - logger: Logger) { - + logger: Logger +) { // Insert the LGTM_INDEX_X env vars at this point so they are set when // we extract any scanned languages. analysisPaths.includeAndExcludeAnalysisPaths(config); @@ -53,8 +55,11 @@ async function createdDBForScannedLanguages( const codeql = getCodeQL(config.codeQLCmd); for (const language of config.languages) { if (isScannedLanguage(language)) { - logger.startGroup('Extracting ' + language); - await codeql.extractScannedLanguage(util.getCodeQLDatabasePath(config.tempDir, language), language); + logger.startGroup(`Extracting ${language}`); + await codeql.extractScannedLanguage( + util.getCodeQLDatabasePath(config.tempDir, language), + language + ); logger.endGroup(); } } @@ -62,14 +67,16 @@ async function createdDBForScannedLanguages( async function finalizeDatabaseCreation( config: configUtils.Config, - logger: Logger) { - + logger: Logger +) { await createdDBForScannedLanguages(config, logger); const codeql = getCodeQL(config.codeQLCmd); for (const language of config.languages) { - logger.startGroup('Finalizing ' + language); - await codeql.finalizeDatabase(util.getCodeQLDatabasePath(config.tempDir, language)); + logger.startGroup(`Finalizing ${language}`); + await codeql.finalizeDatabase( + util.getCodeQLDatabasePath(config.tempDir, language) + ); logger.endGroup(); } } @@ -81,33 +88,45 @@ async function runQueries( addSnippetsFlag: string, threadsFlag: string, config: configUtils.Config, - logger: Logger): Promise { - + logger: Logger +): Promise { const codeql = getCodeQL(config.codeQLCmd); - for (let language of config.languages) { - logger.startGroup('Analyzing ' + language); + for (const language of config.languages) { + logger.startGroup(`Analyzing ${language}`); const queries = config.queries[language] || []; if (queries.length === 0) { - throw new Error('Unable to analyse ' + language + ' as no queries were selected for this language'); + throw new Error( + `Unable to analyse ${language} as no queries were selected for this language` + ); } try { const databasePath = util.getCodeQLDatabasePath(config.tempDir, language); // Pass the queries to codeql using a file instead of using the command // line to avoid command line length restrictions, particularly on windows. - const querySuite = databasePath + '-queries.qls'; - const querySuiteContents = queries.map(q => '- query: ' + q).join('\n'); + const querySuite = `${databasePath}-queries.qls`; + const querySuiteContents = queries.map((q) => `- query: ${q}`).join("\n"); fs.writeFileSync(querySuite, querySuiteContents); - logger.debug('Query suite file for ' + language + '...\n' + querySuiteContents); - - const sarifFile = path.join(sarifFolder, language + '.sarif'); - - await codeql.databaseAnalyze(databasePath, sarifFile, querySuite, memoryFlag, addSnippetsFlag, threadsFlag); - - logger.debug('SARIF results for database ' + language + ' created at "' + sarifFile + '"'); + logger.debug( + `Query suite file for ${language}...\n${querySuiteContents}` + ); + + const sarifFile = path.join(sarifFolder, `${language}.sarif`); + + await codeql.databaseAnalyze( + databasePath, + sarifFile, + querySuite, + memoryFlag, + addSnippetsFlag, + threadsFlag + ); + + logger.debug( + `SARIF results for database ${language} created at "${sarifFile}"` + ); logger.endGroup(); - } catch (e) { // For now the fields about query performance are not populated return { @@ -137,21 +156,28 @@ export async function runAnalyze( addSnippetsFlag: string, threadsFlag: string, config: configUtils.Config, - logger: Logger): Promise { - + logger: Logger +): Promise { // Delete the tracer config env var to avoid tracing ourselves delete process.env[sharedEnv.ODASA_TRACER_CONFIGURATION]; fs.mkdirSync(outputDir, { recursive: true }); - logger.info('Finalizing database creation'); + logger.info("Finalizing database creation"); await finalizeDatabaseCreation(config, logger); - logger.info('Analyzing database'); - const queriesStats = await runQueries(outputDir, memoryFlag, addSnippetsFlag, threadsFlag, config, logger); + logger.info("Analyzing database"); + const queriesStats = await runQueries( + outputDir, + memoryFlag, + addSnippetsFlag, + threadsFlag, + config, + logger + ); if (!doUpload) { - logger.info('Not uploading results'); + logger.info("Not uploading results"); return { ...queriesStats }; } @@ -168,7 +194,8 @@ export async function runAnalyze( githubAuth, githubUrl, mode, - logger); + logger + ); return { ...queriesStats, ...uploadStats }; } diff --git a/src/api-client.ts b/src/api-client.ts index 91e4faaa1..9f21a7995 100644 --- a/src/api-client.ts +++ b/src/api-client.ts @@ -1,21 +1,24 @@ import * as core from "@actions/core"; import * as github from "@actions/github"; import consoleLogLevel from "console-log-level"; -import * as path from 'path'; +import * as path from "path"; import { getRequiredEnvParam, isLocalRun } from "./util"; -export const getApiClient = function(githubAuth: string, githubUrl: string, allowLocalRun = false) { +export const getApiClient = function ( + githubAuth: string, + githubUrl: string, + allowLocalRun = false +) { if (isLocalRun() && !allowLocalRun) { - throw new Error('Invalid API call in local run'); + throw new Error("Invalid API call in local run"); } - return new github.GitHub( - { - auth: githubAuth, - baseUrl: getApiUrl(githubUrl), - userAgent: "CodeQL Action", - log: consoleLogLevel({ level: "debug" }) - }); + return new github.GitHub({ + auth: githubAuth, + baseUrl: getApiUrl(githubUrl), + userAgent: "CodeQL Action", + log: consoleLogLevel({ level: "debug" }), + }); }; function getApiUrl(githubUrl: string): string { @@ -23,12 +26,12 @@ function getApiUrl(githubUrl: string): string { // If we detect this is trying to be to github.com // then return with a fixed canonical URL. - if (url.hostname === 'github.com' || url.hostname === 'api.github.com') { - return 'https://api.github.com'; + if (url.hostname === "github.com" || url.hostname === "api.github.com") { + return "https://api.github.com"; } // Add the /api/v3 API prefix - url.pathname = path.join(url.pathname, 'api', 'v3'); + url.pathname = path.join(url.pathname, "api", "v3"); return url.toString(); } @@ -37,7 +40,8 @@ function getApiUrl(githubUrl: string): string { // and called only from the action entrypoints. export function getActionsApiClient(allowLocalRun = false) { return getApiClient( - core.getInput('token'), - getRequiredEnvParam('GITHUB_SERVER_URL'), - allowLocalRun); + core.getInput("token"), + getRequiredEnvParam("GITHUB_SERVER_URL"), + allowLocalRun + ); } diff --git a/src/autobuild-action.ts b/src/autobuild-action.ts index 2b37366a4..2e84a7b32 100644 --- a/src/autobuild-action.ts +++ b/src/autobuild-action.ts @@ -1,10 +1,10 @@ -import * as core from '@actions/core'; +import * as core from "@actions/core"; -import { determineAutobuildLanguage, runAutobuild } from './autobuild'; -import * as config_utils from './config-utils'; -import { Language } from './languages'; -import { getActionsLogger } from './logging'; -import * as util from './util'; +import { determineAutobuildLanguage, runAutobuild } from "./autobuild"; +import * as config_utils from "./config-utils"; +import { Language } from "./languages"; +import { getActionsLogger } from "./logging"; +import * as util from "./util"; interface AutobuildStatusReport extends util.StatusReportBase { // Comma-separated set of languages being autobuilt @@ -17,18 +17,22 @@ async function sendCompletedStatusReport( startedAt: Date, allLanguages: string[], failingLanguage?: string, - cause?: Error) { - - const status = failingLanguage !== undefined || cause !== undefined ? 'failure' : 'success'; + cause?: Error +) { + const status = + failingLanguage !== undefined || cause !== undefined + ? "failure" + : "success"; const statusReportBase = await util.createStatusReportBase( - 'autobuild', + "autobuild", status, startedAt, cause?.message, - cause?.stack); + cause?.stack + ); const statusReport: AutobuildStatusReport = { ...statusReportBase, - autobuild_languages: allLanguages.join(','), + autobuild_languages: allLanguages.join(","), autobuild_failure: failingLanguage, }; await util.sendStatusReport(statusReport); @@ -40,30 +44,46 @@ async function run() { let language: Language | undefined = undefined; try { util.prepareLocalRunEnvironment(); - if (!await util.sendStatusReport(await util.createStatusReportBase('autobuild', 'starting', startedAt), true)) { + if ( + !(await util.sendStatusReport( + await util.createStatusReportBase("autobuild", "starting", startedAt), + true + )) + ) { return; } - const config = await config_utils.getConfig(util.getRequiredEnvParam('RUNNER_TEMP'), logger); + const config = await config_utils.getConfig( + util.getRequiredEnvParam("RUNNER_TEMP"), + logger + ); if (config === undefined) { - throw new Error("Config file could not be found at expected location. Has the 'init' action been called?"); + throw new Error( + "Config file could not be found at expected location. Has the 'init' action been called?" + ); } language = determineAutobuildLanguage(config, logger); if (language !== undefined) { await runAutobuild(language, config, logger); } - } catch (error) { - core.setFailed("We were unable to automatically build your code. Please replace the call to the autobuild action with your custom build steps. " + error.message); + core.setFailed( + `We were unable to automatically build your code. Please replace the call to the autobuild action with your custom build steps. ${error.message}` + ); console.log(error); - await sendCompletedStatusReport(startedAt, language ? [language] : [], language, error); + await sendCompletedStatusReport( + startedAt, + language ? [language] : [], + language, + error + ); return; } await sendCompletedStatusReport(startedAt, language ? [language] : []); } -run().catch(e => { - core.setFailed("autobuild action failed. " + e); +run().catch((e) => { + core.setFailed(`autobuild action failed. ${e}`); console.log(e); }); diff --git a/src/autobuild.ts b/src/autobuild.ts index fd3c8f406..9473b36bd 100644 --- a/src/autobuild.ts +++ b/src/autobuild.ts @@ -1,13 +1,12 @@ -import { getCodeQL } from './codeql'; -import * as config_utils from './config-utils'; -import { isTracedLanguage, Language } from './languages'; -import { Logger } from './logging'; +import { getCodeQL } from "./codeql"; +import * as config_utils from "./config-utils"; +import { Language, isTracedLanguage } from "./languages"; +import { Logger } from "./logging"; export function determineAutobuildLanguage( config: config_utils.Config, logger: Logger ): Language | undefined { - // Attempt to find a language to autobuild // We want pick the dominant language in the repo from the ones we're able to build // The languages are sorted in order specified by user or by lines of code if we got @@ -16,14 +15,20 @@ export function determineAutobuildLanguage( const language = autobuildLanguages[0]; if (!language) { - logger.info("None of the languages in this project require extra build steps"); + logger.info( + "None of the languages in this project require extra build steps" + ); return undefined; } logger.debug(`Detected dominant traced language: ${language}`); if (autobuildLanguages.length > 1) { - logger.warning(`We will only automatically build ${language} code. If you wish to scan ${autobuildLanguages.slice(1).join(' and ')}, you must replace this call with custom build steps.`); + logger.warning( + `We will only automatically build ${language} code. If you wish to scan ${autobuildLanguages + .slice(1) + .join(" and ")}, you must replace this call with custom build steps.` + ); } return language; @@ -32,8 +37,8 @@ export function determineAutobuildLanguage( export async function runAutobuild( language: Language, config: config_utils.Config, - logger: Logger) { - + logger: Logger +) { logger.startGroup(`Attempting to automatically build ${language} code`); const codeQL = getCodeQL(config.codeQLCmd); await codeQL.runAutobuild(language); diff --git a/src/codeql.test.ts b/src/codeql.test.ts index e832eb90f..b6daba519 100644 --- a/src/codeql.test.ts +++ b/src/codeql.test.ts @@ -1,61 +1,66 @@ -import * as toolcache from '@actions/tool-cache'; -import test from 'ava'; -import nock from 'nock'; -import * as path from 'path'; +import * as toolcache from "@actions/tool-cache"; +import test from "ava"; +import nock from "nock"; +import * as path from "path"; -import * as codeql from './codeql'; -import { getRunnerLogger } from './logging'; -import {setupTests} from './testing-utils'; -import * as util from './util'; +import * as codeql from "./codeql"; +import { getRunnerLogger } from "./logging"; +import { setupTests } from "./testing-utils"; +import * as util from "./util"; setupTests(test); -test('download codeql bundle cache', async t => { - - await util.withTmpDir(async tmpDir => { - const versions = ['20200601', '20200610']; +test("download codeql bundle cache", async (t) => { + await util.withTmpDir(async (tmpDir) => { + const versions = ["20200601", "20200610"]; for (let i = 0; i < versions.length; i++) { const version = versions[i]; - nock('https://example.com') + nock("https://example.com") .get(`/download/codeql-bundle-${version}/codeql-bundle.tar.gz`) - .replyWithFile(200, path.join(__dirname, `/../src/testdata/codeql-bundle.tar.gz`)); + .replyWithFile( + 200, + path.join(__dirname, `/../src/testdata/codeql-bundle.tar.gz`) + ); await codeql.setupCodeQL( `https://example.com/download/codeql-bundle-${version}/codeql-bundle.tar.gz`, - 'token', - 'https://github.example.com', + "token", + "https://github.example.com", tmpDir, tmpDir, - 'runner', - getRunnerLogger(true)); + "runner", + getRunnerLogger(true) + ); - t.assert(toolcache.find('CodeQL', `0.0.0-${version}`)); + t.assert(toolcache.find("CodeQL", `0.0.0-${version}`)); } - const cachedVersions = toolcache.findAllVersions('CodeQL'); + const cachedVersions = toolcache.findAllVersions("CodeQL"); t.is(cachedVersions.length, 2); }); }); -test('parse codeql bundle url version', t => { - +test("parse codeql bundle url version", (t) => { const tests = { - '20200601': '0.0.0-20200601', - '20200601.0': '0.0.0-20200601.0', - '20200601.0.0': '20200601.0.0', - '1.2.3': '1.2.3', - '1.2.3-alpha': '1.2.3-alpha', - '1.2.3-beta.1': '1.2.3-beta.1', + "20200601": "0.0.0-20200601", + "20200601.0": "0.0.0-20200601.0", + "20200601.0.0": "20200601.0.0", + "1.2.3": "1.2.3", + "1.2.3-alpha": "1.2.3-alpha", + "1.2.3-beta.1": "1.2.3-beta.1", }; for (const [version, expectedVersion] of Object.entries(tests)) { const url = `https://github.com/.../codeql-bundle-${version}/...`; try { - const parsedVersion = codeql.getCodeQLURLVersion(url, getRunnerLogger(true)); + const parsedVersion = codeql.getCodeQLURLVersion( + url, + getRunnerLogger(true) + ); t.deepEqual(parsedVersion, expectedVersion); } catch (e) { t.fail(e.message); @@ -63,34 +68,43 @@ test('parse codeql bundle url version', t => { } }); -test('getExtraOptions works for explicit paths', t => { - t.deepEqual(codeql.getExtraOptions({}, ['foo'], []), []); +test("getExtraOptions works for explicit paths", (t) => { + t.deepEqual(codeql.getExtraOptions({}, ["foo"], []), []); - t.deepEqual(codeql.getExtraOptions({foo: [42]}, ['foo'], []), ['42']); + t.deepEqual(codeql.getExtraOptions({ foo: [42] }, ["foo"], []), ["42"]); - t.deepEqual(codeql.getExtraOptions({foo: {bar: [42]}}, ['foo', 'bar'], []), ['42']); + t.deepEqual( + codeql.getExtraOptions({ foo: { bar: [42] } }, ["foo", "bar"], []), + ["42"] + ); }); -test('getExtraOptions works for wildcards', t => { - t.deepEqual(codeql.getExtraOptions({'*': [42]}, ['foo'], []), ['42']); +test("getExtraOptions works for wildcards", (t) => { + t.deepEqual(codeql.getExtraOptions({ "*": [42] }, ["foo"], []), ["42"]); }); -test('getExtraOptions works for wildcards and explicit paths', t => { - let o1 = {'*': [42], foo: [87]}; - t.deepEqual(codeql.getExtraOptions(o1, ['foo'], []), ['42', '87']); +test("getExtraOptions works for wildcards and explicit paths", (t) => { + const o1 = { "*": [42], foo: [87] }; + t.deepEqual(codeql.getExtraOptions(o1, ["foo"], []), ["42", "87"]); - let o2 = {'*': [42], foo: [87]}; - t.deepEqual(codeql.getExtraOptions(o2, ['foo', 'bar'], []), ['42']); + const o2 = { "*": [42], foo: [87] }; + t.deepEqual(codeql.getExtraOptions(o2, ["foo", "bar"], []), ["42"]); - let o3 = {'*': [42], foo: { '*': [87], bar: [99]}}; - let p = ['foo', 'bar']; - t.deepEqual(codeql.getExtraOptions(o3, p, []), ['42', '87', '99']); + const o3 = { "*": [42], foo: { "*": [87], bar: [99] } }; + const p = ["foo", "bar"]; + t.deepEqual(codeql.getExtraOptions(o3, p, []), ["42", "87", "99"]); }); -test('getExtraOptions throws for bad content', t => { - t.throws(() => codeql.getExtraOptions({'*': 42}, ['foo'], [])); +test("getExtraOptions throws for bad content", (t) => { + t.throws(() => codeql.getExtraOptions({ "*": 42 }, ["foo"], [])); - t.throws(() => codeql.getExtraOptions({foo: 87}, ['foo'], [])); + t.throws(() => codeql.getExtraOptions({ foo: 87 }, ["foo"], [])); - t.throws(() => codeql.getExtraOptions({'*': [42], foo: { '*': 87, bar: [99]}}, ['foo', 'bar'], [])); + t.throws(() => + codeql.getExtraOptions( + { "*": [42], foo: { "*": 87, bar: [99] } }, + ["foo", "bar"], + [] + ) + ); }); diff --git a/src/codeql.ts b/src/codeql.ts index c6f902b9b..400e90964 100644 --- a/src/codeql.ts +++ b/src/codeql.ts @@ -1,38 +1,38 @@ -import * as toolrunnner from '@actions/exec/lib/toolrunner'; -import * as http from '@actions/http-client'; -import { IHeaders } from '@actions/http-client/interfaces'; -import * as toolcache from '@actions/tool-cache'; -import * as fs from 'fs'; -import * as path from 'path'; -import * as semver from 'semver'; -import * as stream from 'stream'; -import * as globalutil from 'util'; -import uuidV4 from 'uuid/v4'; - -import * as api from './api-client'; -import * as defaults from './defaults.json'; // Referenced from codeql-action-sync-tool! -import { Language } from './languages'; -import { Logger } from './logging'; -import * as util from './util'; - -type Options = (string|number|boolean)[]; +import * as toolrunnner from "@actions/exec/lib/toolrunner"; +import * as http from "@actions/http-client"; +import { IHeaders } from "@actions/http-client/interfaces"; +import * as toolcache from "@actions/tool-cache"; +import * as fs from "fs"; +import * as path from "path"; +import * as semver from "semver"; +import * as stream from "stream"; +import * as globalutil from "util"; +import uuidV4 from "uuid/v4"; + +import * as api from "./api-client"; +import * as defaults from "./defaults.json"; // Referenced from codeql-action-sync-tool! +import { Language } from "./languages"; +import { Logger } from "./logging"; +import * as util from "./util"; + +type Options = Array; /** * Extra command line options for the codeql commands. */ interface ExtraOptions { - '*'?: Options; + "*"?: Options; database?: { - '*'?: Options, - init?: Options, - 'trace-command'?: Options, - analyze?: Options, - finalize?: Options + "*"?: Options; + init?: Options; + "trace-command"?: Options; + analyze?: Options; + finalize?: Options; }; resolve?: { - '*'?: Options, - extractor?: Options, - queries?: Options + "*"?: Options; + extractor?: Options; + queries?: Options; }; } @@ -53,7 +53,11 @@ export interface CodeQL { /** * Run 'codeql database init'. */ - databaseInit(databasePath: string, language: Language, sourceRoot: string): Promise; + databaseInit( + databasePath: string, + language: Language, + sourceRoot: string + ): Promise; /** * Runs the autobuilder for the given language. */ @@ -70,7 +74,10 @@ export interface CodeQL { /** * Run 'codeql resolve queries'. */ - resolveQueries(queries: string[], extraSearchPath: string | undefined): Promise; + resolveQueries( + queries: string[], + extraSearchPath: string | undefined + ): Promise; /** * Run 'codeql database analyze'. */ @@ -80,20 +87,21 @@ export interface CodeQL { querySuite: string, memoryFlag: string, addSnippetsFlag: string, - threadsFlag: string): Promise; + threadsFlag: string + ): Promise; } export interface ResolveQueriesOutput { byLanguage: { [language: string]: { - [queryPath: string]: {} - } + [queryPath: string]: {}; + }; }; noDeclaredLanguage: { - [queryPath: string]: {} + [queryPath: string]: {}; }; multipleDeclaredLanguages: { - [queryPath: string]: {} + [queryPath: string]: {}; }; } @@ -108,7 +116,7 @@ const CODEQL_BUNDLE_NAME = "codeql-bundle.tar.gz"; const CODEQL_DEFAULT_ACTION_REPOSITORY = "github/codeql-action"; function getCodeQLActionRepository(mode: util.Mode): string { - if (mode !== 'actions') { + if (mode !== "actions") { return CODEQL_DEFAULT_ACTION_REPOSITORY; } @@ -120,19 +128,22 @@ function getCodeQLActionRepository(mode: util.Mode): string { const relativeScriptPath = path.relative(actionsDirectory, __filename); // This handles the case where the Action does not come from an Action repository, // e.g. our integration tests which use the Action code from the current checkout. - if (relativeScriptPath.startsWith("..") || path.isAbsolute(relativeScriptPath)) { + if ( + relativeScriptPath.startsWith("..") || + path.isAbsolute(relativeScriptPath) + ) { return CODEQL_DEFAULT_ACTION_REPOSITORY; } const relativeScriptPathParts = relativeScriptPath.split(path.sep); - return relativeScriptPathParts[0] + "/" + relativeScriptPathParts[1]; + return `${relativeScriptPathParts[0]}/${relativeScriptPathParts[1]}`; } async function getCodeQLBundleDownloadURL( githubAuth: string, githubUrl: string, mode: util.Mode, - logger: Logger): Promise { - + logger: Logger +): Promise { const codeQLActionRepository = getCodeQLActionRepository(mode); const potentialDownloadSources = [ // This GitHub instance, and this Action. @@ -144,28 +155,39 @@ async function getCodeQLBundleDownloadURL( ]; // We now filter out any duplicates. // Duplicates will happen either because the GitHub instance is GitHub.com, or because the Action is not a fork. - const uniqueDownloadSources = potentialDownloadSources.filter((url, index, self) => index === self.indexOf(url)); - for (let downloadSource of uniqueDownloadSources) { - let [apiURL, repository] = downloadSource; + const uniqueDownloadSources = potentialDownloadSources.filter( + (url, index, self) => index === self.indexOf(url) + ); + for (const downloadSource of uniqueDownloadSources) { + const [apiURL, repository] = downloadSource; // If we've reached the final case, short-circuit the API check since we know the bundle exists and is public. - if (apiURL === util.GITHUB_DOTCOM_URL && repository === CODEQL_DEFAULT_ACTION_REPOSITORY) { + if ( + apiURL === util.GITHUB_DOTCOM_URL && + repository === CODEQL_DEFAULT_ACTION_REPOSITORY + ) { break; } - let [repositoryOwner, repositoryName] = repository.split("/"); + const [repositoryOwner, repositoryName] = repository.split("/"); try { - const release = await api.getApiClient(githubAuth, githubUrl).repos.getReleaseByTag({ - owner: repositoryOwner, - repo: repositoryName, - tag: CODEQL_BUNDLE_VERSION - }); - for (let asset of release.data.assets) { + const release = await api + .getApiClient(githubAuth, githubUrl) + .repos.getReleaseByTag({ + owner: repositoryOwner, + repo: repositoryName, + tag: CODEQL_BUNDLE_VERSION, + }); + for (const asset of release.data.assets) { if (asset.name === CODEQL_BUNDLE_NAME) { - logger.info(`Found CodeQL bundle in ${downloadSource[1]} on ${downloadSource[0]} with URL ${asset.url}.`); + logger.info( + `Found CodeQL bundle in ${downloadSource[1]} on ${downloadSource[0]} with URL ${asset.url}.` + ); return asset.url; } } } catch (e) { - logger.info(`Looked for CodeQL bundle in ${downloadSource[1]} on ${downloadSource[0]} but got error ${e}.`); + logger.info( + `Looked for CodeQL bundle in ${downloadSource[1]} on ${downloadSource[0]} but got error ${e}.` + ); } } return `https://github.com/${CODEQL_DEFAULT_ACTION_REPOSITORY}/releases/download/${CODEQL_BUNDLE_VERSION}/${CODEQL_BUNDLE_NAME}`; @@ -177,13 +199,15 @@ async function toolcacheDownloadTool( url: string, headers: IHeaders | undefined, tempDir: string, - logger: Logger): Promise { - - const client = new http.HttpClient('CodeQL Action'); + logger: Logger +): Promise { + const client = new http.HttpClient("CodeQL Action"); const dest = path.join(tempDir, uuidV4()); const response: http.HttpClientResponse = await client.get(url, headers); if (response.message.statusCode !== 200) { - logger.info(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); + logger.info( + `Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})` + ); throw new Error(`Unexpected HTTP response: ${response.message.statusCode}`); } const pipeline = globalutil.promisify(stream.pipeline); @@ -199,53 +223,71 @@ export async function setupCodeQL( tempDir: string, toolsDir: string, mode: util.Mode, - logger: Logger): Promise { - + logger: Logger +): Promise { // Setting these two env vars makes the toolcache code safe to use outside, // of actions but this is obviously not a great thing we're doing and it would // be better to write our own implementation to use outside of actions. - process.env['RUNNER_TEMP'] = tempDir; - process.env['RUNNER_TOOL_CACHE'] = toolsDir; + process.env["RUNNER_TEMP"] = tempDir; + process.env["RUNNER_TOOL_CACHE"] = toolsDir; try { - const codeqlURLVersion = getCodeQLURLVersion(codeqlURL || `/${CODEQL_BUNDLE_VERSION}/`, logger); + const codeqlURLVersion = getCodeQLURLVersion( + codeqlURL || `/${CODEQL_BUNDLE_VERSION}/`, + logger + ); - let codeqlFolder = toolcache.find('CodeQL', codeqlURLVersion); + let codeqlFolder = toolcache.find("CodeQL", codeqlURLVersion); if (codeqlFolder) { logger.debug(`CodeQL found in cache ${codeqlFolder}`); } else { if (!codeqlURL) { - codeqlURL = await getCodeQLBundleDownloadURL(githubAuth, githubUrl, mode, logger); + codeqlURL = await getCodeQLBundleDownloadURL( + githubAuth, + githubUrl, + mode, + logger + ); } - const headers: IHeaders = {accept: 'application/octet-stream'}; + const headers: IHeaders = { accept: "application/octet-stream" }; // We only want to provide an authorization header if we are downloading // from the same GitHub instance the Action is running on. // This avoids leaking Enterprise tokens to dotcom. - if (codeqlURL.startsWith(githubUrl + "/")) { - logger.debug('Downloading CodeQL bundle with token.'); + if (codeqlURL.startsWith(`${githubUrl}/`)) { + logger.debug("Downloading CodeQL bundle with token."); headers.authorization = `token ${githubAuth}`; } else { - logger.debug('Downloading CodeQL bundle without token.'); + logger.debug("Downloading CodeQL bundle without token."); } - logger.info(`Downloading CodeQL tools from ${codeqlURL}. This may take a while.`); - let codeqlPath = await toolcacheDownloadTool(codeqlURL, headers, tempDir, logger); + logger.info( + `Downloading CodeQL tools from ${codeqlURL}. This may take a while.` + ); + const codeqlPath = await toolcacheDownloadTool( + codeqlURL, + headers, + tempDir, + logger + ); logger.debug(`CodeQL bundle download to ${codeqlPath} complete.`); const codeqlExtracted = await toolcache.extractTar(codeqlPath); - codeqlFolder = await toolcache.cacheDir(codeqlExtracted, 'CodeQL', codeqlURLVersion); + codeqlFolder = await toolcache.cacheDir( + codeqlExtracted, + "CodeQL", + codeqlURLVersion + ); } - let codeqlCmd = path.join(codeqlFolder, 'codeql', 'codeql'); - if (process.platform === 'win32') { + let codeqlCmd = path.join(codeqlFolder, "codeql", "codeql"); + if (process.platform === "win32") { codeqlCmd += ".exe"; - } else if (process.platform !== 'linux' && process.platform !== 'darwin') { - throw new Error("Unsupported platform: " + process.platform); + } else if (process.platform !== "linux" && process.platform !== "darwin") { + throw new Error(`Unsupported platform: ${process.platform}`); } cachedCodeQL = getCodeQLForCmd(codeqlCmd); return cachedCodeQL; - } catch (e) { logger.error(e); throw new Error("Unable to download and extract CodeQL CLI"); @@ -253,22 +295,27 @@ export async function setupCodeQL( } export function getCodeQLURLVersion(url: string, logger: Logger): string { - const match = url.match(/\/codeql-bundle-(.*)\//); if (match === null || match.length < 2) { - throw new Error(`Malformed tools url: ${url}. Version could not be inferred`); + throw new Error( + `Malformed tools url: ${url}. Version could not be inferred` + ); } let version = match[1]; if (!semver.valid(version)) { - logger.debug(`Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.`); - version = '0.0.0-' + version; + logger.debug( + `Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.` + ); + version = `0.0.0-${version}`; } const s = semver.clean(version); if (!s) { - throw new Error(`Malformed tools url ${url}. Version should be in SemVer format but have ${version} instead`); + throw new Error( + `Malformed tools url ${url}. Version should be in SemVer format but have ${version} instead` + ); } return s; @@ -287,13 +334,14 @@ export function getCodeQL(cmd: string): CodeQL { function resolveFunction( partialCodeql: Partial, methodName: string, - defaultImplementation?: T): T { - if (typeof partialCodeql[methodName] !== 'function') { + defaultImplementation?: T +): T { + if (typeof partialCodeql[methodName] !== "function") { if (defaultImplementation !== undefined) { return defaultImplementation; } const dummyMethod = () => { - throw new Error('CodeQL ' + methodName + ' method not correctly defined'); + throw new Error(`CodeQL ${methodName} method not correctly defined`); }; return dummyMethod as any; } @@ -308,15 +356,18 @@ function resolveFunction( */ export function setCodeQL(partialCodeql: Partial): CodeQL { cachedCodeQL = { - getPath: resolveFunction(partialCodeql, 'getPath', () => '/tmp/dummy-path'), - printVersion: resolveFunction(partialCodeql, 'printVersion'), - getTracerEnv: resolveFunction(partialCodeql, 'getTracerEnv'), - databaseInit: resolveFunction(partialCodeql, 'databaseInit'), - runAutobuild: resolveFunction(partialCodeql, 'runAutobuild'), - extractScannedLanguage: resolveFunction(partialCodeql, 'extractScannedLanguage'), - finalizeDatabase: resolveFunction(partialCodeql, 'finalizeDatabase'), - resolveQueries: resolveFunction(partialCodeql, 'resolveQueries'), - databaseAnalyze: resolveFunction(partialCodeql, 'databaseAnalyze') + getPath: resolveFunction(partialCodeql, "getPath", () => "/tmp/dummy-path"), + printVersion: resolveFunction(partialCodeql, "printVersion"), + getTracerEnv: resolveFunction(partialCodeql, "getTracerEnv"), + databaseInit: resolveFunction(partialCodeql, "databaseInit"), + runAutobuild: resolveFunction(partialCodeql, "runAutobuild"), + extractScannedLanguage: resolveFunction( + partialCodeql, + "extractScannedLanguage" + ), + finalizeDatabase: resolveFunction(partialCodeql, "finalizeDatabase"), + resolveQueries: resolveFunction(partialCodeql, "resolveQueries"), + databaseAnalyze: resolveFunction(partialCodeql, "databaseAnalyze"), }; return cachedCodeQL; } @@ -330,27 +381,33 @@ export function setCodeQL(partialCodeql: Partial): CodeQL { export function getCachedCodeQL(): CodeQL { if (cachedCodeQL === undefined) { // Should never happen as setCodeQL is called by testing-utils.setupTests - throw new Error('cachedCodeQL undefined'); + throw new Error("cachedCodeQL undefined"); } return cachedCodeQL; } function getCodeQLForCmd(cmd: string): CodeQL { return { - getPath: function() { + getPath() { return cmd; }, - printVersion: async function() { + async printVersion() { await new toolrunnner.ToolRunner(cmd, [ - 'version', - '--format=json' + "version", + "--format=json", ]).exec(); }, - getTracerEnv: async function(databasePath: string) { + async getTracerEnv(databasePath: string) { // Write tracer-env.js to a temp location. - const tracerEnvJs = path.resolve(databasePath, 'working', 'tracer-env.js'); - fs.mkdirSync(path.dirname(tracerEnvJs), {recursive: true}); - fs.writeFileSync(tracerEnvJs, ` + const tracerEnvJs = path.resolve( + databasePath, + "working", + "tracer-env.js" + ); + fs.mkdirSync(path.dirname(tracerEnvJs), { recursive: true }); + fs.writeFileSync( + tracerEnvJs, + ` const fs = require('fs'); const env = {}; for (let entry of Object.entries(process.env)) { @@ -361,129 +418,156 @@ function getCodeQLForCmd(cmd: string): CodeQL { } } process.stdout.write(process.argv[2]); - fs.writeFileSync(process.argv[2], JSON.stringify(env), 'utf-8');`); + fs.writeFileSync(process.argv[2], JSON.stringify(env), 'utf-8');` + ); - const envFile = path.resolve(databasePath, 'working', 'env.tmp'); + const envFile = path.resolve(databasePath, "working", "env.tmp"); await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'trace-command', + "database", + "trace-command", databasePath, - ...getExtraOptionsFromEnv(['database', 'trace-command']), + ...getExtraOptionsFromEnv(["database", "trace-command"]), process.execPath, tracerEnvJs, - envFile + envFile, ]).exec(); - return JSON.parse(fs.readFileSync(envFile, 'utf-8')); + return JSON.parse(fs.readFileSync(envFile, "utf-8")); }, - databaseInit: async function(databasePath: string, language: Language, sourceRoot: string) { + async databaseInit( + databasePath: string, + language: Language, + sourceRoot: string + ) { await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'init', + "database", + "init", databasePath, - '--language=' + language, - '--source-root=' + sourceRoot, - ...getExtraOptionsFromEnv(['database', 'init']), + `--language=${language}`, + `--source-root=${sourceRoot}`, + ...getExtraOptionsFromEnv(["database", "init"]), ]).exec(); }, - runAutobuild: async function(language: Language) { - const cmdName = process.platform === 'win32' ? 'autobuild.cmd' : 'autobuild.sh'; - const autobuildCmd = path.join(path.dirname(cmd), language, 'tools', cmdName); + async runAutobuild(language: Language) { + const cmdName = + process.platform === "win32" ? "autobuild.cmd" : "autobuild.sh"; + const autobuildCmd = path.join( + path.dirname(cmd), + language, + "tools", + cmdName + ); // Update JAVA_TOOL_OPTIONS to contain '-Dhttp.keepAlive=false' // This is because of an issue with Azure pipelines timing out connections after 4 minutes // and Maven not properly handling closed connections // Otherwise long build processes will timeout when pulling down Java packages // https://developercommunity.visualstudio.com/content/problem/292284/maven-hosted-agent-connection-timeout.html - let javaToolOptions = process.env['JAVA_TOOL_OPTIONS'] || ""; - process.env['JAVA_TOOL_OPTIONS'] = [...javaToolOptions.split(/\s+/), '-Dhttp.keepAlive=false', '-Dmaven.wagon.http.pool=false'].join(' '); + const javaToolOptions = process.env["JAVA_TOOL_OPTIONS"] || ""; + process.env["JAVA_TOOL_OPTIONS"] = [ + ...javaToolOptions.split(/\s+/), + "-Dhttp.keepAlive=false", + "-Dmaven.wagon.http.pool=false", + ].join(" "); await new toolrunnner.ToolRunner(autobuildCmd).exec(); }, - extractScannedLanguage: async function(databasePath: string, language: Language) { + async extractScannedLanguage(databasePath: string, language: Language) { // Get extractor location - let extractorPath = ''; + let extractorPath = ""; await new toolrunnner.ToolRunner( cmd, [ - 'resolve', - 'extractor', - '--format=json', - '--language=' + language, - ...getExtraOptionsFromEnv(['resolve', 'extractor']), + "resolve", + "extractor", + "--format=json", + `--language=${language}`, + ...getExtraOptionsFromEnv(["resolve", "extractor"]), ], { silent: true, listeners: { - stdout: (data) => { extractorPath += data.toString(); }, - stderr: (data) => { process.stderr.write(data); } - } - }).exec(); + stdout: (data) => { + extractorPath += data.toString(); + }, + stderr: (data) => { + process.stderr.write(data); + }, + }, + } + ).exec(); // Set trace command - const ext = process.platform === 'win32' ? '.cmd' : '.sh'; - const traceCommand = path.resolve(JSON.parse(extractorPath), 'tools', 'autobuild' + ext); + const ext = process.platform === "win32" ? ".cmd" : ".sh"; + const traceCommand = path.resolve( + JSON.parse(extractorPath), + "tools", + `autobuild${ext}` + ); // Run trace command await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'trace-command', - ...getExtraOptionsFromEnv(['database', 'trace-command']), + "database", + "trace-command", + ...getExtraOptionsFromEnv(["database", "trace-command"]), databasePath, - '--', - traceCommand + "--", + traceCommand, ]).exec(); }, - finalizeDatabase: async function(databasePath: string) { + async finalizeDatabase(databasePath: string) { await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'finalize', - ...getExtraOptionsFromEnv(['database', 'finalize']), - databasePath + "database", + "finalize", + ...getExtraOptionsFromEnv(["database", "finalize"]), + databasePath, ]).exec(); }, - resolveQueries: async function(queries: string[], extraSearchPath: string | undefined) { + async resolveQueries( + queries: string[], + extraSearchPath: string | undefined + ) { const codeqlArgs = [ - 'resolve', - 'queries', + "resolve", + "queries", ...queries, - '--format=bylanguage', - ...getExtraOptionsFromEnv(['resolve', 'queries']) + "--format=bylanguage", + ...getExtraOptionsFromEnv(["resolve", "queries"]), ]; if (extraSearchPath !== undefined) { - codeqlArgs.push('--search-path', extraSearchPath); + codeqlArgs.push("--search-path", extraSearchPath); } - let output = ''; + let output = ""; await new toolrunnner.ToolRunner(cmd, codeqlArgs, { listeners: { stdout: (data: Buffer) => { output += data.toString(); - } - } + }, + }, }).exec(); return JSON.parse(output); }, - databaseAnalyze: async function( + async databaseAnalyze( databasePath: string, sarifFile: string, querySuite: string, memoryFlag: string, addSnippetsFlag: string, - threadsFlag: string) { - + threadsFlag: string + ) { await new toolrunnner.ToolRunner(cmd, [ - 'database', - 'analyze', + "database", + "analyze", memoryFlag, threadsFlag, databasePath, - '--format=sarif-latest', - '--output=' + sarifFile, + "--format=sarif-latest", + `--output=${sarifFile}`, addSnippetsFlag, - ...getExtraOptionsFromEnv(['database', 'analyze']), - querySuite + ...getExtraOptionsFromEnv(["database", "analyze"]), + querySuite, ]).exec(); - } + }, }; } @@ -491,7 +575,7 @@ function getCodeQLForCmd(cmd: string): CodeQL { * Gets the options for `path` of `options` as an array of extra option strings. */ function getExtraOptionsFromEnv(path: string[]) { - let options: ExtraOptions = util.getExtraOptionsEnvParam(); + const options: ExtraOptions = util.getExtraOptionsEnvParam(); return getExtraOptions(options, path, []); } @@ -504,7 +588,8 @@ function getExtraOptionsFromEnv(path: string[]) { export /* exported for testing */ function getExtraOptions( options: any, path: string[], - pathInfo: string[]): string[] { + pathInfo: string[] +): string[] { /** * Gets `options` as an array of extra option strings. * @@ -515,23 +600,30 @@ export /* exported for testing */ function getExtraOptions( return []; } if (!Array.isArray(options)) { - const msg = - `The extra options for '${pathInfo.join('.')}' ('${JSON.stringify(options)}') are not in an array.`; + const msg = `The extra options for '${pathInfo.join( + "." + )}' ('${JSON.stringify(options)}') are not in an array.`; throw new Error(msg); } - return options.map(o => { + return options.map((o) => { const t = typeof o; - if (t !== 'string' && t !== 'number' && t !== 'boolean') { - const msg = - `The extra option for '${pathInfo.join('.')}' ('${JSON.stringify(o)}') is not a primitive value.`; + if (t !== "string" && t !== "number" && t !== "boolean") { + const msg = `The extra option for '${pathInfo.join( + "." + )}' ('${JSON.stringify(o)}') is not a primitive value.`; throw new Error(msg); } - return o + ''; + return `${o}`; }); } - let all = asExtraOptions(options?.['*'], pathInfo.concat('*')); - let specific = path.length === 0 ? - asExtraOptions(options, pathInfo) : - getExtraOptions(options?.[path[0]], path?.slice(1), pathInfo.concat(path[0])); + const all = asExtraOptions(options?.["*"], pathInfo.concat("*")); + const specific = + path.length === 0 + ? asExtraOptions(options, pathInfo) + : getExtraOptions( + options?.[path[0]], + path?.slice(1), + pathInfo.concat(path[0]) + ); return all.concat(specific); } diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index df34fb5f3..b0c76f8bb 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -1,42 +1,46 @@ import * as github from "@actions/github"; -import test from 'ava'; -import * as fs from 'fs'; -import * as path from 'path'; -import sinon from 'sinon'; - -import * as api from './api-client'; -import { getCachedCodeQL, setCodeQL } from './codeql'; -import * as configUtils from './config-utils'; +import test from "ava"; +import * as fs from "fs"; +import * as path from "path"; +import sinon from "sinon"; + +import * as api from "./api-client"; +import { getCachedCodeQL, setCodeQL } from "./codeql"; +import * as configUtils from "./config-utils"; import { Language } from "./languages"; import { getRunnerLogger } from "./logging"; -import {setupTests} from './testing-utils'; -import * as util from './util'; +import { setupTests } from "./testing-utils"; +import * as util from "./util"; setupTests(test); // Returns the filepath of the newly-created file function createConfigFile(inputFileContents: string, tmpDir: string): string { - const configFilePath = path.join(tmpDir, 'input'); - fs.writeFileSync(configFilePath, inputFileContents, 'utf8'); + const configFilePath = path.join(tmpDir, "input"); + fs.writeFileSync(configFilePath, inputFileContents, "utf8"); return configFilePath; } -type GetContentsResponse = { content?: string; } | {}[]; +type GetContentsResponse = { content?: string } | Array<{}>; -function mockGetContents(content: GetContentsResponse): sinon.SinonStub { +function mockGetContents( + content: GetContentsResponse +): sinon.SinonStub { // Passing an auth token is required, so we just use a dummy value - let client = new github.GitHub('123'); + const client = new github.GitHub("123"); const response = { - data: content + data: content, }; - const spyGetContents = sinon.stub(client.repos, "getContents").resolves(response as any); + const spyGetContents = sinon + .stub(client.repos, "getContents") + .resolves(response as any); sinon.stub(api, "getApiClient").value(() => client); return spyGetContents; } function mockListLanguages(languages: string[]) { // Passing an auth token is required, so we just use a dummy value - let client = new github.GitHub('123'); + const client = new github.GitHub("123"); const response = { data: {}, }; @@ -47,13 +51,13 @@ function mockListLanguages(languages: string[]) { sinon.stub(api, "getApiClient").value(() => client); } -test("load empty config", async t => { - return await util.withTmpDir(async tmpDir => { +test("load empty config", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const logger = getRunnerLogger(true); - const languages = 'javascript,python'; + const languages = "javascript,python"; const codeQL = setCodeQL({ - resolveQueries: async function() { + async resolveQueries() { return { byLanguage: {}, noDeclaredLanguage: {}, @@ -66,35 +70,40 @@ test("load empty config", async t => { languages, undefined, undefined, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - logger); - - t.deepEqual(config, await configUtils.getDefaultConfig( - languages, - undefined, - { owner: 'github', repo: 'example '}, - tmpDir, - tmpDir, - codeQL, - tmpDir, - 'token', - 'https://github.example.com', - logger)); + "token", + "https://github.example.com", + logger + ); + + t.deepEqual( + config, + await configUtils.getDefaultConfig( + languages, + undefined, + { owner: "github", repo: "example " }, + tmpDir, + tmpDir, + codeQL, + tmpDir, + "token", + "https://github.example.com", + logger + ) + ); }); }); -test("loading config saves config", async t => { - return await util.withTmpDir(async tmpDir => { +test("loading config saves config", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const logger = getRunnerLogger(true); const codeQL = setCodeQL({ - resolveQueries: async function() { + async resolveQueries() { return { byLanguage: {}, noDeclaredLanguage: {}, @@ -103,7 +112,6 @@ test("loading config saves config", async t => { }, }); - // Sanity check the saved config file does not already exist t.false(fs.existsSync(configUtils.getPathToParsedConfigFile(tmpDir))); @@ -111,17 +119,18 @@ test("loading config saves config", async t => { t.deepEqual(await configUtils.getConfig(tmpDir, logger), undefined); const config1 = await configUtils.initConfig( - 'javascript,python', + "javascript,python", undefined, undefined, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - logger); + "token", + "https://github.example.com", + logger + ); // The saved config file should now exist t.true(fs.existsSync(configUtils.getPathToParsedConfigFile(tmpDir))); @@ -132,57 +141,73 @@ test("loading config saves config", async t => { }); }); -test("load input outside of workspace", async t => { - return await util.withTmpDir(async tmpDir => { +test("load input outside of workspace", async (t) => { + return await util.withTmpDir(async (tmpDir) => { try { await configUtils.initConfig( undefined, undefined, - '../input', - { owner: 'github', repo: 'example '}, + "../input", + { owner: "github", repo: "example " }, tmpDir, tmpDir, getCachedCodeQL(), tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getConfigFileOutsideWorkspaceErrorMessage(path.join(tmpDir, '../input')))); + t.deepEqual( + err, + new Error( + configUtils.getConfigFileOutsideWorkspaceErrorMessage( + path.join(tmpDir, "../input") + ) + ) + ); } }); }); -test("load non-local input with invalid repo syntax", async t => { - return await util.withTmpDir(async tmpDir => { +test("load non-local input with invalid repo syntax", async (t) => { + return await util.withTmpDir(async (tmpDir) => { // no filename given, just a repo - const configFile = 'octo-org/codeql-config@main'; + const configFile = "octo-org/codeql-config@main"; try { await configUtils.initConfig( undefined, undefined, configFile, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, getCachedCodeQL(), tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getConfigFileRepoFormatInvalidMessage('octo-org/codeql-config@main'))); + t.deepEqual( + err, + new Error( + configUtils.getConfigFileRepoFormatInvalidMessage( + "octo-org/codeql-config@main" + ) + ) + ); } }); }); -test("load non-existent input", async t => { - return await util.withTmpDir(async tmpDir => { - const languages = 'javascript'; - const configFile = 'input'; +test("load non-existent input", async (t) => { + return await util.withTmpDir(async (tmpDir) => { + const languages = "javascript"; + const configFile = "input"; t.false(fs.existsSync(path.join(tmpDir, configFile))); try { @@ -190,30 +215,38 @@ test("load non-existent input", async t => { languages, undefined, configFile, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, getCachedCodeQL(), tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getConfigFileDoesNotExistErrorMessage(path.join(tmpDir, 'input')))); + t.deepEqual( + err, + new Error( + configUtils.getConfigFileDoesNotExistErrorMessage( + path.join(tmpDir, "input") + ) + ) + ); } }); }); -test("load non-empty input", async t => { - return await util.withTmpDir(async tmpDir => { +test("load non-empty input", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const codeQL = setCodeQL({ - resolveQueries: async function() { + async resolveQueries() { return { byLanguage: { - 'javascript': { - '/foo/a.ql': {}, - '/bar/b.ql': {}, + javascript: { + "/foo/a.ql": {}, + "/bar/b.ql": {}, }, }, noDeclaredLanguage: {}, @@ -234,63 +267,70 @@ test("load non-empty input", async t => { paths: - c/d`; - fs.mkdirSync(path.join(tmpDir, 'foo')); + fs.mkdirSync(path.join(tmpDir, "foo")); // And the config we expect it to parse to const expectedConfig: configUtils.Config = { languages: [Language.javascript], - queries: {'javascript': ['/foo/a.ql', '/bar/b.ql']}, - pathsIgnore: ['a', 'b'], - paths: ['c/d'], + queries: { javascript: ["/foo/a.ql", "/bar/b.ql"] }, + pathsIgnore: ["a", "b"], + paths: ["c/d"], originalUserInput: { - name: 'my config', - 'disable-default-queries': true, - queries: [{ uses: './foo' }], - 'paths-ignore': ['a', 'b'], - paths: ['c/d'], + name: "my config", + "disable-default-queries": true, + queries: [{ uses: "./foo" }], + "paths-ignore": ["a", "b"], + paths: ["c/d"], }, tempDir: tmpDir, toolCacheDir: tmpDir, codeQLCmd: codeQL.getPath(), }; - const languages = 'javascript'; + const languages = "javascript"; const configFilePath = createConfigFile(inputFileContents, tmpDir); const actualConfig = await configUtils.initConfig( languages, undefined, configFilePath, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); // Should exactly equal the object we constructed earlier t.deepEqual(actualConfig, expectedConfig); }); }); -test("Default queries are used", async t => { - return await util.withTmpDir(async tmpDir => { +test("Default queries are used", async (t) => { + return await util.withTmpDir(async (tmpDir) => { // Check that the default behaviour is to add the default queries. // In this case if a config file is specified but does not include // the disable-default-queries field. // We determine this by whether CodeQL.resolveQueries is called // with the correct arguments. - const resolveQueriesArgs: {queries: string[], extraSearchPath: string | undefined}[] = []; + const resolveQueriesArgs: Array<{ + queries: string[]; + extraSearchPath: string | undefined; + }> = []; const codeQL = setCodeQL({ - resolveQueries: async function(queries: string[], extraSearchPath: string | undefined) { - resolveQueriesArgs.push({queries, extraSearchPath}); + async resolveQueries( + queries: string[], + extraSearchPath: string | undefined + ) { + resolveQueriesArgs.push({ queries, extraSearchPath }); return { byLanguage: { - 'javascript': { - 'foo.ql': {}, + javascript: { + "foo.ql": {}, }, }, noDeclaredLanguage: {}, @@ -306,27 +346,30 @@ test("Default queries are used", async t => { paths: - foo`; - fs.mkdirSync(path.join(tmpDir, 'foo')); + fs.mkdirSync(path.join(tmpDir, "foo")); - const languages = 'javascript'; + const languages = "javascript"; const configFilePath = createConfigFile(inputFileContents, tmpDir); await configUtils.initConfig( languages, undefined, configFilePath, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); // Check resolve queries was called correctly t.deepEqual(resolveQueriesArgs.length, 1); - t.deepEqual(resolveQueriesArgs[0].queries, ['javascript-code-scanning.qls']); + t.deepEqual(resolveQueriesArgs[0].queries, [ + "javascript-code-scanning.qls", + ]); t.deepEqual(resolveQueriesArgs[0].extraSearchPath, undefined); }); }); @@ -338,18 +381,20 @@ test("Default queries are used", async t => { */ function queriesToResolvedQueryForm(queries: string[]) { const dummyResolvedQueries = {}; - queries.forEach(q => { dummyResolvedQueries[q] = {}; }); + queries.forEach((q) => { + dummyResolvedQueries[q] = {}; + }); return { byLanguage: { - 'javascript': dummyResolvedQueries, + javascript: dummyResolvedQueries, }, noDeclaredLanguage: {}, multipleDeclaredLanguages: {}, }; } -test("Queries can be specified in config file", async t => { - return await util.withTmpDir(async tmpDir => { +test("Queries can be specified in config file", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const inputFileContents = ` name: my config queries: @@ -357,30 +402,37 @@ test("Queries can be specified in config file", async t => { const configFilePath = createConfigFile(inputFileContents, tmpDir); - fs.mkdirSync(path.join(tmpDir, 'foo')); + fs.mkdirSync(path.join(tmpDir, "foo")); - const resolveQueriesArgs: {queries: string[], extraSearchPath: string | undefined}[] = []; + const resolveQueriesArgs: Array<{ + queries: string[]; + extraSearchPath: string | undefined; + }> = []; const codeQL = setCodeQL({ - resolveQueries: async function(queries: string[], extraSearchPath: string | undefined) { - resolveQueriesArgs.push({queries, extraSearchPath}); + async resolveQueries( + queries: string[], + extraSearchPath: string | undefined + ) { + resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; + const languages = "javascript"; const config = await configUtils.initConfig( languages, undefined, configFilePath, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); // Check resolveQueries was called correctly // It'll be called once for the default queries @@ -390,14 +442,14 @@ test("Queries can be specified in config file", async t => { t.regex(resolveQueriesArgs[1].queries[0], /.*\/foo$/); // Now check that the end result contains the default queries and the query from config - t.deepEqual(config.queries['javascript'].length, 2); - t.regex(config.queries['javascript'][0], /javascript-code-scanning.qls$/); - t.regex(config.queries['javascript'][1], /.*\/foo$/); + t.deepEqual(config.queries["javascript"].length, 2); + t.regex(config.queries["javascript"][0], /javascript-code-scanning.qls$/); + t.regex(config.queries["javascript"][1], /.*\/foo$/); }); }); -test("Queries from config file can be overridden in workflow file", async t => { - return await util.withTmpDir(async tmpDir => { +test("Queries from config file can be overridden in workflow file", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const inputFileContents = ` name: my config queries: @@ -406,33 +458,40 @@ test("Queries from config file can be overridden in workflow file", async t => { const configFilePath = createConfigFile(inputFileContents, tmpDir); // This config item should take precedence over the config file but shouldn't affect the default queries. - const queries = './override'; + const queries = "./override"; - fs.mkdirSync(path.join(tmpDir, 'foo')); - fs.mkdirSync(path.join(tmpDir, 'override')); + fs.mkdirSync(path.join(tmpDir, "foo")); + fs.mkdirSync(path.join(tmpDir, "override")); - const resolveQueriesArgs: {queries: string[], extraSearchPath: string | undefined}[] = []; + const resolveQueriesArgs: Array<{ + queries: string[]; + extraSearchPath: string | undefined; + }> = []; const codeQL = setCodeQL({ - resolveQueries: async function(queries: string[], extraSearchPath: string | undefined) { - resolveQueriesArgs.push({queries, extraSearchPath}); + async resolveQueries( + queries: string[], + extraSearchPath: string | undefined + ) { + resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; + const languages = "javascript"; const config = await configUtils.initConfig( languages, queries, configFilePath, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); // Check resolveQueries was called correctly // It'll be called once for the default queries and once for `./override`, @@ -442,47 +501,54 @@ test("Queries from config file can be overridden in workflow file", async t => { t.regex(resolveQueriesArgs[1].queries[0], /.*\/override$/); // Now check that the end result contains only the default queries and the override query - t.deepEqual(config.queries['javascript'].length, 2); - t.regex(config.queries['javascript'][0], /javascript-code-scanning.qls$/); - t.regex(config.queries['javascript'][1], /.*\/override$/); + t.deepEqual(config.queries["javascript"].length, 2); + t.regex(config.queries["javascript"][0], /javascript-code-scanning.qls$/); + t.regex(config.queries["javascript"][1], /.*\/override$/); }); }); -test("Queries in workflow file can be used in tandem with the 'disable default queries' option", async t => { - return await util.withTmpDir(async tmpDir => { - process.env['RUNNER_TEMP'] = tmpDir; - process.env['GITHUB_WORKSPACE'] = tmpDir; +test("Queries in workflow file can be used in tandem with the 'disable default queries' option", async (t) => { + return await util.withTmpDir(async (tmpDir) => { + process.env["RUNNER_TEMP"] = tmpDir; + process.env["GITHUB_WORKSPACE"] = tmpDir; const inputFileContents = ` name: my config disable-default-queries: true`; const configFilePath = createConfigFile(inputFileContents, tmpDir); - const queries = './workflow-query'; - fs.mkdirSync(path.join(tmpDir, 'workflow-query')); + const queries = "./workflow-query"; + fs.mkdirSync(path.join(tmpDir, "workflow-query")); - const resolveQueriesArgs: {queries: string[], extraSearchPath: string | undefined}[] = []; + const resolveQueriesArgs: Array<{ + queries: string[]; + extraSearchPath: string | undefined; + }> = []; const codeQL = setCodeQL({ - resolveQueries: async function(queries: string[], extraSearchPath: string | undefined) { - resolveQueriesArgs.push({queries, extraSearchPath}); + async resolveQueries( + queries: string[], + extraSearchPath: string | undefined + ) { + resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; + const languages = "javascript"; const config = await configUtils.initConfig( languages, queries, configFilePath, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); // Check resolveQueries was called correctly // It'll be called once for `./workflow-query`, @@ -492,40 +558,47 @@ test("Queries in workflow file can be used in tandem with the 'disable default q t.regex(resolveQueriesArgs[0].queries[0], /.*\/workflow-query$/); // Now check that the end result contains only the workflow query, and not the default one - t.deepEqual(config.queries['javascript'].length, 1); - t.regex(config.queries['javascript'][0], /.*\/workflow-query$/); + t.deepEqual(config.queries["javascript"].length, 1); + t.regex(config.queries["javascript"][0], /.*\/workflow-query$/); }); }); -test("Multiple queries can be specified in workflow file, no config file required", async t => { - return await util.withTmpDir(async tmpDir => { - fs.mkdirSync(path.join(tmpDir, 'override1')); - fs.mkdirSync(path.join(tmpDir, 'override2')); +test("Multiple queries can be specified in workflow file, no config file required", async (t) => { + return await util.withTmpDir(async (tmpDir) => { + fs.mkdirSync(path.join(tmpDir, "override1")); + fs.mkdirSync(path.join(tmpDir, "override2")); - const queries = './override1,./override2'; + const queries = "./override1,./override2"; - const resolveQueriesArgs: {queries: string[], extraSearchPath: string | undefined}[] = []; + const resolveQueriesArgs: Array<{ + queries: string[]; + extraSearchPath: string | undefined; + }> = []; const codeQL = setCodeQL({ - resolveQueries: async function(queries: string[], extraSearchPath: string | undefined) { - resolveQueriesArgs.push({queries, extraSearchPath}); + async resolveQueries( + queries: string[], + extraSearchPath: string | undefined + ) { + resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; + const languages = "javascript"; const config = await configUtils.initConfig( languages, queries, undefined, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); // Check resolveQueries was called correctly: // It'll be called once for the default queries, @@ -537,17 +610,17 @@ test("Multiple queries can be specified in workflow file, no config file require t.regex(resolveQueriesArgs[2].queries[0], /.*\/override2$/); // Now check that the end result contains both the queries from the workflow, as well as the defaults - t.deepEqual(config.queries['javascript'].length, 3); - t.regex(config.queries['javascript'][0], /javascript-code-scanning.qls$/); - t.regex(config.queries['javascript'][1], /.*\/override1$/); - t.regex(config.queries['javascript'][2], /.*\/override2$/); + t.deepEqual(config.queries["javascript"].length, 3); + t.regex(config.queries["javascript"][0], /javascript-code-scanning.qls$/); + t.regex(config.queries["javascript"][1], /.*\/override1$/); + t.regex(config.queries["javascript"][2], /.*\/override2$/); }); }); -test("Queries in workflow file can be added to the set of queries without overriding config file", async t => { - return await util.withTmpDir(async tmpDir => { - process.env['RUNNER_TEMP'] = tmpDir; - process.env['GITHUB_WORKSPACE'] = tmpDir; +test("Queries in workflow file can be added to the set of queries without overriding config file", async (t) => { + return await util.withTmpDir(async (tmpDir) => { + process.env["RUNNER_TEMP"] = tmpDir; + process.env["GITHUB_WORKSPACE"] = tmpDir; const inputFileContents = ` name: my config @@ -556,34 +629,41 @@ test("Queries in workflow file can be added to the set of queries without overri const configFilePath = createConfigFile(inputFileContents, tmpDir); // These queries shouldn't override anything, because the value is prefixed with "+" - const queries = '+./additional1,./additional2'; + const queries = "+./additional1,./additional2"; - fs.mkdirSync(path.join(tmpDir, 'foo')); - fs.mkdirSync(path.join(tmpDir, 'additional1')); - fs.mkdirSync(path.join(tmpDir, 'additional2')); + fs.mkdirSync(path.join(tmpDir, "foo")); + fs.mkdirSync(path.join(tmpDir, "additional1")); + fs.mkdirSync(path.join(tmpDir, "additional2")); - const resolveQueriesArgs: {queries: string[], extraSearchPath: string | undefined}[] = []; + const resolveQueriesArgs: Array<{ + queries: string[]; + extraSearchPath: string | undefined; + }> = []; const codeQL = setCodeQL({ - resolveQueries: async function(queries: string[], extraSearchPath: string | undefined) { - resolveQueriesArgs.push({queries, extraSearchPath}); + async resolveQueries( + queries: string[], + extraSearchPath: string | undefined + ) { + resolveQueriesArgs.push({ queries, extraSearchPath }); return queriesToResolvedQueryForm(queries); }, }); - const languages = 'javascript'; + const languages = "javascript"; const config = await configUtils.initConfig( languages, queries, configFilePath, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); // Check resolveQueries was called correctly // It'll be called once for the default queries, @@ -598,26 +678,29 @@ test("Queries in workflow file can be added to the set of queries without overri t.regex(resolveQueriesArgs[3].queries[0], /.*\/foo$/); // Now check that the end result contains all the queries - t.deepEqual(config.queries['javascript'].length, 4); - t.regex(config.queries['javascript'][0], /javascript-code-scanning.qls$/); - t.regex(config.queries['javascript'][1], /.*\/additional1$/); - t.regex(config.queries['javascript'][2], /.*\/additional2$/); - t.regex(config.queries['javascript'][3], /.*\/foo$/); + t.deepEqual(config.queries["javascript"].length, 4); + t.regex(config.queries["javascript"][0], /javascript-code-scanning.qls$/); + t.regex(config.queries["javascript"][1], /.*\/additional1$/); + t.regex(config.queries["javascript"][2], /.*\/additional2$/); + t.regex(config.queries["javascript"][3], /.*\/foo$/); }); }); -test("Invalid queries in workflow file handled correctly", async t => { - return await util.withTmpDir(async tmpDir => { - const queries = 'foo/bar@v1@v3'; - const languages = 'javascript'; +test("Invalid queries in workflow file handled correctly", async (t) => { + return await util.withTmpDir(async (tmpDir) => { + const queries = "foo/bar@v1@v3"; + const languages = "javascript"; // This function just needs to be type-correct; it doesn't need to do anything, // since we're deliberately passing in invalid data const codeQL = setCodeQL({ - resolveQueries: async function(_queries: string[], _extraSearchPath: string | undefined) { + async resolveQueries( + _queries: string[], + _extraSearchPath: string | undefined + ) { return { byLanguage: { - 'javascript': {}, + javascript: {}, }, noDeclaredLanguage: {}, multipleDeclaredLanguages: {}, @@ -630,29 +713,33 @@ test("Invalid queries in workflow file handled correctly", async t => { languages, queries, undefined, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - t.fail('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + t.fail("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getQueryUsesInvalid(undefined, "foo/bar@v1@v3"))); + t.deepEqual( + err, + new Error(configUtils.getQueryUsesInvalid(undefined, "foo/bar@v1@v3")) + ); } }); }); -test("API client used when reading remote config", async t => { - return await util.withTmpDir(async tmpDir => { +test("API client used when reading remote config", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const codeQL = setCodeQL({ - resolveQueries: async function() { + async resolveQueries() { return { byLanguage: { - 'javascript': { - 'foo.ql': {}, + javascript: { + "foo.ql": {}, }, }, noDeclaredLanguage: {}, @@ -679,83 +766,92 @@ test("API client used when reading remote config", async t => { const spyGetContents = mockGetContents(dummyResponse); // Create checkout directory for remote queries repository - fs.mkdirSync(path.join(tmpDir, 'foo/bar/dev'), { recursive: true }); + fs.mkdirSync(path.join(tmpDir, "foo/bar/dev"), { recursive: true }); - const configFile = 'octo-org/codeql-config/config.yaml@main'; - const languages = 'javascript'; + const configFile = "octo-org/codeql-config/config.yaml@main"; + const languages = "javascript"; await configUtils.initConfig( languages, undefined, configFile, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); t.assert(spyGetContents.called); }); }); -test("Remote config handles the case where a directory is provided", async t => { - return await util.withTmpDir(async tmpDir => { +test("Remote config handles the case where a directory is provided", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const dummyResponse = []; // directories are returned as arrays mockGetContents(dummyResponse); - const repoReference = 'octo-org/codeql-config/config.yaml@main'; + const repoReference = "octo-org/codeql-config/config.yaml@main"; try { await configUtils.initConfig( undefined, undefined, repoReference, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, getCachedCodeQL(), tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getConfigFileDirectoryGivenMessage(repoReference))); + t.deepEqual( + err, + new Error(configUtils.getConfigFileDirectoryGivenMessage(repoReference)) + ); } }); }); -test("Invalid format of remote config handled correctly", async t => { - return await util.withTmpDir(async tmpDir => { +test("Invalid format of remote config handled correctly", async (t) => { + return await util.withTmpDir(async (tmpDir) => { const dummyResponse = { // note no "content" property here }; mockGetContents(dummyResponse); - const repoReference = 'octo-org/codeql-config/config.yaml@main'; + const repoReference = "octo-org/codeql-config/config.yaml@main"; try { await configUtils.initConfig( undefined, undefined, repoReference, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, getCachedCodeQL(), tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getConfigFileFormatInvalidMessage(repoReference))); + t.deepEqual( + err, + new Error(configUtils.getConfigFileFormatInvalidMessage(repoReference)) + ); } }); }); -test("No detected languages", async t => { - return await util.withTmpDir(async tmpDir => { +test("No detected languages", async (t) => { + return await util.withTmpDir(async (tmpDir) => { mockListLanguages([]); try { @@ -763,41 +859,46 @@ test("No detected languages", async t => { undefined, undefined, undefined, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, getCachedCodeQL(), tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + throw new Error("initConfig did not throw error"); } catch (err) { t.deepEqual(err, new Error(configUtils.getNoLanguagesError())); } }); }); -test("Unknown languages", async t => { - return await util.withTmpDir(async tmpDir => { - const languages = 'ruby,english'; +test("Unknown languages", async (t) => { + return await util.withTmpDir(async (tmpDir) => { + const languages = "ruby,english"; try { await configUtils.initConfig( languages, undefined, undefined, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, getCachedCodeQL(), tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + throw new Error("initConfig did not throw error"); } catch (err) { - t.deepEqual(err, new Error(configUtils.getUnknownLanguagesError(['ruby', 'english']))); + t.deepEqual( + err, + new Error(configUtils.getUnknownLanguagesError(["ruby", "english"])) + ); } }); }); @@ -805,12 +906,12 @@ test("Unknown languages", async t => { function doInvalidInputTest( testName: string, inputFileContents: string, - expectedErrorMessageGenerator: (configFile: string) => string) { - - test("load invalid input - " + testName, async t => { - return await util.withTmpDir(async tmpDir => { + expectedErrorMessageGenerator: (configFile: string) => string +) { + test(`load invalid input - ${testName}`, async (t) => { + return await util.withTmpDir(async (tmpDir) => { const codeQL = setCodeQL({ - resolveQueries: async function() { + async resolveQueries() { return { byLanguage: {}, noDeclaredLanguage: {}, @@ -819,25 +920,26 @@ function doInvalidInputTest( }, }); - const languages = 'javascript'; - const configFile = 'input'; + const languages = "javascript"; + const configFile = "input"; const inputFile = path.join(tmpDir, configFile); - fs.writeFileSync(inputFile, inputFileContents, 'utf8'); + fs.writeFileSync(inputFile, inputFileContents, "utf8"); try { await configUtils.initConfig( languages, undefined, configFile, - { owner: 'github', repo: 'example '}, + { owner: "github", repo: "example " }, tmpDir, tmpDir, codeQL, tmpDir, - 'token', - 'https://github.example.com', - getRunnerLogger(true)); - throw new Error('initConfig did not throw error'); + "token", + "https://github.example.com", + getRunnerLogger(true) + ); + throw new Error("initConfig did not throw error"); } catch (err) { t.deepEqual(err, new Error(expectedErrorMessageGenerator(inputFile))); } @@ -846,123 +948,151 @@ function doInvalidInputTest( } doInvalidInputTest( - 'name invalid type', + "name invalid type", ` name: - foo: bar`, - configUtils.getNameInvalid); + configUtils.getNameInvalid +); doInvalidInputTest( - 'disable-default-queries invalid type', + "disable-default-queries invalid type", `disable-default-queries: 42`, - configUtils.getDisableDefaultQueriesInvalid); + configUtils.getDisableDefaultQueriesInvalid +); doInvalidInputTest( - 'queries invalid type', + "queries invalid type", `queries: foo`, - configUtils.getQueriesInvalid); + configUtils.getQueriesInvalid +); doInvalidInputTest( - 'paths-ignore invalid type', + "paths-ignore invalid type", `paths-ignore: bar`, - configUtils.getPathsIgnoreInvalid); + configUtils.getPathsIgnoreInvalid +); doInvalidInputTest( - 'paths invalid type', + "paths invalid type", `paths: 17`, - configUtils.getPathsInvalid); + configUtils.getPathsInvalid +); doInvalidInputTest( - 'queries uses invalid type', + "queries uses invalid type", ` queries: - uses: - hello: world`, - configUtils.getQueryUsesInvalid); + configUtils.getQueryUsesInvalid +); function doInvalidQueryUsesTest( input: string, - expectedErrorMessageGenerator: (configFile: string) => string) { - + expectedErrorMessageGenerator: (configFile: string) => string +) { // Invalid contents of a "queries.uses" field. // Should fail with the expected error message const inputFileContents = ` name: my config queries: - name: foo - uses: ` + input; + uses: ${input}`; doInvalidInputTest( - "queries uses \"" + input + "\"", + `queries uses "${input}"`, inputFileContents, - expectedErrorMessageGenerator); + expectedErrorMessageGenerator + ); } // Various "uses" fields, and the errors they should produce -doInvalidQueryUsesTest( - "''", - c => configUtils.getQueryUsesInvalid(c, undefined)); -doInvalidQueryUsesTest( - "foo/bar", - c => configUtils.getQueryUsesInvalid(c, "foo/bar")); -doInvalidQueryUsesTest( - "foo/bar@v1@v2", - c => configUtils.getQueryUsesInvalid(c, "foo/bar@v1@v2")); -doInvalidQueryUsesTest( - "foo@master", - c => configUtils.getQueryUsesInvalid(c, "foo@master")); -doInvalidQueryUsesTest( - "https://github.com/foo/bar@master", - c => configUtils.getQueryUsesInvalid(c, "https://github.com/foo/bar@master")); -doInvalidQueryUsesTest( - "./foo", - c => configUtils.getLocalPathDoesNotExist(c, "foo")); -doInvalidQueryUsesTest( - "./..", - c => configUtils.getLocalPathOutsideOfRepository(c, "..")); +doInvalidQueryUsesTest("''", (c) => + configUtils.getQueryUsesInvalid(c, undefined) +); +doInvalidQueryUsesTest("foo/bar", (c) => + configUtils.getQueryUsesInvalid(c, "foo/bar") +); +doInvalidQueryUsesTest("foo/bar@v1@v2", (c) => + configUtils.getQueryUsesInvalid(c, "foo/bar@v1@v2") +); +doInvalidQueryUsesTest("foo@master", (c) => + configUtils.getQueryUsesInvalid(c, "foo@master") +); +doInvalidQueryUsesTest("https://github.com/foo/bar@master", (c) => + configUtils.getQueryUsesInvalid(c, "https://github.com/foo/bar@master") +); +doInvalidQueryUsesTest("./foo", (c) => + configUtils.getLocalPathDoesNotExist(c, "foo") +); +doInvalidQueryUsesTest("./..", (c) => + configUtils.getLocalPathOutsideOfRepository(c, "..") +); const validPaths = [ - 'foo', - 'foo/', - 'foo/**', - 'foo/**/', - 'foo/**/**', - 'foo/**/bar/**/baz', - '**/', - '**/foo', - '/foo', + "foo", + "foo/", + "foo/**", + "foo/**/", + "foo/**/**", + "foo/**/bar/**/baz", + "**/", + "**/foo", + "/foo", ]; -const invalidPaths = [ - 'a/***/b', - 'a/**b', - 'a/b**', - '**', -]; -test('path validations', t => { +const invalidPaths = ["a/***/b", "a/**b", "a/b**", "**"]; +test("path validations", (t) => { // Dummy values to pass to validateAndSanitisePath - const propertyName = 'paths'; - const configFile = './.github/codeql/config.yml'; + const propertyName = "paths"; + const configFile = "./.github/codeql/config.yml"; for (const path of validPaths) { - t.truthy(configUtils.validateAndSanitisePath(path, propertyName, configFile, getRunnerLogger(true))); + t.truthy( + configUtils.validateAndSanitisePath( + path, + propertyName, + configFile, + getRunnerLogger(true) + ) + ); } for (const path of invalidPaths) { - t.throws(() => configUtils.validateAndSanitisePath(path, propertyName, configFile, getRunnerLogger(true))); + t.throws(() => + configUtils.validateAndSanitisePath( + path, + propertyName, + configFile, + getRunnerLogger(true) + ) + ); } }); -test('path sanitisation', t => { +test("path sanitisation", (t) => { // Dummy values to pass to validateAndSanitisePath - const propertyName = 'paths'; - const configFile = './.github/codeql/config.yml'; + const propertyName = "paths"; + const configFile = "./.github/codeql/config.yml"; // Valid paths are not modified t.deepEqual( - configUtils.validateAndSanitisePath('foo/bar', propertyName, configFile, getRunnerLogger(true)), - 'foo/bar'); + configUtils.validateAndSanitisePath( + "foo/bar", + propertyName, + configFile, + getRunnerLogger(true) + ), + "foo/bar" + ); // Trailing stars are stripped t.deepEqual( - configUtils.validateAndSanitisePath('foo/**', propertyName, configFile, getRunnerLogger(true)), - 'foo/'); + configUtils.validateAndSanitisePath( + "foo/**", + propertyName, + configFile, + getRunnerLogger(true) + ), + "foo/" + ); }); diff --git a/src/config-utils.ts b/src/config-utils.ts index c313b6c30..1bcee492b 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -1,33 +1,33 @@ -import * as fs from 'fs'; -import * as yaml from 'js-yaml'; -import * as path from 'path'; +import * as fs from "fs"; +import * as yaml from "js-yaml"; +import * as path from "path"; -import * as api from './api-client'; -import { CodeQL, ResolveQueriesOutput } from './codeql'; +import * as api from "./api-client"; +import { CodeQL, ResolveQueriesOutput } from "./codeql"; import * as externalQueries from "./external-queries"; import { Language, parseLanguage } from "./languages"; -import { Logger } from './logging'; -import { RepositoryNwo } from './repository'; +import { Logger } from "./logging"; +import { RepositoryNwo } from "./repository"; // Property names from the user-supplied config file. -const NAME_PROPERTY = 'name'; -const DISABLE_DEFAULT_QUERIES_PROPERTY = 'disable-default-queries'; -const QUERIES_PROPERTY = 'queries'; -const QUERIES_USES_PROPERTY = 'uses'; -const PATHS_IGNORE_PROPERTY = 'paths-ignore'; -const PATHS_PROPERTY = 'paths'; +const NAME_PROPERTY = "name"; +const DISABLE_DEFAULT_QUERIES_PROPERTY = "disable-default-queries"; +const QUERIES_PROPERTY = "queries"; +const QUERIES_USES_PROPERTY = "uses"; +const PATHS_IGNORE_PROPERTY = "paths-ignore"; +const PATHS_PROPERTY = "paths"; /** * Format of the config file supplied by the user. */ export interface UserConfig { name?: string; - 'disable-default-queries'?: boolean; - queries?: { + "disable-default-queries"?: boolean; + queries?: Array<{ name?: string; uses: string; - }[]; - 'paths-ignore'?: string[]; + }>; + "paths-ignore"?: string[]; paths?: string[]; } @@ -86,16 +86,17 @@ export interface Config { * * Format is a map from language to an array of path suffixes of .ql files. */ -const DISABLED_BUILTIN_QUERIES: {[language: string]: string[]} = { - 'csharp': [ - 'ql/src/Security Features/CWE-937/VulnerablePackage.ql', - 'ql/src/Security Features/CWE-451/MissingXFrameOptions.ql', - ] +const DISABLED_BUILTIN_QUERIES: { [language: string]: string[] } = { + csharp: [ + "ql/src/Security Features/CWE-937/VulnerablePackage.ql", + "ql/src/Security Features/CWE-451/MissingXFrameOptions.ql", + ], }; function queryIsDisabled(language, query): boolean { - return (DISABLED_BUILTIN_QUERIES[language] || []) - .some(disabledQuery => query.endsWith(disabledQuery)); + return (DISABLED_BUILTIN_QUERIES[language] || []).some((disabledQuery) => + query.endsWith(disabledQuery) + ); } /** @@ -106,17 +107,25 @@ function validateQueries(resolvedQueries: ResolveQueriesOutput) { const noDeclaredLanguage = resolvedQueries.noDeclaredLanguage; const noDeclaredLanguageQueries = Object.keys(noDeclaredLanguage); if (noDeclaredLanguageQueries.length !== 0) { - throw new Error('The following queries do not declare a language. ' + - 'Their qlpack.yml files are either missing or is invalid.\n' + - noDeclaredLanguageQueries.join('\n')); + throw new Error( + `${ + "The following queries do not declare a language. " + + "Their qlpack.yml files are either missing or is invalid.\n" + }${noDeclaredLanguageQueries.join("\n")}` + ); } const multipleDeclaredLanguages = resolvedQueries.multipleDeclaredLanguages; - const multipleDeclaredLanguagesQueries = Object.keys(multipleDeclaredLanguages); + const multipleDeclaredLanguagesQueries = Object.keys( + multipleDeclaredLanguages + ); if (multipleDeclaredLanguagesQueries.length !== 0) { - throw new Error('The following queries declare multiple languages. ' + - 'Their qlpack.yml files are either missing or is invalid.\n' + - multipleDeclaredLanguagesQueries.join('\n')); + throw new Error( + `${ + "The following queries declare multiple languages. " + + "Their qlpack.yml files are either missing or is invalid.\n" + }${multipleDeclaredLanguagesQueries.join("\n")}` + ); } } @@ -128,15 +137,22 @@ async function runResolveQueries( resultMap: { [language: string]: string[] }, toResolve: string[], extraSearchPath: string | undefined, - errorOnInvalidQueries: boolean) { - - const resolvedQueries = await codeQL.resolveQueries(toResolve, extraSearchPath); - - for (const [language, queries] of Object.entries(resolvedQueries.byLanguage)) { + errorOnInvalidQueries: boolean +) { + const resolvedQueries = await codeQL.resolveQueries( + toResolve, + extraSearchPath + ); + + for (const [language, queries] of Object.entries( + resolvedQueries.byLanguage + )) { if (resultMap[language] === undefined) { resultMap[language] = []; } - resultMap[language].push(...Object.keys(queries).filter(q => !queryIsDisabled(language, q))); + resultMap[language].push( + ...Object.keys(queries).filter((q) => !queryIsDisabled(language, q)) + ); } if (errorOnInvalidQueries) { @@ -147,13 +163,17 @@ async function runResolveQueries( /** * Get the set of queries included by default. */ -async function addDefaultQueries(codeQL: CodeQL, languages: string[], resultMap: { [language: string]: string[] }) { - const suites = languages.map(l => l + '-code-scanning.qls'); +async function addDefaultQueries( + codeQL: CodeQL, + languages: string[], + resultMap: { [language: string]: string[] } +) { + const suites = languages.map((l) => `${l}-code-scanning.qls`); await runResolveQueries(codeQL, resultMap, suites, undefined, false); } // The set of acceptable values for built-in suites from the codeql bundle -const builtinSuites = ['security-extended', 'security-and-quality'] as const; +const builtinSuites = ["security-extended", "security-and-quality"] as const; /** * Determine the set of queries associated with suiteName's suites and add them to resultMap. @@ -164,14 +184,14 @@ async function addBuiltinSuiteQueries( codeQL: CodeQL, resultMap: { [language: string]: string[] }, suiteName: string, - configFile?: string) { - + configFile?: string +) { const suite = builtinSuites.find((suite) => suite === suiteName); if (!suite) { throw new Error(getQueryUsesInvalid(configFile, suiteName)); } - const suites = languages.map(l => l + '-' + suiteName + '.qls'); + const suites = languages.map((l) => `${l}-${suiteName}.qls`); await runResolveQueries(codeQL, resultMap, suites, undefined, false); } @@ -183,8 +203,8 @@ async function addLocalQueries( resultMap: { [language: string]: string[] }, localQueryPath: string, checkoutPath: string, - configFile?: string) { - + configFile?: string +) { // Resolve the local path against the workspace so that when this is // passed to codeql it resolves to exactly the path we expect it to resolve to. let absoluteQueryPath = path.join(checkoutPath, localQueryPath); @@ -198,11 +218,23 @@ async function addLocalQueries( absoluteQueryPath = fs.realpathSync(absoluteQueryPath); // Check the local path doesn't jump outside the repo using '..' or symlinks - if (!(absoluteQueryPath + path.sep).startsWith(fs.realpathSync(checkoutPath) + path.sep)) { - throw new Error(getLocalPathOutsideOfRepository(configFile, localQueryPath)); + if ( + !(absoluteQueryPath + path.sep).startsWith( + fs.realpathSync(checkoutPath) + path.sep + ) + ) { + throw new Error( + getLocalPathOutsideOfRepository(configFile, localQueryPath) + ); } - await runResolveQueries(codeQL, resultMap, [absoluteQueryPath], checkoutPath, true); + await runResolveQueries( + codeQL, + resultMap, + [absoluteQueryPath], + checkoutPath, + true + ); } /** @@ -215,16 +247,16 @@ async function addRemoteQueries( tempDir: string, githubUrl: string, logger: Logger, - configFile?: string) { - - let tok = queryUses.split('@'); + configFile?: string +) { + let tok = queryUses.split("@"); if (tok.length !== 2) { throw new Error(getQueryUsesInvalid(configFile, queryUses)); } const ref = tok[1]; - tok = tok[0].split('/'); + tok = tok[0].split("/"); // The first token is the owner // The second token is the repo // The rest is a path, if there is more than one token combine them to form the full path @@ -232,10 +264,10 @@ async function addRemoteQueries( throw new Error(getQueryUsesInvalid(configFile, queryUses)); } // Check none of the parts of the repository name are empty - if (tok[0].trim() === '' || tok[1].trim() === '') { + if (tok[0].trim() === "" || tok[1].trim() === "") { throw new Error(getQueryUsesInvalid(configFile, queryUses)); } - const nwo = tok[0] + '/' + tok[1]; + const nwo = `${tok[0]}/${tok[1]}`; // Checkout the external repository const checkoutPath = await externalQueries.checkoutExternalRepository( @@ -243,11 +275,13 @@ async function addRemoteQueries( ref, githubUrl, tempDir, - logger); + logger + ); - const queryPath = tok.length > 2 - ? path.join(checkoutPath, tok.slice(2).join('/')) - : checkoutPath; + const queryPath = + tok.length > 2 + ? path.join(checkoutPath, tok.slice(2).join("/")) + : checkoutPath; await runResolveQueries(codeQL, resultMap, [queryPath], checkoutPath, true); } @@ -269,8 +303,8 @@ async function parseQueryUses( checkoutPath: string, githubUrl: string, logger: Logger, - configFile?: string) { - + configFile?: string +) { queryUses = queryUses.trim(); if (queryUses === "") { throw new Error(getQueryUsesInvalid(configFile)); @@ -278,18 +312,38 @@ async function parseQueryUses( // Check for the local path case before we start trying to parse the repository name if (queryUses.startsWith("./")) { - await addLocalQueries(codeQL, resultMap, queryUses.slice(2), checkoutPath, configFile); + await addLocalQueries( + codeQL, + resultMap, + queryUses.slice(2), + checkoutPath, + configFile + ); return; } // Check for one of the builtin suites - if (queryUses.indexOf('/') === -1 && queryUses.indexOf('@') === -1) { - await addBuiltinSuiteQueries(languages, codeQL, resultMap, queryUses, configFile); + if (queryUses.indexOf("/") === -1 && queryUses.indexOf("@") === -1) { + await addBuiltinSuiteQueries( + languages, + codeQL, + resultMap, + queryUses, + configFile + ); return; } // Otherwise, must be a reference to another repo - await addRemoteQueries(codeQL, resultMap, queryUses, tempDir, githubUrl, logger, configFile); + await addRemoteQueries( + codeQL, + resultMap, + queryUses, + tempDir, + githubUrl, + logger, + configFile + ); } // Regex validating stars in paths or paths-ignore entries. @@ -307,58 +361,70 @@ export function validateAndSanitisePath( originalPath: string, propertyName: string, configFile: string, - logger: Logger): string { - + logger: Logger +): string { // Take a copy so we don't modify the original path, so we can still construct error messages let path = originalPath; // All paths are relative to the src root, so strip off leading slashes. - while (path.charAt(0) === '/') { + while (path.charAt(0) === "/") { path = path.substring(1); } // Trailing ** are redundant, so strip them off - if (path.endsWith('/**')) { + if (path.endsWith("/**")) { path = path.substring(0, path.length - 2); } // An empty path is not allowed as it's meaningless - if (path === '') { - throw new Error(getConfigFilePropertyError( - configFile, - propertyName, - '"' + originalPath + '" is not an invalid path. ' + - 'It is not necessary to include it, and it is not allowed to exclude it.')); + if (path === "") { + throw new Error( + getConfigFilePropertyError( + configFile, + propertyName, + `"${originalPath}" is not an invalid path. ` + + `It is not necessary to include it, and it is not allowed to exclude it.` + ) + ); } // Check for illegal uses of ** if (path.match(pathStarsRegex)) { - throw new Error(getConfigFilePropertyError( - configFile, - propertyName, - '"' + originalPath + '" contains an invalid "**" wildcard. ' + - 'They must be immediately preceeded and followed by a slash as in "/**/", or come at the start or end.')); + throw new Error( + getConfigFilePropertyError( + configFile, + propertyName, + `"${originalPath}" contains an invalid "**" wildcard. ` + + `They must be immediately preceeded and followed by a slash as in "/**/", or come at the start or end.` + ) + ); } // Check for other regex characters that we don't support. // Output a warning so the user knows, but otherwise continue normally. if (path.match(filterPatternCharactersRegex)) { - logger.warning(getConfigFilePropertyError( - configFile, - propertyName, - '"' + originalPath + '" contains an unsupported character. ' + - 'The filter pattern characters ?, +, [, ], ! are not supported and will be matched literally.')); + logger.warning( + getConfigFilePropertyError( + configFile, + propertyName, + `"${originalPath}" contains an unsupported character. ` + + `The filter pattern characters ?, +, [, ], ! are not supported and will be matched literally.` + ) + ); } // Ban any uses of backslash for now. // This may not play nicely with project layouts. // This restriction can be lifted later if we determine they are ok. - if (path.indexOf('\\') !== -1) { - throw new Error(getConfigFilePropertyError( - configFile, - propertyName, - '"' + originalPath + '" contains an "\\" character. These are not allowed in filters. ' + - 'If running on windows we recommend using "/" instead for path filters.')); + if (path.indexOf("\\") !== -1) { + throw new Error( + getConfigFilePropertyError( + configFile, + propertyName, + `"${originalPath}" contains an "\\" character. These are not allowed in filters. ` + + `If running on windows we recommend using "/" instead for path filters.` + ) + ); } return path; @@ -368,86 +434,132 @@ export function validateAndSanitisePath( // the property was in a workflow file, not a config file export function getNameInvalid(configFile: string): string { - return getConfigFilePropertyError(configFile, NAME_PROPERTY, 'must be a non-empty string'); + return getConfigFilePropertyError( + configFile, + NAME_PROPERTY, + "must be a non-empty string" + ); } export function getDisableDefaultQueriesInvalid(configFile: string): string { - return getConfigFilePropertyError(configFile, DISABLE_DEFAULT_QUERIES_PROPERTY, 'must be a boolean'); + return getConfigFilePropertyError( + configFile, + DISABLE_DEFAULT_QUERIES_PROPERTY, + "must be a boolean" + ); } export function getQueriesInvalid(configFile: string): string { - return getConfigFilePropertyError(configFile, QUERIES_PROPERTY, 'must be an array'); + return getConfigFilePropertyError( + configFile, + QUERIES_PROPERTY, + "must be an array" + ); } -export function getQueryUsesInvalid(configFile: string | undefined, queryUses?: string): string { +export function getQueryUsesInvalid( + configFile: string | undefined, + queryUses?: string +): string { return getConfigFilePropertyError( configFile, - QUERIES_PROPERTY + '.' + QUERIES_USES_PROPERTY, - 'must be a built-in suite (' + builtinSuites.join(' or ') + - '), a relative path, or be of the form "owner/repo[/path]@ref"' + - (queryUses !== undefined ? '\n Found: ' + queryUses : '')); + `${QUERIES_PROPERTY}.${QUERIES_USES_PROPERTY}`, + `must be a built-in suite (${builtinSuites.join( + " or " + )}), a relative path, or be of the form "owner/repo[/path]@ref"${ + queryUses !== undefined ? `\n Found: ${queryUses}` : "" + }` + ); } export function getPathsIgnoreInvalid(configFile: string): string { - return getConfigFilePropertyError(configFile, PATHS_IGNORE_PROPERTY, 'must be an array of non-empty strings'); + return getConfigFilePropertyError( + configFile, + PATHS_IGNORE_PROPERTY, + "must be an array of non-empty strings" + ); } export function getPathsInvalid(configFile: string): string { - return getConfigFilePropertyError(configFile, PATHS_PROPERTY, 'must be an array of non-empty strings'); + return getConfigFilePropertyError( + configFile, + PATHS_PROPERTY, + "must be an array of non-empty strings" + ); } -export function getLocalPathOutsideOfRepository(configFile: string | undefined, localPath: string): string { +export function getLocalPathOutsideOfRepository( + configFile: string | undefined, + localPath: string +): string { return getConfigFilePropertyError( configFile, - QUERIES_PROPERTY + '.' + QUERIES_USES_PROPERTY, - 'is invalid as the local path "' + localPath + '" is outside of the repository'); + `${QUERIES_PROPERTY}.${QUERIES_USES_PROPERTY}`, + `is invalid as the local path "${localPath}" is outside of the repository` + ); } -export function getLocalPathDoesNotExist(configFile: string | undefined, localPath: string): string { +export function getLocalPathDoesNotExist( + configFile: string | undefined, + localPath: string +): string { return getConfigFilePropertyError( configFile, - QUERIES_PROPERTY + '.' + QUERIES_USES_PROPERTY, - 'is invalid as the local path "' + localPath + '" does not exist in the repository'); + `${QUERIES_PROPERTY}.${QUERIES_USES_PROPERTY}`, + `is invalid as the local path "${localPath}" does not exist in the repository` + ); } -export function getConfigFileOutsideWorkspaceErrorMessage(configFile: string): string { - return 'The configuration file "' + configFile + '" is outside of the workspace'; +export function getConfigFileOutsideWorkspaceErrorMessage( + configFile: string +): string { + return `The configuration file "${configFile}" is outside of the workspace`; } -export function getConfigFileDoesNotExistErrorMessage(configFile: string): string { - return 'The configuration file "' + configFile + '" does not exist'; +export function getConfigFileDoesNotExistErrorMessage( + configFile: string +): string { + return `The configuration file "${configFile}" does not exist`; } -export function getConfigFileRepoFormatInvalidMessage(configFile: string): string { - let error = 'The configuration file "' + configFile + '" is not a supported remote file reference.'; - error += ' Expected format //@'; +export function getConfigFileRepoFormatInvalidMessage( + configFile: string +): string { + let error = `The configuration file "${configFile}" is not a supported remote file reference.`; + error += " Expected format //@"; return error; } export function getConfigFileFormatInvalidMessage(configFile: string): string { - return 'The configuration file "' + configFile + '" could not be read'; + return `The configuration file "${configFile}" could not be read`; } export function getConfigFileDirectoryGivenMessage(configFile: string): string { - return 'The configuration file "' + configFile + '" looks like a directory, not a file'; + return `The configuration file "${configFile}" looks like a directory, not a file`; } -function getConfigFilePropertyError(configFile: string | undefined, property: string, error: string): string { +function getConfigFilePropertyError( + configFile: string | undefined, + property: string, + error: string +): string { if (configFile === undefined) { - return 'The workflow property "' + property + '" is invalid: ' + error; + return `The workflow property "${property}" is invalid: ${error}`; } else { - return 'The configuration file "' + configFile + '" is invalid: property "' + property + '" ' + error; + return `The configuration file "${configFile}" is invalid: property "${property}" ${error}`; } } export function getNoLanguagesError(): string { - return "Did not detect any languages to analyze. " + - "Please update input in workflow or check that GitHub detects the correct languages in your repository."; + return ( + "Did not detect any languages to analyze. " + + "Please update input in workflow or check that GitHub detects the correct languages in your repository." + ); } export function getUnknownLanguagesError(languages: string[]): string { - return "Did not recognise the following languages: " + languages.join(', '); + return `Did not recognise the following languages: ${languages.join(", ")}`; } /** @@ -457,23 +569,25 @@ async function getLanguagesInRepo( repository: RepositoryNwo, githubAuth: string, githubUrl: string, - logger: Logger): Promise { - + logger: Logger +): Promise { logger.debug(`GitHub repo ${repository.owner} ${repository.repo}`); - const response = await api.getApiClient(githubAuth, githubUrl, true).repos.listLanguages({ - owner: repository.owner, - repo: repository.repo - }); + const response = await api + .getApiClient(githubAuth, githubUrl, true) + .repos.listLanguages({ + owner: repository.owner, + repo: repository.repo, + }); - logger.debug("Languages API response: " + JSON.stringify(response)); + logger.debug(`Languages API response: ${JSON.stringify(response)}`); // The GitHub API is going to return languages in order of popularity, // When we pick a language to autobuild we want to pick the most popular traced language // Since sets in javascript maintain insertion order, using a set here and then splatting it // into an array gives us an array of languages ordered by popularity - let languages: Set = new Set(); - for (let lang of Object.keys(response.data)) { - let parsedLang = parseLanguage(lang); + const languages: Set = new Set(); + for (const lang of Object.keys(response.data)) { + const parsedLang = parseLanguage(lang); if (parsedLang !== undefined) { languages.add(parsedLang); } @@ -496,14 +610,14 @@ async function getLanguages( repository: RepositoryNwo, githubAuth: string, githubUrl: string, - logger: Logger): Promise { - + logger: Logger +): Promise { // Obtain from action input 'languages' if set let languages = (languagesInput || "") - .split(',') - .map(x => x.trim()) - .filter(x => x.length > 0); - logger.info("Languages from configuration: " + JSON.stringify(languages)); + .split(",") + .map((x) => x.trim()) + .filter((x) => x.length > 0); + logger.info(`Languages from configuration: ${JSON.stringify(languages)}`); if (languages.length === 0) { // Obtain languages as all languages in the repo that can be analysed @@ -511,8 +625,11 @@ async function getLanguages( repository, githubAuth, githubUrl, - logger); - logger.info("Automatically detected languages: " + JSON.stringify(languages)); + logger + ); + logger.info( + `Automatically detected languages: ${JSON.stringify(languages)}` + ); } // If the languages parameter was not given and no languages were @@ -524,7 +641,7 @@ async function getLanguages( // Make sure they are supported const parsedLanguages: Language[] = []; const unknownLanguages: string[] = []; - for (let language of languages) { + for (const language of languages) { const parsedLanguage = parseLanguage(language); if (parsedLanguage === undefined) { unknownLanguages.push(language); @@ -547,13 +664,13 @@ async function addQueriesFromWorkflow( tempDir: string, checkoutPath: string, githubUrl: string, - logger: Logger) { - + logger: Logger +) { queriesInput = queriesInput.trim(); // "+" means "don't override config file" - see shouldAddConfigFileQueries - queriesInput = queriesInput.replace(/^\+/, ''); + queriesInput = queriesInput.replace(/^\+/, ""); - for (const query of queriesInput.split(',')) { + for (const query of queriesInput.split(",")) { await parseQueryUses( languages, codeQL, @@ -562,7 +679,8 @@ async function addQueriesFromWorkflow( tempDir, checkoutPath, githubUrl, - logger); + logger + ); } } @@ -572,7 +690,7 @@ async function addQueriesFromWorkflow( // should instead be added in addition function shouldAddConfigFileQueries(queriesInput: string | undefined): boolean { if (queriesInput) { - return queriesInput.trimStart().substr(0, 1) === '+'; + return queriesInput.trimStart().substr(0, 1) === "+"; } return true; @@ -591,14 +709,15 @@ export async function getDefaultConfig( checkoutPath: string, githubAuth: string, githubUrl: string, - logger: Logger): Promise { - + logger: Logger +): Promise { const languages = await getLanguages( languagesInput, repository, githubAuth, githubUrl, - logger); + logger + ); const queries = {}; await addDefaultQueries(codeQL, languages, queries); if (queriesInput) { @@ -610,12 +729,13 @@ export async function getDefaultConfig( tempDir, checkoutPath, githubUrl, - logger); + logger + ); } return { - languages: languages, - queries: queries, + languages, + queries, pathsIgnore: [], paths: [], originalUserInput: {}, @@ -639,8 +759,8 @@ async function loadConfig( checkoutPath: string, githubAuth: string, githubUrl: string, - logger: Logger): Promise { - + logger: Logger +): Promise { let parsedYAML: UserConfig; if (isLocal(configFile)) { @@ -648,10 +768,7 @@ async function loadConfig( configFile = path.resolve(checkoutPath, configFile); parsedYAML = getLocalConfig(configFile, checkoutPath); } else { - parsedYAML = await getRemoteConfig( - configFile, - githubAuth, - githubUrl); + parsedYAML = await getRemoteConfig(configFile, githubAuth, githubUrl); } // Validate that the 'name' property is syntactically correct, @@ -670,7 +787,8 @@ async function loadConfig( repository, githubAuth, githubUrl, - logger); + logger + ); const queries = {}; const pathsIgnore: string[] = []; @@ -700,14 +818,21 @@ async function loadConfig( tempDir, checkoutPath, githubUrl, - logger); + logger + ); } - if (shouldAddConfigFileQueries(queriesInput) && QUERIES_PROPERTY in parsedYAML) { + if ( + shouldAddConfigFileQueries(queriesInput) && + QUERIES_PROPERTY in parsedYAML + ) { if (!(parsedYAML[QUERIES_PROPERTY] instanceof Array)) { throw new Error(getQueriesInvalid(configFile)); } for (const query of parsedYAML[QUERIES_PROPERTY]!) { - if (!(QUERIES_USES_PROPERTY in query) || typeof query[QUERIES_USES_PROPERTY] !== "string") { + if ( + !(QUERIES_USES_PROPERTY in query) || + typeof query[QUERIES_USES_PROPERTY] !== "string" + ) { throw new Error(getQueryUsesInvalid(configFile)); } await parseQueryUses( @@ -719,7 +844,8 @@ async function loadConfig( checkoutPath, githubUrl, logger, - configFile); + configFile + ); } } @@ -727,11 +853,13 @@ async function loadConfig( if (!(parsedYAML[PATHS_IGNORE_PROPERTY] instanceof Array)) { throw new Error(getPathsIgnoreInvalid(configFile)); } - parsedYAML[PATHS_IGNORE_PROPERTY]!.forEach(path => { - if (typeof path !== "string" || path === '') { + parsedYAML[PATHS_IGNORE_PROPERTY]!.forEach((path) => { + if (typeof path !== "string" || path === "") { throw new Error(getPathsIgnoreInvalid(configFile)); } - pathsIgnore.push(validateAndSanitisePath(path, PATHS_IGNORE_PROPERTY, configFile, logger)); + pathsIgnore.push( + validateAndSanitisePath(path, PATHS_IGNORE_PROPERTY, configFile, logger) + ); }); } @@ -739,11 +867,13 @@ async function loadConfig( if (!(parsedYAML[PATHS_PROPERTY] instanceof Array)) { throw new Error(getPathsInvalid(configFile)); } - parsedYAML[PATHS_PROPERTY]!.forEach(path => { - if (typeof path !== "string" || path === '') { + parsedYAML[PATHS_PROPERTY]!.forEach((path) => { + if (typeof path !== "string" || path === "") { throw new Error(getPathsInvalid(configFile)); } - paths.push(validateAndSanitisePath(path, PATHS_PROPERTY, configFile, logger)); + paths.push( + validateAndSanitisePath(path, PATHS_PROPERTY, configFile, logger) + ); }); } @@ -751,8 +881,10 @@ async function loadConfig( // it is a user configuration error. for (const language of languages) { if (queries[language] === undefined || queries[language].length === 0) { - throw new Error(`Did not detect any queries to run for ${language}. ` + - "Please make sure that the default queries are enabled, or you are specifying queries to run."); + throw new Error( + `Did not detect any queries to run for ${language}. ` + + "Please make sure that the default queries are enabled, or you are specifying queries to run." + ); } } @@ -785,13 +917,13 @@ export async function initConfig( checkoutPath: string, githubAuth: string, githubUrl: string, - logger: Logger): Promise { - + logger: Logger +): Promise { let config: Config; // If no config file was provided create an empty one if (!configFile) { - logger.debug('No configuration file was provided'); + logger.debug("No configuration file was provided"); config = await getDefaultConfig( languagesInput, queriesInput, @@ -802,7 +934,8 @@ export async function initConfig( checkoutPath, githubAuth, githubUrl, - logger); + logger + ); } else { config = await loadConfig( languagesInput, @@ -815,7 +948,8 @@ export async function initConfig( checkoutPath, githubAuth, githubUrl, - logger); + logger + ); } // Save the config so we can easily access it again in the future @@ -829,7 +963,7 @@ function isLocal(configPath: string): boolean { return true; } - return (configPath.indexOf("@") === -1); + return configPath.indexOf("@") === -1; } function getLocalConfig(configFile: string, checkoutPath: string): UserConfig { @@ -843,28 +977,32 @@ function getLocalConfig(configFile: string, checkoutPath: string): UserConfig { throw new Error(getConfigFileDoesNotExistErrorMessage(configFile)); } - return yaml.safeLoad(fs.readFileSync(configFile, 'utf8')); + return yaml.safeLoad(fs.readFileSync(configFile, "utf8")); } async function getRemoteConfig( configFile: string, githubAuth: string, - githubUrl: string): Promise { - + githubUrl: string +): Promise { // retrieve the various parts of the config location, and ensure they're present - const format = new RegExp('(?[^/]+)/(?[^/]+)/(?[^@]+)@(?.*)'); + const format = new RegExp( + "(?[^/]+)/(?[^/]+)/(?[^@]+)@(?.*)" + ); const pieces = format.exec(configFile); // 5 = 4 groups + the whole expression if (pieces === null || pieces.groups === undefined || pieces.length < 5) { throw new Error(getConfigFileRepoFormatInvalidMessage(configFile)); } - const response = await api.getApiClient(githubAuth, githubUrl, true).repos.getContents({ - owner: pieces.groups.owner, - repo: pieces.groups.repo, - path: pieces.groups.path, - ref: pieces.groups.ref, - }); + const response = await api + .getApiClient(githubAuth, githubUrl, true) + .repos.getContents({ + owner: pieces.groups.owner, + repo: pieces.groups.repo, + path: pieces.groups.path, + ref: pieces.groups.ref, + }); let fileContents: string; if ("content" in response.data && response.data.content !== undefined) { @@ -875,14 +1013,14 @@ async function getRemoteConfig( throw new Error(getConfigFileFormatInvalidMessage(configFile)); } - return yaml.safeLoad(Buffer.from(fileContents, 'base64').toString('binary')); + return yaml.safeLoad(Buffer.from(fileContents, "base64").toString("binary")); } /** * Get the file path where the parsed config will be stored. */ export function getPathToParsedConfigFile(tempDir: string): string { - return path.join(tempDir, 'config'); + return path.join(tempDir, "config"); } /** @@ -892,8 +1030,8 @@ async function saveConfig(config: Config, logger: Logger) { const configString = JSON.stringify(config); const configFile = getPathToParsedConfigFile(config.tempDir); fs.mkdirSync(path.dirname(configFile), { recursive: true }); - fs.writeFileSync(configFile, configString, 'utf8'); - logger.debug('Saved config:'); + fs.writeFileSync(configFile, configString, "utf8"); + logger.debug("Saved config:"); logger.debug(configString); } @@ -901,13 +1039,16 @@ async function saveConfig(config: Config, logger: Logger) { * Get the config that has been saved to the given temp dir. * If the config could not be found then returns undefined. */ -export async function getConfig(tempDir: string, logger: Logger): Promise { +export async function getConfig( + tempDir: string, + logger: Logger +): Promise { const configFile = getPathToParsedConfigFile(tempDir); if (!fs.existsSync(configFile)) { return undefined; } - const configString = fs.readFileSync(configFile, 'utf8'); - logger.debug('Loaded config:'); + const configString = fs.readFileSync(configFile, "utf8"); + logger.debug("Loaded config:"); logger.debug(configString); return JSON.parse(configString); } diff --git a/src/external-queries.test.ts b/src/external-queries.test.ts index 0bb40d544..f327dcced 100644 --- a/src/external-queries.test.ts +++ b/src/external-queries.test.ts @@ -1,45 +1,53 @@ -import * as toolrunnner from '@actions/exec/lib/toolrunner'; -import test from 'ava'; +import * as toolrunnner from "@actions/exec/lib/toolrunner"; +import test from "ava"; import * as fs from "fs"; import * as path from "path"; import * as externalQueries from "./external-queries"; -import { getRunnerLogger } from './logging'; -import {setupTests} from './testing-utils'; +import { getRunnerLogger } from "./logging"; +import { setupTests } from "./testing-utils"; import * as util from "./util"; setupTests(test); -test("checkoutExternalQueries", async t => { - await util.withTmpDir(async tmpDir => { +test("checkoutExternalQueries", async (t) => { + await util.withTmpDir(async (tmpDir) => { // Create a test repo in a subdir of the temp dir. // It should have a default branch with two commits after the initial commit, where // - the first commit contains files 'a' and 'b' // - the second commit contains only 'a' // Place the repo in a subdir because we're going to checkout a copy in tmpDir - const testRepoBaseDir = path.join(tmpDir, 'test-repo-dir'); - const repoName = 'some/repo'; + const testRepoBaseDir = path.join(tmpDir, "test-repo-dir"); + const repoName = "some/repo"; const repoPath = path.join(testRepoBaseDir, repoName); - const repoGitDir = path.join(repoPath, '.git'); + const repoGitDir = path.join(repoPath, ".git"); // Run the given git command, and return the output. // Passes --git-dir and --work-tree. // Any stderr output is suppressed until the command fails. - const runGit = async function(command: string[]): Promise { - let stdout = ''; - let stderr = ''; - command = [`--git-dir=${repoGitDir}`, `--work-tree=${repoPath}`, ...command]; - console.log('Running: git ' + command.join(' ')); + const runGit = async function (command: string[]): Promise { + let stdout = ""; + let stderr = ""; + command = [ + `--git-dir=${repoGitDir}`, + `--work-tree=${repoPath}`, + ...command, + ]; + console.log(`Running: git ${command.join(" ")}`); try { - await new toolrunnner.ToolRunner('git', command, { + await new toolrunnner.ToolRunner("git", command, { silent: true, listeners: { - stdout: (data) => { stdout += data.toString(); }, - stderr: (data) => { stderr += data.toString(); }, - } + stdout: (data) => { + stdout += data.toString(); + }, + stderr: (data) => { + stderr += data.toString(); + }, + }, }).exec(); } catch (e) { - console.log('Command failed: git ' + command.join(' ')); + console.log(`Command failed: git ${command.join(" ")}`); process.stderr.write(stderr); throw e; } @@ -47,25 +55,23 @@ test("checkoutExternalQueries", async t => { }; fs.mkdirSync(repoPath, { recursive: true }); - await runGit(['init', repoPath]); - await runGit(['config', 'user.email', 'test@github.com']); - await runGit(['config', 'user.name', 'Test Test']); + await runGit(["init", repoPath]); + await runGit(["config", "user.email", "test@github.com"]); + await runGit(["config", "user.name", "Test Test"]); - fs.writeFileSync(path.join(repoPath, 'a'), 'a content'); - await runGit(['add', 'a']); - await runGit(['commit', '-m', 'commit1']); - - fs.writeFileSync(path.join(repoPath, 'b'), 'b content'); - await runGit(['add', 'b']); - await runGit(['commit', '-m', 'commit1']); - const commit1Sha = await runGit(['rev-parse', 'HEAD']); - - fs.unlinkSync(path.join(repoPath, 'b')); - await runGit(['add', 'b']); - await runGit(['commit', '-m', 'commit2']); - const commit2Sha = await runGit(['rev-parse', 'HEAD']); + fs.writeFileSync(path.join(repoPath, "a"), "a content"); + await runGit(["add", "a"]); + await runGit(["commit", "-m", "commit1"]); + fs.writeFileSync(path.join(repoPath, "b"), "b content"); + await runGit(["add", "b"]); + await runGit(["commit", "-m", "commit1"]); + const commit1Sha = await runGit(["rev-parse", "HEAD"]); + fs.unlinkSync(path.join(repoPath, "b")); + await runGit(["add", "b"]); + await runGit(["commit", "-m", "commit2"]); + const commit2Sha = await runGit(["rev-parse", "HEAD"]); // Checkout the first commit, which should contain 'a' and 'b' t.false(fs.existsSync(path.join(tmpDir, repoName))); @@ -74,13 +80,12 @@ test("checkoutExternalQueries", async t => { commit1Sha, `file://${testRepoBaseDir}`, tmpDir, - getRunnerLogger(true)); + getRunnerLogger(true) + ); t.true(fs.existsSync(path.join(tmpDir, repoName))); t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, 'a'))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, 'b'))); - - + t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, "a"))); + t.true(fs.existsSync(path.join(tmpDir, repoName, commit1Sha, "b"))); // Checkout the second commit as well, which should only contain 'a' t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha))); @@ -89,9 +94,10 @@ test("checkoutExternalQueries", async t => { commit2Sha, `file://${testRepoBaseDir}`, tmpDir, - getRunnerLogger(true)); + getRunnerLogger(true) + ); t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha))); - t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, 'a'))); - t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, 'b'))); + t.true(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, "a"))); + t.false(fs.existsSync(path.join(tmpDir, repoName, commit2Sha, "b"))); }); }); diff --git a/src/external-queries.ts b/src/external-queries.ts index 083e155a9..409414e98 100644 --- a/src/external-queries.ts +++ b/src/external-queries.ts @@ -1,8 +1,8 @@ -import * as toolrunnner from '@actions/exec/lib/toolrunner'; -import * as fs from 'fs'; -import * as path from 'path'; +import * as toolrunnner from "@actions/exec/lib/toolrunner"; +import * as fs from "fs"; +import * as path from "path"; -import { Logger } from './logging'; +import { Logger } from "./logging"; /** * Check out repository at the given ref, and return the directory of the checkout. @@ -12,24 +12,31 @@ export async function checkoutExternalRepository( ref: string, githubUrl: string, tempDir: string, - logger: Logger): Promise { - - logger.info('Checking out ' + repository); + logger: Logger +): Promise { + logger.info(`Checking out ${repository}`); const checkoutLocation = path.join(tempDir, repository, ref); if (!checkoutLocation.startsWith(tempDir)) { // this still permits locations that mess with sibling repositories in `tempDir`, but that is acceptable - throw new Error(`'${repository}@${ref}' is not a valid repository and reference.`); + throw new Error( + `'${repository}@${ref}' is not a valid repository and reference.` + ); } if (!fs.existsSync(checkoutLocation)) { - const repoURL = githubUrl + '/' + repository; - await new toolrunnner.ToolRunner('git', ['clone', repoURL, checkoutLocation]).exec(); - await new toolrunnner.ToolRunner('git', [ - '--work-tree=' + checkoutLocation, - '--git-dir=' + checkoutLocation + '/.git', - 'checkout', ref, + const repoURL = `${githubUrl}/${repository}`; + await new toolrunnner.ToolRunner("git", [ + "clone", + repoURL, + checkoutLocation, + ]).exec(); + await new toolrunnner.ToolRunner("git", [ + `--work-tree=${checkoutLocation}`, + `--git-dir=${checkoutLocation}/.git`, + "checkout", + ref, ]).exec(); } diff --git a/src/fingerprints.test.ts b/src/fingerprints.test.ts index fc4460a1d..e4f8a6632 100644 --- a/src/fingerprints.test.ts +++ b/src/fingerprints.test.ts @@ -1,17 +1,17 @@ -import test from 'ava'; +import test from "ava"; import * as ava from "ava"; -import * as fs from 'fs'; -import * as path from 'path'; +import * as fs from "fs"; +import * as path from "path"; -import * as fingerprints from './fingerprints'; -import { getRunnerLogger } from './logging'; -import {setupTests} from './testing-utils'; +import * as fingerprints from "./fingerprints"; +import { getRunnerLogger } from "./logging"; +import { setupTests } from "./testing-utils"; setupTests(test); function testHash(t: ava.Assertions, input: string, expectedHashes: string[]) { let index = 0; - let callback = function (lineNumber: number, hash: string) { + const callback = function (lineNumber: number, hash: string) { t.is(lineNumber, index + 1); t.is(hash, expectedHashes[index]); index++; @@ -20,187 +20,188 @@ function testHash(t: ava.Assertions, input: string, expectedHashes: string[]) { t.is(index, input.split(/\r\n|\r|\n/).length); } -test('hash', (t: ava.Assertions) => { +test("hash", (t: ava.Assertions) => { // Try empty file testHash(t, "", ["c129715d7a2bc9a3:1"]); // Try various combinations of newline characters - testHash( - t, - " a\nb\n \t\tc\n d", - [ - "271789c17abda88f:1", - "54703d4cd895b18:1", - "180aee12dab6264:1", - "a23a3dc5e078b07b:1" - ]); - testHash( - t, - " hello; \t\nworld!!!\n\n\n \t\tGreetings\n End", - [ - "8b7cf3e952e7aeb2:1", - "b1ae1287ec4718d9:1", - "bff680108adb0fcc:1", - "c6805c5e1288b612:1", - "b86d3392aea1be30:1", - "e6ceba753e1a442:1", - ]); - testHash( - t, - " hello; \t\nworld!!!\n\n\n \t\tGreetings\n End\n", - [ - "e9496ae3ebfced30:1", - "fb7c023a8b9ccb3f:1", - "ce8ba1a563dcdaca:1", - "e20e36e16fcb0cc8:1", - "b3edc88f2938467e:1", - "c8e28b0b4002a3a0:1", - "c129715d7a2bc9a3:1", - ]); - testHash( - t, - " hello; \t\nworld!!!\r\r\r \t\tGreetings\r End\r", - [ - "e9496ae3ebfced30:1", - "fb7c023a8b9ccb3f:1", - "ce8ba1a563dcdaca:1", - "e20e36e16fcb0cc8:1", - "b3edc88f2938467e:1", - "c8e28b0b4002a3a0:1", - "c129715d7a2bc9a3:1", - ]); - testHash( - t, - " hello; \t\r\nworld!!!\r\n\r\n\r\n \t\tGreetings\r\n End\r\n", - [ - "e9496ae3ebfced30:1", - "fb7c023a8b9ccb3f:1", - "ce8ba1a563dcdaca:1", - "e20e36e16fcb0cc8:1", - "b3edc88f2938467e:1", - "c8e28b0b4002a3a0:1", - "c129715d7a2bc9a3:1", - ]); - testHash( - t, - " hello; \t\nworld!!!\r\n\n\r \t\tGreetings\r End\r\n", - [ - "e9496ae3ebfced30:1", - "fb7c023a8b9ccb3f:1", - "ce8ba1a563dcdaca:1", - "e20e36e16fcb0cc8:1", - "b3edc88f2938467e:1", - "c8e28b0b4002a3a0:1", - "c129715d7a2bc9a3:1", - ]); + testHash(t, " a\nb\n \t\tc\n d", [ + "271789c17abda88f:1", + "54703d4cd895b18:1", + "180aee12dab6264:1", + "a23a3dc5e078b07b:1", + ]); + testHash(t, " hello; \t\nworld!!!\n\n\n \t\tGreetings\n End", [ + "8b7cf3e952e7aeb2:1", + "b1ae1287ec4718d9:1", + "bff680108adb0fcc:1", + "c6805c5e1288b612:1", + "b86d3392aea1be30:1", + "e6ceba753e1a442:1", + ]); + testHash(t, " hello; \t\nworld!!!\n\n\n \t\tGreetings\n End\n", [ + "e9496ae3ebfced30:1", + "fb7c023a8b9ccb3f:1", + "ce8ba1a563dcdaca:1", + "e20e36e16fcb0cc8:1", + "b3edc88f2938467e:1", + "c8e28b0b4002a3a0:1", + "c129715d7a2bc9a3:1", + ]); + testHash(t, " hello; \t\nworld!!!\r\r\r \t\tGreetings\r End\r", [ + "e9496ae3ebfced30:1", + "fb7c023a8b9ccb3f:1", + "ce8ba1a563dcdaca:1", + "e20e36e16fcb0cc8:1", + "b3edc88f2938467e:1", + "c8e28b0b4002a3a0:1", + "c129715d7a2bc9a3:1", + ]); + testHash(t, " hello; \t\r\nworld!!!\r\n\r\n\r\n \t\tGreetings\r\n End\r\n", [ + "e9496ae3ebfced30:1", + "fb7c023a8b9ccb3f:1", + "ce8ba1a563dcdaca:1", + "e20e36e16fcb0cc8:1", + "b3edc88f2938467e:1", + "c8e28b0b4002a3a0:1", + "c129715d7a2bc9a3:1", + ]); + testHash(t, " hello; \t\nworld!!!\r\n\n\r \t\tGreetings\r End\r\n", [ + "e9496ae3ebfced30:1", + "fb7c023a8b9ccb3f:1", + "ce8ba1a563dcdaca:1", + "e20e36e16fcb0cc8:1", + "b3edc88f2938467e:1", + "c8e28b0b4002a3a0:1", + "c129715d7a2bc9a3:1", + ]); // Try repeating line that will generate identical hashes - testHash( - t, - "Lorem ipsum dolor sit amet.\n".repeat(10), - [ - "a7f2ff13bc495cf2:1", - "a7f2ff13bc495cf2:2", - "a7f2ff13bc495cf2:3", - "a7f2ff13bc495cf2:4", - "a7f2ff13bc495cf2:5", - "a7f2ff13bc495cf2:6", - "a7f2ff1481e87703:1", - "a9cf91f7bbf1862b:1", - "55ec222b86bcae53:1", - "cc97dc7b1d7d8f7b:1", - "c129715d7a2bc9a3:1" - ]); - - testHash( - t, - "x = 2\nx = 1\nprint(x)\nx = 3\nprint(x)\nx = 4\nprint(x)\n", - [ - "e54938cc54b302f1:1", - "bb609acbe9138d60:1", - "1131fd5871777f34:1", - "5c482a0f8b35ea28:1", - "54517377da7028d2:1", - "2c644846cb18d53e:1", - "f1b89f20de0d133:1", - "c129715d7a2bc9a3:1" - ]); + testHash(t, "Lorem ipsum dolor sit amet.\n".repeat(10), [ + "a7f2ff13bc495cf2:1", + "a7f2ff13bc495cf2:2", + "a7f2ff13bc495cf2:3", + "a7f2ff13bc495cf2:4", + "a7f2ff13bc495cf2:5", + "a7f2ff13bc495cf2:6", + "a7f2ff1481e87703:1", + "a9cf91f7bbf1862b:1", + "55ec222b86bcae53:1", + "cc97dc7b1d7d8f7b:1", + "c129715d7a2bc9a3:1", + ]); + + testHash(t, "x = 2\nx = 1\nprint(x)\nx = 3\nprint(x)\nx = 4\nprint(x)\n", [ + "e54938cc54b302f1:1", + "bb609acbe9138d60:1", + "1131fd5871777f34:1", + "5c482a0f8b35ea28:1", + "54517377da7028d2:1", + "2c644846cb18d53e:1", + "f1b89f20de0d133:1", + "c129715d7a2bc9a3:1", + ]); }); function testResolveUriToFile(uri: any, index: any, artifactsURIs: any[]) { - const location = { "uri": uri, "index": index }; - const artifacts = artifactsURIs.map(uri => ({ "location": { "uri": uri } })); - return fingerprints.resolveUriToFile(location, artifacts, process.cwd(), getRunnerLogger(true)); + const location = { uri, index }; + const artifacts = artifactsURIs.map((uri) => ({ location: { uri } })); + return fingerprints.resolveUriToFile( + location, + artifacts, + process.cwd(), + getRunnerLogger(true) + ); } -test('resolveUriToFile', t => { +test("resolveUriToFile", (t) => { // The resolveUriToFile method checks that the file exists and is in the right directory // so we need to give it real files to look at. We will use this file as an example. // For this to work we require the current working directory to be a parent, but this // should generally always be the case so this is fine. const cwd = process.cwd(); const filepath = __filename; - t.true(filepath.startsWith(cwd + '/')); + t.true(filepath.startsWith(`${cwd}/`)); const relativeFilepaht = filepath.substring(cwd.length + 1); // Absolute paths are unmodified t.is(testResolveUriToFile(filepath, undefined, []), filepath); - t.is(testResolveUriToFile('file://' + filepath, undefined, []), filepath); + t.is(testResolveUriToFile(`file://${filepath}`, undefined, []), filepath); // Relative paths are made absolute t.is(testResolveUriToFile(relativeFilepaht, undefined, []), filepath); - t.is(testResolveUriToFile('file://' + relativeFilepaht, undefined, []), filepath); + t.is( + testResolveUriToFile(`file://${relativeFilepaht}`, undefined, []), + filepath + ); // Absolute paths outside the src root are discarded - t.is(testResolveUriToFile('/src/foo/bar.js', undefined, []), undefined); - t.is(testResolveUriToFile('file:///src/foo/bar.js', undefined, []), undefined); + t.is(testResolveUriToFile("/src/foo/bar.js", undefined, []), undefined); + t.is( + testResolveUriToFile("file:///src/foo/bar.js", undefined, []), + undefined + ); // Other schemes are discarded - t.is(testResolveUriToFile('https://' + filepath, undefined, []), undefined); - t.is(testResolveUriToFile('ftp://' + filepath, undefined, []), undefined); + t.is(testResolveUriToFile(`https://${filepath}`, undefined, []), undefined); + t.is(testResolveUriToFile(`ftp://${filepath}`, undefined, []), undefined); // Invalid URIs are discarded t.is(testResolveUriToFile(1, undefined, []), undefined); t.is(testResolveUriToFile(undefined, undefined, []), undefined); // Non-existant files are discarded - t.is(testResolveUriToFile(filepath + '2', undefined, []), undefined); + t.is(testResolveUriToFile(`${filepath}2`, undefined, []), undefined); // Index is resolved t.is(testResolveUriToFile(undefined, 0, [filepath]), filepath); - t.is(testResolveUriToFile(undefined, 1, ['foo', filepath]), filepath); + t.is(testResolveUriToFile(undefined, 1, ["foo", filepath]), filepath); // Invalid indexes are discarded t.is(testResolveUriToFile(undefined, 1, [filepath]), undefined); - t.is(testResolveUriToFile(undefined, '0', [filepath]), undefined); + t.is(testResolveUriToFile(undefined, "0", [filepath]), undefined); }); -test('addFingerprints', t => { +test("addFingerprints", (t) => { // Run an end-to-end test on a test file - let input = fs.readFileSync(__dirname + '/../src/testdata/fingerprinting.input.sarif').toString(); - let expected = fs.readFileSync(__dirname + '/../src/testdata/fingerprinting.expected.sarif').toString(); + let input = fs + .readFileSync(`${__dirname}/../src/testdata/fingerprinting.input.sarif`) + .toString(); + let expected = fs + .readFileSync(`${__dirname}/../src/testdata/fingerprinting.expected.sarif`) + .toString(); // The test files are stored prettified, but addFingerprints outputs condensed JSON input = JSON.stringify(JSON.parse(input)); expected = JSON.stringify(JSON.parse(expected)); // The URIs in the SARIF files resolve to files in the testdata directory - const checkoutPath = path.normalize(__dirname + '/../src/testdata'); + const checkoutPath = path.normalize(`${__dirname}/../src/testdata`); - t.deepEqual(fingerprints.addFingerprints(input, checkoutPath, getRunnerLogger(true)), expected); + t.deepEqual( + fingerprints.addFingerprints(input, checkoutPath, getRunnerLogger(true)), + expected + ); }); -test('missingRegions', t => { +test("missingRegions", (t) => { // Run an end-to-end test on a test file - let input = fs.readFileSync(__dirname + '/../src/testdata/fingerprinting2.input.sarif').toString(); - let expected = fs.readFileSync(__dirname + '/../src/testdata/fingerprinting2.expected.sarif').toString(); + let input = fs + .readFileSync(`${__dirname}/../src/testdata/fingerprinting2.input.sarif`) + .toString(); + let expected = fs + .readFileSync(`${__dirname}/../src/testdata/fingerprinting2.expected.sarif`) + .toString(); // The test files are stored prettified, but addFingerprints outputs condensed JSON input = JSON.stringify(JSON.parse(input)); expected = JSON.stringify(JSON.parse(expected)); // The URIs in the SARIF files resolve to files in the testdata directory - const checkoutPath = path.normalize(__dirname + '/../src/testdata'); + const checkoutPath = path.normalize(`${__dirname}/../src/testdata`); - t.deepEqual(fingerprints.addFingerprints(input, checkoutPath, getRunnerLogger(true)), expected); + t.deepEqual( + fingerprints.addFingerprints(input, checkoutPath, getRunnerLogger(true)), + expected + ); }); diff --git a/src/fingerprints.ts b/src/fingerprints.ts index d84ffd345..c91da50e2 100644 --- a/src/fingerprints.ts +++ b/src/fingerprints.ts @@ -1,12 +1,12 @@ -import * as fs from 'fs'; -import Long from 'long'; +import * as fs from "fs"; +import Long from "long"; -import { Logger } from './logging'; +import { Logger } from "./logging"; -const tab = '\t'.charCodeAt(0); -const space = ' '.charCodeAt(0); -const lf = '\n'.charCodeAt(0); -const cr = '\r'.charCodeAt(0); +const tab = "\t".charCodeAt(0); +const space = " ".charCodeAt(0); +const lf = "\n".charCodeAt(0); +const cr = "\r".charCodeAt(0); const BLOCK_SIZE = 100; const MOD = Long.fromInt(37); // L @@ -46,7 +46,7 @@ export function hash(callback: hashCallback, input: string) { // The current hash value, updated as we read each character let hash = Long.ZERO; - let firstMod = computeFirstMod(); + const firstMod = computeFirstMod(); // The current index in the window, will wrap around to zero when we reach BLOCK_SIZE let index = 0; @@ -62,12 +62,12 @@ export function hash(callback: hashCallback, input: string) { // Output the current hash and line number to the callback function const outputHash = function () { - let hashValue = hash.toUnsigned().toString(16); + const hashValue = hash.toUnsigned().toString(16); if (!hashCounts[hashValue]) { hashCounts[hashValue] = 0; } hashCounts[hashValue]++; - callback(lineNumbers[index], hashValue + ":" + hashCounts[hashValue]); + callback(lineNumbers[index], `${hashValue}:${hashCounts[hashValue]}`); lineNumbers[index] = -1; }; @@ -125,7 +125,11 @@ export function hash(callback: hashCallback, input: string) { // Generate a hash callback function that updates the given result in-place // when it recieves a hash for the correct line number. Ignores hashes for other lines. -function locationUpdateCallback(result: any, location: any, logger: Logger): hashCallback { +function locationUpdateCallback( + result: any, + location: any, + logger: Logger +): hashCallback { let locationStartLine = location.physicalLocation?.region?.startLine; if (locationStartLine === undefined) { // We expect the region section to be present, but it can be absent if the @@ -142,17 +146,17 @@ function locationUpdateCallback(result: any, location: any, logger: Logger): has if (!result.partialFingerprints) { result.partialFingerprints = {}; } - const existingFingerprint = result.partialFingerprints.primaryLocationLineHash; + const existingFingerprint = + result.partialFingerprints.primaryLocationLineHash; // If the hash doesn't match the existing fingerprint then // output a warning and don't overwrite it. if (!existingFingerprint) { result.partialFingerprints.primaryLocationLineHash = hash; } else if (existingFingerprint !== hash) { - logger.warning('Calculated fingerprint of ' + hash + - ' for file ' + location.physicalLocation.artifactLocation.uri + - ' line ' + lineNumber + - ', but found existing inconsistent fingerprint value ' + existingFingerprint); + logger.warning( + `Calculated fingerprint of ${hash} for file ${location.physicalLocation.artifactLocation.uri} line ${lineNumber}, but found existing inconsistent fingerprint value ${existingFingerprint}` + ); } }; } @@ -165,14 +169,16 @@ export function resolveUriToFile( location: any, artifacts: any[], checkoutPath: string, - logger: Logger): string | undefined { - + logger: Logger +): string | undefined { // This may be referencing an artifact if (!location.uri && location.index !== undefined) { - if (typeof location.index !== 'number' || + if ( + typeof location.index !== "number" || location.index < 0 || location.index >= artifacts.length || - typeof artifacts[location.index].location !== 'object') { + typeof artifacts[location.index].location !== "object" + ) { logger.debug(`Ignoring location as URI "${location.index}" is invalid`); return undefined; } @@ -180,33 +186,37 @@ export function resolveUriToFile( } // Get the URI and decode - if (typeof location.uri !== 'string') { + if (typeof location.uri !== "string") { logger.debug(`Ignoring location as index "${location.uri}" is invalid`); return undefined; } let uri = decodeURIComponent(location.uri); // Remove a file scheme, and abort if the scheme is anything else - const fileUriPrefix = 'file://'; + const fileUriPrefix = "file://"; if (uri.startsWith(fileUriPrefix)) { uri = uri.substring(fileUriPrefix.length); } - if (uri.indexOf('://') !== -1) { - logger.debug(`Ignoring location URI "${uri}" as the scheme is not recognised`); + if (uri.indexOf("://") !== -1) { + logger.debug( + `Ignoring location URI "${uri}" as the scheme is not recognised` + ); return undefined; } // Discard any absolute paths that aren't in the src root - const srcRootPrefix = checkoutPath + '/'; - if (uri.startsWith('/') && !uri.startsWith(srcRootPrefix)) { - logger.debug(`Ignoring location URI "${uri}" as it is outside of the src root`); + const srcRootPrefix = `${checkoutPath}/`; + if (uri.startsWith("/") && !uri.startsWith(srcRootPrefix)) { + logger.debug( + `Ignoring location URI "${uri}" as it is outside of the src root` + ); return undefined; } // Just assume a relative path is relative to the src root. // This is not necessarily true but should be a good approximation // and here we likely want to err on the side of handling more cases. - if (!uri.startsWith('/')) { + if (!uri.startsWith("/")) { uri = srcRootPrefix + uri; } @@ -221,21 +231,29 @@ export function resolveUriToFile( // Compute fingerprints for results in the given sarif file // and return an updated sarif file contents. -export function addFingerprints(sarifContents: string, checkoutPath: string, logger: Logger): string { - let sarif = JSON.parse(sarifContents); +export function addFingerprints( + sarifContents: string, + checkoutPath: string, + logger: Logger +): string { + const sarif = JSON.parse(sarifContents); // Gather together results for the same file and construct // callbacks to accept hashes for that file and update the location const callbacksByFile: { [filename: string]: hashCallback[] } = {}; for (const run of sarif.runs || []) { // We may need the list of artifacts to resolve against - let artifacts = run.artifacts || []; + const artifacts = run.artifacts || []; for (const result of run.results || []) { // Check the primary location is defined correctly and is in the src root const primaryLocation = (result.locations || [])[0]; if (!primaryLocation?.physicalLocation?.artifactLocation) { - logger.debug(`Unable to compute fingerprint for invalid location: ${JSON.stringify(primaryLocation)}`); + logger.debug( + `Unable to compute fingerprint for invalid location: ${JSON.stringify( + primaryLocation + )}` + ); continue; } @@ -243,14 +261,17 @@ export function addFingerprints(sarifContents: string, checkoutPath: string, log primaryLocation.physicalLocation.artifactLocation, artifacts, checkoutPath, - logger); + logger + ); if (!filepath) { continue; } if (!callbacksByFile[filepath]) { callbacksByFile[filepath] = []; } - callbacksByFile[filepath].push(locationUpdateCallback(result, primaryLocation, logger)); + callbacksByFile[filepath].push( + locationUpdateCallback(result, primaryLocation, logger) + ); } } @@ -258,7 +279,7 @@ export function addFingerprints(sarifContents: string, checkoutPath: string, log Object.entries(callbacksByFile).forEach(([filepath, callbacks]) => { // A callback that forwards the hash to all other callbacks for that file const teeCallback = function (lineNumber: number, hash: string) { - Object.values(callbacks).forEach(c => c(lineNumber, hash)); + Object.values(callbacks).forEach((c) => c(lineNumber, hash)); }; const fileContents = fs.readFileSync(filepath).toString(); hash(teeCallback, fileContents); diff --git a/src/init-action.ts b/src/init-action.ts index 504136a2f..ece42ba53 100644 --- a/src/init-action.ts +++ b/src/init-action.ts @@ -1,11 +1,11 @@ -import * as core from '@actions/core'; +import * as core from "@actions/core"; -import { CodeQL } from './codeql'; -import * as configUtils from './config-utils'; -import { initCodeQL, initConfig, injectWindowsTracer, runInit } from './init'; -import { getActionsLogger } from './logging'; -import { parseRepositoryNwo } from './repository'; -import * as util from './util'; +import { CodeQL } from "./codeql"; +import * as configUtils from "./config-utils"; +import { initCodeQL, initConfig, injectWindowsTracer, runInit } from "./init"; +import { getActionsLogger } from "./logging"; +import { parseRepositoryNwo } from "./repository"; +import * as util from "./util"; interface InitSuccessStatusReport extends util.StatusReportBase { // Comma-separated list of languages that analysis was run for @@ -23,24 +23,39 @@ interface InitSuccessStatusReport extends util.StatusReportBase { queries: string; } -async function sendSuccessStatusReport(startedAt: Date, config: configUtils.Config) { - const statusReportBase = await util.createStatusReportBase('init', 'success', startedAt); - - const languages = config.languages.join(','); - const workflowLanguages = core.getInput('languages', { required: false }); - const paths = (config.originalUserInput.paths || []).join(','); - const pathsIgnore = (config.originalUserInput['paths-ignore'] || []).join(','); - const disableDefaultQueries = config.originalUserInput['disable-default-queries'] ? languages : ''; - const queries = (config.originalUserInput.queries || []).map(q => q.uses).join(','); +async function sendSuccessStatusReport( + startedAt: Date, + config: configUtils.Config +) { + const statusReportBase = await util.createStatusReportBase( + "init", + "success", + startedAt + ); + + const languages = config.languages.join(","); + const workflowLanguages = core.getInput("languages", { required: false }); + const paths = (config.originalUserInput.paths || []).join(","); + const pathsIgnore = (config.originalUserInput["paths-ignore"] || []).join( + "," + ); + const disableDefaultQueries = config.originalUserInput[ + "disable-default-queries" + ] + ? languages + : ""; + const queries = (config.originalUserInput.queries || []) + .map((q) => q.uses) + .join(","); const statusReport: InitSuccessStatusReport = { ...statusReportBase, - languages: languages, + languages, workflow_languages: workflowLanguages, - paths: paths, + paths, paths_ignore: pathsIgnore, disable_default_queries: disableDefaultQueries, - queries: queries, + queries, }; await util.sendStatusReport(statusReport); @@ -54,75 +69,94 @@ async function run() { try { util.prepareLocalRunEnvironment(); - if (!await util.sendStatusReport(await util.createStatusReportBase('init', 'starting', startedAt), true)) { + if ( + !(await util.sendStatusReport( + await util.createStatusReportBase("init", "starting", startedAt), + true + )) + ) { return; } codeql = await initCodeQL( - core.getInput('tools'), - core.getInput('token'), - util.getRequiredEnvParam('GITHUB_SERVER_URL'), - util.getRequiredEnvParam('RUNNER_TEMP'), - util.getRequiredEnvParam('RUNNER_TOOL_CACHE'), - 'actions', - logger); + core.getInput("tools"), + core.getInput("token"), + util.getRequiredEnvParam("GITHUB_SERVER_URL"), + util.getRequiredEnvParam("RUNNER_TEMP"), + util.getRequiredEnvParam("RUNNER_TOOL_CACHE"), + "actions", + logger + ); config = await initConfig( - core.getInput('languages'), - core.getInput('queries'), - core.getInput('config-file'), - parseRepositoryNwo(util.getRequiredEnvParam('GITHUB_REPOSITORY')), - util.getRequiredEnvParam('RUNNER_TEMP'), - util.getRequiredEnvParam('RUNNER_TOOL_CACHE'), + core.getInput("languages"), + core.getInput("queries"), + core.getInput("config-file"), + parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")), + util.getRequiredEnvParam("RUNNER_TEMP"), + util.getRequiredEnvParam("RUNNER_TOOL_CACHE"), codeql, - util.getRequiredEnvParam('GITHUB_WORKSPACE'), - core.getInput('token'), - util.getRequiredEnvParam('GITHUB_SERVER_URL'), - logger); - + util.getRequiredEnvParam("GITHUB_WORKSPACE"), + core.getInput("token"), + util.getRequiredEnvParam("GITHUB_SERVER_URL"), + logger + ); } catch (e) { core.setFailed(e.message); console.log(e); - await util.sendStatusReport(await util.createStatusReportBase('init', 'aborted', startedAt, e.message)); + await util.sendStatusReport( + await util.createStatusReportBase("init", "aborted", startedAt, e.message) + ); return; } try { - // Forward Go flags - const goFlags = process.env['GOFLAGS']; + const goFlags = process.env["GOFLAGS"]; if (goFlags) { - core.exportVariable('GOFLAGS', goFlags); - core.warning("Passing the GOFLAGS env parameter to the init action is deprecated. Please move this to the analyze action."); + core.exportVariable("GOFLAGS", goFlags); + core.warning( + "Passing the GOFLAGS env parameter to the init action is deprecated. Please move this to the analyze action." + ); } // Setup CODEQL_RAM flag (todo improve this https://github.com/github/dsp-code-scanning/issues/935) - const codeqlRam = process.env['CODEQL_RAM'] || '6500'; - core.exportVariable('CODEQL_RAM', codeqlRam); + const codeqlRam = process.env["CODEQL_RAM"] || "6500"; + core.exportVariable("CODEQL_RAM", codeqlRam); const tracerConfig = await runInit(codeql, config); if (tracerConfig !== undefined) { - Object.entries(tracerConfig.env).forEach(([key, value]) => core.exportVariable(key, value)); - - if (process.platform === 'win32') { - await injectWindowsTracer('Runner.Worker.exe', undefined, config, codeql, tracerConfig); + Object.entries(tracerConfig.env).forEach(([key, value]) => + core.exportVariable(key, value) + ); + + if (process.platform === "win32") { + await injectWindowsTracer( + "Runner.Worker.exe", + undefined, + config, + codeql, + tracerConfig + ); } } - } catch (error) { core.setFailed(error.message); console.log(error); - await util.sendStatusReport(await util.createStatusReportBase( - 'init', - 'failure', - startedAt, - error.message, - error.stack)); + await util.sendStatusReport( + await util.createStatusReportBase( + "init", + "failure", + startedAt, + error.message, + error.stack + ) + ); return; } await sendSuccessStatusReport(startedAt, config); } -run().catch(e => { - core.setFailed("init action failed: " + e); +run().catch((e) => { + core.setFailed(`init action failed: ${e}`); console.log(e); }); diff --git a/src/init.ts b/src/init.ts index 8379e99f5..67ff13da0 100644 --- a/src/init.ts +++ b/src/init.ts @@ -1,14 +1,14 @@ -import * as toolrunnner from '@actions/exec/lib/toolrunner'; -import * as fs from 'fs'; -import * as path from 'path'; - -import * as analysisPaths from './analysis-paths'; -import { CodeQL, setupCodeQL } from './codeql'; -import * as configUtils from './config-utils'; -import { Logger } from './logging'; -import { RepositoryNwo } from './repository'; -import { getCombinedTracerConfig, TracerConfig } from './tracer-config'; -import * as util from './util'; +import * as toolrunnner from "@actions/exec/lib/toolrunner"; +import * as fs from "fs"; +import * as path from "path"; + +import * as analysisPaths from "./analysis-paths"; +import { CodeQL, setupCodeQL } from "./codeql"; +import * as configUtils from "./config-utils"; +import { Logger } from "./logging"; +import { RepositoryNwo } from "./repository"; +import { TracerConfig, getCombinedTracerConfig } from "./tracer-config"; +import * as util from "./util"; export async function initCodeQL( codeqlURL: string | undefined, @@ -17,9 +17,9 @@ export async function initCodeQL( tempDir: string, toolsDir: string, mode: util.Mode, - logger: Logger): Promise { - - logger.startGroup('Setup CodeQL tools'); + logger: Logger +): Promise { + logger.startGroup("Setup CodeQL tools"); const codeql = await setupCodeQL( codeqlURL, githubAuth, @@ -27,7 +27,8 @@ export async function initCodeQL( tempDir, toolsDir, mode, - logger); + logger + ); await codeql.printVersion(); logger.endGroup(); return codeql; @@ -44,9 +45,9 @@ export async function initConfig( checkoutPath: string, githubAuth: string, githubUrl: string, - logger: Logger): Promise { - - logger.startGroup('Load language configuration'); + logger: Logger +): Promise { + logger.startGroup("Load language configuration"); const config = await configUtils.initConfig( languagesInput, queriesInput, @@ -58,7 +59,8 @@ export async function initConfig( checkoutPath, githubAuth, githubUrl, - logger); + logger + ); analysisPaths.printPathFiltersWarning(config, logger); logger.endGroup(); return config; @@ -66,16 +68,20 @@ export async function initConfig( export async function runInit( codeql: CodeQL, - config: configUtils.Config): Promise { - + config: configUtils.Config +): Promise { const sourceRoot = path.resolve(); fs.mkdirSync(util.getCodeQLDatabasesDir(config.tempDir), { recursive: true }); // TODO: replace this code once CodeQL supports multi-language tracing - for (let language of config.languages) { + for (const language of config.languages) { // Init language database - await codeql.databaseInit(util.getCodeQLDatabasePath(config.tempDir, language), language, sourceRoot); + await codeql.databaseInit( + util.getCodeQLDatabasePath(config.tempDir, language), + language, + sourceRoot + ); } return await getCombinedTracerConfig(config, codeql); @@ -91,8 +97,8 @@ export async function injectWindowsTracer( processLevel: number | undefined, config: configUtils.Config, codeql: CodeQL, - tracerConfig: TracerConfig) { - + tracerConfig: TracerConfig +) { let script: string; if (processName !== undefined) { script = ` @@ -155,15 +161,23 @@ export async function injectWindowsTracer( Invoke-Expression "&$tracer --inject=$id"`; } - const injectTracerPath = path.join(config.tempDir, 'inject-tracer.ps1'); + const injectTracerPath = path.join(config.tempDir, "inject-tracer.ps1"); fs.writeFileSync(injectTracerPath, script); await new toolrunnner.ToolRunner( - 'powershell', + "powershell", [ - '-ExecutionPolicy', 'Bypass', - '-file', injectTracerPath, - path.resolve(path.dirname(codeql.getPath()), 'tools', 'win64', 'tracer.exe'), + "-ExecutionPolicy", + "Bypass", + "-file", + injectTracerPath, + path.resolve( + path.dirname(codeql.getPath()), + "tools", + "win64", + "tracer.exe" + ), ], - { env: { 'ODASA_TRACER_CONFIGURATION': tracerConfig.spec } }).exec(); + { env: { ODASA_TRACER_CONFIGURATION: tracerConfig.spec } } + ).exec(); } diff --git a/src/languages.test.ts b/src/languages.test.ts index 93881a907..3d413b9da 100644 --- a/src/languages.test.ts +++ b/src/languages.test.ts @@ -1,32 +1,37 @@ -import test from 'ava'; +import test from "ava"; -import {isScannedLanguage, isTracedLanguage, Language, parseLanguage} from './languages'; -import {setupTests} from './testing-utils'; +import { + Language, + isScannedLanguage, + isTracedLanguage, + parseLanguage, +} from "./languages"; +import { setupTests } from "./testing-utils"; setupTests(test); -test('parseLangauge', async t => { +test("parseLangauge", async (t) => { // Exact matches - t.deepEqual(parseLanguage('csharp'), Language.csharp); - t.deepEqual(parseLanguage('cpp'), Language.cpp); - t.deepEqual(parseLanguage('go'), Language.go); - t.deepEqual(parseLanguage('java'), Language.java); - t.deepEqual(parseLanguage('javascript'), Language.javascript); - t.deepEqual(parseLanguage('python'), Language.python); + t.deepEqual(parseLanguage("csharp"), Language.csharp); + t.deepEqual(parseLanguage("cpp"), Language.cpp); + t.deepEqual(parseLanguage("go"), Language.go); + t.deepEqual(parseLanguage("java"), Language.java); + t.deepEqual(parseLanguage("javascript"), Language.javascript); + t.deepEqual(parseLanguage("python"), Language.python); // Aliases - t.deepEqual(parseLanguage('c'), Language.cpp); - t.deepEqual(parseLanguage('c++'), Language.cpp); - t.deepEqual(parseLanguage('c#'), Language.csharp); - t.deepEqual(parseLanguage('typescript'), Language.javascript); + t.deepEqual(parseLanguage("c"), Language.cpp); + t.deepEqual(parseLanguage("c++"), Language.cpp); + t.deepEqual(parseLanguage("c#"), Language.csharp); + t.deepEqual(parseLanguage("typescript"), Language.javascript); // Not matches - t.deepEqual(parseLanguage('foo'), undefined); - t.deepEqual(parseLanguage(' '), undefined); - t.deepEqual(parseLanguage(''), undefined); + t.deepEqual(parseLanguage("foo"), undefined); + t.deepEqual(parseLanguage(" "), undefined); + t.deepEqual(parseLanguage(""), undefined); }); -test('isTracedLanguage', async t => { +test("isTracedLanguage", async (t) => { t.true(isTracedLanguage(Language.cpp)); t.true(isTracedLanguage(Language.java)); t.true(isTracedLanguage(Language.csharp)); @@ -36,7 +41,7 @@ test('isTracedLanguage', async t => { t.false(isTracedLanguage(Language.python)); }); -test('isScannedLanguage', async t => { +test("isScannedLanguage", async (t) => { t.false(isScannedLanguage(Language.cpp)); t.false(isScannedLanguage(Language.java)); t.false(isScannedLanguage(Language.csharp)); diff --git a/src/languages.ts b/src/languages.ts index 40c1de7ab..b2975ae42 100644 --- a/src/languages.ts +++ b/src/languages.ts @@ -1,19 +1,19 @@ // All the languages supported by CodeQL export enum Language { - csharp = 'csharp', - cpp = 'cpp', - go = 'go', - java = 'java', - javascript = 'javascript', - python = 'python', + csharp = "csharp", + cpp = "cpp", + go = "go", + java = "java", + javascript = "javascript", + python = "python", } // Additional names for languages -const LANGUAGE_ALIASES: {[lang: string]: Language} = { - 'c': Language.cpp, - 'c++': Language.cpp, - 'c#': Language.csharp, - 'typescript': Language.javascript, +const LANGUAGE_ALIASES: { [lang: string]: Language } = { + c: Language.cpp, + "c++": Language.cpp, + "c#": Language.csharp, + typescript: Language.javascript, }; // Translate from user input or GitHub's API names for languages to CodeQL's names for languages @@ -34,9 +34,8 @@ export function parseLanguage(language: string): Language | undefined { return undefined; } - export function isTracedLanguage(language: Language): boolean { - return ['cpp', 'java', 'csharp'].includes(language); + return ["cpp", "java", "csharp"].includes(language); } export function isScannedLanguage(language: Language): boolean { diff --git a/src/logging.ts b/src/logging.ts index a30aa7487..71c66fed7 100644 --- a/src/logging.ts +++ b/src/logging.ts @@ -1,4 +1,4 @@ -import * as core from '@actions/core'; +import * as core from "@actions/core"; export interface Logger { debug: (message: string) => void; diff --git a/src/repository.ts b/src/repository.ts index f34c2a418..e28cc99bd 100644 --- a/src/repository.ts +++ b/src/repository.ts @@ -5,7 +5,7 @@ export interface RepositoryNwo { } export function parseRepositoryNwo(input: string): RepositoryNwo { - const parts = input.split('/'); + const parts = input.split("/"); if (parts.length !== 2) { throw new Error(`"${input}" is not a valid repository name`); } diff --git a/src/runner.ts b/src/runner.ts index db24b5aba..120544dbe 100644 --- a/src/runner.ts +++ b/src/runner.ts @@ -1,21 +1,21 @@ -import { Command } from 'commander'; -import * as fs from 'fs'; -import * as os from 'os'; -import * as path from 'path'; - -import { runAnalyze } from './analyze'; -import { determineAutobuildLanguage, runAutobuild } from './autobuild'; -import { CodeQL, getCodeQL } from './codeql'; -import { Config, getConfig } from './config-utils'; -import { initCodeQL, initConfig, injectWindowsTracer, runInit } from './init'; -import { Language, parseLanguage } from './languages'; -import { getRunnerLogger } from './logging'; -import { parseRepositoryNwo } from './repository'; -import * as upload_lib from './upload-lib'; -import { getAddSnippetsFlag, getMemoryFlag, getThreadsFlag } from './util'; +import { Command } from "commander"; +import * as fs from "fs"; +import * as os from "os"; +import * as path from "path"; + +import { runAnalyze } from "./analyze"; +import { determineAutobuildLanguage, runAutobuild } from "./autobuild"; +import { CodeQL, getCodeQL } from "./codeql"; +import { Config, getConfig } from "./config-utils"; +import { initCodeQL, initConfig, injectWindowsTracer, runInit } from "./init"; +import { Language, parseLanguage } from "./languages"; +import { getRunnerLogger } from "./logging"; +import { parseRepositoryNwo } from "./repository"; +import * as upload_lib from "./upload-lib"; +import { getAddSnippetsFlag, getMemoryFlag, getThreadsFlag } from "./util"; const program = new Command(); -program.version('0.0.1'); +program.version("0.0.1"); function parseGithubUrl(inputUrl: string): string { try { @@ -23,24 +23,23 @@ function parseGithubUrl(inputUrl: string): string { // If we detect this is trying to be to github.com // then return with a fixed canonical URL. - if (url.hostname === 'github.com' || url.hostname === 'api.github.com') { - return 'https://github.com'; + if (url.hostname === "github.com" || url.hostname === "api.github.com") { + return "https://github.com"; } // Remove the API prefix if it's present - if (url.pathname.indexOf('/api/v3') !== -1) { - url.pathname = url.pathname.substring(0, url.pathname.indexOf('/api/v3')); + if (url.pathname.indexOf("/api/v3") !== -1) { + url.pathname = url.pathname.substring(0, url.pathname.indexOf("/api/v3")); } return url.toString(); - } catch (e) { throw new Error(`"${inputUrl}" is not a valid URL`); } } function getTempDir(userInput: string | undefined): string { - const tempDir = path.join(userInput || process.cwd(), 'codeql-runner'); + const tempDir = path.join(userInput || process.cwd(), "codeql-runner"); if (!fs.existsSync(tempDir)) { fs.mkdirSync(tempDir, { recursive: true }); } @@ -48,38 +47,38 @@ function getTempDir(userInput: string | undefined): string { } function getToolsDir(userInput: string | undefined): string { - const toolsDir = userInput || path.join(os.homedir(), 'codeql-runner-tools'); + const toolsDir = userInput || path.join(os.homedir(), "codeql-runner-tools"); if (!fs.existsSync(toolsDir)) { fs.mkdirSync(toolsDir, { recursive: true }); } return toolsDir; } -const codeqlEnvJsonFilename = 'codeql-env.json'; +const codeqlEnvJsonFilename = "codeql-env.json"; // Imports the environment from codeqlEnvJsonFilename if not already present function importTracerEnvironment(config: Config) { - if (!('ODASA_TRACER_CONFIGURATION' in process.env)) { + if (!("ODASA_TRACER_CONFIGURATION" in process.env)) { const jsonEnvFile = path.join(config.tempDir, codeqlEnvJsonFilename); - const env = JSON.parse(fs.readFileSync(jsonEnvFile).toString('utf-8')); - Object.keys(env).forEach(key => process.env[key] = env[key]); + const env = JSON.parse(fs.readFileSync(jsonEnvFile).toString("utf-8")); + Object.keys(env).forEach((key) => (process.env[key] = env[key])); } } // Allow the user to specify refs in full refs/heads/branch format // or just the short branch name and prepend "refs/heads/" to it. function parseRef(userInput: string): string { - if (userInput.startsWith('refs/')) { + if (userInput.startsWith("refs/")) { return userInput; } else { - return 'refs/heads/' + userInput; + return `refs/heads/${userInput}`; } } // Parses the --trace-process-name arg from process.argv, or returns undefined function parseTraceProcessName(): string | undefined { for (let i = 0; i < process.argv.length - 1; i++) { - if (process.argv[i] === '--trace-process-name') { + if (process.argv[i] === "--trace-process-name") { return process.argv[i + 1]; } } @@ -89,7 +88,7 @@ function parseTraceProcessName(): string | undefined { // Parses the --trace-process-level arg from process.argv, or returns undefined function parseTraceProcessLevel(): number | undefined { for (let i = 0; i < process.argv.length - 1; i++) { - if (process.argv[i] === '--trace-process-level') { + if (process.argv[i] === "--trace-process-level") { const v = parseInt(process.argv[i + 1], 10); return isNaN(v) ? undefined : v; } @@ -112,19 +111,40 @@ interface InitArgs { } program - .command('init') - .description('Initializes CodeQL') - .requiredOption('--repository ', 'Repository name. (Required)') - .requiredOption('--github-url ', 'URL of GitHub instance. (Required)') - .requiredOption('--github-auth ', 'GitHub Apps token or personal access token. (Required)') - .option('--languages ', 'Comma-separated list of languages to analyze. Otherwise detects and analyzes all supported languages from the repo.') - .option('--queries ', 'Comma-separated list of additional queries to run. This overrides the same setting in a configuration file.') - .option('--config-file ', 'Path to config file.') - .option('--codeql-path ', 'Path to a copy of the CodeQL CLI executable to use. Otherwise downloads a copy.') - .option('--temp-dir ', 'Directory to use for temporary files. Default is "./codeql-runner".') - .option('--tools-dir ', 'Directory to use for CodeQL tools and other files to store between runs. Default is a subdirectory of the home directory.') - .option('--checkout-path ', 'Checkout path. Default is the current working directory.') - .option('--debug', 'Print more verbose output', false) + .command("init") + .description("Initializes CodeQL") + .requiredOption("--repository ", "Repository name. (Required)") + .requiredOption("--github-url ", "URL of GitHub instance. (Required)") + .requiredOption( + "--github-auth ", + "GitHub Apps token or personal access token. (Required)" + ) + .option( + "--languages ", + "Comma-separated list of languages to analyze. Otherwise detects and analyzes all supported languages from the repo." + ) + .option( + "--queries ", + "Comma-separated list of additional queries to run. This overrides the same setting in a configuration file." + ) + .option("--config-file ", "Path to config file.") + .option( + "--codeql-path ", + "Path to a copy of the CodeQL CLI executable to use. Otherwise downloads a copy." + ) + .option( + "--temp-dir ", + 'Directory to use for temporary files. Default is "./codeql-runner".' + ) + .option( + "--tools-dir ", + "Directory to use for CodeQL tools and other files to store between runs. Default is a subdirectory of the home directory." + ) + .option( + "--checkout-path ", + "Checkout path. Default is the current working directory." + ) + .option("--debug", "Print more verbose output", false) // This prevents a message like: error: unknown option '--trace-process-level' // Remove this if commander.js starts supporting hidden options. .allowUnknownOption() @@ -149,8 +169,9 @@ program parseGithubUrl(cmd.githubUrl), tempDir, toolsDir, - 'runner', - logger); + "runner", + logger + ); } const config = await initConfig( @@ -164,60 +185,64 @@ program cmd.checkoutPath || process.cwd(), cmd.githubAuth, parseGithubUrl(cmd.githubUrl), - logger); + logger + ); const tracerConfig = await runInit(codeql, config); if (tracerConfig === undefined) { return; } - if (process.platform === 'win32') { + if (process.platform === "win32") { await injectWindowsTracer( parseTraceProcessName(), parseTraceProcessLevel(), config, codeql, - tracerConfig); + tracerConfig + ); } // Always output a json file of the env that can be consumed programatically const jsonEnvFile = path.join(config.tempDir, codeqlEnvJsonFilename); fs.writeFileSync(jsonEnvFile, JSON.stringify(tracerConfig.env)); - if (process.platform === 'win32') { - const batEnvFile = path.join(config.tempDir, 'codeql-env.bat'); + if (process.platform === "win32") { + const batEnvFile = path.join(config.tempDir, "codeql-env.bat"); const batEnvFileContents = Object.entries(tracerConfig.env) .map(([key, value]) => `Set ${key}=${value}`) - .join('\n'); + .join("\n"); fs.writeFileSync(batEnvFile, batEnvFileContents); - const powershellEnvFile = path.join(config.tempDir, 'codeql-env.sh'); + const powershellEnvFile = path.join(config.tempDir, "codeql-env.sh"); const powershellEnvFileContents = Object.entries(tracerConfig.env) .map(([key, value]) => `$env:${key}="${value}"`) - .join('\n'); + .join("\n"); fs.writeFileSync(powershellEnvFile, powershellEnvFileContents); - logger.info(`\nCodeQL environment output to "${jsonEnvFile}", "${batEnvFile}" and "${powershellEnvFile}". ` + - `Please export these variables to future processes so the build can be traced. ` + - `If using cmd/batch run "call ${batEnvFile}" ` + - `or if using PowerShell run "cat ${powershellEnvFile} | Invoke-Expression".`); - + logger.info( + `\nCodeQL environment output to "${jsonEnvFile}", "${batEnvFile}" and "${powershellEnvFile}". ` + + `Please export these variables to future processes so the build can be traced. ` + + `If using cmd/batch run "call ${batEnvFile}" ` + + `or if using PowerShell run "cat ${powershellEnvFile} | Invoke-Expression".` + ); } else { // Assume that anything that's not windows is using a unix-style shell - const shEnvFile = path.join(config.tempDir, 'codeql-env.sh'); + const shEnvFile = path.join(config.tempDir, "codeql-env.sh"); const shEnvFileContents = Object.entries(tracerConfig.env) // Some vars contain ${LIB} that we do not want to be expanded when executing this script - .map(([key, value]) => `export ${key}="${value.replace('$', '\\$')}"`) - .join('\n'); + .map(([key, value]) => `export ${key}="${value.replace("$", "\\$")}"`) + .join("\n"); fs.writeFileSync(shEnvFile, shEnvFileContents); - logger.info(`\nCodeQL environment output to "${jsonEnvFile}" and "${shEnvFile}". ` + - `Please export these variables to future processes so the build can be traced, ` + - `for example by running ". ${shEnvFile}".`); + logger.info( + `\nCodeQL environment output to "${jsonEnvFile}" and "${shEnvFile}". ` + + `Please export these variables to future processes so the build can be traced, ` + + `for example by running ". ${shEnvFile}".` + ); } - } catch (e) { - logger.error('Init failed'); + logger.error("Init failed"); logger.error(e); process.exitCode = 1; } @@ -230,26 +255,38 @@ interface AutobuildArgs { } program - .command('autobuild') - .description('Attempts to automatically build code') - .option('--language ', 'The language to build. Otherwise will detect the dominant compiled language.') - .option('--temp-dir ', 'Directory to use for temporary files. Default is "./codeql-runner".') - .option('--debug', 'Print more verbose output', false) + .command("autobuild") + .description("Attempts to automatically build code") + .option( + "--language ", + "The language to build. Otherwise will detect the dominant compiled language." + ) + .option( + "--temp-dir ", + 'Directory to use for temporary files. Default is "./codeql-runner".' + ) + .option("--debug", "Print more verbose output", false) .action(async (cmd: AutobuildArgs) => { const logger = getRunnerLogger(cmd.debug); try { const config = await getConfig(getTempDir(cmd.tempDir), logger); if (config === undefined) { - throw new Error("Config file could not be found at expected location. " + - "Was the 'init' command run with the same '--temp-dir' argument as this command."); + throw new Error( + "Config file could not be found at expected location. " + + "Was the 'init' command run with the same '--temp-dir' argument as this command." + ); } importTracerEnvironment(config); let language: Language | undefined = undefined; if (cmd.language !== undefined) { language = parseLanguage(cmd.language); if (language === undefined || !config.languages.includes(language)) { - throw new Error(`"${cmd.language}" is not a recognised language. ` + - `Known languages in this project are ${config.languages.join(', ')}.`); + throw new Error( + `"${cmd.language}" is not a recognised language. ` + + `Known languages in this project are ${config.languages.join( + ", " + )}.` + ); } } else { language = determineAutobuildLanguage(config, logger); @@ -258,7 +295,7 @@ program await runAutobuild(language, config, logger); } } catch (e) { - logger.error('Autobuild failed'); + logger.error("Autobuild failed"); logger.error(e); process.exitCode = 1; } @@ -281,31 +318,57 @@ interface AnalyzeArgs { } program - .command('analyze') - .description('Finishes extracting code and runs CodeQL queries') - .requiredOption('--repository ', 'Repository name. (Required)') - .requiredOption('--commit ', 'SHA of commit that was analyzed. (Required)') - .requiredOption('--ref ', 'Name of ref that was analyzed. (Required)') - .requiredOption('--github-url ', 'URL of GitHub instance. (Required)') - .requiredOption('--github-auth ', 'GitHub Apps token or personal access token. (Required)') - .option('--checkout-path ', 'Checkout path. Default is the current working directory.') - .option('--no-upload', 'Do not upload results after analysis.') - .option('--output-dir ', 'Directory to output SARIF files to. Default is in the temp directory.') - .option('--ram ', 'Amount of memory to use when running queries. Default is to use all available memory.') - .option('--no-add-snippets', 'Specify whether to include code snippets in the sarif output.') - .option('--threads ', 'Number of threads to use when running queries. ' + - 'Default is to use all available cores.') - .option('--temp-dir ', 'Directory to use for temporary files. Default is "./codeql-runner".') - .option('--debug', 'Print more verbose output', false) + .command("analyze") + .description("Finishes extracting code and runs CodeQL queries") + .requiredOption("--repository ", "Repository name. (Required)") + .requiredOption( + "--commit ", + "SHA of commit that was analyzed. (Required)" + ) + .requiredOption("--ref ", "Name of ref that was analyzed. (Required)") + .requiredOption("--github-url ", "URL of GitHub instance. (Required)") + .requiredOption( + "--github-auth ", + "GitHub Apps token or personal access token. (Required)" + ) + .option( + "--checkout-path ", + "Checkout path. Default is the current working directory." + ) + .option("--no-upload", "Do not upload results after analysis.") + .option( + "--output-dir ", + "Directory to output SARIF files to. Default is in the temp directory." + ) + .option( + "--ram ", + "Amount of memory to use when running queries. Default is to use all available memory." + ) + .option( + "--no-add-snippets", + "Specify whether to include code snippets in the sarif output." + ) + .option( + "--threads ", + "Number of threads to use when running queries. " + + "Default is to use all available cores." + ) + .option( + "--temp-dir ", + 'Directory to use for temporary files. Default is "./codeql-runner".' + ) + .option("--debug", "Print more verbose output", false) .action(async (cmd: AnalyzeArgs) => { const logger = getRunnerLogger(cmd.debug); try { const tempDir = getTempDir(cmd.tempDir); - const outputDir = cmd.outputDir || path.join(tempDir, 'codeql-sarif'); + const outputDir = cmd.outputDir || path.join(tempDir, "codeql-sarif"); const config = await getConfig(getTempDir(cmd.tempDir), logger); if (config === undefined) { - throw new Error("Config file could not be found at expected location. " + - "Was the 'init' command run with the same '--temp-dir' argument as this command."); + throw new Error( + "Config file could not be found at expected location. " + + "Was the 'init' command run with the same '--temp-dir' argument as this command." + ); } await runAnalyze( parseRepositoryNwo(cmd.repository), @@ -319,15 +382,16 @@ program cmd.githubAuth, parseGithubUrl(cmd.githubUrl), cmd.upload, - 'runner', + "runner", outputDir, getMemoryFlag(cmd.ram), getAddSnippetsFlag(cmd.addSnippets), getThreadsFlag(cmd.threads, logger), config, - logger); + logger + ); } catch (e) { - logger.error('Analyze failed'); + logger.error("Analyze failed"); logger.error(e); process.exitCode = 1; } @@ -345,16 +409,30 @@ interface UploadArgs { } program - .command('upload') - .description('Uploads a SARIF file, or all SARIF files from a directory, to code scanning') - .requiredOption('--sarif-file ', 'SARIF file to upload, or a directory containing multiple SARIF files. (Required)') - .requiredOption('--repository ', 'Repository name. (Required)') - .requiredOption('--commit ', 'SHA of commit that was analyzed. (Required)') - .requiredOption('--ref ', 'Name of ref that was analyzed. (Required)') - .requiredOption('--github-url ', 'URL of GitHub instance. (Required)') - .requiredOption('--github-auth ', 'GitHub Apps token or personal access token. (Required)') - .option('--checkout-path ', 'Checkout path. Default is the current working directory.') - .option('--debug', 'Print more verbose output', false) + .command("upload") + .description( + "Uploads a SARIF file, or all SARIF files from a directory, to code scanning" + ) + .requiredOption( + "--sarif-file ", + "SARIF file to upload, or a directory containing multiple SARIF files. (Required)" + ) + .requiredOption("--repository ", "Repository name. (Required)") + .requiredOption( + "--commit ", + "SHA of commit that was analyzed. (Required)" + ) + .requiredOption("--ref ", "Name of ref that was analyzed. (Required)") + .requiredOption("--github-url ", "URL of GitHub instance. (Required)") + .requiredOption( + "--github-auth ", + "GitHub Apps token or personal access token. (Required)" + ) + .option( + "--checkout-path ", + "Checkout path. Default is the current working directory." + ) + .option("--debug", "Print more verbose output", false) .action(async (cmd: UploadArgs) => { const logger = getRunnerLogger(cmd.debug); try { @@ -370,10 +448,11 @@ program undefined, cmd.githubAuth, parseGithubUrl(cmd.githubUrl), - 'runner', - logger); + "runner", + logger + ); } catch (e) { - logger.error('Upload failed'); + logger.error("Upload failed"); logger.error(e); process.exitCode = 1; } diff --git a/src/shared-environment.ts b/src/shared-environment.ts index db650202a..4d9a2da44 100644 --- a/src/shared-environment.ts +++ b/src/shared-environment.ts @@ -1,7 +1,7 @@ -export const ODASA_TRACER_CONFIGURATION = 'ODASA_TRACER_CONFIGURATION'; +export const ODASA_TRACER_CONFIGURATION = "ODASA_TRACER_CONFIGURATION"; // The time at which the first action (normally init) started executing. // If a workflow invokes a different action without first invoking the init // action (i.e. the upload action is being used by a third-party integrator) // then this variable will be assigned the start time of the action invoked // rather that the init action. -export const CODEQL_WORKFLOW_STARTED_AT = 'CODEQL_WORKFLOW_STARTED_AT'; +export const CODEQL_WORKFLOW_STARTED_AT = "CODEQL_WORKFLOW_STARTED_AT"; diff --git a/src/testing-utils.ts b/src/testing-utils.ts index f4192f5e7..087718743 100644 --- a/src/testing-utils.ts +++ b/src/testing-utils.ts @@ -1,31 +1,40 @@ -import {TestInterface} from 'ava'; -import sinon from 'sinon'; +import { TestInterface } from "ava"; +import sinon from "sinon"; -import * as CodeQL from './codeql'; +import * as CodeQL from "./codeql"; -type TestContext = {stdoutWrite: any, stderrWrite: any, testOutput: string, env: NodeJS.ProcessEnv}; +type TestContext = { + stdoutWrite: any; + stderrWrite: any; + testOutput: string; + env: NodeJS.ProcessEnv; +}; function wrapOutput(context: TestContext) { // Function signature taken from Socket.write. // Note there are two overloads: // write(buffer: Uint8Array | string, cb?: (err?: Error) => void): boolean; // write(str: Uint8Array | string, encoding?: string, cb?: (err?: Error) => void): boolean; - return (chunk: Uint8Array | string, encoding?: string, cb?: (err?: Error) => void): boolean => { + return ( + chunk: Uint8Array | string, + encoding?: string, + cb?: (err?: Error) => void + ): boolean => { // Work out which method overload we are in - if (cb === undefined && typeof encoding === 'function') { + if (cb === undefined && typeof encoding === "function") { cb = encoding; encoding = undefined; } // Record the output - if (typeof chunk === 'string') { + if (typeof chunk === "string") { context.testOutput += chunk; } else { - context.testOutput += new TextDecoder(encoding || 'utf-8').decode(chunk); + context.testOutput += new TextDecoder(encoding || "utf-8").decode(chunk); } // Satisfy contract by calling callback when done - if (cb !== undefined && typeof cb === 'function') { + if (cb !== undefined && typeof cb === "function") { cb(); } @@ -36,7 +45,7 @@ function wrapOutput(context: TestContext) { export function setupTests(test: TestInterface) { const typedTest = test as TestInterface; - typedTest.beforeEach(t => { + typedTest.beforeEach((t) => { // Set an empty CodeQL object so that all method calls will fail // unless the test explicitly sets one up. CodeQL.setCodeQL({}); @@ -57,7 +66,7 @@ export function setupTests(test: TestInterface) { Object.assign(t.context.env, process.env); }); - typedTest.afterEach.always(t => { + typedTest.afterEach.always((t) => { // Restore stdout and stderr // The captured output is only replayed if the test failed process.stdout.write = t.context.stdoutWrite; diff --git a/src/tracer-config.test.ts b/src/tracer-config.test.ts index ec1a030fc..7a516c63f 100644 --- a/src/tracer-config.test.ts +++ b/src/tracer-config.test.ts @@ -1,13 +1,17 @@ -import test from 'ava'; -import * as fs from 'fs'; -import * as path from 'path'; - -import { setCodeQL } from './codeql'; -import * as configUtils from './config-utils'; -import { Language } from './languages'; -import { setupTests } from './testing-utils'; -import { concatTracerConfigs, getCombinedTracerConfig, getTracerConfigForLanguage } from './tracer-config'; -import * as util from './util'; +import test from "ava"; +import * as fs from "fs"; +import * as path from "path"; + +import { setCodeQL } from "./codeql"; +import * as configUtils from "./config-utils"; +import { Language } from "./languages"; +import { setupTests } from "./testing-utils"; +import { + concatTracerConfigs, + getCombinedTracerConfig, + getTracerConfigForLanguage, +} from "./tracer-config"; +import * as util from "./util"; setupTests(test); @@ -20,236 +24,260 @@ function getTestConfig(tmpDir: string): configUtils.Config { originalUserInput: {}, tempDir: tmpDir, toolCacheDir: tmpDir, - codeQLCmd: '', + codeQLCmd: "", }; } // A very minimal setup -test('getTracerConfigForLanguage - minimal setup', async t => { - await util.withTmpDir(async tmpDir => { +test("getTracerConfigForLanguage - minimal setup", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); const codeQL = setCodeQL({ - getTracerEnv: async function() { + async getTracerEnv() { return { - 'ODASA_TRACER_CONFIGURATION': 'abc', - 'foo': 'bar' + ODASA_TRACER_CONFIGURATION: "abc", + foo: "bar", }; }, }); - const result = await getTracerConfigForLanguage(codeQL, config, Language.javascript); - t.deepEqual(result, { spec: 'abc', env: {'foo': 'bar'} }); + const result = await getTracerConfigForLanguage( + codeQL, + config, + Language.javascript + ); + t.deepEqual(result, { spec: "abc", env: { foo: "bar" } }); }); }); // Existing vars should not be overwritten, unless they are critical or prefixed with CODEQL_ -test('getTracerConfigForLanguage - existing / critical vars', async t => { - await util.withTmpDir(async tmpDir => { +test("getTracerConfigForLanguage - existing / critical vars", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); // Set up some variables in the environment - process.env['foo'] = 'abc'; - process.env['SEMMLE_PRELOAD_libtrace'] = 'abc'; - process.env['SEMMLE_RUNNER'] = 'abc'; - process.env['SEMMLE_COPY_EXECUTABLES_ROOT'] = 'abc'; - process.env['SEMMLE_DEPTRACE_SOCKET'] = 'abc'; - process.env['SEMMLE_JAVA_TOOL_OPTIONS'] = 'abc'; - process.env['SEMMLE_DEPTRACE_SOCKET'] = 'abc'; - process.env['CODEQL_VAR'] = 'abc'; + process.env["foo"] = "abc"; + process.env["SEMMLE_PRELOAD_libtrace"] = "abc"; + process.env["SEMMLE_RUNNER"] = "abc"; + process.env["SEMMLE_COPY_EXECUTABLES_ROOT"] = "abc"; + process.env["SEMMLE_DEPTRACE_SOCKET"] = "abc"; + process.env["SEMMLE_JAVA_TOOL_OPTIONS"] = "abc"; + process.env["SEMMLE_DEPTRACE_SOCKET"] = "abc"; + process.env["CODEQL_VAR"] = "abc"; // Now CodeQL returns all these variables, and one more, with different values const codeQL = setCodeQL({ - getTracerEnv: async function() { + async getTracerEnv() { return { - 'ODASA_TRACER_CONFIGURATION': 'abc', - 'foo': 'bar', - 'baz': 'qux', - 'SEMMLE_PRELOAD_libtrace': 'SEMMLE_PRELOAD_libtrace', - 'SEMMLE_RUNNER': 'SEMMLE_RUNNER', - 'SEMMLE_COPY_EXECUTABLES_ROOT': 'SEMMLE_COPY_EXECUTABLES_ROOT', - 'SEMMLE_DEPTRACE_SOCKET': 'SEMMLE_DEPTRACE_SOCKET', - 'SEMMLE_JAVA_TOOL_OPTIONS': 'SEMMLE_JAVA_TOOL_OPTIONS', - 'CODEQL_VAR': 'CODEQL_VAR', + ODASA_TRACER_CONFIGURATION: "abc", + foo: "bar", + baz: "qux", + SEMMLE_PRELOAD_libtrace: "SEMMLE_PRELOAD_libtrace", + SEMMLE_RUNNER: "SEMMLE_RUNNER", + SEMMLE_COPY_EXECUTABLES_ROOT: "SEMMLE_COPY_EXECUTABLES_ROOT", + SEMMLE_DEPTRACE_SOCKET: "SEMMLE_DEPTRACE_SOCKET", + SEMMLE_JAVA_TOOL_OPTIONS: "SEMMLE_JAVA_TOOL_OPTIONS", + CODEQL_VAR: "CODEQL_VAR", }; }, }); - const result = await getTracerConfigForLanguage(codeQL, config, Language.javascript); + const result = await getTracerConfigForLanguage( + codeQL, + config, + Language.javascript + ); t.deepEqual(result, { - spec: 'abc', + spec: "abc", env: { // Should contain all variables except 'foo', because that already existed in the // environment with a different value, and is not deemed a "critical" variable. - 'baz': 'qux', - 'SEMMLE_PRELOAD_libtrace': 'SEMMLE_PRELOAD_libtrace', - 'SEMMLE_RUNNER': 'SEMMLE_RUNNER', - 'SEMMLE_COPY_EXECUTABLES_ROOT': 'SEMMLE_COPY_EXECUTABLES_ROOT', - 'SEMMLE_DEPTRACE_SOCKET': 'SEMMLE_DEPTRACE_SOCKET', - 'SEMMLE_JAVA_TOOL_OPTIONS': 'SEMMLE_JAVA_TOOL_OPTIONS', - 'CODEQL_VAR': 'CODEQL_VAR', - } + baz: "qux", + SEMMLE_PRELOAD_libtrace: "SEMMLE_PRELOAD_libtrace", + SEMMLE_RUNNER: "SEMMLE_RUNNER", + SEMMLE_COPY_EXECUTABLES_ROOT: "SEMMLE_COPY_EXECUTABLES_ROOT", + SEMMLE_DEPTRACE_SOCKET: "SEMMLE_DEPTRACE_SOCKET", + SEMMLE_JAVA_TOOL_OPTIONS: "SEMMLE_JAVA_TOOL_OPTIONS", + CODEQL_VAR: "CODEQL_VAR", + }, }); }); }); -test('concatTracerConfigs - minimal configs correctly combined', async t => { - await util.withTmpDir(async tmpDir => { +test("concatTracerConfigs - minimal configs correctly combined", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec1 = path.join(tmpDir, 'spec1'); - fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const spec1 = path.join(tmpDir, "spec1"); + fs.writeFileSync(spec1, "foo.log\n2\nabc\ndef"); const tc1 = { spec: spec1, env: { - 'a': 'a', - 'b': 'b', - } + a: "a", + b: "b", + }, }; - const spec2 = path.join(tmpDir, 'spec2'); - fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const spec2 = path.join(tmpDir, "spec2"); + fs.writeFileSync(spec2, "foo.log\n1\nghi"); const tc2 = { spec: spec2, env: { - 'c': 'c', - } + c: "c", + }, }; - const result = concatTracerConfigs({ 'javascript': tc1, 'python': tc2 }, config); + const result = concatTracerConfigs( + { javascript: tc1, python: tc2 }, + config + ); t.deepEqual(result, { - spec: path.join(tmpDir, 'compound-spec'), + spec: path.join(tmpDir, "compound-spec"), env: { - 'a': 'a', - 'b': 'b', - 'c': 'c', - } + a: "a", + b: "b", + c: "c", + }, }); t.true(fs.existsSync(result.spec)); t.deepEqual( - fs.readFileSync(result.spec, 'utf8'), - path.join(tmpDir, 'compound-build-tracer.log') + '\n3\nabc\ndef\nghi'); + fs.readFileSync(result.spec, "utf8"), + `${path.join(tmpDir, "compound-build-tracer.log")}\n3\nabc\ndef\nghi` + ); }); }); -test('concatTracerConfigs - conflicting env vars', async t => { - await util.withTmpDir(async tmpDir => { +test("concatTracerConfigs - conflicting env vars", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec = path.join(tmpDir, 'spec'); - fs.writeFileSync(spec, 'foo.log\n0'); + const spec = path.join(tmpDir, "spec"); + fs.writeFileSync(spec, "foo.log\n0"); // Ok if env vars have the same name and the same value t.deepEqual( concatTracerConfigs( { - 'javascript': {spec: spec, env: {'a': 'a', 'b': 'b'}}, - 'python': {spec: spec, env: {'b': 'b', 'c': 'c'}}, + javascript: { spec, env: { a: "a", b: "b" } }, + python: { spec, env: { b: "b", c: "c" } }, }, - config).env, + config + ).env, { - 'a': 'a', - 'b': 'b', - 'c': 'c', - }); + a: "a", + b: "b", + c: "c", + } + ); // Throws if env vars have same name but different values const e = t.throws(() => concatTracerConfigs( { - 'javascript': {spec: spec, env: {'a': 'a', 'b': 'b'}}, - 'python': {spec: spec, env: {'b': 'c'}}, + javascript: { spec, env: { a: "a", b: "b" } }, + python: { spec, env: { b: "c" } }, }, - config)); - t.deepEqual(e.message, 'Incompatible values in environment parameter b: b and c'); + config + ) + ); + t.deepEqual( + e.message, + "Incompatible values in environment parameter b: b and c" + ); }); }); -test('concatTracerConfigs - cpp spec lines come last if present', async t => { - await util.withTmpDir(async tmpDir => { +test("concatTracerConfigs - cpp spec lines come last if present", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec1 = path.join(tmpDir, 'spec1'); - fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const spec1 = path.join(tmpDir, "spec1"); + fs.writeFileSync(spec1, "foo.log\n2\nabc\ndef"); const tc1 = { spec: spec1, env: { - 'a': 'a', - 'b': 'b', - } + a: "a", + b: "b", + }, }; - const spec2 = path.join(tmpDir, 'spec2'); - fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const spec2 = path.join(tmpDir, "spec2"); + fs.writeFileSync(spec2, "foo.log\n1\nghi"); const tc2 = { spec: spec2, env: { - 'c': 'c', - } + c: "c", + }, }; - const result = concatTracerConfigs({ 'cpp': tc1, 'python': tc2 }, config); + const result = concatTracerConfigs({ cpp: tc1, python: tc2 }, config); t.deepEqual(result, { - spec: path.join(tmpDir, 'compound-spec'), + spec: path.join(tmpDir, "compound-spec"), env: { - 'a': 'a', - 'b': 'b', - 'c': 'c', - } + a: "a", + b: "b", + c: "c", + }, }); t.true(fs.existsSync(result.spec)); t.deepEqual( - fs.readFileSync(result.spec, 'utf8'), - path.join(tmpDir, 'compound-build-tracer.log') + '\n3\nghi\nabc\ndef'); + fs.readFileSync(result.spec, "utf8"), + `${path.join(tmpDir, "compound-build-tracer.log")}\n3\nghi\nabc\ndef` + ); }); }); -test('concatTracerConfigs - SEMMLE_COPY_EXECUTABLES_ROOT is updated to point to compound spec', async t => { - await util.withTmpDir(async tmpDir => { +test("concatTracerConfigs - SEMMLE_COPY_EXECUTABLES_ROOT is updated to point to compound spec", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec = path.join(tmpDir, 'spec'); - fs.writeFileSync(spec, 'foo.log\n0'); + const spec = path.join(tmpDir, "spec"); + fs.writeFileSync(spec, "foo.log\n0"); const result = concatTracerConfigs( { - 'javascript': {spec: spec, env: {'a': 'a', 'b': 'b'}}, - 'python': {spec: spec, env: {'SEMMLE_COPY_EXECUTABLES_ROOT': 'foo'}}, + javascript: { spec, env: { a: "a", b: "b" } }, + python: { spec, env: { SEMMLE_COPY_EXECUTABLES_ROOT: "foo" } }, }, - config); + config + ); t.deepEqual(result.env, { - 'a': 'a', - 'b': 'b', - 'SEMMLE_COPY_EXECUTABLES_ROOT': path.join(tmpDir, 'compound-temp') + a: "a", + b: "b", + SEMMLE_COPY_EXECUTABLES_ROOT: path.join(tmpDir, "compound-temp"), }); }); }); -test('concatTracerConfigs - compound environment file is created correctly', async t => { - await util.withTmpDir(async tmpDir => { +test("concatTracerConfigs - compound environment file is created correctly", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec1 = path.join(tmpDir, 'spec1'); - fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const spec1 = path.join(tmpDir, "spec1"); + fs.writeFileSync(spec1, "foo.log\n2\nabc\ndef"); const tc1 = { spec: spec1, env: { - 'a': 'a', - } + a: "a", + }, }; - const spec2 = path.join(tmpDir, 'spec2'); - fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const spec2 = path.join(tmpDir, "spec2"); + fs.writeFileSync(spec2, "foo.log\n1\nghi"); const tc2 = { spec: spec2, env: { - 'foo': 'bar_baz', - } + foo: "bar_baz", + }, }; - const result = concatTracerConfigs({ 'javascript': tc1, 'python': tc2 }, config); - const envPath = result.spec + '.environment'; + const result = concatTracerConfigs( + { javascript: tc1, python: tc2 }, + config + ); + const envPath = `${result.spec}.environment`; t.true(fs.existsSync(envPath)); const buffer: Buffer = fs.readFileSync(envPath); @@ -257,23 +285,23 @@ test('concatTracerConfigs - compound environment file is created correctly', asy t.deepEqual(buffer.length, 28); t.deepEqual(buffer.readInt32LE(0), 2); // number of env vars t.deepEqual(buffer.readInt32LE(4), 4); // length of env var definition - t.deepEqual(buffer.toString('utf8', 8, 12), 'a=a\0'); // [key]=[value]\0 - t.deepEqual(buffer.readInt32LE(12), 12); // length of env var definition - t.deepEqual(buffer.toString('utf8', 16, 28), 'foo=bar_baz\0'); // [key]=[value]\0 + t.deepEqual(buffer.toString("utf8", 8, 12), "a=a\0"); // [key]=[value]\0 + t.deepEqual(buffer.readInt32LE(12), 12); // length of env var definition + t.deepEqual(buffer.toString("utf8", 16, 28), "foo=bar_baz\0"); // [key]=[value]\0 }); }); -test('getCombinedTracerConfig - return undefined when no languages are traced languages', async t => { - await util.withTmpDir(async tmpDir => { +test("getCombinedTracerConfig - return undefined when no languages are traced languages", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); // No traced languages config.languages = [Language.javascript, Language.python]; const codeQL = setCodeQL({ - getTracerEnv: async function() { + async getTracerEnv() { return { - 'ODASA_TRACER_CONFIGURATION': 'abc', - 'foo': 'bar' + ODASA_TRACER_CONFIGURATION: "abc", + foo: "bar", }; }, }); @@ -282,18 +310,18 @@ test('getCombinedTracerConfig - return undefined when no languages are traced la }); }); -test('getCombinedTracerConfig - valid spec file', async t => { - await util.withTmpDir(async tmpDir => { +test("getCombinedTracerConfig - valid spec file", async (t) => { + await util.withTmpDir(async (tmpDir) => { const config = getTestConfig(tmpDir); - const spec = path.join(tmpDir, 'spec'); - fs.writeFileSync(spec, 'foo.log\n2\nabc\ndef'); + const spec = path.join(tmpDir, "spec"); + fs.writeFileSync(spec, "foo.log\n2\nabc\ndef"); const codeQL = setCodeQL({ - getTracerEnv: async function() { + async getTracerEnv() { return { - 'ODASA_TRACER_CONFIGURATION': spec, - 'foo': 'bar', + ODASA_TRACER_CONFIGURATION: spec, + foo: "bar", }; }, }); @@ -301,17 +329,27 @@ test('getCombinedTracerConfig - valid spec file', async t => { const result = await getCombinedTracerConfig(config, codeQL); const expectedEnv = { - 'foo': 'bar', - 'ODASA_TRACER_CONFIGURATION': result!.spec, + foo: "bar", + ODASA_TRACER_CONFIGURATION: result!.spec, }; - if (process.platform === 'darwin') { - expectedEnv['DYLD_INSERT_LIBRARIES'] = path.join(path.dirname(codeQL.getPath()), 'tools', 'osx64', 'libtrace.dylib'); - } else if (process.platform !== 'win32') { - expectedEnv['LD_PRELOAD'] = path.join(path.dirname(codeQL.getPath()), 'tools', 'linux64', '${LIB}trace.so'); + if (process.platform === "darwin") { + expectedEnv["DYLD_INSERT_LIBRARIES"] = path.join( + path.dirname(codeQL.getPath()), + "tools", + "osx64", + "libtrace.dylib" + ); + } else if (process.platform !== "win32") { + expectedEnv["LD_PRELOAD"] = path.join( + path.dirname(codeQL.getPath()), + "tools", + "linux64", + "${LIB}trace.so" + ); } t.deepEqual(result, { - spec: path.join(tmpDir, 'compound-spec'), + spec: path.join(tmpDir, "compound-spec"), env: expectedEnv, }); }); diff --git a/src/tracer-config.ts b/src/tracer-config.ts index 1bc64c400..df86b6e1e 100644 --- a/src/tracer-config.ts +++ b/src/tracer-config.ts @@ -1,49 +1,59 @@ -import * as fs from 'fs'; -import * as path from 'path'; +import * as fs from "fs"; +import * as path from "path"; -import { CodeQL } from './codeql'; -import * as configUtils from './config-utils'; -import { isTracedLanguage, Language } from './languages'; -import * as util from './util'; +import { CodeQL } from "./codeql"; +import * as configUtils from "./config-utils"; +import { Language, isTracedLanguage } from "./languages"; +import * as util from "./util"; export type TracerConfig = { spec: string; env: { [key: string]: string }; }; -const CRITICAL_TRACER_VARS = new Set( - ['SEMMLE_PRELOAD_libtrace', - , 'SEMMLE_RUNNER', - , 'SEMMLE_COPY_EXECUTABLES_ROOT', - , 'SEMMLE_DEPTRACE_SOCKET', - , 'SEMMLE_JAVA_TOOL_OPTIONS' - ]); +const CRITICAL_TRACER_VARS = new Set([ + "SEMMLE_PRELOAD_libtrace", + , + "SEMMLE_RUNNER", + , + "SEMMLE_COPY_EXECUTABLES_ROOT", + , + "SEMMLE_DEPTRACE_SOCKET", + , + "SEMMLE_JAVA_TOOL_OPTIONS", +]); export async function getTracerConfigForLanguage( codeql: CodeQL, config: configUtils.Config, - language: Language): Promise { + language: Language +): Promise { + const env = await codeql.getTracerEnv( + util.getCodeQLDatabasePath(config.tempDir, language) + ); - const env = await codeql.getTracerEnv(util.getCodeQLDatabasePath(config.tempDir, language)); - - const spec = env['ODASA_TRACER_CONFIGURATION']; + const spec = env["ODASA_TRACER_CONFIGURATION"]; const info: TracerConfig = { spec, env: {} }; // Extract critical tracer variables from the environment - for (let entry of Object.entries(env)) { + for (const entry of Object.entries(env)) { const key = entry[0]; const value = entry[1]; // skip ODASA_TRACER_CONFIGURATION as it is handled separately - if (key === 'ODASA_TRACER_CONFIGURATION') { + if (key === "ODASA_TRACER_CONFIGURATION") { continue; } // skip undefined values - if (typeof value === 'undefined') { + if (typeof value === "undefined") { continue; } // Keep variables that do not exist in current environment. In addition always keep // critical and CODEQL_ variables - if (typeof process.env[key] === 'undefined' || CRITICAL_TRACER_VARS.has(key) || key.startsWith('CODEQL_')) { + if ( + typeof process.env[key] === "undefined" || + CRITICAL_TRACER_VARS.has(key) || + key.startsWith("CODEQL_") + ) { info.env[key] = value; } } @@ -52,26 +62,27 @@ export async function getTracerConfigForLanguage( export function concatTracerConfigs( tracerConfigs: { [lang: string]: TracerConfig }, - config: configUtils.Config): TracerConfig { - + config: configUtils.Config +): TracerConfig { // A tracer config is a map containing additional environment variables and a tracer 'spec' file. // A tracer 'spec' file has the following format [log_file, number_of_blocks, blocks_text] // Merge the environments - const env: { [key: string]: string; } = {}; + const env: { [key: string]: string } = {}; let copyExecutables = false; let envSize = 0; for (const v of Object.values(tracerConfigs)) { - for (let e of Object.entries(v.env)) { + for (const e of Object.entries(v.env)) { const name = e[0]; const value = e[1]; // skip SEMMLE_COPY_EXECUTABLES_ROOT as it is handled separately - if (name === 'SEMMLE_COPY_EXECUTABLES_ROOT') { + if (name === "SEMMLE_COPY_EXECUTABLES_ROOT") { copyExecutables = true; } else if (name in env) { if (env[name] !== value) { - throw Error('Incompatible values in environment parameter ' + - name + ': ' + env[name] + ' and ' + value); + throw Error( + `Incompatible values in environment parameter ${name}: ${env[name]} and ${value}` + ); } } else { env[name] = value; @@ -81,49 +92,58 @@ export function concatTracerConfigs( } // Concatenate spec files into a new spec file - let languages = Object.keys(tracerConfigs); - const cppIndex = languages.indexOf('cpp'); + const languages = Object.keys(tracerConfigs); + const cppIndex = languages.indexOf("cpp"); // Make sure cpp is the last language, if it's present since it must be concatenated last if (cppIndex !== -1) { - let lastLang = languages[languages.length - 1]; + const lastLang = languages[languages.length - 1]; languages[languages.length - 1] = languages[cppIndex]; languages[cppIndex] = lastLang; } - let totalLines: string[] = []; + const totalLines: string[] = []; let totalCount = 0; - for (let lang of languages) { - const lines = fs.readFileSync(tracerConfigs[lang].spec, 'utf8').split(/\r?\n/); + for (const lang of languages) { + const lines = fs + .readFileSync(tracerConfigs[lang].spec, "utf8") + .split(/\r?\n/); const count = parseInt(lines[1], 10); totalCount += count; totalLines.push(...lines.slice(2)); } - const newLogFilePath = path.resolve(config.tempDir, 'compound-build-tracer.log'); - const spec = path.resolve(config.tempDir, 'compound-spec'); - const compoundTempFolder = path.resolve(config.tempDir, 'compound-temp'); - const newSpecContent = [newLogFilePath, totalCount.toString(10), ...totalLines]; + const newLogFilePath = path.resolve( + config.tempDir, + "compound-build-tracer.log" + ); + const spec = path.resolve(config.tempDir, "compound-spec"); + const compoundTempFolder = path.resolve(config.tempDir, "compound-temp"); + const newSpecContent = [ + newLogFilePath, + totalCount.toString(10), + ...totalLines, + ]; if (copyExecutables) { - env['SEMMLE_COPY_EXECUTABLES_ROOT'] = compoundTempFolder; + env["SEMMLE_COPY_EXECUTABLES_ROOT"] = compoundTempFolder; envSize += 1; } - fs.writeFileSync(spec, newSpecContent.join('\n')); + fs.writeFileSync(spec, newSpecContent.join("\n")); // Prepare the content of the compound environment file let buffer = Buffer.alloc(4); buffer.writeInt32LE(envSize, 0); - for (let e of Object.entries(env)) { + for (const e of Object.entries(env)) { const key = e[0]; const value = e[1]; - const lineBuffer = new Buffer(key + '=' + value + '\0', 'utf8'); + const lineBuffer = new Buffer(`${key}=${value}\0`, "utf8"); const sizeBuffer = Buffer.alloc(4); sizeBuffer.writeInt32LE(lineBuffer.length, 0); buffer = Buffer.concat([buffer, sizeBuffer, lineBuffer]); } // Write the compound environment - const envPath = spec + '.environment'; + const envPath = `${spec}.environment`; fs.writeFileSync(envPath, buffer); return { env, spec }; @@ -131,8 +151,8 @@ export function concatTracerConfigs( export async function getCombinedTracerConfig( config: configUtils.Config, - codeql: CodeQL): Promise { - + codeql: CodeQL +): Promise { // Abort if there are no traced languages as there's nothing to do const tracedLanguages = config.languages.filter(isTracedLanguage); if (tracedLanguages.length === 0) { @@ -142,17 +162,31 @@ export async function getCombinedTracerConfig( // Get all the tracer configs and combine them together const tracedLanguageConfigs: { [lang: string]: TracerConfig } = {}; for (const language of tracedLanguages) { - tracedLanguageConfigs[language] = await getTracerConfigForLanguage(codeql, config, language); + tracedLanguageConfigs[language] = await getTracerConfigForLanguage( + codeql, + config, + language + ); } const mainTracerConfig = concatTracerConfigs(tracedLanguageConfigs, config); // Add a couple more variables - mainTracerConfig.env['ODASA_TRACER_CONFIGURATION'] = mainTracerConfig.spec; + mainTracerConfig.env["ODASA_TRACER_CONFIGURATION"] = mainTracerConfig.spec; const codeQLDir = path.dirname(codeql.getPath()); - if (process.platform === 'darwin') { - mainTracerConfig.env['DYLD_INSERT_LIBRARIES'] = path.join(codeQLDir, 'tools', 'osx64', 'libtrace.dylib'); - } else if (process.platform !== 'win32') { - mainTracerConfig.env['LD_PRELOAD'] = path.join(codeQLDir, 'tools', 'linux64', '${LIB}trace.so'); + if (process.platform === "darwin") { + mainTracerConfig.env["DYLD_INSERT_LIBRARIES"] = path.join( + codeQLDir, + "tools", + "osx64", + "libtrace.dylib" + ); + } else if (process.platform !== "win32") { + mainTracerConfig.env["LD_PRELOAD"] = path.join( + codeQLDir, + "tools", + "linux64", + "${LIB}trace.so" + ); } return mainTracerConfig; diff --git a/src/upload-lib.test.ts b/src/upload-lib.test.ts index aacd4e11a..e37cdd9f7 100644 --- a/src/upload-lib.test.ts +++ b/src/upload-lib.test.ts @@ -1,17 +1,21 @@ -import test from 'ava'; +import test from "ava"; -import { getRunnerLogger } from './logging'; -import {setupTests} from './testing-utils'; -import * as uploadLib from './upload-lib'; +import { getRunnerLogger } from "./logging"; +import { setupTests } from "./testing-utils"; +import * as uploadLib from "./upload-lib"; setupTests(test); -test('validateSarifFileSchema - valid', t => { - const inputFile = __dirname + '/../src/testdata/valid-sarif.sarif'; - t.notThrows(() => uploadLib.validateSarifFileSchema(inputFile, getRunnerLogger(true))); +test("validateSarifFileSchema - valid", (t) => { + const inputFile = `${__dirname}/../src/testdata/valid-sarif.sarif`; + t.notThrows(() => + uploadLib.validateSarifFileSchema(inputFile, getRunnerLogger(true)) + ); }); -test('validateSarifFileSchema - invalid', t => { - const inputFile = __dirname + '/../src/testdata/invalid-sarif.sarif'; - t.throws(() => uploadLib.validateSarifFileSchema(inputFile, getRunnerLogger(true))); +test("validateSarifFileSchema - invalid", (t) => { + const inputFile = `${__dirname}/../src/testdata/invalid-sarif.sarif`; + t.throws(() => + uploadLib.validateSarifFileSchema(inputFile, getRunnerLogger(true)) + ); }); diff --git a/src/upload-lib.ts b/src/upload-lib.ts index 6ce3826c7..6f937af3c 100644 --- a/src/upload-lib.ts +++ b/src/upload-lib.ts @@ -1,32 +1,32 @@ -import * as core from '@actions/core'; -import fileUrl from 'file-url'; -import * as fs from 'fs'; -import * as jsonschema from 'jsonschema'; -import * as path from 'path'; -import zlib from 'zlib'; - -import * as api from './api-client'; -import * as fingerprints from './fingerprints'; -import { Logger } from './logging'; -import { RepositoryNwo } from './repository'; -import * as sharedEnv from './shared-environment'; -import * as util from './util'; +import * as core from "@actions/core"; +import fileUrl from "file-url"; +import * as fs from "fs"; +import * as jsonschema from "jsonschema"; +import * as path from "path"; +import zlib from "zlib"; + +import * as api from "./api-client"; +import * as fingerprints from "./fingerprints"; +import { Logger } from "./logging"; +import { RepositoryNwo } from "./repository"; +import * as sharedEnv from "./shared-environment"; +import * as util from "./util"; // Takes a list of paths to sarif files and combines them together, // returning the contents of the combined sarif file. export function combineSarifFiles(sarifFiles: string[]): string { - let combinedSarif = { + const combinedSarif = { version: null, - runs: [] as any[] + runs: [] as any[], }; - for (let sarifFile of sarifFiles) { - let sarifObject = JSON.parse(fs.readFileSync(sarifFile, 'utf8')); + for (const sarifFile of sarifFiles) { + const sarifObject = JSON.parse(fs.readFileSync(sarifFile, "utf8")); // Check SARIF version if (combinedSarif.version === null) { combinedSarif.version = sarifObject.version; } else if (combinedSarif.version !== sarifObject.version) { - throw "Different SARIF versions encountered: " + combinedSarif.version + " and " + sarifObject.version; + throw `Different SARIF versions encountered: ${combinedSarif.version} and ${sarifObject.version}`; } combinedSarif.runs.push(...sarifObject.runs); @@ -43,12 +43,12 @@ async function uploadPayload( githubAuth: string, githubUrl: string, mode: util.Mode, - logger: Logger) { - - logger.info('Uploading results'); + logger: Logger +) { + logger.info("Uploading results"); // If in test mode we don't want to upload the results - const testMode = process.env['TEST_MODE'] === 'true' || false; + const testMode = process.env["TEST_MODE"] === "true" || false; if (testMode) { return; } @@ -62,16 +62,17 @@ async function uploadPayload( const client = api.getApiClient(githubAuth, githubUrl); for (let attempt = 0; attempt <= backoffPeriods.length; attempt++) { - const reqURL = mode === 'actions' - ? 'PUT /repos/:owner/:repo/code-scanning/analysis' - : 'POST /repos/:owner/:repo/code-scanning/sarifs'; - const response = await client.request(reqURL, ({ + const reqURL = + mode === "actions" + ? "PUT /repos/:owner/:repo/code-scanning/analysis" + : "POST /repos/:owner/:repo/code-scanning/sarifs"; + const response = await client.request(reqURL, { owner: repositoryNwo.owner, repo: repositoryNwo.repo, data: payload, - })); + }); - logger.debug('response status: ' + response.status); + logger.debug(`response status: ${response.status}`); const statusCode = response.status; if (statusCode === 202) { @@ -83,30 +84,41 @@ async function uploadPayload( // On any other status code that's not 5xx mark the upload as failed if (!statusCode || statusCode < 500 || statusCode >= 600) { - throw new Error('Upload failed (' + requestID + '): (' + statusCode + ') ' + JSON.stringify(response.data)); + throw new Error( + `Upload failed (${requestID}): (${statusCode}) ${JSON.stringify( + response.data + )}` + ); } // On a 5xx status code we may retry the request if (attempt < backoffPeriods.length) { // Log the failure as a warning but don't mark the action as failed yet - logger.warning('Upload attempt (' + (attempt + 1) + ' of ' + (backoffPeriods.length + 1) + - ') failed (' + requestID + '). Retrying in ' + backoffPeriods[attempt] + - ' seconds: (' + statusCode + ') ' + JSON.stringify(response.data)); + logger.warning( + `Upload attempt (${attempt + 1} of ${ + backoffPeriods.length + 1 + }) failed (${requestID}). Retrying in ${ + backoffPeriods[attempt] + } seconds: (${statusCode}) ${JSON.stringify(response.data)}` + ); // Sleep for the backoff period - await new Promise(r => setTimeout(r, backoffPeriods[attempt] * 1000)); + await new Promise((r) => setTimeout(r, backoffPeriods[attempt] * 1000)); continue; - } else { // If the upload fails with 5xx then we assume it is a temporary problem // and not an error that the user has caused or can fix. // We avoid marking the job as failed to avoid breaking CI workflows. - throw new Error('Upload failed (' + requestID + '): (' + statusCode + ') ' + JSON.stringify(response.data)); + throw new Error( + `Upload failed (${requestID}): (${statusCode}) ${JSON.stringify( + response.data + )}` + ); } } // This case shouldn't ever happen as the final iteration of the loop // will always throw an error instead of exiting to here. - throw new Error('Upload failed'); + throw new Error("Upload failed"); } export interface UploadStatusReport { @@ -134,19 +146,19 @@ export async function upload( githubAuth: string, githubUrl: string, mode: util.Mode, - logger: Logger): Promise { - + logger: Logger +): Promise { const sarifFiles: string[] = []; if (!fs.existsSync(sarifPath)) { throw new Error(`Path does not exist: ${sarifPath}`); } if (fs.lstatSync(sarifPath).isDirectory()) { fs.readdirSync(sarifPath) - .filter(f => f.endsWith(".sarif")) - .map(f => path.resolve(sarifPath, f)) - .forEach(f => sarifFiles.push(f)); + .filter((f) => f.endsWith(".sarif")) + .map((f) => path.resolve(sarifPath, f)) + .forEach((f) => sarifFiles.push(f)); if (sarifFiles.length === 0) { - throw new Error("No SARIF files found to upload in \"" + sarifPath + "\"."); + throw new Error(`No SARIF files found to upload in "${sarifPath}".`); } } else { sarifFiles.push(sarifPath); @@ -165,7 +177,8 @@ export async function upload( githubAuth, githubUrl, mode, - logger); + logger + ); } // Counts the number of results in the given SARIF file @@ -180,22 +193,26 @@ export function countResultsInSarif(sarif: string): number { // Validates that the given file path refers to a valid SARIF file. // Throws an error if the file is invalid. export function validateSarifFileSchema(sarifFilePath: string, logger: Logger) { - const sarif = JSON.parse(fs.readFileSync(sarifFilePath, 'utf8')); - const schema = require('../src/sarif_v2.1.0_schema.json'); + const sarif = JSON.parse(fs.readFileSync(sarifFilePath, "utf8")); + const schema = require("../src/sarif_v2.1.0_schema.json"); const result = new jsonschema.Validator().validate(sarif, schema); if (!result.valid) { // Output the more verbose error messages in groups as these may be very large. for (const error of result.errors) { - logger.startGroup("Error details: " + error.stack); + logger.startGroup(`Error details: ${error.stack}`); logger.info(JSON.stringify(error, null, 2)); logger.endGroup(); } // Set the main error message to the stacks of all the errors. // This should be of a manageable size and may even give enough to fix the error. - const sarifErrors = result.errors.map(e => "- " + e.stack); - throw new Error("Unable to upload \"" + sarifFilePath + "\" as it is not valid SARIF:\n" + sarifErrors.join("\n")); + const sarifErrors = result.errors.map((e) => `- ${e.stack}`); + throw new Error( + `Unable to upload "${sarifFilePath}" as it is not valid SARIF:\n${sarifErrors.join( + "\n" + )}` + ); } } @@ -214,15 +231,17 @@ async function uploadFiles( githubAuth: string, githubUrl: string, mode: util.Mode, - logger: Logger): Promise { - - logger.info("Uploading sarif files: " + JSON.stringify(sarifFiles)); + logger: Logger +): Promise { + logger.info(`Uploading sarif files: ${JSON.stringify(sarifFiles)}`); - if (mode === 'actions') { + if (mode === "actions") { // This check only works on actions as env vars don't persist between calls to the runner const sentinelEnvVar = "CODEQL_UPLOAD_SARIF"; if (process.env[sentinelEnvVar]) { - throw new Error("Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job"); + throw new Error( + "Aborting upload: only one run of the codeql/analyze or codeql/upload-sarif actions is allowed per job" + ); } core.exportVariable(sentinelEnvVar, sentinelEnvVar); } @@ -233,47 +252,58 @@ async function uploadFiles( } let sarifPayload = combineSarifFiles(sarifFiles); - sarifPayload = fingerprints.addFingerprints(sarifPayload, checkoutPath, logger); + sarifPayload = fingerprints.addFingerprints( + sarifPayload, + checkoutPath, + logger + ); - const zipped_sarif = zlib.gzipSync(sarifPayload).toString('base64'); - let checkoutURI = fileUrl(checkoutPath); + const zipped_sarif = zlib.gzipSync(sarifPayload).toString("base64"); + const checkoutURI = fileUrl(checkoutPath); const toolNames = util.getToolNames(sarifPayload); let payload: string; - if (mode === 'actions') { + if (mode === "actions") { payload = JSON.stringify({ - "commit_oid": commitOid, - "ref": ref, - "analysis_key": analysisKey, - "analysis_name": analysisName, - "sarif": zipped_sarif, - "workflow_run_id": workflowRunID, - "checkout_uri": checkoutURI, - "environment": environment, - "started_at": process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT], - "tool_names": toolNames, + commit_oid: commitOid, + ref, + analysis_key: analysisKey, + analysis_name: analysisName, + sarif: zipped_sarif, + workflow_run_id: workflowRunID, + checkout_uri: checkoutURI, + environment, + started_at: process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT], + tool_names: toolNames, }); } else { payload = JSON.stringify({ - "commit_sha": commitOid, - "ref": ref, - "sarif": zipped_sarif, - "checkout_uri": checkoutURI, - "tool_name": toolNames[0], + commit_sha: commitOid, + ref, + sarif: zipped_sarif, + checkout_uri: checkoutURI, + tool_name: toolNames[0], }); } // Log some useful debug info about the info const rawUploadSizeBytes = sarifPayload.length; - logger.debug("Raw upload size: " + rawUploadSizeBytes + " bytes"); + logger.debug(`Raw upload size: ${rawUploadSizeBytes} bytes`); const zippedUploadSizeBytes = zipped_sarif.length; - logger.debug("Base64 zipped upload size: " + zippedUploadSizeBytes + " bytes"); + logger.debug(`Base64 zipped upload size: ${zippedUploadSizeBytes} bytes`); const numResultInSarif = countResultsInSarif(sarifPayload); - logger.debug("Number of results in upload: " + numResultInSarif); + logger.debug(`Number of results in upload: ${numResultInSarif}`); // Make the upload - await uploadPayload(payload, repositoryNwo, githubAuth, githubUrl, mode, logger); + await uploadPayload( + payload, + repositoryNwo, + githubAuth, + githubUrl, + mode, + logger + ); return { raw_upload_size_bytes: rawUploadSizeBytes, diff --git a/src/upload-sarif-action.ts b/src/upload-sarif-action.ts index 8b8fdefe6..96ef0390d 100644 --- a/src/upload-sarif-action.ts +++ b/src/upload-sarif-action.ts @@ -1,58 +1,75 @@ -import * as core from '@actions/core'; +import * as core from "@actions/core"; -import { getActionsLogger } from './logging'; -import { parseRepositoryNwo } from './repository'; -import * as upload_lib from './upload-lib'; -import * as util from './util'; +import { getActionsLogger } from "./logging"; +import { parseRepositoryNwo } from "./repository"; +import * as upload_lib from "./upload-lib"; +import * as util from "./util"; -interface UploadSarifStatusReport extends util.StatusReportBase, upload_lib.UploadStatusReport {} +interface UploadSarifStatusReport + extends util.StatusReportBase, + upload_lib.UploadStatusReport {} -async function sendSuccessStatusReport(startedAt: Date, uploadStats: upload_lib.UploadStatusReport) { - const statusReportBase = await util.createStatusReportBase('upload-sarif', 'success', startedAt); +async function sendSuccessStatusReport( + startedAt: Date, + uploadStats: upload_lib.UploadStatusReport +) { + const statusReportBase = await util.createStatusReportBase( + "upload-sarif", + "success", + startedAt + ); const statusReport: UploadSarifStatusReport = { ...statusReportBase, - ... uploadStats, + ...uploadStats, }; await util.sendStatusReport(statusReport); } async function run() { const startedAt = new Date(); - if (!await util.sendStatusReport(await util.createStatusReportBase('upload-sarif', 'starting', startedAt), true)) { + if ( + !(await util.sendStatusReport( + await util.createStatusReportBase("upload-sarif", "starting", startedAt), + true + )) + ) { return; } try { const uploadStats = await upload_lib.upload( - core.getInput('sarif_file'), - parseRepositoryNwo(util.getRequiredEnvParam('GITHUB_REPOSITORY')), + core.getInput("sarif_file"), + parseRepositoryNwo(util.getRequiredEnvParam("GITHUB_REPOSITORY")), await util.getCommitOid(), util.getRef(), await util.getAnalysisKey(), - util.getRequiredEnvParam('GITHUB_WORKFLOW'), + util.getRequiredEnvParam("GITHUB_WORKFLOW"), util.getWorkflowRunID(), - core.getInput('checkout_path'), - core.getInput('matrix'), - core.getInput('token'), - util.getRequiredEnvParam('GITHUB_SERVER_URL'), - 'actions', - getActionsLogger()); + core.getInput("checkout_path"), + core.getInput("matrix"), + core.getInput("token"), + util.getRequiredEnvParam("GITHUB_SERVER_URL"), + "actions", + getActionsLogger() + ); await sendSuccessStatusReport(startedAt, uploadStats); - } catch (error) { core.setFailed(error.message); console.log(error); - await util.sendStatusReport(await util.createStatusReportBase( - 'upload-sarif', - 'failure', - startedAt, - error.message, - error.stack)); + await util.sendStatusReport( + await util.createStatusReportBase( + "upload-sarif", + "failure", + startedAt, + error.message, + error.stack + ) + ); return; } } -run().catch(e => { - core.setFailed("codeql/upload-sarif action failed: " + e); +run().catch((e) => { + core.setFailed(`codeql/upload-sarif action failed: ${e}`); console.log(e); }); diff --git a/src/util.test.ts b/src/util.test.ts index b0ba99020..4b1f4bcb6 100644 --- a/src/util.test.ts +++ b/src/util.test.ts @@ -1,21 +1,23 @@ -import test from 'ava'; -import * as fs from 'fs'; +import test from "ava"; +import * as fs from "fs"; import * as os from "os"; -import { getRunnerLogger } from './logging'; -import {setupTests} from './testing-utils'; -import * as util from './util'; +import { getRunnerLogger } from "./logging"; +import { setupTests } from "./testing-utils"; +import * as util from "./util"; setupTests(test); -test('getToolNames', t => { - const input = fs.readFileSync(__dirname + '/../src/testdata/tool-names.sarif', 'utf8'); +test("getToolNames", (t) => { + const input = fs.readFileSync( + `${__dirname}/../src/testdata/tool-names.sarif`, + "utf8" + ); const toolNames = util.getToolNames(input); t.deepEqual(toolNames, ["CodeQL command-line toolchain", "ESLint"]); }); -test('getMemoryFlag() should return the correct --ram flag', t => { - +test("getMemoryFlag() should return the correct --ram flag", (t) => { const totalMem = Math.floor(os.totalmem() / (1024 * 1024)); const tests = { @@ -29,14 +31,13 @@ test('getMemoryFlag() should return the correct --ram flag', t => { } }); -test('getMemoryFlag() throws if the ram input is < 0 or NaN', t => { +test("getMemoryFlag() throws if the ram input is < 0 or NaN", (t) => { for (const input of ["-1", "hello!"]) { t.throws(() => util.getMemoryFlag(input)); } }); -test('getAddSnippetsFlag() should return the correct flag', t => { - +test("getAddSnippetsFlag() should return the correct flag", (t) => { t.deepEqual(util.getAddSnippetsFlag(true), "--sarif-add-snippets"); t.deepEqual(util.getAddSnippetsFlag("true"), "--sarif-add-snippets"); @@ -44,18 +45,16 @@ test('getAddSnippetsFlag() should return the correct flag', t => { t.deepEqual(util.getAddSnippetsFlag(undefined), "--no-sarif-add-snippets"); t.deepEqual(util.getAddSnippetsFlag("false"), "--no-sarif-add-snippets"); t.deepEqual(util.getAddSnippetsFlag("foo bar"), "--no-sarif-add-snippets"); - }); -test('getThreadsFlag() should return the correct --threads flag', t => { - +test("getThreadsFlag() should return the correct --threads flag", (t) => { const numCpus = os.cpus().length; const tests = { "0": "--threads=0", "1": "--threads=1", [`${numCpus + 1}`]: `--threads=${numCpus}`, - [`${-numCpus - 1}`]: `--threads=${-numCpus}` + [`${-numCpus - 1}`]: `--threads=${-numCpus}`, }; for (const [input, expectedFlag] of Object.entries(tests)) { @@ -64,68 +63,68 @@ test('getThreadsFlag() should return the correct --threads flag', t => { } }); -test('getThreadsFlag() throws if the threads input is not an integer', t => { +test("getThreadsFlag() throws if the threads input is not an integer", (t) => { t.throws(() => util.getThreadsFlag("hello!", getRunnerLogger(true))); }); -test('getRef() throws on the empty string', t => { +test("getRef() throws on the empty string", (t) => { process.env["GITHUB_REF"] = ""; t.throws(util.getRef); }); -test('isLocalRun() runs correctly', t => { +test("isLocalRun() runs correctly", (t) => { const origLocalRun = process.env.CODEQL_LOCAL_RUN; - process.env.CODEQL_LOCAL_RUN = ''; + process.env.CODEQL_LOCAL_RUN = ""; t.assert(!util.isLocalRun()); - process.env.CODEQL_LOCAL_RUN = 'false'; + process.env.CODEQL_LOCAL_RUN = "false"; t.assert(!util.isLocalRun()); - process.env.CODEQL_LOCAL_RUN = '0'; + process.env.CODEQL_LOCAL_RUN = "0"; t.assert(!util.isLocalRun()); - process.env.CODEQL_LOCAL_RUN = 'true'; + process.env.CODEQL_LOCAL_RUN = "true"; t.assert(util.isLocalRun()); - process.env.CODEQL_LOCAL_RUN = 'hucairz'; + process.env.CODEQL_LOCAL_RUN = "hucairz"; t.assert(util.isLocalRun()); process.env.CODEQL_LOCAL_RUN = origLocalRun; }); -test('prepareEnvironment() when a local run', t => { +test("prepareEnvironment() when a local run", (t) => { const origLocalRun = process.env.CODEQL_LOCAL_RUN; - process.env.CODEQL_LOCAL_RUN = 'false'; - process.env.GITHUB_JOB = 'YYY'; + process.env.CODEQL_LOCAL_RUN = "false"; + process.env.GITHUB_JOB = "YYY"; util.prepareLocalRunEnvironment(); // unchanged - t.deepEqual(process.env.GITHUB_JOB, 'YYY'); + t.deepEqual(process.env.GITHUB_JOB, "YYY"); - process.env.CODEQL_LOCAL_RUN = 'true'; + process.env.CODEQL_LOCAL_RUN = "true"; util.prepareLocalRunEnvironment(); // unchanged - t.deepEqual(process.env.GITHUB_JOB, 'YYY'); + t.deepEqual(process.env.GITHUB_JOB, "YYY"); - process.env.GITHUB_JOB = ''; + process.env.GITHUB_JOB = ""; util.prepareLocalRunEnvironment(); // updated - t.deepEqual(process.env.GITHUB_JOB, 'UNKNOWN-JOB'); + t.deepEqual(process.env.GITHUB_JOB, "UNKNOWN-JOB"); process.env.CODEQL_LOCAL_RUN = origLocalRun; }); -test('getExtraOptionsEnvParam() succeeds on valid JSON with invalid options (for now)', t => { +test("getExtraOptionsEnvParam() succeeds on valid JSON with invalid options (for now)", (t) => { const origExtraOptions = process.env.CODEQL_ACTION_EXTRA_OPTIONS; - const options = {foo: 42}; + const options = { foo: 42 }; process.env.CODEQL_ACTION_EXTRA_OPTIONS = JSON.stringify(options); @@ -134,20 +133,18 @@ test('getExtraOptionsEnvParam() succeeds on valid JSON with invalid options (for process.env.CODEQL_ACTION_EXTRA_OPTIONS = origExtraOptions; }); - -test('getExtraOptionsEnvParam() succeeds on valid options', t => { +test("getExtraOptionsEnvParam() succeeds on valid options", (t) => { const origExtraOptions = process.env.CODEQL_ACTION_EXTRA_OPTIONS; const options = { database: { init: ["--debug"] } }; - process.env.CODEQL_ACTION_EXTRA_OPTIONS = - JSON.stringify(options); + process.env.CODEQL_ACTION_EXTRA_OPTIONS = JSON.stringify(options); t.deepEqual(util.getExtraOptionsEnvParam(), options); process.env.CODEQL_ACTION_EXTRA_OPTIONS = origExtraOptions; }); -test('getExtraOptionsEnvParam() fails on invalid JSON', t => { +test("getExtraOptionsEnvParam() fails on invalid JSON", (t) => { const origExtraOptions = process.env.CODEQL_ACTION_EXTRA_OPTIONS; process.env.CODEQL_ACTION_EXTRA_OPTIONS = "{{invalid-json}}"; diff --git a/src/util.ts b/src/util.ts index 10cd2e2b7..f439a63a7 100644 --- a/src/util.ts +++ b/src/util.ts @@ -1,34 +1,33 @@ -import * as core from '@actions/core'; -import * as toolrunnner from '@actions/exec/lib/toolrunner'; +import * as core from "@actions/core"; +import * as toolrunnner from "@actions/exec/lib/toolrunner"; import * as fs from "fs"; -import * as os from 'os'; -import * as path from 'path'; +import * as os from "os"; +import * as path from "path"; -import * as api from './api-client'; -import { Language } from './languages'; -import { Logger } from './logging'; -import * as sharedEnv from './shared-environment'; +import * as api from "./api-client"; +import { Language } from "./languages"; +import { Logger } from "./logging"; +import * as sharedEnv from "./shared-environment"; /** * Are we running on actions, or not. */ -export type Mode = 'actions' | 'runner'; +export type Mode = "actions" | "runner"; /** * The URL for github.com. */ export const GITHUB_DOTCOM_URL = "https://github.com"; - /** * Get an environment parameter, but throw an error if it is not set. */ export function getRequiredEnvParam(paramName: string): string { const value = process.env[paramName]; if (value === undefined || value.length === 0) { - throw new Error(paramName + ' environment variable must be set'); + throw new Error(`${paramName} environment variable must be set`); } - core.debug(paramName + '=' + value); + core.debug(`${paramName}=${value}`); return value; } @@ -36,7 +35,7 @@ export function getRequiredEnvParam(paramName: string): string { * Get the extra options for the codeql commands. */ export function getExtraOptionsEnvParam(): object { - const varName = 'CODEQL_ACTION_EXTRA_OPTIONS'; + const varName = "CODEQL_ACTION_EXTRA_OPTIONS"; const raw = process.env[varName]; if (raw === undefined || raw.length === 0) { return {}; @@ -45,17 +44,17 @@ export function getExtraOptionsEnvParam(): object { return JSON.parse(raw); } catch (e) { throw new Error( - varName + - ' environment variable is set, but does not contain valid JSON: ' + - e.message + `${varName} environment variable is set, but does not contain valid JSON: ${e.message}` ); } } export function isLocalRun(): boolean { - return !!process.env.CODEQL_LOCAL_RUN - && process.env.CODEQL_LOCAL_RUN !== 'false' - && process.env.CODEQL_LOCAL_RUN !== '0'; + return ( + !!process.env.CODEQL_LOCAL_RUN && + process.env.CODEQL_LOCAL_RUN !== "false" && + process.env.CODEQL_LOCAL_RUN !== "0" + ); } /** @@ -66,9 +65,9 @@ export function prepareLocalRunEnvironment() { return; } - core.debug('Action is running locally.'); + core.debug("Action is running locally."); if (!process.env.GITHUB_JOB) { - core.exportVariable('GITHUB_JOB', 'UNKNOWN-JOB'); + core.exportVariable("GITHUB_JOB", "UNKNOWN-JOB"); } } @@ -84,18 +83,24 @@ export async function getCommitOid(): Promise { // Even if this does go wrong, it's not a huge problem for the alerts to // reported on the merge commit. try { - let commitOid = ''; - await new toolrunnner.ToolRunner('git', ['rev-parse', 'HEAD'], { + let commitOid = ""; + await new toolrunnner.ToolRunner("git", ["rev-parse", "HEAD"], { silent: true, listeners: { - stdout: (data) => { commitOid += data.toString(); }, - stderr: (data) => { process.stderr.write(data); } - } + stdout: (data) => { + commitOid += data.toString(); + }, + stderr: (data) => { + process.stderr.write(data); + }, + }, }).exec(); return commitOid.trim(); } catch (e) { - core.info("Failed to call git to get current commit. Continuing with data from environment: " + e); - return getRequiredEnvParam('GITHUB_SHA'); + core.info( + `Failed to call git to get current commit. Continuing with data from environment: ${e}` + ); + return getRequiredEnvParam("GITHUB_SHA"); } } @@ -103,20 +108,23 @@ export async function getCommitOid(): Promise { * Get the path of the currently executing workflow. */ async function getWorkflowPath(): Promise { - const repo_nwo = getRequiredEnvParam('GITHUB_REPOSITORY').split("/"); + const repo_nwo = getRequiredEnvParam("GITHUB_REPOSITORY").split("/"); const owner = repo_nwo[0]; const repo = repo_nwo[1]; - const run_id = Number(getRequiredEnvParam('GITHUB_RUN_ID')); + const run_id = Number(getRequiredEnvParam("GITHUB_RUN_ID")); const apiClient = api.getActionsApiClient(); - const runsResponse = await apiClient.request('GET /repos/:owner/:repo/actions/runs/:run_id', { - owner, - repo, - run_id - }); + const runsResponse = await apiClient.request( + "GET /repos/:owner/:repo/actions/runs/:run_id", + { + owner, + repo, + run_id, + } + ); const workflowUrl = runsResponse.data.workflow_url; - const workflowResponse = await apiClient.request('GET ' + workflowUrl); + const workflowResponse = await apiClient.request(`GET ${workflowUrl}`); return workflowResponse.data.path; } @@ -125,9 +133,9 @@ async function getWorkflowPath(): Promise { * Get the workflow run ID. */ export function getWorkflowRunID(): number { - const workflowRunID = parseInt(getRequiredEnvParam('GITHUB_RUN_ID'), 10); + const workflowRunID = parseInt(getRequiredEnvParam("GITHUB_RUN_ID"), 10); if (Number.isNaN(workflowRunID)) { - throw new Error('GITHUB_RUN_ID must define a non NaN workflow run ID'); + throw new Error("GITHUB_RUN_ID must define a non NaN workflow run ID"); } return workflowRunID; } @@ -140,7 +148,7 @@ export function getWorkflowRunID(): number { * the github API, but after that the result will be cached. */ export async function getAnalysisKey(): Promise { - const analysisKeyEnvVar = 'CODEQL_ACTION_ANALYSIS_KEY'; + const analysisKeyEnvVar = "CODEQL_ACTION_ANALYSIS_KEY"; let analysisKey = process.env[analysisKeyEnvVar]; if (analysisKey !== undefined) { @@ -148,9 +156,9 @@ export async function getAnalysisKey(): Promise { } const workflowPath = await getWorkflowPath(); - const jobName = getRequiredEnvParam('GITHUB_JOB'); + const jobName = getRequiredEnvParam("GITHUB_JOB"); - analysisKey = workflowPath + ':' + jobName; + analysisKey = `${workflowPath}:${jobName}`; core.exportVariable(analysisKeyEnvVar, analysisKey); return analysisKey; } @@ -161,7 +169,7 @@ export async function getAnalysisKey(): Promise { export function getRef(): string { // Will be in the form "refs/heads/master" on a push event // or in the form "refs/pull/N/merge" on a pull_request event - const ref = getRequiredEnvParam('GITHUB_REF'); + const ref = getRequiredEnvParam("GITHUB_REF"); // For pull request refs we want to convert from the 'merge' ref // to the 'head' ref, as that is what we want to analyse. @@ -169,46 +177,46 @@ export function getRef(): string { // the checkout, but we have no way of verifying that here. const pull_ref_regex = /refs\/pull\/(\d+)\/merge/; if (pull_ref_regex.test(ref)) { - return ref.replace(pull_ref_regex, 'refs/pull/$1/head'); + return ref.replace(pull_ref_regex, "refs/pull/$1/head"); } else { return ref; } } -type ActionName = 'init' | 'autobuild' | 'finish' | 'upload-sarif'; -type ActionStatus = 'starting' | 'aborted' | 'success' | 'failure'; +type ActionName = "init" | "autobuild" | "finish" | "upload-sarif"; +type ActionStatus = "starting" | "aborted" | "success" | "failure"; export interface StatusReportBase { // ID of the workflow run containing the action run - "workflow_run_id": number; + workflow_run_id: number; // Workflow name. Converted to analysis_name further down the pipeline. - "workflow_name": string; + workflow_name: string; // Job name from the workflow - "job_name": string; + job_name: string; // Analysis key, normally composed from the workflow path and job name - "analysis_key": string; + analysis_key: string; // Value of the matrix for this instantiation of the job - "matrix_vars"?: string; + matrix_vars?: string; // Commit oid that the workflow was triggered on - "commit_oid": string; + commit_oid: string; // Ref that the workflow was triggered on - "ref": string; + ref: string; // Name of the action being executed - "action_name": ActionName; + action_name: ActionName; // Version if the action being executed, as a commit oid - "action_oid": string; + action_oid: string; // Time the first action started. Normally the init action - "started_at": string; + started_at: string; // Time this action started - "action_started_at": string; + action_started_at: string; // Time this action completed, or undefined if not yet completed - "completed_at"?: string; + completed_at?: string; // State this action is currently in - "status": ActionStatus; + status: ActionStatus; // Cause of the failure (or undefined if status is not failure) - "cause"?: string; + cause?: string; // Stack trace of the failure (or undefined if status is not failure) - "exception"?: string; + exception?: string; } /** @@ -225,37 +233,39 @@ export async function createStatusReportBase( status: ActionStatus, actionStartedAt: Date, cause?: string, - exception?: string): - Promise { - - const commitOid = process.env['GITHUB_SHA'] || ''; + exception?: string +): Promise { + const commitOid = process.env["GITHUB_SHA"] || ""; const ref = getRef(); - const workflowRunIDStr = process.env['GITHUB_RUN_ID']; + const workflowRunIDStr = process.env["GITHUB_RUN_ID"]; let workflowRunID = -1; if (workflowRunIDStr) { workflowRunID = parseInt(workflowRunIDStr, 10); } - const workflowName = process.env['GITHUB_WORKFLOW'] || ''; - const jobName = process.env['GITHUB_JOB'] || ''; + const workflowName = process.env["GITHUB_WORKFLOW"] || ""; + const jobName = process.env["GITHUB_JOB"] || ""; const analysis_key = await getAnalysisKey(); let workflowStartedAt = process.env[sharedEnv.CODEQL_WORKFLOW_STARTED_AT]; if (workflowStartedAt === undefined) { workflowStartedAt = actionStartedAt.toISOString(); - core.exportVariable(sharedEnv.CODEQL_WORKFLOW_STARTED_AT, workflowStartedAt); + core.exportVariable( + sharedEnv.CODEQL_WORKFLOW_STARTED_AT, + workflowStartedAt + ); } - let statusReport: StatusReportBase = { + const statusReport: StatusReportBase = { workflow_run_id: workflowRunID, workflow_name: workflowName, job_name: jobName, - analysis_key: analysis_key, + analysis_key, commit_oid: commitOid, - ref: ref, + ref, action_name: actionName, action_oid: "unknown", // TODO decide if it's possible to fill this in started_at: workflowStartedAt, action_started_at: actionStartedAt.toISOString(), - status: status + status, }; // Add optional parameters @@ -265,10 +275,10 @@ export async function createStatusReportBase( if (exception) { statusReport.exception = exception; } - if (status === 'success' || status === 'failure' || status === 'aborted') { + if (status === "success" || status === "failure" || status === "aborted") { statusReport.completed_at = new Date().toISOString(); } - let matrix: string | undefined = core.getInput('matrix'); + const matrix: string | undefined = core.getInput("matrix"); if (matrix) { statusReport.matrix_vars = matrix; } @@ -287,8 +297,8 @@ export async function createStatusReportBase( */ export async function sendStatusReport( statusReport: S, - ignoreFailures?: boolean): Promise { - + ignoreFailures?: boolean +): Promise { if (getRequiredEnvParam("GITHUB_SERVER_URL") !== GITHUB_DOTCOM_URL) { core.debug("Not sending status report to GitHub Enterprise"); return true; @@ -300,16 +310,19 @@ export async function sendStatusReport( } const statusReportJSON = JSON.stringify(statusReport); - core.debug('Sending status report: ' + statusReportJSON); + core.debug(`Sending status report: ${statusReportJSON}`); const nwo = getRequiredEnvParam("GITHUB_REPOSITORY"); const [owner, repo] = nwo.split("/"); const client = api.getActionsApiClient(); - const statusResponse = await client.request('PUT /repos/:owner/:repo/code-scanning/analysis/status', { - owner: owner, - repo: repo, - data: statusReportJSON, - }); + const statusResponse = await client.request( + "PUT /repos/:owner/:repo/code-scanning/analysis/status", + { + owner, + repo, + data: statusReportJSON, + } + ); if (!ignoreFailures) { // If the status report request fails with a 403 or a 404, then this is a deliberate @@ -319,11 +332,15 @@ export async function sendStatusReport( // Other failure responses (or lack thereof) could be transitory and should not // cause the action to fail. if (statusResponse.status === 403) { - core.setFailed('The repo on which this action is running is not opted-in to CodeQL code scanning.'); + core.setFailed( + "The repo on which this action is running is not opted-in to CodeQL code scanning." + ); return false; } if (statusResponse.status === 404) { - core.setFailed('Not authorized to used the CodeQL code scanning feature on this repo.'); + core.setFailed( + "Not authorized to used the CodeQL code scanning feature on this repo." + ); return false; } } @@ -353,12 +370,14 @@ export function getToolNames(sarifContents: string): string[] { // Creates a random temporary directory, runs the given body, and then deletes the directory. // Mostly intended for use within tests. -export async function withTmpDir(body: (tmpDir: string) => Promise): Promise { - const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'codeql-action-')); - const realSubdir = path.join(tmpDir, 'real'); +export async function withTmpDir( + body: (tmpDir: string) => Promise +): Promise { + const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "codeql-action-")); + const realSubdir = path.join(tmpDir, "real"); fs.mkdirSync(realSubdir); - const symlinkSubdir = path.join(tmpDir, 'symlink'); - fs.symlinkSync(realSubdir, symlinkSubdir, 'dir'); + const symlinkSubdir = path.join(tmpDir, "symlink"); + fs.symlinkSync(realSubdir, symlinkSubdir, "dir"); const result = await body(symlinkSubdir); fs.rmdirSync(tmpDir, { recursive: true }); return result; @@ -375,7 +394,7 @@ export function getMemoryFlag(userInput: string | undefined): string { if (userInput) { memoryToUseMegaBytes = Number(userInput); if (Number.isNaN(memoryToUseMegaBytes) || memoryToUseMegaBytes <= 0) { - throw new Error("Invalid RAM setting \"" + userInput + "\", specified."); + throw new Error(`Invalid RAM setting "${userInput}", specified.`); } } else { const totalMemoryBytes = os.totalmem(); @@ -383,7 +402,7 @@ export function getMemoryFlag(userInput: string | undefined): string { const systemReservedMemoryMegaBytes = 256; memoryToUseMegaBytes = totalMemoryMegaBytes - systemReservedMemoryMegaBytes; } - return "--ram=" + Math.floor(memoryToUseMegaBytes); + return `--ram=${Math.floor(memoryToUseMegaBytes)}`; } /** @@ -391,12 +410,14 @@ export function getMemoryFlag(userInput: string | undefined): string { * * @returns string */ -export function getAddSnippetsFlag(userInput: string | boolean | undefined): string { +export function getAddSnippetsFlag( + userInput: string | boolean | undefined +): string { if (typeof userInput === "string") { // have to process specifically because any non-empty string is truthy userInput = userInput.toLowerCase() === "true"; } - return userInput ? "--sarif-add-snippets" : "--no-sarif-add-snippets"; + return userInput ? "--sarif-add-snippets" : "--no-sarif-add-snippets"; } /** @@ -407,7 +428,10 @@ export function getAddSnippetsFlag(userInput: string | boolean | undefined): str * * @returns string */ -export function getThreadsFlag(userInput: string | undefined, logger: Logger): string { +export function getThreadsFlag( + userInput: string | undefined, + logger: Logger +): string { let numThreads: number; const maxThreads = os.cpus().length; if (userInput) { @@ -416,12 +440,16 @@ export function getThreadsFlag(userInput: string | undefined, logger: Logger): s throw new Error(`Invalid threads setting "${userInput}", specified.`); } if (numThreads > maxThreads) { - logger.info(`Clamping desired number of threads (${numThreads}) to max available (${maxThreads}).`); + logger.info( + `Clamping desired number of threads (${numThreads}) to max available (${maxThreads}).` + ); numThreads = maxThreads; } const minThreads = -maxThreads; if (numThreads < minThreads) { - logger.info(`Clamping desired number of free threads (${numThreads}) to max available (${minThreads}).`); + logger.info( + `Clamping desired number of free threads (${numThreads}) to max available (${minThreads}).` + ); numThreads = minThreads; } } else { @@ -435,7 +463,7 @@ export function getThreadsFlag(userInput: string | undefined, logger: Logger): s * Get the directory where CodeQL databases should be placed. */ export function getCodeQLDatabasesDir(tempDir: string) { - return path.resolve(tempDir, 'codeql_databases'); + return path.resolve(tempDir, "codeql_databases"); } /**