mirror of
https://github.com/github/codeql-action.git
synced 2025-12-19 05:49:21 +08:00
Compare commits
21 Commits
codeql-bun
...
codeql-bun
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f00bafbde1 | ||
|
|
b6ae33fbe6 | ||
|
|
35a83b92ca | ||
|
|
ad98dc69ff | ||
|
|
418fcd5826 | ||
|
|
031dc506df | ||
|
|
ee062d3e85 | ||
|
|
a7d3945ab4 | ||
|
|
f584f94f3d | ||
|
|
b477190a33 | ||
|
|
a6ebb19b5b | ||
|
|
53210459f6 | ||
|
|
e7e64d59be | ||
|
|
c2ec5a225a | ||
|
|
46d0d277ef | ||
|
|
2c0a85753e | ||
|
|
e04c62bb3c | ||
|
|
925cef7601 | ||
|
|
a2312a0bf3 | ||
|
|
8e3540bb01 | ||
|
|
c3e98fb528 |
14
lib/analyze.js
generated
14
lib/analyze.js
generated
@@ -158,15 +158,15 @@ async function injectLinesOfCode(sarifFile, language, locPromise) {
|
|||||||
const sarif = JSON.parse(fs.readFileSync(sarifFile, "utf8"));
|
const sarif = JSON.parse(fs.readFileSync(sarifFile, "utf8"));
|
||||||
if (Array.isArray(sarif.runs)) {
|
if (Array.isArray(sarif.runs)) {
|
||||||
for (const run of sarif.runs) {
|
for (const run of sarif.runs) {
|
||||||
const metricId = `${language}/summary/lines-of-code`;
|
const ruleId = `${language}/summary/lines-of-code`;
|
||||||
run.properties = run.properties || {};
|
run.properties = run.properties || {};
|
||||||
run.properties.metricResults = run.properties.metricResults || [];
|
run.properties.metricResults = run.properties.metricResults || [];
|
||||||
const metric = run.properties.metricResults.find(
|
const rule = run.properties.metricResults.find(
|
||||||
// the metric id can be in either of two places
|
// the rule id can be in either of two places
|
||||||
(m) => { var _a; return m.metricId === metricId || ((_a = m.metric) === null || _a === void 0 ? void 0 : _a.id) === metricId; });
|
(r) => { var _a; return r.ruleId === ruleId || ((_a = r.rule) === null || _a === void 0 ? void 0 : _a.id) === ruleId; });
|
||||||
// only add the baseline value if the metric already exists
|
// only add the baseline value if the rule already exists
|
||||||
if (metric) {
|
if (rule) {
|
||||||
metric.baseline = lineCounts[language];
|
rule.baseline = lineCounts[language];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
14
lib/analyze.test.js
generated
14
lib/analyze.test.js
generated
@@ -43,23 +43,23 @@ ava_1.default("status report fields and search path setting", async (t) => {
|
|||||||
databaseAnalyze: async (_, sarifFile, searchPath) => {
|
databaseAnalyze: async (_, sarifFile, searchPath) => {
|
||||||
fs.writeFileSync(sarifFile, JSON.stringify({
|
fs.writeFileSync(sarifFile, JSON.stringify({
|
||||||
runs: [
|
runs: [
|
||||||
// variant 1 uses metricId
|
// variant 1 uses ruleId
|
||||||
{
|
{
|
||||||
properties: {
|
properties: {
|
||||||
metricResults: [
|
metricResults: [
|
||||||
{
|
{
|
||||||
metricId: `${language}/summary/lines-of-code`,
|
ruleId: `${language}/summary/lines-of-code`,
|
||||||
value: 123,
|
value: 123,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// variant 2 uses metric.id
|
// variant 2 uses rule.id
|
||||||
{
|
{
|
||||||
properties: {
|
properties: {
|
||||||
metricResults: [
|
metricResults: [
|
||||||
{
|
{
|
||||||
metric: {
|
rule: {
|
||||||
id: `${language}/summary/lines-of-code`,
|
id: `${language}/summary/lines-of-code`,
|
||||||
},
|
},
|
||||||
value: 123,
|
value: 123,
|
||||||
@@ -128,21 +128,21 @@ ava_1.default("status report fields and search path setting", async (t) => {
|
|||||||
const sarif = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
const sarif = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
||||||
t.deepEqual(sarif.runs[0].properties.metricResults, [
|
t.deepEqual(sarif.runs[0].properties.metricResults, [
|
||||||
{
|
{
|
||||||
metricId: `${lang}/summary/lines-of-code`,
|
ruleId: `${lang}/summary/lines-of-code`,
|
||||||
value: 123,
|
value: 123,
|
||||||
baseline: lineCount,
|
baseline: lineCount,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
t.deepEqual(sarif.runs[1].properties.metricResults, [
|
t.deepEqual(sarif.runs[1].properties.metricResults, [
|
||||||
{
|
{
|
||||||
metric: {
|
rule: {
|
||||||
id: `${lang}/summary/lines-of-code`,
|
id: `${lang}/summary/lines-of-code`,
|
||||||
},
|
},
|
||||||
value: 123,
|
value: 123,
|
||||||
baseline: lineCount,
|
baseline: lineCount,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
// when the metric doesn't exists, it should not be added
|
// when the rule doesn't exists, it should not be added
|
||||||
t.deepEqual(sarif.runs[2].properties.metricResults, []);
|
t.deepEqual(sarif.runs[2].properties.metricResults, []);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"analyze.test.js","sourceRoot":"","sources":["../src/analyze.test.ts"],"names":[],"mappings":"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"}
|
{"version":3,"file":"analyze.test.js","sourceRoot":"","sources":["../src/analyze.test.ts"],"names":[],"mappings":"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"}
|
||||||
3
lib/codeql.js
generated
3
lib/codeql.js
generated
@@ -439,6 +439,9 @@ function getCodeQLForCmd(cmd) {
|
|||||||
"--sarif-multicause-markdown",
|
"--sarif-multicause-markdown",
|
||||||
`--output=${sarifFile}`,
|
`--output=${sarifFile}`,
|
||||||
addSnippetsFlag,
|
addSnippetsFlag,
|
||||||
|
// Enable progress verbosity so we log each query as it's interpreted. This aids debugging
|
||||||
|
// when interpretation takes a while for one of the queries being analyzed.
|
||||||
|
"-v",
|
||||||
...getExtraOptionsFromEnv(["database", "analyze"]),
|
...getExtraOptionsFromEnv(["database", "analyze"]),
|
||||||
];
|
];
|
||||||
if (extraSearchPath !== undefined) {
|
if (extraSearchPath !== undefined) {
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
71
lib/count-loc.js
generated
71
lib/count-loc.js
generated
@@ -1,23 +1,47 @@
|
|||||||
"use strict";
|
"use strict";
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const github_linguist_1 = require("github-linguist");
|
const github_linguist_1 = require("github-linguist");
|
||||||
// Map from linguist language names to language prefixes used in our metrics
|
const languages_1 = require("./languages");
|
||||||
const supportedLanguages = {
|
// Map from linguist language names to language prefixes used in the action and codeql
|
||||||
c: "cpp",
|
const linguistToMetrics = {
|
||||||
"c++": "cpp",
|
c: {
|
||||||
"c#": "cs",
|
name: languages_1.Language.cpp,
|
||||||
go: "go",
|
prefix: "cpp",
|
||||||
java: "java",
|
},
|
||||||
javascript: "js",
|
"c++": {
|
||||||
python: "py",
|
name: languages_1.Language.cpp,
|
||||||
ruby: "rb",
|
prefix: "cpp",
|
||||||
typescript: "js",
|
},
|
||||||
|
"c#": {
|
||||||
|
name: languages_1.Language.csharp,
|
||||||
|
prefix: "cs",
|
||||||
|
},
|
||||||
|
go: {
|
||||||
|
name: languages_1.Language.go,
|
||||||
|
prefix: "go",
|
||||||
|
},
|
||||||
|
java: {
|
||||||
|
name: languages_1.Language.java,
|
||||||
|
prefix: "java",
|
||||||
|
},
|
||||||
|
javascript: {
|
||||||
|
name: languages_1.Language.javascript,
|
||||||
|
prefix: "js",
|
||||||
|
},
|
||||||
|
python: {
|
||||||
|
name: languages_1.Language.python,
|
||||||
|
prefix: "py",
|
||||||
|
},
|
||||||
|
typescript: {
|
||||||
|
name: languages_1.Language.javascript,
|
||||||
|
prefix: "js",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
const supportedLanguagesReversed = Object.entries(supportedLanguages).reduce((obj, [key, value]) => {
|
const nameToLinguist = Object.entries(linguistToMetrics).reduce((obj, [key, { name: action }]) => {
|
||||||
if (!obj[value]) {
|
if (!obj[action]) {
|
||||||
obj[value] = [];
|
obj[action] = [];
|
||||||
}
|
}
|
||||||
obj[value].push(key);
|
obj[action].push(key);
|
||||||
return obj;
|
return obj;
|
||||||
}, {});
|
}, {});
|
||||||
/**
|
/**
|
||||||
@@ -35,15 +59,15 @@ async function countLoc(cwd, include, exclude, dbLanguages, logger) {
|
|||||||
cwd,
|
cwd,
|
||||||
include: ["**"].concat(include || []),
|
include: ["**"].concat(include || []),
|
||||||
exclude,
|
exclude,
|
||||||
analysisLanguages: dbLanguages.flatMap((lang) => supportedLanguagesReversed[lang]),
|
analysisLanguages: dbLanguages.flatMap((lang) => nameToLinguist[lang]),
|
||||||
}).loadInfo();
|
}).loadInfo();
|
||||||
// The analysis counts LoC in all languages. We need to
|
// The analysis counts LoC in all languages. We need to
|
||||||
// extract the languages we care about. Also, note that
|
// extract the languages we care about. Also, note that
|
||||||
// the analysis uses slightly different names for language.
|
// the analysis uses slightly different names for language.
|
||||||
const lineCounts = Object.entries(result.languages).reduce((obj, [language, { code }]) => {
|
const lineCounts = Object.entries(result.languages).reduce((obj, [language, { code }]) => {
|
||||||
const dbLanguage = supportedLanguages[language];
|
const metricsLanguage = linguistToMetrics[language];
|
||||||
if (dbLanguage && dbLanguages.includes(dbLanguage)) {
|
if (metricsLanguage && dbLanguages.includes(metricsLanguage.name)) {
|
||||||
obj[dbLanguage] = code + (obj[dbLanguage] || 0);
|
obj[metricsLanguage.prefix] = code + (obj[metricsLanguage.prefix] || 0);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
}, {});
|
}, {});
|
||||||
@@ -54,7 +78,14 @@ async function countLoc(cwd, include, exclude, dbLanguages, logger) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
logger.warning("Did not find any lines of code in database.");
|
logger.info("Could not determine the total number of lines of code in this repository. " +
|
||||||
|
"Because of this, it will not be possible to compare the number of lines " +
|
||||||
|
"of code analyzed by code scanning with the total number of lines of " +
|
||||||
|
"code in the repository. This will not affect the results produced by code " +
|
||||||
|
"scanning. If you have any questions, you can raise an issue at " +
|
||||||
|
"https://github.com/github/codeql-action/issues. Please include a link " +
|
||||||
|
"to the repository if public, or otherwise information about the code scanning " +
|
||||||
|
"workflow you are using.");
|
||||||
}
|
}
|
||||||
return lineCounts;
|
return lineCounts;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"count-loc.js","sourceRoot":"","sources":["../src/count-loc.ts"],"names":[],"mappings":";;AAAA,qDAAyC;AAIzC,4EAA4E;AAC5E,MAAM,kBAAkB,GAAG;IACzB,CAAC,EAAE,KAAK;IACR,KAAK,EAAE,KAAK;IACZ,IAAI,EAAE,IAAI;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAC1E,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;IACpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACf,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;KACjB;IACD,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC,EACD,EAAE,CACH,CAAC;AAEF;;;;;;;;;GASG;AACI,KAAK,UAAU,QAAQ,CAC5B,GAAW,EACX,OAAiB,EACjB,OAAiB,EACjB,WAAqB,EACrB,MAAc;IAEd,MAAM,MAAM,GAAG,MAAM,IAAI,wBAAM,CAAC;QAC9B,GAAG;QACH,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;QACrC,OAAO;QACP,iBAAiB,EAAE,WAAW,CAAC,OAAO,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAC3C;KACF,CAAC,CAAC,QAAQ,EAAE,CAAC;IAEd,uDAAuD;IACvD,uDAAuD;IACvD,2DAA2D;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CACxD,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,UAAU,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAClD,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;SACjD;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAA4B,CAC7B,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE;QAClC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACrC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC1D,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;SACzC;KACF;SAAM;QACL,MAAM,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC;KAC/D;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAxCD,4BAwCC"}
|
{"version":3,"file":"count-loc.js","sourceRoot":"","sources":["../src/count-loc.ts"],"names":[],"mappings":"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"}
|
||||||
13
lib/count-loc.test.js
generated
13
lib/count-loc.test.js
generated
@@ -13,20 +13,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
const ava_1 = __importDefault(require("ava"));
|
const ava_1 = __importDefault(require("ava"));
|
||||||
const count_loc_1 = require("./count-loc");
|
const count_loc_1 = require("./count-loc");
|
||||||
|
const languages_1 = require("./languages");
|
||||||
const logging_1 = require("./logging");
|
const logging_1 = require("./logging");
|
||||||
const testing_utils_1 = require("./testing-utils");
|
const testing_utils_1 = require("./testing-utils");
|
||||||
testing_utils_1.setupTests(ava_1.default);
|
testing_utils_1.setupTests(ava_1.default);
|
||||||
ava_1.default("ensure lines of code works for cpp and js", async (t) => {
|
ava_1.default("ensure lines of code works for cpp and js", async (t) => {
|
||||||
const results = await count_loc_1.countLoc(path.join(__dirname, "../tests/multi-language-repo"), [], [], ["cpp", "js"], logging_1.getRunnerLogger(true));
|
const results = await count_loc_1.countLoc(path.join(__dirname, "../tests/multi-language-repo"), [], [], [languages_1.Language.cpp, languages_1.Language.javascript], logging_1.getRunnerLogger(true));
|
||||||
t.deepEqual(results, {
|
t.deepEqual(results, {
|
||||||
cpp: 6,
|
cpp: 6,
|
||||||
js: 3,
|
js: 3,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
ava_1.default("ensure lines of code can handle undefined language", async (t) => {
|
ava_1.default("ensure lines of code can handle undefined language", async (t) => {
|
||||||
const results = await count_loc_1.countLoc(path.join(__dirname, "../tests/multi-language-repo"), [], [], ["rb", "py", "hucairz"], logging_1.getRunnerLogger(true));
|
const results = await count_loc_1.countLoc(path.join(__dirname, "../tests/multi-language-repo"), [], [], [languages_1.Language.javascript, languages_1.Language.python, "hucairz"], logging_1.getRunnerLogger(true));
|
||||||
t.deepEqual(results, {
|
t.deepEqual(results, {
|
||||||
rb: 6,
|
js: 3,
|
||||||
py: 5,
|
py: 5,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -37,15 +38,15 @@ ava_1.default("ensure lines of code can handle empty languages", async (t) => {
|
|||||||
ava_1.default("ensure lines of code can handle includes", async (t) => {
|
ava_1.default("ensure lines of code can handle includes", async (t) => {
|
||||||
// note that "**" is always included. The includes are for extra
|
// note that "**" is always included. The includes are for extra
|
||||||
// directories outside the normal structure.
|
// directories outside the normal structure.
|
||||||
const results = await count_loc_1.countLoc(path.join(__dirname, "../tests/multi-language-repo"), ["../../src/testdata"], [], ["js"], logging_1.getRunnerLogger(true));
|
const results = await count_loc_1.countLoc(path.join(__dirname, "../tests/multi-language-repo"), ["../../src/testdata"], [], [languages_1.Language.javascript], logging_1.getRunnerLogger(true));
|
||||||
t.deepEqual(results, {
|
t.deepEqual(results, {
|
||||||
js: 15,
|
js: 15,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
ava_1.default("ensure lines of code can handle exclude", async (t) => {
|
ava_1.default("ensure lines of code can handle exclude", async (t) => {
|
||||||
const results = await count_loc_1.countLoc(path.join(__dirname, "../tests/multi-language-repo"), [], ["**/*.py"], ["rb", "py"], logging_1.getRunnerLogger(true));
|
const results = await count_loc_1.countLoc(path.join(__dirname, "../tests/multi-language-repo"), [], ["**/*.py"], [languages_1.Language.javascript, languages_1.Language.python], logging_1.getRunnerLogger(true));
|
||||||
t.deepEqual(results, {
|
t.deepEqual(results, {
|
||||||
rb: 6,
|
js: 3,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
//# sourceMappingURL=count-loc.test.js.map
|
//# sourceMappingURL=count-loc.test.js.map
|
||||||
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"count-loc.test.js","sourceRoot":"","sources":["../src/count-loc.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA6B;AAE7B,8CAAuB;AAEvB,2CAAuC;AACvC,uCAA4C;AAC5C,mDAA6C;AAE7C,0BAAU,CAAC,aAAI,CAAC,CAAC;AAEjB,aAAI,CAAC,2CAA2C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5D,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,EAAE,EACF,EAAE,EACF,CAAC,KAAK,EAAE,IAAI,CAAC,EACb,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;QACnB,GAAG,EAAE,CAAC;QACN,EAAE,EAAE,CAAC;KACN,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,oDAAoD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrE,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,EAAE,EACF,EAAE,EACF,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,EACvB,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;QACnB,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC;KACN,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,iDAAiD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClE,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,EAAE,EACF,EAAE,EACF,EAAE,EACF,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,0CAA0C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC3D,gEAAgE;IAChE,4CAA4C;IAC5C,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,CAAC,oBAAoB,CAAC,EACtB,EAAE,EACF,CAAC,IAAI,CAAC,EACN,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;QACnB,EAAE,EAAE,EAAE;KACP,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,yCAAyC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1D,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,EAAE,EACF,CAAC,SAAS,CAAC,EACX,CAAC,IAAI,EAAE,IAAI,CAAC,EACZ,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;QACnB,EAAE,EAAE,CAAC;KACN,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
{"version":3,"file":"count-loc.test.js","sourceRoot":"","sources":["../src/count-loc.test.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA6B;AAE7B,8CAAuB;AAEvB,2CAAuC;AACvC,2CAAuC;AACvC,uCAA4C;AAC5C,mDAA6C;AAE7C,0BAAU,CAAC,aAAI,CAAC,CAAC;AAEjB,aAAI,CAAC,2CAA2C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5D,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,EAAE,EACF,EAAE,EACF,CAAC,oBAAQ,CAAC,GAAG,EAAE,oBAAQ,CAAC,UAAU,CAAC,EACnC,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;QACnB,GAAG,EAAE,CAAC;QACN,EAAE,EAAE,CAAC;KACN,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,oDAAoD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrE,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,EAAE,EACF,EAAE,EACF,CAAC,oBAAQ,CAAC,UAAU,EAAE,oBAAQ,CAAC,MAAM,EAAE,SAAqB,CAAC,EAC7D,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;QACnB,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC;KACN,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,iDAAiD,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClE,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,EAAE,EACF,EAAE,EACF,EAAE,EACF,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,0CAA0C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC3D,gEAAgE;IAChE,4CAA4C;IAC5C,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,CAAC,oBAAoB,CAAC,EACtB,EAAE,EACF,CAAC,oBAAQ,CAAC,UAAU,CAAC,EACrB,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;QACnB,EAAE,EAAE,EAAE;KACP,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,aAAI,CAAC,yCAAyC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1D,MAAM,OAAO,GAAG,MAAM,oBAAQ,CAC5B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,8BAA8B,CAAC,EACpD,EAAE,EACF,CAAC,SAAS,CAAC,EACX,CAAC,oBAAQ,CAAC,UAAU,EAAE,oBAAQ,CAAC,MAAM,CAAC,EACtC,yBAAe,CAAC,IAAI,CAAC,CACtB,CAAC;IAEF,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE;QACnB,EAAE,EAAE,CAAC;KACN,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"bundleVersion": "codeql-bundle-20210430"
|
"bundleVersion": "codeql-bundle-20210503"
|
||||||
}
|
}
|
||||||
|
|||||||
8
lib/fingerprints.js
generated
8
lib/fingerprints.js
generated
@@ -160,14 +160,14 @@ function resolveUriToFile(location, artifacts, checkoutPath, logger) {
|
|||||||
location.index < 0 ||
|
location.index < 0 ||
|
||||||
location.index >= artifacts.length ||
|
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`);
|
logger.debug(`Ignoring location as index "${location.index}" is invalid`);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
location = artifacts[location.index].location;
|
location = artifacts[location.index].location;
|
||||||
}
|
}
|
||||||
// Get the URI and decode
|
// 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`);
|
logger.debug(`Ignoring location as URI "${location.uri}" is invalid`);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
let uri = decodeURIComponent(location.uri);
|
let uri = decodeURIComponent(location.uri);
|
||||||
@@ -197,6 +197,10 @@ function resolveUriToFile(location, artifacts, checkoutPath, logger) {
|
|||||||
logger.debug(`Unable to compute fingerprint for non-existent file: ${uri}`);
|
logger.debug(`Unable to compute fingerprint for non-existent file: ${uri}`);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
if (fs.statSync(uri).isDirectory()) {
|
||||||
|
logger.debug(`Unable to compute fingerprint for directory: ${uri}`);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
||||||
exports.resolveUriToFile = resolveUriToFile;
|
exports.resolveUriToFile = resolveUriToFile;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
4
lib/fingerprints.test.js
generated
4
lib/fingerprints.test.js
generated
@@ -145,6 +145,10 @@ ava_1.default("resolveUriToFile", (t) => {
|
|||||||
// Invalid indexes are discarded
|
// Invalid indexes are discarded
|
||||||
t.is(testResolveUriToFile(undefined, 1, [filepath]), undefined);
|
t.is(testResolveUriToFile(undefined, 1, [filepath]), undefined);
|
||||||
t.is(testResolveUriToFile(undefined, "0", [filepath]), undefined);
|
t.is(testResolveUriToFile(undefined, "0", [filepath]), undefined);
|
||||||
|
// Directories are discarded
|
||||||
|
const dirpath = __dirname;
|
||||||
|
t.is(testResolveUriToFile(dirpath, undefined, []), undefined);
|
||||||
|
t.is(testResolveUriToFile(`file://${dirpath}`, undefined, []), undefined);
|
||||||
});
|
});
|
||||||
ava_1.default("addFingerprints", (t) => {
|
ava_1.default("addFingerprints", (t) => {
|
||||||
// Run an end-to-end test on a test file
|
// Run an end-to-end test on a test file
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
2
lib/runner.js
generated
2
lib/runner.js
generated
@@ -150,7 +150,7 @@ program
|
|||||||
const shEnvFile = path.join(config.tempDir, "codeql-env.sh");
|
const shEnvFile = path.join(config.tempDir, "codeql-env.sh");
|
||||||
const shEnvFileContents = Object.entries(tracerConfig.env)
|
const shEnvFileContents = Object.entries(tracerConfig.env)
|
||||||
// Some vars contain ${LIB} that we do not want to be expanded when executing this script
|
// Some vars contain ${LIB} that we do not want to be expanded when executing this script
|
||||||
.map(([key, value]) => `export ${key}="${value.replace(/\$/g, "\\$")}"`)
|
.map(([key, value]) => `export ${key}='${value.replace(/'/g, "'\"'\"'")}'`)
|
||||||
.join("\n");
|
.join("\n");
|
||||||
fs.writeFileSync(shEnvFile, shEnvFileContents);
|
fs.writeFileSync(shEnvFile, shEnvFileContents);
|
||||||
logger.info(`\nCodeQL environment output to "${jsonEnvFile}" and "${shEnvFile}". ` +
|
logger.info(`\nCodeQL environment output to "${jsonEnvFile}" and "${shEnvFile}". ` +
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -44,23 +44,23 @@ test("status report fields and search path setting", async (t) => {
|
|||||||
sarifFile,
|
sarifFile,
|
||||||
JSON.stringify({
|
JSON.stringify({
|
||||||
runs: [
|
runs: [
|
||||||
// variant 1 uses metricId
|
// variant 1 uses ruleId
|
||||||
{
|
{
|
||||||
properties: {
|
properties: {
|
||||||
metricResults: [
|
metricResults: [
|
||||||
{
|
{
|
||||||
metricId: `${language}/summary/lines-of-code`,
|
ruleId: `${language}/summary/lines-of-code`,
|
||||||
value: 123,
|
value: 123,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// variant 2 uses metric.id
|
// variant 2 uses rule.id
|
||||||
{
|
{
|
||||||
properties: {
|
properties: {
|
||||||
metricResults: [
|
metricResults: [
|
||||||
{
|
{
|
||||||
metric: {
|
rule: {
|
||||||
id: `${language}/summary/lines-of-code`,
|
id: `${language}/summary/lines-of-code`,
|
||||||
},
|
},
|
||||||
value: 123,
|
value: 123,
|
||||||
@@ -166,21 +166,21 @@ test("status report fields and search path setting", async (t) => {
|
|||||||
const sarif = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
const sarif = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
||||||
t.deepEqual(sarif.runs[0].properties.metricResults, [
|
t.deepEqual(sarif.runs[0].properties.metricResults, [
|
||||||
{
|
{
|
||||||
metricId: `${lang}/summary/lines-of-code`,
|
ruleId: `${lang}/summary/lines-of-code`,
|
||||||
value: 123,
|
value: 123,
|
||||||
baseline: lineCount,
|
baseline: lineCount,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
t.deepEqual(sarif.runs[1].properties.metricResults, [
|
t.deepEqual(sarif.runs[1].properties.metricResults, [
|
||||||
{
|
{
|
||||||
metric: {
|
rule: {
|
||||||
id: `${lang}/summary/lines-of-code`,
|
id: `${lang}/summary/lines-of-code`,
|
||||||
},
|
},
|
||||||
value: 123,
|
value: 123,
|
||||||
baseline: lineCount,
|
baseline: lineCount,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
// when the metric doesn't exists, it should not be added
|
// when the rule doesn't exists, it should not be added
|
||||||
t.deepEqual(sarif.runs[2].properties.metricResults, []);
|
t.deepEqual(sarif.runs[2].properties.metricResults, []);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import * as toolrunner from "@actions/exec/lib/toolrunner";
|
|||||||
import * as analysisPaths from "./analysis-paths";
|
import * as analysisPaths from "./analysis-paths";
|
||||||
import { getCodeQL } from "./codeql";
|
import { getCodeQL } from "./codeql";
|
||||||
import * as configUtils from "./config-utils";
|
import * as configUtils from "./config-utils";
|
||||||
import { countLoc } from "./count-loc";
|
import { IdPrefixes, countLoc } from "./count-loc";
|
||||||
import { isScannedLanguage, Language } from "./languages";
|
import { isScannedLanguage, Language } from "./languages";
|
||||||
import { Logger } from "./logging";
|
import { Logger } from "./logging";
|
||||||
import * as sharedEnv from "./shared-environment";
|
import * as sharedEnv from "./shared-environment";
|
||||||
@@ -288,23 +288,23 @@ export async function runAnalyze(
|
|||||||
async function injectLinesOfCode(
|
async function injectLinesOfCode(
|
||||||
sarifFile: string,
|
sarifFile: string,
|
||||||
language: string,
|
language: string,
|
||||||
locPromise: Promise<Record<string, number>>
|
locPromise: Promise<Partial<Record<IdPrefixes, number>>>
|
||||||
) {
|
) {
|
||||||
const lineCounts = await locPromise;
|
const lineCounts = await locPromise;
|
||||||
if (language in lineCounts) {
|
if (language in lineCounts) {
|
||||||
const sarif = JSON.parse(fs.readFileSync(sarifFile, "utf8"));
|
const sarif = JSON.parse(fs.readFileSync(sarifFile, "utf8"));
|
||||||
if (Array.isArray(sarif.runs)) {
|
if (Array.isArray(sarif.runs)) {
|
||||||
for (const run of sarif.runs) {
|
for (const run of sarif.runs) {
|
||||||
const metricId = `${language}/summary/lines-of-code`;
|
const ruleId = `${language}/summary/lines-of-code`;
|
||||||
run.properties = run.properties || {};
|
run.properties = run.properties || {};
|
||||||
run.properties.metricResults = run.properties.metricResults || [];
|
run.properties.metricResults = run.properties.metricResults || [];
|
||||||
const metric = run.properties.metricResults.find(
|
const rule = run.properties.metricResults.find(
|
||||||
// the metric id can be in either of two places
|
// the rule id can be in either of two places
|
||||||
(m) => m.metricId === metricId || m.metric?.id === metricId
|
(r) => r.ruleId === ruleId || r.rule?.id === ruleId
|
||||||
);
|
);
|
||||||
// only add the baseline value if the metric already exists
|
// only add the baseline value if the rule already exists
|
||||||
if (metric) {
|
if (rule) {
|
||||||
metric.baseline = lineCounts[language];
|
rule.baseline = lineCounts[language];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -684,6 +684,9 @@ function getCodeQLForCmd(cmd: string): CodeQL {
|
|||||||
"--sarif-multicause-markdown",
|
"--sarif-multicause-markdown",
|
||||||
`--output=${sarifFile}`,
|
`--output=${sarifFile}`,
|
||||||
addSnippetsFlag,
|
addSnippetsFlag,
|
||||||
|
// Enable progress verbosity so we log each query as it's interpreted. This aids debugging
|
||||||
|
// when interpretation takes a while for one of the queries being analyzed.
|
||||||
|
"-v",
|
||||||
...getExtraOptionsFromEnv(["database", "analyze"]),
|
...getExtraOptionsFromEnv(["database", "analyze"]),
|
||||||
];
|
];
|
||||||
if (extraSearchPath !== undefined) {
|
if (extraSearchPath !== undefined) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import * as path from "path";
|
|||||||
import test from "ava";
|
import test from "ava";
|
||||||
|
|
||||||
import { countLoc } from "./count-loc";
|
import { countLoc } from "./count-loc";
|
||||||
|
import { Language } from "./languages";
|
||||||
import { getRunnerLogger } from "./logging";
|
import { getRunnerLogger } from "./logging";
|
||||||
import { setupTests } from "./testing-utils";
|
import { setupTests } from "./testing-utils";
|
||||||
|
|
||||||
@@ -13,7 +14,7 @@ test("ensure lines of code works for cpp and js", async (t) => {
|
|||||||
path.join(__dirname, "../tests/multi-language-repo"),
|
path.join(__dirname, "../tests/multi-language-repo"),
|
||||||
[],
|
[],
|
||||||
[],
|
[],
|
||||||
["cpp", "js"],
|
[Language.cpp, Language.javascript],
|
||||||
getRunnerLogger(true)
|
getRunnerLogger(true)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -28,12 +29,12 @@ test("ensure lines of code can handle undefined language", async (t) => {
|
|||||||
path.join(__dirname, "../tests/multi-language-repo"),
|
path.join(__dirname, "../tests/multi-language-repo"),
|
||||||
[],
|
[],
|
||||||
[],
|
[],
|
||||||
["rb", "py", "hucairz"],
|
[Language.javascript, Language.python, "hucairz" as Language],
|
||||||
getRunnerLogger(true)
|
getRunnerLogger(true)
|
||||||
);
|
);
|
||||||
|
|
||||||
t.deepEqual(results, {
|
t.deepEqual(results, {
|
||||||
rb: 6,
|
js: 3,
|
||||||
py: 5,
|
py: 5,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -57,7 +58,7 @@ test("ensure lines of code can handle includes", async (t) => {
|
|||||||
path.join(__dirname, "../tests/multi-language-repo"),
|
path.join(__dirname, "../tests/multi-language-repo"),
|
||||||
["../../src/testdata"],
|
["../../src/testdata"],
|
||||||
[],
|
[],
|
||||||
["js"],
|
[Language.javascript],
|
||||||
getRunnerLogger(true)
|
getRunnerLogger(true)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -71,11 +72,11 @@ test("ensure lines of code can handle exclude", async (t) => {
|
|||||||
path.join(__dirname, "../tests/multi-language-repo"),
|
path.join(__dirname, "../tests/multi-language-repo"),
|
||||||
[],
|
[],
|
||||||
["**/*.py"],
|
["**/*.py"],
|
||||||
["rb", "py"],
|
[Language.javascript, Language.python],
|
||||||
getRunnerLogger(true)
|
getRunnerLogger(true)
|
||||||
);
|
);
|
||||||
|
|
||||||
t.deepEqual(results, {
|
t.deepEqual(results, {
|
||||||
rb: 6,
|
js: 3,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,29 +1,59 @@
|
|||||||
import { LocDir } from "github-linguist";
|
import { LocDir } from "github-linguist";
|
||||||
|
|
||||||
|
import { Language } from "./languages";
|
||||||
import { Logger } from "./logging";
|
import { Logger } from "./logging";
|
||||||
|
|
||||||
// Map from linguist language names to language prefixes used in our metrics
|
// Language IDs used by codeql when specifying its metrics.
|
||||||
const supportedLanguages = {
|
export type IdPrefixes = "cpp" | "cs" | "go" | "java" | "js" | "py" | "rb";
|
||||||
c: "cpp",
|
|
||||||
"c++": "cpp",
|
// Map from linguist language names to language prefixes used in the action and codeql
|
||||||
"c#": "cs",
|
const linguistToMetrics: Record<
|
||||||
go: "go",
|
string,
|
||||||
java: "java",
|
{ name: Language; prefix: IdPrefixes }
|
||||||
javascript: "js",
|
> = {
|
||||||
python: "py",
|
c: {
|
||||||
ruby: "rb",
|
name: Language.cpp,
|
||||||
typescript: "js",
|
prefix: "cpp",
|
||||||
|
},
|
||||||
|
"c++": {
|
||||||
|
name: Language.cpp,
|
||||||
|
prefix: "cpp",
|
||||||
|
},
|
||||||
|
"c#": {
|
||||||
|
name: Language.csharp,
|
||||||
|
prefix: "cs",
|
||||||
|
},
|
||||||
|
go: {
|
||||||
|
name: Language.go,
|
||||||
|
prefix: "go",
|
||||||
|
},
|
||||||
|
java: {
|
||||||
|
name: Language.java,
|
||||||
|
prefix: "java",
|
||||||
|
},
|
||||||
|
javascript: {
|
||||||
|
name: Language.javascript,
|
||||||
|
prefix: "js",
|
||||||
|
},
|
||||||
|
python: {
|
||||||
|
name: Language.python,
|
||||||
|
prefix: "py",
|
||||||
|
},
|
||||||
|
typescript: {
|
||||||
|
name: Language.javascript,
|
||||||
|
prefix: "js",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const supportedLanguagesReversed = Object.entries(supportedLanguages).reduce(
|
const nameToLinguist = Object.entries(linguistToMetrics).reduce(
|
||||||
(obj, [key, value]) => {
|
(obj, [key, { name: action }]) => {
|
||||||
if (!obj[value]) {
|
if (!obj[action]) {
|
||||||
obj[value] = [];
|
obj[action] = [];
|
||||||
}
|
}
|
||||||
obj[value].push(key);
|
obj[action].push(key);
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
{}
|
{} as Record<Language, string[]>
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,16 +70,14 @@ export async function countLoc(
|
|||||||
cwd: string,
|
cwd: string,
|
||||||
include: string[],
|
include: string[],
|
||||||
exclude: string[],
|
exclude: string[],
|
||||||
dbLanguages: string[],
|
dbLanguages: Language[],
|
||||||
logger: Logger
|
logger: Logger
|
||||||
): Promise<Record<string, number>> {
|
): Promise<Partial<Record<IdPrefixes, number>>> {
|
||||||
const result = await new LocDir({
|
const result = await new LocDir({
|
||||||
cwd,
|
cwd,
|
||||||
include: ["**"].concat(include || []),
|
include: ["**"].concat(include || []),
|
||||||
exclude,
|
exclude,
|
||||||
analysisLanguages: dbLanguages.flatMap(
|
analysisLanguages: dbLanguages.flatMap((lang) => nameToLinguist[lang]),
|
||||||
(lang) => supportedLanguagesReversed[lang]
|
|
||||||
),
|
|
||||||
}).loadInfo();
|
}).loadInfo();
|
||||||
|
|
||||||
// The analysis counts LoC in all languages. We need to
|
// The analysis counts LoC in all languages. We need to
|
||||||
@@ -57,13 +85,13 @@ export async function countLoc(
|
|||||||
// the analysis uses slightly different names for language.
|
// the analysis uses slightly different names for language.
|
||||||
const lineCounts = Object.entries(result.languages).reduce(
|
const lineCounts = Object.entries(result.languages).reduce(
|
||||||
(obj, [language, { code }]) => {
|
(obj, [language, { code }]) => {
|
||||||
const dbLanguage = supportedLanguages[language];
|
const metricsLanguage = linguistToMetrics[language];
|
||||||
if (dbLanguage && dbLanguages.includes(dbLanguage)) {
|
if (metricsLanguage && dbLanguages.includes(metricsLanguage.name)) {
|
||||||
obj[dbLanguage] = code + (obj[dbLanguage] || 0);
|
obj[metricsLanguage.prefix] = code + (obj[metricsLanguage.prefix] || 0);
|
||||||
}
|
}
|
||||||
return obj;
|
return obj;
|
||||||
},
|
},
|
||||||
{} as Record<string, number>
|
{} as Record<IdPrefixes, number>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (Object.keys(lineCounts).length) {
|
if (Object.keys(lineCounts).length) {
|
||||||
@@ -72,7 +100,16 @@ export async function countLoc(
|
|||||||
logger.debug(` ${language}: ${count}`);
|
logger.debug(` ${language}: ${count}`);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.warning("Did not find any lines of code in database.");
|
logger.info(
|
||||||
|
"Could not determine the total number of lines of code in this repository. " +
|
||||||
|
"Because of this, it will not be possible to compare the number of lines " +
|
||||||
|
"of code analyzed by code scanning with the total number of lines of " +
|
||||||
|
"code in the repository. This will not affect the results produced by code " +
|
||||||
|
"scanning. If you have any questions, you can raise an issue at " +
|
||||||
|
"https://github.com/github/codeql-action/issues. Please include a link " +
|
||||||
|
"to the repository if public, or otherwise information about the code scanning " +
|
||||||
|
"workflow you are using."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return lineCounts;
|
return lineCounts;
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"bundleVersion": "codeql-bundle-20210430"
|
"bundleVersion": "codeql-bundle-20210503"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -163,6 +163,11 @@ test("resolveUriToFile", (t) => {
|
|||||||
// Invalid indexes are discarded
|
// Invalid indexes are discarded
|
||||||
t.is(testResolveUriToFile(undefined, 1, [filepath]), undefined);
|
t.is(testResolveUriToFile(undefined, 1, [filepath]), undefined);
|
||||||
t.is(testResolveUriToFile(undefined, "0", [filepath]), undefined);
|
t.is(testResolveUriToFile(undefined, "0", [filepath]), undefined);
|
||||||
|
|
||||||
|
// Directories are discarded
|
||||||
|
const dirpath = __dirname;
|
||||||
|
t.is(testResolveUriToFile(dirpath, undefined, []), undefined);
|
||||||
|
t.is(testResolveUriToFile(`file://${dirpath}`, undefined, []), undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("addFingerprints", (t) => {
|
test("addFingerprints", (t) => {
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ export function resolveUriToFile(
|
|||||||
location.index >= artifacts.length ||
|
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`);
|
logger.debug(`Ignoring location as index "${location.index}" is invalid`);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
location = artifacts[location.index].location;
|
location = artifacts[location.index].location;
|
||||||
@@ -188,7 +188,7 @@ export function resolveUriToFile(
|
|||||||
|
|
||||||
// Get the URI and decode
|
// 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`);
|
logger.debug(`Ignoring location as URI "${location.uri}" is invalid`);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
let uri = decodeURIComponent(location.uri);
|
let uri = decodeURIComponent(location.uri);
|
||||||
@@ -227,6 +227,11 @@ export function resolveUriToFile(
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fs.statSync(uri).isDirectory()) {
|
||||||
|
logger.debug(`Unable to compute fingerprint for directory: ${uri}`);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -249,7 +249,8 @@ program
|
|||||||
const shEnvFileContents = Object.entries(tracerConfig.env)
|
const shEnvFileContents = Object.entries(tracerConfig.env)
|
||||||
// Some vars contain ${LIB} that we do not want to be expanded when executing this script
|
// Some vars contain ${LIB} that we do not want to be expanded when executing this script
|
||||||
.map(
|
.map(
|
||||||
([key, value]) => `export ${key}="${value.replace(/\$/g, "\\$")}"`
|
([key, value]) =>
|
||||||
|
`export ${key}='${value.replace(/'/g, "'\"'\"'")}'`
|
||||||
)
|
)
|
||||||
.join("\n");
|
.join("\n");
|
||||||
fs.writeFileSync(shEnvFile, shEnvFileContents);
|
fs.writeFileSync(shEnvFile, shEnvFileContents);
|
||||||
|
|||||||
Reference in New Issue
Block a user