Skip to content

Commit

Permalink
Showing 9 changed files with 60 additions and 8 deletions.
13 changes: 13 additions & 0 deletions lib/codeql.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/codeql.js.map

Large diffs are not rendered by default.

8 changes: 5 additions & 3 deletions lib/config-utils.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/config-utils.js.map

Large diffs are not rendered by default.

7 changes: 6 additions & 1 deletion lib/config-utils.test.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion lib/config-utils.test.js.map

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions src/codeql.ts
@@ -77,6 +77,10 @@ export interface CodeQL {
* Finalize a database using 'codeql database finalize'.
*/
finalizeDatabase(databasePath: string, threadsFlag: string): Promise<void>;
/**
* Run 'codeql resolve languages'.
*/
resolveLanguages(): Promise<ResolveLanguagesOutput>;
/**
* Run 'codeql resolve queries'.
*/
@@ -99,6 +103,10 @@ export interface CodeQL {
): Promise<string>;
}

export interface ResolveLanguagesOutput {
[language: string]: [string];
}

export interface ResolveQueriesOutput {
byLanguage: {
[language: string]: {
@@ -478,6 +486,7 @@ export function setCodeQL(partialCodeql: Partial<CodeQL>): CodeQL {
"extractScannedLanguage"
),
finalizeDatabase: resolveFunction(partialCodeql, "finalizeDatabase"),
resolveLanguages: resolveFunction(partialCodeql, "resolveLanguages"),
resolveQueries: resolveFunction(partialCodeql, "resolveQueries"),
databaseAnalyze: resolveFunction(partialCodeql, "databaseAnalyze"),
};
@@ -654,6 +663,19 @@ function getCodeQLForCmd(cmd: string): CodeQL {
errorMatchers
);
},
async resolveLanguages() {
const codeqlArgs = ["resolve", "languages", "--format=json"];
let output = "";
await new toolrunner.ToolRunner(cmd, codeqlArgs, {
listeners: {
stdout: (data: Buffer) => {
output += data.toString();
},
},
}).exec();

return JSON.parse(output);
},
async resolveQueries(
queries: string[],
extraSearchPath: string | undefined
7 changes: 6 additions & 1 deletion src/config-utils.test.ts
@@ -926,6 +926,11 @@ test("Invalid format of remote config handled correctly", async (t) => {
test("No detected languages", async (t) => {
return await util.withTmpDir(async (tmpDir) => {
mockListLanguages([]);
const codeQL = setCodeQL({
async resolveLanguages() {
return {};
},
});

try {
await configUtils.initConfig(
@@ -936,7 +941,7 @@ test("No detected languages", async (t) => {
{ owner: "github", repo: "example " },
tmpDir,
tmpDir,
getCachedCodeQL(),
codeQL,
tmpDir,
gitHubVersion,
sampleApiDetails,
5 changes: 5 additions & 0 deletions src/config-utils.ts
@@ -653,6 +653,7 @@ async function getLanguagesInRepo(
* then throw an error.
*/
async function getLanguages(
codeQL: CodeQL,
languagesInput: string | undefined,
repository: RepositoryNwo,
apiDetails: api.GitHubApiDetails,
@@ -668,6 +669,8 @@ async function getLanguages(
if (languages.length === 0) {
// Obtain languages as all languages in the repo that can be analysed
languages = await getLanguagesInRepo(repository, apiDetails, logger);
const availableLanguages = await codeQL.resolveLanguages();
languages = languages.filter((value) => value in availableLanguages);
logger.info(
`Automatically detected languages: ${JSON.stringify(languages)}`
);
@@ -754,6 +757,7 @@ export async function getDefaultConfig(
logger: Logger
): Promise<Config> {
const languages = await getLanguages(
codeQL,
languagesInput,
repository,
apiDetails,
@@ -833,6 +837,7 @@ async function loadConfig(
}

const languages = await getLanguages(
codeQL,
languagesInput,
repository,
apiDetails,

0 comments on commit 4f51b8c

Please sign in to comment.