mirror of
https://github.com/github/codeql-action.git
synced 2025-12-30 03:00:13 +08:00
Merge main into update-actions-github.
This commit is contained in:
@@ -386,9 +386,9 @@ test("Default queries are used", async (t) => {
|
||||
*/
|
||||
function queriesToResolvedQueryForm(queries: string[]) {
|
||||
const dummyResolvedQueries = {};
|
||||
queries.forEach((q) => {
|
||||
for (const q of queries) {
|
||||
dummyResolvedQueries[q] = {};
|
||||
});
|
||||
}
|
||||
return {
|
||||
byLanguage: {
|
||||
javascript: dummyResolvedQueries,
|
||||
|
||||
@@ -875,28 +875,28 @@ async function loadConfig(
|
||||
if (!(parsedYAML[PATHS_IGNORE_PROPERTY] instanceof Array)) {
|
||||
throw new Error(getPathsIgnoreInvalid(configFile));
|
||||
}
|
||||
parsedYAML[PATHS_IGNORE_PROPERTY]!.forEach((path) => {
|
||||
for (const path of parsedYAML[PATHS_IGNORE_PROPERTY]!) {
|
||||
if (typeof path !== "string" || path === "") {
|
||||
throw new Error(getPathsIgnoreInvalid(configFile));
|
||||
}
|
||||
pathsIgnore.push(
|
||||
validateAndSanitisePath(path, PATHS_IGNORE_PROPERTY, configFile, logger)
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (PATHS_PROPERTY in parsedYAML) {
|
||||
if (!(parsedYAML[PATHS_PROPERTY] instanceof Array)) {
|
||||
throw new Error(getPathsInvalid(configFile));
|
||||
}
|
||||
parsedYAML[PATHS_PROPERTY]!.forEach((path) => {
|
||||
for (const path of parsedYAML[PATHS_PROPERTY]!) {
|
||||
if (typeof path !== "string" || path === "") {
|
||||
throw new Error(getPathsInvalid(configFile));
|
||||
}
|
||||
paths.push(
|
||||
validateAndSanitisePath(path, PATHS_PROPERTY, configFile, logger)
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// The list of queries should not be empty for any language. If it is then
|
||||
|
||||
@@ -276,14 +276,16 @@ export function addFingerprints(
|
||||
}
|
||||
|
||||
// Now hash each file that was found
|
||||
Object.entries(callbacksByFile).forEach(([filepath, callbacks]) => {
|
||||
for (const [filepath, callbacks] of Object.entries(callbacksByFile)) {
|
||||
// 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));
|
||||
for (const c of Object.values(callbacks)) {
|
||||
c(lineNumber, hash);
|
||||
}
|
||||
};
|
||||
const fileContents = fs.readFileSync(filepath).toString();
|
||||
hash(teeCallback, fileContents);
|
||||
});
|
||||
}
|
||||
|
||||
return JSON.stringify(sarif);
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ interface InitSuccessStatusReport extends actionsUtil.StatusReportBase {
|
||||
paths_ignore: string;
|
||||
// Commas-separated list of languages where the default queries are disabled
|
||||
disable_default_queries: string;
|
||||
// Comma-separated list of queries sources, from the 'queries' config field
|
||||
// Comma-separated list of queries sources, from the 'queries' config field or workflow input
|
||||
queries: string;
|
||||
}
|
||||
|
||||
@@ -44,9 +44,20 @@ async function sendSuccessStatusReport(
|
||||
]
|
||||
? languages
|
||||
: "";
|
||||
const queries = (config.originalUserInput.queries || [])
|
||||
.map((q) => q.uses)
|
||||
.join(",");
|
||||
|
||||
const queries: string[] = [];
|
||||
let queriesInput = actionsUtil.getOptionalInput("queries")?.trim();
|
||||
if (queriesInput === undefined || queriesInput.startsWith("+")) {
|
||||
queries.push(
|
||||
...(config.originalUserInput.queries || []).map((q) => q.uses)
|
||||
);
|
||||
}
|
||||
if (queriesInput !== undefined) {
|
||||
queriesInput = queriesInput.startsWith("+")
|
||||
? queriesInput.substr(1)
|
||||
: queriesInput;
|
||||
queries.push(...queriesInput.split(","));
|
||||
}
|
||||
|
||||
const statusReport: InitSuccessStatusReport = {
|
||||
...statusReportBase,
|
||||
@@ -55,7 +66,7 @@ async function sendSuccessStatusReport(
|
||||
paths,
|
||||
paths_ignore: pathsIgnore,
|
||||
disable_default_queries: disableDefaultQueries,
|
||||
queries,
|
||||
queries: queries.join(","),
|
||||
};
|
||||
|
||||
await actionsUtil.sendStatusReport(statusReport);
|
||||
@@ -130,9 +141,9 @@ async function run() {
|
||||
|
||||
const tracerConfig = await runInit(codeql, config);
|
||||
if (tracerConfig !== undefined) {
|
||||
Object.entries(tracerConfig.env).forEach(([key, value]) =>
|
||||
core.exportVariable(key, value)
|
||||
);
|
||||
for (const [key, value] of Object.entries(tracerConfig.env)) {
|
||||
core.exportVariable(key, value);
|
||||
}
|
||||
|
||||
if (process.platform === "win32") {
|
||||
await injectWindowsTracer(
|
||||
|
||||
@@ -61,7 +61,9 @@ function importTracerEnvironment(config: Config) {
|
||||
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]));
|
||||
for (const key of Object.keys(env)) {
|
||||
process.env[key] = env[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -153,10 +153,13 @@ export async function upload(
|
||||
throw new Error(`Path does not exist: ${sarifPath}`);
|
||||
}
|
||||
if (fs.lstatSync(sarifPath).isDirectory()) {
|
||||
fs.readdirSync(sarifPath)
|
||||
const paths = fs
|
||||
.readdirSync(sarifPath)
|
||||
.filter((f) => f.endsWith(".sarif"))
|
||||
.map((f) => path.resolve(sarifPath, f))
|
||||
.forEach((f) => sarifFiles.push(f));
|
||||
.map((f) => path.resolve(sarifPath, f));
|
||||
for (const path of paths) {
|
||||
sarifFiles.push(path);
|
||||
}
|
||||
if (sarifFiles.length === 0) {
|
||||
throw new Error(`No SARIF files found to upload in "${sarifPath}".`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user