Skip to content

Commit 0b8f137

Browse files
committed
Fix legacy SARIF categories for CQ in default setup
1 parent f7ede16 commit 0b8f137

File tree

9 files changed

+145
-5
lines changed

9 files changed

+145
-5
lines changed

lib/analyze.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/analyze.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/util.js

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/util.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/util.test.js

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/util.test.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/analyze.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,10 @@ export async function runQueries(
697697
let qualityAnalysisSummary: string | undefined = undefined;
698698
if (config.augmentationProperties.qualityQueriesInput !== undefined) {
699699
logger.info(`Interpreting quality results for ${language}`);
700-
const qualityCategory = automationDetailsId;
700+
const qualityCategory = util.fixCodeQualityCategory(
701+
logger,
702+
automationDetailsId,
703+
);
701704
const qualitySarifFile = path.join(
702705
sarifFolder,
703706
`${language}.quality.sarif`,

src/util.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,3 +497,45 @@ test("getCgroupCpuCountFromCpus returns undefined if the CPU file exists but is
497497
);
498498
});
499499
});
500+
501+
test("fixCodeQualityCategory", (t) => {
502+
const logger = getRunnerLogger(true);
503+
process.env["GITHUB_EVENT_NAME"] = "dynamic";
504+
505+
// Categories that should get adjusted.
506+
t.is(util.fixCodeQualityCategory(logger, "/language:c#"), "/language:csharp");
507+
t.is(util.fixCodeQualityCategory(logger, "/language:cpp"), "/language:c-cpp");
508+
t.is(util.fixCodeQualityCategory(logger, "/language:c"), "/language:c-cpp");
509+
t.is(
510+
util.fixCodeQualityCategory(logger, "/language:java"),
511+
"/language:java-kotlin",
512+
);
513+
t.is(
514+
util.fixCodeQualityCategory(logger, "/language:javascript"),
515+
"/language:javascript-typescript",
516+
);
517+
t.is(
518+
util.fixCodeQualityCategory(logger, "/language:typescript"),
519+
"/language:javascript-typescript",
520+
);
521+
t.is(
522+
util.fixCodeQualityCategory(logger, "/language:kotlin"),
523+
"/language:java-kotlin",
524+
);
525+
526+
// Categories that should not get adjusted.
527+
t.is(
528+
util.fixCodeQualityCategory(logger, "/language:csharp"),
529+
"/language:csharp",
530+
);
531+
t.is(util.fixCodeQualityCategory(logger, "/language:go"), "/language:go");
532+
t.is(
533+
util.fixCodeQualityCategory(logger, "/language:actions"),
534+
"/language:actions",
535+
);
536+
537+
// Other cases.
538+
t.is(util.fixCodeQualityCategory(logger, undefined), undefined);
539+
t.is(util.fixCodeQualityCategory(logger, "random string"), "random string");
540+
t.is(util.fixCodeQualityCategory(logger, "kotlin"), "kotlin");
541+
});

src/util.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import type { Config, Pack } from "./config-utils";
1818
import { EnvVar } from "./environment";
1919
import { Language } from "./languages";
2020
import { Logger } from "./logging";
21+
import { isDefaultSetup } from "./actions-util";
2122

2223
/**
2324
* Specifies bundle versions that are known to be broken
@@ -1250,3 +1251,44 @@ export async function isBinaryAccessible(
12501251
return false;
12511252
}
12521253
}
1254+
1255+
/** Adjusts the category string for a Code Quality SARIF file if an "old"
1256+
* category identifier is used by Default Setup.
1257+
*/
1258+
export function fixCodeQualityCategory(
1259+
logger: Logger,
1260+
category?: string,
1261+
): string | undefined {
1262+
// A mapping from old categories to new ones.
1263+
const qualityCategoryMapping: Record<string, string> = {
1264+
"c#": "csharp",
1265+
cpp: "c-cpp",
1266+
c: "c-cpp",
1267+
"c++": "c-cpp",
1268+
java: "java-kotlin",
1269+
javascript: "javascript-typescript",
1270+
typescript: "javascript-typescript",
1271+
kotlin: "java-kotlin",
1272+
};
1273+
1274+
// The `category` should always be set by Default Setup. We perform this check
1275+
// to avoid potential issues if Code Quality supports Advanced Setup in the future
1276+
// and before this workaround is removed.
1277+
if (
1278+
category !== undefined &&
1279+
isDefaultSetup() &&
1280+
category.startsWith("/language:")
1281+
) {
1282+
const language = category.substring("/language:".length);
1283+
const mappedLanguage = qualityCategoryMapping[language];
1284+
if (mappedLanguage) {
1285+
const newCategory = `/language:${mappedLanguage}`;
1286+
logger.info(
1287+
`Adjusted category for Code Quality from '${category}' to '${newCategory}'.`,
1288+
);
1289+
return newCategory;
1290+
}
1291+
}
1292+
1293+
return category;
1294+
}

0 commit comments

Comments
 (0)