mirror of
https://github.com/github/codeql-action.git
synced 2025-12-24 08:10:06 +08:00
Use resolve extractor when finding autobuild scripts
This commit is contained in:
53
lib/codeql.js
generated
53
lib/codeql.js
generated
@@ -174,6 +174,7 @@ function setCodeQL(partialCodeql) {
|
|||||||
databasePrintBaseline: resolveFunction(partialCodeql, "databasePrintBaseline"),
|
databasePrintBaseline: resolveFunction(partialCodeql, "databasePrintBaseline"),
|
||||||
databaseExportDiagnostics: resolveFunction(partialCodeql, "databaseExportDiagnostics"),
|
databaseExportDiagnostics: resolveFunction(partialCodeql, "databaseExportDiagnostics"),
|
||||||
diagnosticsExport: resolveFunction(partialCodeql, "diagnosticsExport"),
|
diagnosticsExport: resolveFunction(partialCodeql, "diagnosticsExport"),
|
||||||
|
resolveExtractor: resolveFunction(partialCodeql, "resolveExtractor"),
|
||||||
};
|
};
|
||||||
return cachedCodeQL;
|
return cachedCodeQL;
|
||||||
}
|
}
|
||||||
@@ -269,10 +270,7 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
|||||||
], { stdin: externalRepositoryToken });
|
], { stdin: externalRepositoryToken });
|
||||||
},
|
},
|
||||||
async runAutobuild(language) {
|
async runAutobuild(language) {
|
||||||
const cmdName = process.platform === "win32" ? "autobuild.cmd" : "autobuild.sh";
|
const autobuildCmd = path.join(await this.resolveExtractor(language), "tools", process.platform === "win32" ? "autobuild.cmd" : "autobuild.sh");
|
||||||
// The autobuilder for Swift is located in the experimental/ directory.
|
|
||||||
const possibleExperimentalDir = language === languages_1.Language.swift ? "experimental" : "";
|
|
||||||
const autobuildCmd = path.join(path.dirname(cmd), possibleExperimentalDir, language, "tools", cmdName);
|
|
||||||
// Update JAVA_TOOL_OPTIONS to contain '-Dhttp.keepAlive=false'
|
// Update JAVA_TOOL_OPTIONS to contain '-Dhttp.keepAlive=false'
|
||||||
// This is because of an issue with Azure pipelines timing out connections after 4 minutes
|
// This is because of an issue with Azure pipelines timing out connections after 4 minutes
|
||||||
// and Maven not properly handling closed connections
|
// and Maven not properly handling closed connections
|
||||||
@@ -301,31 +299,9 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
|||||||
},
|
},
|
||||||
async extractScannedLanguage(config, language) {
|
async extractScannedLanguage(config, language) {
|
||||||
const databasePath = util.getCodeQLDatabasePath(config, language);
|
const databasePath = util.getCodeQLDatabasePath(config, language);
|
||||||
// Get extractor location
|
|
||||||
//
|
|
||||||
// Request it using `format=json` so we don't need to strip the trailing new line generated by
|
|
||||||
// the CLI.
|
|
||||||
let extractorPath = "";
|
|
||||||
await new toolrunner.ToolRunner(cmd, [
|
|
||||||
"resolve",
|
|
||||||
"extractor",
|
|
||||||
"--format=json",
|
|
||||||
`--language=${language}`,
|
|
||||||
...getExtraOptionsFromEnv(["resolve", "extractor"]),
|
|
||||||
], {
|
|
||||||
silent: true,
|
|
||||||
listeners: {
|
|
||||||
stdout: (data) => {
|
|
||||||
extractorPath += data.toString();
|
|
||||||
},
|
|
||||||
stderr: (data) => {
|
|
||||||
process.stderr.write(data);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}).exec();
|
|
||||||
// Set trace command
|
// Set trace command
|
||||||
const ext = process.platform === "win32" ? ".cmd" : ".sh";
|
const ext = process.platform === "win32" ? ".cmd" : ".sh";
|
||||||
const traceCommand = path.resolve(JSON.parse(extractorPath), "tools", `autobuild${ext}`);
|
const traceCommand = path.resolve(await this.resolveExtractor(language), "tools", `autobuild${ext}`);
|
||||||
// Run trace command
|
// Run trace command
|
||||||
await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)(cmd, [
|
await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)(cmd, [
|
||||||
"database",
|
"database",
|
||||||
@@ -581,6 +557,29 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
|||||||
}
|
}
|
||||||
await new toolrunner.ToolRunner(cmd, args).exec();
|
await new toolrunner.ToolRunner(cmd, args).exec();
|
||||||
},
|
},
|
||||||
|
async resolveExtractor(language) {
|
||||||
|
// Request it using `format=json` so we don't need to strip the trailing new line generated by
|
||||||
|
// the CLI.
|
||||||
|
let extractorPath = "";
|
||||||
|
await new toolrunner.ToolRunner(cmd, [
|
||||||
|
"resolve",
|
||||||
|
"extractor",
|
||||||
|
"--format=json",
|
||||||
|
`--language=${language}`,
|
||||||
|
...getExtraOptionsFromEnv(["resolve", "extractor"]),
|
||||||
|
], {
|
||||||
|
silent: true,
|
||||||
|
listeners: {
|
||||||
|
stdout: (data) => {
|
||||||
|
extractorPath += data.toString();
|
||||||
|
},
|
||||||
|
stderr: (data) => {
|
||||||
|
process.stderr.write(data);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}).exec();
|
||||||
|
return JSON.parse(extractorPath);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
// To ensure that status reports include the CodeQL CLI version wherever
|
// To ensure that status reports include the CodeQL CLI version wherever
|
||||||
// possible, we want to call getVersion(), which populates the version value
|
// possible, we want to call getVersion(), which populates the version value
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -196,6 +196,8 @@ export interface CodeQL {
|
|||||||
config: Config,
|
config: Config,
|
||||||
features: FeatureEnablement
|
features: FeatureEnablement
|
||||||
): Promise<void>;
|
): Promise<void>;
|
||||||
|
/** Get the location of an extractor for the specified language. */
|
||||||
|
resolveExtractor(language: Language): Promise<string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ResolveLanguagesOutput {
|
export interface ResolveLanguagesOutput {
|
||||||
@@ -418,6 +420,7 @@ export function setCodeQL(partialCodeql: Partial<CodeQL>): CodeQL {
|
|||||||
"databaseExportDiagnostics"
|
"databaseExportDiagnostics"
|
||||||
),
|
),
|
||||||
diagnosticsExport: resolveFunction(partialCodeql, "diagnosticsExport"),
|
diagnosticsExport: resolveFunction(partialCodeql, "diagnosticsExport"),
|
||||||
|
resolveExtractor: resolveFunction(partialCodeql, "resolveExtractor"),
|
||||||
};
|
};
|
||||||
return cachedCodeQL;
|
return cachedCodeQL;
|
||||||
}
|
}
|
||||||
@@ -547,17 +550,10 @@ export async function getCodeQLForCmd(
|
|||||||
);
|
);
|
||||||
},
|
},
|
||||||
async runAutobuild(language: Language) {
|
async runAutobuild(language: Language) {
|
||||||
const cmdName =
|
|
||||||
process.platform === "win32" ? "autobuild.cmd" : "autobuild.sh";
|
|
||||||
// The autobuilder for Swift is located in the experimental/ directory.
|
|
||||||
const possibleExperimentalDir =
|
|
||||||
language === Language.swift ? "experimental" : "";
|
|
||||||
const autobuildCmd = path.join(
|
const autobuildCmd = path.join(
|
||||||
path.dirname(cmd),
|
await this.resolveExtractor(language),
|
||||||
possibleExperimentalDir,
|
|
||||||
language,
|
|
||||||
"tools",
|
"tools",
|
||||||
cmdName
|
process.platform === "win32" ? "autobuild.cmd" : "autobuild.sh"
|
||||||
);
|
);
|
||||||
|
|
||||||
// Update JAVA_TOOL_OPTIONS to contain '-Dhttp.keepAlive=false'
|
// Update JAVA_TOOL_OPTIONS to contain '-Dhttp.keepAlive=false'
|
||||||
@@ -590,37 +586,11 @@ export async function getCodeQLForCmd(
|
|||||||
},
|
},
|
||||||
async extractScannedLanguage(config: Config, language: Language) {
|
async extractScannedLanguage(config: Config, language: Language) {
|
||||||
const databasePath = util.getCodeQLDatabasePath(config, language);
|
const databasePath = util.getCodeQLDatabasePath(config, language);
|
||||||
// Get extractor location
|
|
||||||
//
|
|
||||||
// Request it using `format=json` so we don't need to strip the trailing new line generated by
|
|
||||||
// the CLI.
|
|
||||||
let extractorPath = "";
|
|
||||||
await new toolrunner.ToolRunner(
|
|
||||||
cmd,
|
|
||||||
[
|
|
||||||
"resolve",
|
|
||||||
"extractor",
|
|
||||||
"--format=json",
|
|
||||||
`--language=${language}`,
|
|
||||||
...getExtraOptionsFromEnv(["resolve", "extractor"]),
|
|
||||||
],
|
|
||||||
{
|
|
||||||
silent: true,
|
|
||||||
listeners: {
|
|
||||||
stdout: (data) => {
|
|
||||||
extractorPath += data.toString();
|
|
||||||
},
|
|
||||||
stderr: (data) => {
|
|
||||||
process.stderr.write(data);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
).exec();
|
|
||||||
|
|
||||||
// Set trace command
|
// Set trace command
|
||||||
const ext = process.platform === "win32" ? ".cmd" : ".sh";
|
const ext = process.platform === "win32" ? ".cmd" : ".sh";
|
||||||
const traceCommand = path.resolve(
|
const traceCommand = path.resolve(
|
||||||
JSON.parse(extractorPath) as string,
|
await this.resolveExtractor(language),
|
||||||
"tools",
|
"tools",
|
||||||
`autobuild${ext}`
|
`autobuild${ext}`
|
||||||
);
|
);
|
||||||
@@ -954,6 +924,33 @@ export async function getCodeQLForCmd(
|
|||||||
}
|
}
|
||||||
await new toolrunner.ToolRunner(cmd, args).exec();
|
await new toolrunner.ToolRunner(cmd, args).exec();
|
||||||
},
|
},
|
||||||
|
async resolveExtractor(language: Language): Promise<string> {
|
||||||
|
// Request it using `format=json` so we don't need to strip the trailing new line generated by
|
||||||
|
// the CLI.
|
||||||
|
let extractorPath = "";
|
||||||
|
await new toolrunner.ToolRunner(
|
||||||
|
cmd,
|
||||||
|
[
|
||||||
|
"resolve",
|
||||||
|
"extractor",
|
||||||
|
"--format=json",
|
||||||
|
`--language=${language}`,
|
||||||
|
...getExtraOptionsFromEnv(["resolve", "extractor"]),
|
||||||
|
],
|
||||||
|
{
|
||||||
|
silent: true,
|
||||||
|
listeners: {
|
||||||
|
stdout: (data) => {
|
||||||
|
extractorPath += data.toString();
|
||||||
|
},
|
||||||
|
stderr: (data) => {
|
||||||
|
process.stderr.write(data);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
).exec();
|
||||||
|
return JSON.parse(extractorPath);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
// To ensure that status reports include the CodeQL CLI version wherever
|
// To ensure that status reports include the CodeQL CLI version wherever
|
||||||
// possible, we want to call getVersion(), which populates the version value
|
// possible, we want to call getVersion(), which populates the version value
|
||||||
|
|||||||
Reference in New Issue
Block a user