Skip to content

Commit 90d7727

Browse files
committed
Overlay: check code-scanning features
1 parent fb77176 commit 90d7727

File tree

2 files changed

+299
-3
lines changed

2 files changed

+299
-3
lines changed

src/config-utils.test.ts

Lines changed: 261 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,6 +1202,7 @@ interface OverlayDatabaseModeTestSetup {
12021202
languages: Language[];
12031203
codeqlVersion: string;
12041204
gitRoot: string | undefined;
1205+
codeScanningConfig: configUtils.UserConfig;
12051206
}
12061207

12071208
const defaultOverlayDatabaseModeTestSetup: OverlayDatabaseModeTestSetup = {
@@ -1214,6 +1215,7 @@ const defaultOverlayDatabaseModeTestSetup: OverlayDatabaseModeTestSetup = {
12141215
languages: [Language.javascript],
12151216
codeqlVersion: "2.21.0",
12161217
gitRoot: "/some/git/root",
1218+
codeScanningConfig: {},
12171219
};
12181220

12191221
const getOverlayDatabaseModeMacro = test.macro({
@@ -1280,6 +1282,7 @@ const getOverlayDatabaseModeMacro = test.macro({
12801282
setup.languages,
12811283
tempDir, // sourceRoot
12821284
setup.buildMode,
1285+
setup.codeScanningConfig,
12831286
logger,
12841287
);
12851288

@@ -1370,7 +1373,121 @@ test(
13701373

13711374
test(
13721375
getOverlayDatabaseModeMacro,
1373-
"No overlay-base database on default branch when overall feature disabled",
1376+
"Overlay-base database on default branch when feature enabled with custom analysis",
1377+
{
1378+
languages: [Language.javascript],
1379+
features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript],
1380+
codeScanningConfig: {
1381+
packs: ["[email protected]"],
1382+
} as configUtils.UserConfig,
1383+
isDefaultBranch: true,
1384+
},
1385+
{
1386+
overlayDatabaseMode: OverlayDatabaseMode.OverlayBase,
1387+
useOverlayDatabaseCaching: true,
1388+
},
1389+
);
1390+
1391+
test(
1392+
getOverlayDatabaseModeMacro,
1393+
"Overlay-base database on default branch when code-scanning feature enabled",
1394+
{
1395+
languages: [Language.javascript],
1396+
features: [
1397+
Feature.OverlayAnalysis,
1398+
Feature.OverlayAnalysisCodeScanningJavascript,
1399+
],
1400+
isDefaultBranch: true,
1401+
},
1402+
{
1403+
overlayDatabaseMode: OverlayDatabaseMode.OverlayBase,
1404+
useOverlayDatabaseCaching: true,
1405+
},
1406+
);
1407+
1408+
test(
1409+
getOverlayDatabaseModeMacro,
1410+
"No overlay-base database on default branch when code-scanning feature enabled with disable-default-queries",
1411+
{
1412+
languages: [Language.javascript],
1413+
features: [
1414+
Feature.OverlayAnalysis,
1415+
Feature.OverlayAnalysisCodeScanningJavascript,
1416+
],
1417+
codeScanningConfig: {
1418+
"disable-default-queries": true,
1419+
} as configUtils.UserConfig,
1420+
isDefaultBranch: true,
1421+
},
1422+
{
1423+
overlayDatabaseMode: OverlayDatabaseMode.None,
1424+
useOverlayDatabaseCaching: false,
1425+
},
1426+
);
1427+
1428+
test(
1429+
getOverlayDatabaseModeMacro,
1430+
"No overlay-base database on default branch when code-scanning feature enabled with packs",
1431+
{
1432+
languages: [Language.javascript],
1433+
features: [
1434+
Feature.OverlayAnalysis,
1435+
Feature.OverlayAnalysisCodeScanningJavascript,
1436+
],
1437+
codeScanningConfig: {
1438+
packs: ["[email protected]"],
1439+
} as configUtils.UserConfig,
1440+
isDefaultBranch: true,
1441+
},
1442+
{
1443+
overlayDatabaseMode: OverlayDatabaseMode.None,
1444+
useOverlayDatabaseCaching: false,
1445+
},
1446+
);
1447+
1448+
test(
1449+
getOverlayDatabaseModeMacro,
1450+
"No overlay-base database on default branch when code-scanning feature enabled with queries",
1451+
{
1452+
languages: [Language.javascript],
1453+
features: [
1454+
Feature.OverlayAnalysis,
1455+
Feature.OverlayAnalysisCodeScanningJavascript,
1456+
],
1457+
codeScanningConfig: {
1458+
queries: [{ uses: "some-query.ql" }],
1459+
} as configUtils.UserConfig,
1460+
isDefaultBranch: true,
1461+
},
1462+
{
1463+
overlayDatabaseMode: OverlayDatabaseMode.None,
1464+
useOverlayDatabaseCaching: false,
1465+
},
1466+
);
1467+
1468+
test(
1469+
getOverlayDatabaseModeMacro,
1470+
"No overlay-base database on default branch when code-scanning feature enabled with query-filters",
1471+
{
1472+
languages: [Language.javascript],
1473+
features: [
1474+
Feature.OverlayAnalysis,
1475+
Feature.OverlayAnalysisCodeScanningJavascript,
1476+
],
1477+
codeScanningConfig: {
1478+
"query-filters": [{ include: { "security-severity": "high" } }],
1479+
} as configUtils.UserConfig,
1480+
isDefaultBranch: true,
1481+
},
1482+
{
1483+
overlayDatabaseMode: OverlayDatabaseMode.None,
1484+
useOverlayDatabaseCaching: false,
1485+
},
1486+
);
1487+
1488+
test(
1489+
getOverlayDatabaseModeMacro,
1490+
"No overlay-base database on default branch when only language-specific feature enabled",
13741491
{
13751492
languages: [Language.javascript],
13761493
features: [Feature.OverlayAnalysisJavascript],
@@ -1382,6 +1499,20 @@ test(
13821499
},
13831500
);
13841501

1502+
test(
1503+
getOverlayDatabaseModeMacro,
1504+
"No overlay-base database on default branch when only code-scanning feature enabled",
1505+
{
1506+
languages: [Language.javascript],
1507+
features: [Feature.OverlayAnalysisCodeScanningJavascript],
1508+
isDefaultBranch: true,
1509+
},
1510+
{
1511+
overlayDatabaseMode: OverlayDatabaseMode.None,
1512+
useOverlayDatabaseCaching: false,
1513+
},
1514+
);
1515+
13851516
test(
13861517
getOverlayDatabaseModeMacro,
13871518
"No overlay-base database on default branch when language-specific feature disabled",
@@ -1412,7 +1543,121 @@ test(
14121543

14131544
test(
14141545
getOverlayDatabaseModeMacro,
1415-
"No overlay analysis on PR when overall feature disabled",
1546+
"Overlay analysis on PR when feature enabled with custom analysis",
1547+
{
1548+
languages: [Language.javascript],
1549+
features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript],
1550+
codeScanningConfig: {
1551+
packs: ["[email protected]"],
1552+
} as configUtils.UserConfig,
1553+
isPullRequest: true,
1554+
},
1555+
{
1556+
overlayDatabaseMode: OverlayDatabaseMode.Overlay,
1557+
useOverlayDatabaseCaching: true,
1558+
},
1559+
);
1560+
1561+
test(
1562+
getOverlayDatabaseModeMacro,
1563+
"Overlay analysis on PR when code-scanning feature enabled",
1564+
{
1565+
languages: [Language.javascript],
1566+
features: [
1567+
Feature.OverlayAnalysis,
1568+
Feature.OverlayAnalysisCodeScanningJavascript,
1569+
],
1570+
isPullRequest: true,
1571+
},
1572+
{
1573+
overlayDatabaseMode: OverlayDatabaseMode.Overlay,
1574+
useOverlayDatabaseCaching: true,
1575+
},
1576+
);
1577+
1578+
test(
1579+
getOverlayDatabaseModeMacro,
1580+
"No overlay analysis on PR when code-scanning feature enabled with disable-default-queries",
1581+
{
1582+
languages: [Language.javascript],
1583+
features: [
1584+
Feature.OverlayAnalysis,
1585+
Feature.OverlayAnalysisCodeScanningJavascript,
1586+
],
1587+
codeScanningConfig: {
1588+
"disable-default-queries": true,
1589+
} as configUtils.UserConfig,
1590+
isPullRequest: true,
1591+
},
1592+
{
1593+
overlayDatabaseMode: OverlayDatabaseMode.None,
1594+
useOverlayDatabaseCaching: false,
1595+
},
1596+
);
1597+
1598+
test(
1599+
getOverlayDatabaseModeMacro,
1600+
"No overlay analysis on PR when code-scanning feature enabled with packs",
1601+
{
1602+
languages: [Language.javascript],
1603+
features: [
1604+
Feature.OverlayAnalysis,
1605+
Feature.OverlayAnalysisCodeScanningJavascript,
1606+
],
1607+
codeScanningConfig: {
1608+
packs: ["[email protected]"],
1609+
} as configUtils.UserConfig,
1610+
isPullRequest: true,
1611+
},
1612+
{
1613+
overlayDatabaseMode: OverlayDatabaseMode.None,
1614+
useOverlayDatabaseCaching: false,
1615+
},
1616+
);
1617+
1618+
test(
1619+
getOverlayDatabaseModeMacro,
1620+
"No overlay analysis on PR when code-scanning feature enabled with queries",
1621+
{
1622+
languages: [Language.javascript],
1623+
features: [
1624+
Feature.OverlayAnalysis,
1625+
Feature.OverlayAnalysisCodeScanningJavascript,
1626+
],
1627+
codeScanningConfig: {
1628+
queries: [{ uses: "some-query.ql" }],
1629+
} as configUtils.UserConfig,
1630+
isPullRequest: true,
1631+
},
1632+
{
1633+
overlayDatabaseMode: OverlayDatabaseMode.None,
1634+
useOverlayDatabaseCaching: false,
1635+
},
1636+
);
1637+
1638+
test(
1639+
getOverlayDatabaseModeMacro,
1640+
"No overlay analysis on PR when code-scanning feature enabled with query-filters",
1641+
{
1642+
languages: [Language.javascript],
1643+
features: [
1644+
Feature.OverlayAnalysis,
1645+
Feature.OverlayAnalysisCodeScanningJavascript,
1646+
],
1647+
codeScanningConfig: {
1648+
"query-filters": [{ include: { "security-severity": "high" } }],
1649+
} as configUtils.UserConfig,
1650+
isPullRequest: true,
1651+
},
1652+
{
1653+
overlayDatabaseMode: OverlayDatabaseMode.None,
1654+
useOverlayDatabaseCaching: false,
1655+
},
1656+
);
1657+
1658+
test(
1659+
getOverlayDatabaseModeMacro,
1660+
"No overlay analysis on PR when only language-specific feature enabled",
14161661
{
14171662
languages: [Language.javascript],
14181663
features: [Feature.OverlayAnalysisJavascript],
@@ -1424,6 +1669,20 @@ test(
14241669
},
14251670
);
14261671

1672+
test(
1673+
getOverlayDatabaseModeMacro,
1674+
"No overlay analysis on PR when only code-scanning feature enabled",
1675+
{
1676+
languages: [Language.javascript],
1677+
features: [Feature.OverlayAnalysisCodeScanningJavascript],
1678+
isPullRequest: true,
1679+
},
1680+
{
1681+
overlayDatabaseMode: OverlayDatabaseMode.None,
1682+
useOverlayDatabaseCaching: false,
1683+
},
1684+
);
1685+
14271686
test(
14281687
getOverlayDatabaseModeMacro,
14291688
"No overlay analysis on PR when language-specific feature disabled",

src/config-utils.ts

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,11 +660,25 @@ const OVERLAY_ANALYSIS_FEATURES: Record<Language, Feature> = {
660660
swift: Feature.OverlayAnalysisSwift,
661661
};
662662

663+
const OVERLAY_ANALYSIS_CODE_SCANNING_FEATURES: Record<Language, Feature> = {
664+
actions: Feature.OverlayAnalysisCodeScanningActions,
665+
cpp: Feature.OverlayAnalysisCodeScanningCpp,
666+
csharp: Feature.OverlayAnalysisCodeScanningCsharp,
667+
go: Feature.OverlayAnalysisCodeScanningGo,
668+
java: Feature.OverlayAnalysisCodeScanningJava,
669+
javascript: Feature.OverlayAnalysisCodeScanningJavascript,
670+
python: Feature.OverlayAnalysisCodeScanningPython,
671+
ruby: Feature.OverlayAnalysisCodeScanningRuby,
672+
rust: Feature.OverlayAnalysisCodeScanningRust,
673+
swift: Feature.OverlayAnalysisCodeScanningSwift,
674+
};
675+
663676
async function isOverlayAnalysisFeatureEnabled(
664677
repository: RepositoryNwo,
665678
features: FeatureEnablement,
666679
codeql: CodeQL,
667680
languages: Language[],
681+
codeScanningConfig: UserConfig,
668682
): Promise<boolean> {
669683
// TODO: Remove the repository owner check once support for overlay analysis
670684
// stabilizes, and no more backward-incompatible changes are expected.
@@ -674,14 +688,34 @@ async function isOverlayAnalysisFeatureEnabled(
674688
if (!(await features.getValue(Feature.OverlayAnalysis, codeql))) {
675689
return false;
676690
}
691+
let enableForCodeScanningOnly = false;
677692
for (const language of languages) {
678693
const feature = OVERLAY_ANALYSIS_FEATURES[language];
679694
if (feature && (await features.getValue(feature, codeql))) {
680695
continue;
681696
}
682-
// TODO: Add code-scanning feature checks here
697+
const codeScanningFeature =
698+
OVERLAY_ANALYSIS_CODE_SCANNING_FEATURES[language];
699+
if (
700+
codeScanningFeature &&
701+
(await features.getValue(codeScanningFeature, codeql))
702+
) {
703+
enableForCodeScanningOnly = true;
704+
continue;
705+
}
683706
return false;
684707
}
708+
if (enableForCodeScanningOnly) {
709+
// A code-scanning configuration runs only the (default) code-scanning suite
710+
// if the default queries are not disabled, and no packs, queries, or
711+
// query-filters are specified.
712+
return (
713+
codeScanningConfig["disable-default-queries"] !== true &&
714+
codeScanningConfig.packs === undefined &&
715+
codeScanningConfig.queries === undefined &&
716+
codeScanningConfig["query-filters"] === undefined
717+
);
718+
}
685719
return true;
686720
}
687721

@@ -713,6 +747,7 @@ export async function getOverlayDatabaseMode(
713747
languages: Language[],
714748
sourceRoot: string,
715749
buildMode: BuildMode | undefined,
750+
codeScanningConfig: UserConfig,
716751
logger: Logger,
717752
): Promise<{
718753
overlayDatabaseMode: OverlayDatabaseMode;
@@ -740,6 +775,7 @@ export async function getOverlayDatabaseMode(
740775
features,
741776
codeql,
742777
languages,
778+
codeScanningConfig,
743779
)
744780
) {
745781
if (isAnalyzingPullRequest()) {
@@ -1015,6 +1051,7 @@ export async function initConfig(inputs: InitConfigInputs): Promise<Config> {
10151051
config.languages,
10161052
inputs.sourceRoot,
10171053
config.buildMode,
1054+
generateCodeScanningConfig(userConfig, augmentationProperties),
10181055
logger,
10191056
);
10201057
logger.info(

0 commit comments

Comments
 (0)