mirror of
https://github.com/github/codeql-action.git
synced 2026-08-05 04:57:19 -05:00
Refactor resolveLanguages() to cache output according to CLI feature support
The output of `resolveLanguages()` can vary based on whether the flag `--filter-to-languages-with-queries` is included, but not all versions of the CLI support that. This makes caching a single execution problematic, so I opted to cache it based on whether it's supported. If it's supported, it's used; otherwise, it's not.
This commit is contained in:
Generated
+13
-9
@@ -151415,9 +151415,7 @@ async function getSupportedLanguageMap(codeql, logger) {
|
||||
const resolveSupportedLanguagesUsingCli = await codeql.supportsFeature(
|
||||
"builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */
|
||||
);
|
||||
const resolveResult = await codeql.resolveLanguages({
|
||||
filterToLanguagesWithQueries: resolveSupportedLanguagesUsingCli
|
||||
});
|
||||
const resolveResult = await codeql.resolveLanguages();
|
||||
if (resolveSupportedLanguagesUsingCli) {
|
||||
logger.debug(
|
||||
`The CodeQL CLI supports the following languages: ${Object.keys(resolveResult.extractors).join(", ")}`
|
||||
@@ -153931,21 +153929,27 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
||||
];
|
||||
await runCli(cmd, args);
|
||||
},
|
||||
async resolveLanguages({
|
||||
filterToLanguagesWithQueries
|
||||
} = { filterToLanguagesWithQueries: false }) {
|
||||
async resolveLanguages() {
|
||||
return getCachedOrRun(
|
||||
"resolveLanguages" /* ResolveLanguages */,
|
||||
cmd,
|
||||
() => runCliJson(cmd, [
|
||||
async () => {
|
||||
const isFilterToLanguagesWithQueriesSupported = await this.supportsFeature(
|
||||
"builtinExtractorsSpecifyDefaultQueries" /* BuiltinExtractorsSpecifyDefaultQueries */
|
||||
);
|
||||
return runCliJson(cmd, [
|
||||
"resolve",
|
||||
"languages",
|
||||
"--format=betterjson",
|
||||
"--extractor-options-verbosity=4",
|
||||
"--extractor-include-aliases",
|
||||
...filterToLanguagesWithQueries ? ["--filter-to-languages-with-queries"] : [],
|
||||
// TODO: Unconditionally include `--filter-to-languages-with-queries`
|
||||
// once CODEQL_MINIMUM_VERSION is at least v2.23.0
|
||||
// — the first version to support this flag.
|
||||
...isFilterToLanguagesWithQueriesSupported ? ["--filter-to-languages-with-queries"] : [],
|
||||
...getExtraOptionsFromEnv(["resolve", "languages"])
|
||||
]),
|
||||
]);
|
||||
},
|
||||
isResolveLanguagesOutput
|
||||
);
|
||||
},
|
||||
|
||||
+14
-14
@@ -126,9 +126,7 @@ export interface CodeQL {
|
||||
/**
|
||||
* Run 'codeql resolve languages' with '--format=betterjson'.
|
||||
*/
|
||||
resolveLanguages(options?: {
|
||||
filterToLanguagesWithQueries: boolean;
|
||||
}): Promise<ResolveLanguagesOutput>;
|
||||
resolveLanguages(): Promise<ResolveLanguagesOutput>;
|
||||
/**
|
||||
* Run 'codeql resolve build-environment'
|
||||
*/
|
||||
@@ -784,28 +782,30 @@ async function getCodeQLForCmd(
|
||||
];
|
||||
await runCli(cmd, args);
|
||||
},
|
||||
async resolveLanguages(
|
||||
{
|
||||
filterToLanguagesWithQueries,
|
||||
}: {
|
||||
filterToLanguagesWithQueries: boolean;
|
||||
} = { filterToLanguagesWithQueries: false },
|
||||
) {
|
||||
async resolveLanguages() {
|
||||
return getCachedOrRun(
|
||||
CommandCacheKey.ResolveLanguages,
|
||||
cmd,
|
||||
() =>
|
||||
runCliJson<ResolveLanguagesOutput>(cmd, [
|
||||
async () => {
|
||||
const isFilterToLanguagesWithQueriesSupported =
|
||||
await this.supportsFeature(
|
||||
ToolsFeature.BuiltinExtractorsSpecifyDefaultQueries,
|
||||
);
|
||||
return runCliJson<ResolveLanguagesOutput>(cmd, [
|
||||
"resolve",
|
||||
"languages",
|
||||
"--format=betterjson",
|
||||
"--extractor-options-verbosity=4",
|
||||
"--extractor-include-aliases",
|
||||
...(filterToLanguagesWithQueries
|
||||
// TODO: Unconditionally include `--filter-to-languages-with-queries`
|
||||
// once CODEQL_MINIMUM_VERSION is at least v2.23.0
|
||||
// — the first version to support this flag.
|
||||
...(isFilterToLanguagesWithQueriesSupported
|
||||
? ["--filter-to-languages-with-queries"]
|
||||
: []),
|
||||
...getExtraOptionsFromEnv(["resolve", "languages"]),
|
||||
]),
|
||||
]);
|
||||
},
|
||||
isResolveLanguagesOutput,
|
||||
);
|
||||
},
|
||||
|
||||
@@ -891,7 +891,7 @@ const mockRepositoryNwo = parseRepositoryNwo("owner/repo");
|
||||
extractor_root: "",
|
||||
};
|
||||
const codeQL = createStubCodeQL({
|
||||
resolveLanguages: (options) =>
|
||||
resolveLanguages: () =>
|
||||
Promise.resolve({
|
||||
aliases: {
|
||||
"c#": BuiltInLanguage.csharp,
|
||||
@@ -905,11 +905,9 @@ const mockRepositoryNwo = parseRepositoryNwo("owner/repo");
|
||||
java: [stubExtractorEntry],
|
||||
javascript: [stubExtractorEntry],
|
||||
python: [stubExtractorEntry],
|
||||
...(options?.filterToLanguagesWithQueries
|
||||
? {}
|
||||
: {
|
||||
// `html` is an extractor without default queries. It should be
|
||||
// excluded from the supported language map.
|
||||
html: [stubExtractorEntry],
|
||||
}),
|
||||
},
|
||||
}),
|
||||
});
|
||||
|
||||
+4
-6
@@ -266,9 +266,7 @@ async function getSupportedLanguageMap(
|
||||
const resolveSupportedLanguagesUsingCli = await codeql.supportsFeature(
|
||||
ToolsFeature.BuiltinExtractorsSpecifyDefaultQueries,
|
||||
);
|
||||
const resolveResult = await codeql.resolveLanguages({
|
||||
filterToLanguagesWithQueries: resolveSupportedLanguagesUsingCli,
|
||||
});
|
||||
const resolveResult = await codeql.resolveLanguages();
|
||||
if (resolveSupportedLanguagesUsingCli) {
|
||||
logger.debug(
|
||||
`The CodeQL CLI supports the following languages: ${Object.keys(resolveResult.extractors).join(", ")}`,
|
||||
@@ -277,9 +275,9 @@ async function getSupportedLanguageMap(
|
||||
const supportedLanguages: Record<string, string> = {};
|
||||
// Populate canonical language names
|
||||
for (const extractor of Object.keys(resolveResult.extractors)) {
|
||||
// If the CLI supports resolving languages with default queries, use these
|
||||
// as the set of supported languages. Otherwise, require the language to be
|
||||
// a built-in language.
|
||||
// TODO: Delete this `if` condition once CODEQL_MINIMUM_VERSION
|
||||
// is at least v2.23.0 — the first version to support the
|
||||
// BuiltinExtractorsSpecifyDefaultQueries feature.
|
||||
if (
|
||||
resolveSupportedLanguagesUsingCli ||
|
||||
BuiltInLanguage[extractor] !== undefined
|
||||
|
||||
Reference in New Issue
Block a user