Compare commits

..

12 Commits

Author SHA1 Message Date
Paolo Tranquilli 68bde559de Merge pull request #3885 from github/update-v4.35.4-803d9e8c3
Merge main into releases/v4
2026-05-07 17:52:37 +02:00
github-actions[bot] 9739ad2d18 Update changelog for v4.35.4 2026-05-07 15:21:52 +00:00
Michael B. Gale 803d9e8c3c Merge pull request #3883 from github/mbg/test/macro-wrapper
Add more strongly typed wrapper around `test.macro`
2026-05-07 14:46:34 +00:00
Michael B. Gale 0fd9c7d135 Merge pull request #3882 from github/dependabot/github_actions/dot-github/workflows/actions-minor-4a0b9de8bd
Bump ruby/setup-ruby from 1.305.0 to 1.306.0 in /.github/workflows in the actions-minor group across 1 directory
2026-05-07 14:17:36 +00:00
Michael B. Gale 922d6fb888 Use makeMacro instead of test.macro 2026-05-07 14:59:42 +01:00
Michael B. Gale df77e87896 Update test macro snippet 2026-05-07 14:59:42 +01:00
Michael B. Gale 6e3f985e4f Add wrapper for test.macro 2026-05-07 14:59:42 +01:00
Paolo Tranquilli e7a347dfb1 Merge pull request #3881 from github/update-bundle/codeql-bundle-v2.25.4
Update default bundle to 2.25.4
2026-05-07 13:41:36 +00:00
github-actions[bot] 17eabb2500 Rebuild 2026-05-07 13:23:54 +00:00
dependabot[bot] aaef09c48d Bump ruby/setup-ruby
Bumps the actions-minor group with 1 update in the /.github/workflows directory: [ruby/setup-ruby](https://github.com/ruby/setup-ruby).


Updates `ruby/setup-ruby` from 1.305.0 to 1.306.0
- [Release notes](https://github.com/ruby/setup-ruby/releases)
- [Changelog](https://github.com/ruby/setup-ruby/blob/master/release.rb)
- [Commits](https://github.com/ruby/setup-ruby/compare/0cb964fd540e0a24c900370abf38a33466142735...c4e5b1316158f92e3d49443a9d58b31d25ac0f8f)

---
updated-dependencies:
- dependency-name: ruby/setup-ruby
  dependency-version: 1.306.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 13:21:45 +00:00
github-actions[bot] ae1b9155d3 Add changelog note 2026-05-07 12:49:22 +00:00
github-actions[bot] 9f82f88f07 Update default bundle to codeql-bundle-v2.25.4 2026-05-07 12:49:13 +00:00
26 changed files with 256 additions and 370 deletions
+1 -1
View File
@@ -59,7 +59,7 @@ jobs:
use-all-platform-bundle: 'false' use-all-platform-bundle: 'false'
setup-kotlin: 'true' setup-kotlin: 'true'
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@0cb964fd540e0a24c900370abf38a33466142735 # v1.305.0 uses: ruby/setup-ruby@c4e5b1316158f92e3d49443a9d58b31d25ac0f8f # v1.306.0
with: with:
ruby-version: 2.6 ruby-version: 2.6
- name: Install Code Scanning integration - name: Install Code Scanning integration
+1 -1
View File
@@ -19,7 +19,7 @@
"scope": "javascript, typescript", "scope": "javascript, typescript",
"prefix": "testMacro", "prefix": "testMacro",
"body": [ "body": [
"const ${1:nameMacro} = test.macro({", "const ${1:nameMacro} = makeMacro({",
" exec: async (t: ExecutionContext<unknown>) => {},", " exec: async (t: ExecutionContext<unknown>) => {},",
"", "",
" title: (providedTitle = \"\") => `${2:common title} - \\${providedTitle}`,", " title: (providedTitle = \"\") => `${2:common title} - \\${providedTitle}`,",
+2 -2
View File
@@ -2,9 +2,9 @@
See the [releases page](https://github.com/github/codeql-action/releases) for the relevant changes to the CodeQL CLI and language packs. See the [releases page](https://github.com/github/codeql-action/releases) for the relevant changes to the CodeQL CLI and language packs.
## [UNRELEASED] ## 4.35.4 - 07 May 2026
No user facing changes. - Update default CodeQL bundle version to [2.25.4](https://github.com/github/codeql-action/releases/tag/codeql-bundle-v2.25.4). [#3881](https://github.com/github/codeql-action/pull/3881)
## 4.35.3 - 01 May 2026 ## 4.35.3 - 01 May 2026
+2 -2
View File
@@ -89739,8 +89739,8 @@ var path6 = __toESM(require("path"));
var semver5 = __toESM(require_semver2()); var semver5 = __toESM(require_semver2());
// src/defaults.json // src/defaults.json
var bundleVersion = "codeql-bundle-v2.25.3"; var bundleVersion = "codeql-bundle-v2.25.4";
var cliVersion = "2.25.3"; var cliVersion = "2.25.4";
// src/overlay/index.ts // src/overlay/index.ts
var fs4 = __toESM(require("fs")); var fs4 = __toESM(require("fs"));
+2 -2
View File
@@ -86226,8 +86226,8 @@ var path5 = __toESM(require("path"));
var semver5 = __toESM(require_semver2()); var semver5 = __toESM(require_semver2());
// src/defaults.json // src/defaults.json
var bundleVersion = "codeql-bundle-v2.25.3"; var bundleVersion = "codeql-bundle-v2.25.4";
var cliVersion = "2.25.3"; var cliVersion = "2.25.4";
// src/overlay/index.ts // src/overlay/index.ts
var fs3 = __toESM(require("fs")); var fs3 = __toESM(require("fs"));
+4 -4
View File
@@ -1,6 +1,6 @@
{ {
"bundleVersion": "codeql-bundle-v2.25.3", "bundleVersion": "codeql-bundle-v2.25.4",
"cliVersion": "2.25.3", "cliVersion": "2.25.4",
"priorBundleVersion": "codeql-bundle-v2.25.2", "priorBundleVersion": "codeql-bundle-v2.25.3",
"priorCliVersion": "2.25.2" "priorCliVersion": "2.25.3"
} }
+2 -2
View File
@@ -130901,8 +130901,8 @@ var path6 = __toESM(require("path"));
var semver5 = __toESM(require_semver2()); var semver5 = __toESM(require_semver2());
// src/defaults.json // src/defaults.json
var bundleVersion = "codeql-bundle-v2.25.3"; var bundleVersion = "codeql-bundle-v2.25.4";
var cliVersion = "2.25.3"; var cliVersion = "2.25.4";
// src/overlay/index.ts // src/overlay/index.ts
var fs4 = __toESM(require("fs")); var fs4 = __toESM(require("fs"));
+2 -2
View File
@@ -87279,8 +87279,8 @@ var path7 = __toESM(require("path"));
var semver5 = __toESM(require_semver2()); var semver5 = __toESM(require_semver2());
// src/defaults.json // src/defaults.json
var bundleVersion = "codeql-bundle-v2.25.3"; var bundleVersion = "codeql-bundle-v2.25.4";
var cliVersion = "2.25.3"; var cliVersion = "2.25.4";
// src/overlay/index.ts // src/overlay/index.ts
var fs4 = __toESM(require("fs")); var fs4 = __toESM(require("fs"));
+2 -2
View File
@@ -86067,8 +86067,8 @@ var path5 = __toESM(require("path"));
var semver4 = __toESM(require_semver2()); var semver4 = __toESM(require_semver2());
// src/defaults.json // src/defaults.json
var bundleVersion = "codeql-bundle-v2.25.3"; var bundleVersion = "codeql-bundle-v2.25.4";
var cliVersion = "2.25.3"; var cliVersion = "2.25.4";
// src/overlay/index.ts // src/overlay/index.ts
var fs4 = __toESM(require("fs")); var fs4 = __toESM(require("fs"));
+2 -2
View File
@@ -103064,8 +103064,8 @@ var path = __toESM(require("path"));
var semver4 = __toESM(require_semver2()); var semver4 = __toESM(require_semver2());
// src/defaults.json // src/defaults.json
var bundleVersion = "codeql-bundle-v2.25.3"; var bundleVersion = "codeql-bundle-v2.25.4";
var cliVersion = "2.25.3"; var cliVersion = "2.25.4";
// src/git-utils.ts // src/git-utils.ts
var core6 = __toESM(require_core()); var core6 = __toESM(require_core());
+2 -2
View File
@@ -89347,8 +89347,8 @@ var fs5 = __toESM(require("fs"));
var semver5 = __toESM(require_semver2()); var semver5 = __toESM(require_semver2());
// src/defaults.json // src/defaults.json
var bundleVersion = "codeql-bundle-v2.25.3"; var bundleVersion = "codeql-bundle-v2.25.4";
var cliVersion = "2.25.3"; var cliVersion = "2.25.4";
// src/overlay/index.ts // src/overlay/index.ts
var fs4 = __toESM(require("fs")); var fs4 = __toESM(require("fs"));
+2 -2
View File
@@ -89018,8 +89018,8 @@ var path5 = __toESM(require("path"));
var semver4 = __toESM(require_semver2()); var semver4 = __toESM(require_semver2());
// src/defaults.json // src/defaults.json
var bundleVersion = "codeql-bundle-v2.25.3"; var bundleVersion = "codeql-bundle-v2.25.4";
var cliVersion = "2.25.3"; var cliVersion = "2.25.4";
// src/overlay/index.ts // src/overlay/index.ts
var fs4 = __toESM(require("fs")); var fs4 = __toESM(require("fs"));
+1 -1
View File
@@ -5,7 +5,7 @@ versions:
- default - default
steps: steps:
- name: Set up Ruby - name: Set up Ruby
uses: ruby/setup-ruby@0cb964fd540e0a24c900370abf38a33466142735 # v1.305.0 uses: ruby/setup-ruby@c4e5b1316158f92e3d49443a9d58b31d25ac0f8f # v1.306.0
with: with:
ruby-version: 2.6 ruby-version: 2.6
- name: Install Code Scanning integration - name: Install Code Scanning integration
+14 -25
View File
@@ -33,6 +33,7 @@ import {
mockBundleDownloadApi, mockBundleDownloadApi,
makeVersionInfo, makeVersionInfo,
createTestConfig, createTestConfig,
makeMacro,
} from "./testing-utils"; } from "./testing-utils";
import { ToolsDownloadStatusReport } from "./tools-download"; import { ToolsDownloadStatusReport } from "./tools-download";
import * as util from "./util"; import * as util from "./util";
@@ -540,7 +541,7 @@ test.serial("getExtraOptions throws for bad content", (t) => {
}); });
// Test macro for ensuring different variants of injected augmented configurations // Test macro for ensuring different variants of injected augmented configurations
const injectedConfigMacro = test.macro({ const injectedConfigMacro = makeMacro({
exec: async ( exec: async (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
augmentationProperties: AugmentationProperties, augmentationProperties: AugmentationProperties,
@@ -590,9 +591,8 @@ const injectedConfigMacro = test.macro({
`databaseInitCluster() injected config: ${providedTitle}`, `databaseInitCluster() injected config: ${providedTitle}`,
}); });
test.serial( injectedConfigMacro.serial(
"basic", "basic",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
}, },
@@ -600,9 +600,8 @@ test.serial(
{}, {},
); );
test.serial( injectedConfigMacro.serial(
"injected packs from input", "injected packs from input",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
packsInput: ["xxx", "yyy"], packsInput: ["xxx", "yyy"],
@@ -613,9 +612,8 @@ test.serial(
}, },
); );
test.serial( injectedConfigMacro.serial(
"injected packs from input with existing packs combines", "injected packs from input with existing packs combines",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
packsInputCombines: true, packsInputCombines: true,
@@ -635,9 +633,8 @@ test.serial(
}, },
); );
test.serial( injectedConfigMacro.serial(
"injected packs from input with existing packs overrides", "injected packs from input with existing packs overrides",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
packsInput: ["xxx", "yyy"], packsInput: ["xxx", "yyy"],
@@ -655,9 +652,8 @@ test.serial(
); );
// similar, but with queries // similar, but with queries
test.serial( injectedConfigMacro.serial(
"injected queries from input", "injected queries from input",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
queriesInput: [{ uses: "xxx" }, { uses: "yyy" }], queriesInput: [{ uses: "xxx" }, { uses: "yyy" }],
@@ -675,9 +671,8 @@ test.serial(
}, },
); );
test.serial( injectedConfigMacro.serial(
"injected queries from input overrides", "injected queries from input overrides",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
queriesInput: [{ uses: "xxx" }, { uses: "yyy" }], queriesInput: [{ uses: "xxx" }, { uses: "yyy" }],
@@ -699,9 +694,8 @@ test.serial(
}, },
); );
test.serial( injectedConfigMacro.serial(
"injected queries from input combines", "injected queries from input combines",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
queriesInputCombines: true, queriesInputCombines: true,
@@ -727,9 +721,8 @@ test.serial(
}, },
); );
test.serial( injectedConfigMacro.serial(
"injected queries from input combines 2", "injected queries from input combines 2",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
queriesInputCombines: true, queriesInputCombines: true,
@@ -749,9 +742,8 @@ test.serial(
}, },
); );
test.serial( injectedConfigMacro.serial(
"injected queries and packs, but empty", "injected queries and packs, but empty",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
queriesInputCombines: true, queriesInputCombines: true,
@@ -768,9 +760,8 @@ test.serial(
{}, {},
); );
test.serial( injectedConfigMacro.serial(
"repo property queries have the highest precedence", "repo property queries have the highest precedence",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
queriesInputCombines: true, queriesInputCombines: true,
@@ -790,9 +781,8 @@ test.serial(
}, },
); );
test.serial( injectedConfigMacro.serial(
"repo property queries combines with queries input", "repo property queries combines with queries input",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
queriesInputCombines: false, queriesInputCombines: false,
@@ -817,9 +807,8 @@ test.serial(
}, },
); );
test.serial( injectedConfigMacro.serial(
"repo property queries combines everything else", "repo property queries combines everything else",
injectedConfigMacro,
{ {
...defaultAugmentationProperties, ...defaultAugmentationProperties,
queriesInputCombines: true, queriesInputCombines: true,
+60 -117
View File
@@ -34,6 +34,7 @@ import {
LoggedMessage, LoggedMessage,
mockCodeQLVersion, mockCodeQLVersion,
createTestConfig, createTestConfig,
makeMacro,
} from "./testing-utils"; } from "./testing-utils";
import { import {
GitHubVariant, GitHubVariant,
@@ -1034,10 +1035,9 @@ const defaultOverlayDatabaseModeTestSetup: OverlayDatabaseModeTestSetup = {
repositoryProperties: {}, repositoryProperties: {},
}; };
const checkOverlayEnablementMacro = test.macro({ const checkOverlayEnablementMacro = makeMacro({
exec: async ( exec: async (
t: ExecutionContext, t: ExecutionContext,
_title: string,
setupOverrides: Partial<OverlayDatabaseModeTestSetup>, setupOverrides: Partial<OverlayDatabaseModeTestSetup>,
expected: expected:
| { | {
@@ -1131,11 +1131,10 @@ const checkOverlayEnablementMacro = test.macro({
} }
}); });
}, },
title: (_, title) => `checkOverlayEnablement: ${title}`, title: (title) => `checkOverlayEnablement: ${title}`,
}); });
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Environment variable override - Overlay", "Environment variable override - Overlay",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1146,8 +1145,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Environment variable override - OverlayBase", "Environment variable override - OverlayBase",
{ {
overlayDatabaseEnvVar: "overlay-base", overlayDatabaseEnvVar: "overlay-base",
@@ -1158,8 +1156,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Environment variable override - None", "Environment variable override - None",
{ {
overlayDatabaseEnvVar: "none", overlayDatabaseEnvVar: "none",
@@ -1169,8 +1166,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Ignore invalid environment variable", "Ignore invalid environment variable",
{ {
overlayDatabaseEnvVar: "invalid-mode", overlayDatabaseEnvVar: "invalid-mode",
@@ -1180,8 +1176,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Ignore feature flag when analyzing non-default branch", "Ignore feature flag when analyzing non-default branch",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1192,8 +1187,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay-base database on default branch when feature enabled", "Overlay-base database on default branch when feature enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1206,8 +1200,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay-base database on default branch when feature enabled with custom analysis", "Overlay-base database on default branch when feature enabled with custom analysis",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1223,8 +1216,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay-base database on default branch when code-scanning feature enabled", "Overlay-base database on default branch when code-scanning feature enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1240,8 +1232,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch if runner disk space is too low", "No overlay-base database on default branch if runner disk space is too low",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1260,8 +1251,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch if we can't determine runner disk space", "No overlay-base database on default branch if we can't determine runner disk space",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1277,8 +1267,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay-base database on default branch if runner disk space is too low and skip resource checks flag is enabled", "Overlay-base database on default branch if runner disk space is too low and skip resource checks flag is enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1299,8 +1288,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch if runner disk space is below v2 limit and v2 resource checks enabled", "No overlay-base database on default branch if runner disk space is below v2 limit and v2 resource checks enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1320,8 +1308,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay-base database on default branch if runner disk space is between v2 and v1 limits and v2 resource checks enabled", "Overlay-base database on default branch if runner disk space is between v2 and v1 limits and v2 resource checks enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1342,8 +1329,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch if runner disk space is between v2 and v1 limits and v2 resource checks not enabled", "No overlay-base database on default branch if runner disk space is between v2 and v1 limits and v2 resource checks not enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1362,8 +1348,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch if memory flag is too low", "No overlay-base database on default branch if memory flag is too low",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1379,8 +1364,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay-base database on default branch if memory flag is too low but CodeQL >= 2.24.3", "Overlay-base database on default branch if memory flag is too low but CodeQL >= 2.24.3",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1398,8 +1382,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay-base database on default branch if memory flag is too low and skip resource checks flag is enabled", "Overlay-base database on default branch if memory flag is too low and skip resource checks flag is enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1417,8 +1400,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch when cached status indicates previous failure", "No overlay-base database on default branch when cached status indicates previous failure",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1435,8 +1417,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR when cached status indicates previous failure", "No overlay analysis on PR when cached status indicates previous failure",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1453,8 +1434,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch when code-scanning feature enabled with disable-default-queries", "No overlay-base database on default branch when code-scanning feature enabled with disable-default-queries",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1472,8 +1452,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch when code-scanning feature enabled with packs", "No overlay-base database on default branch when code-scanning feature enabled with packs",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1491,8 +1470,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch when code-scanning feature enabled with queries", "No overlay-base database on default branch when code-scanning feature enabled with queries",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1510,8 +1488,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch when code-scanning feature enabled with query-filters", "No overlay-base database on default branch when code-scanning feature enabled with query-filters",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1529,8 +1506,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch when only language-specific feature enabled", "No overlay-base database on default branch when only language-specific feature enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1542,8 +1518,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch when only code-scanning feature enabled", "No overlay-base database on default branch when only code-scanning feature enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1555,8 +1530,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay-base database on default branch when language-specific feature disabled", "No overlay-base database on default branch when language-specific feature disabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1568,8 +1542,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay analysis on PR when feature enabled", "Overlay analysis on PR when feature enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1582,8 +1555,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay analysis on PR when feature enabled with custom analysis", "Overlay analysis on PR when feature enabled with custom analysis",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1599,8 +1571,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay analysis on PR when code-scanning feature enabled", "Overlay analysis on PR when code-scanning feature enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1616,8 +1587,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR if runner disk space is too low", "No overlay analysis on PR if runner disk space is too low",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1636,8 +1606,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay analysis on PR if runner disk space is too low and skip resource checks flag is enabled", "Overlay analysis on PR if runner disk space is too low and skip resource checks flag is enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1658,8 +1627,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR if we can't determine runner disk space", "No overlay analysis on PR if we can't determine runner disk space",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1675,8 +1643,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR if memory flag is too low", "No overlay analysis on PR if memory flag is too low",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1692,8 +1659,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay analysis on PR if memory flag is too low but CodeQL >= 2.24.3", "Overlay analysis on PR if memory flag is too low but CodeQL >= 2.24.3",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1711,8 +1677,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay analysis on PR if memory flag is too low and skip resource checks flag is enabled", "Overlay analysis on PR if memory flag is too low and skip resource checks flag is enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1730,8 +1695,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR when code-scanning feature enabled with disable-default-queries", "No overlay analysis on PR when code-scanning feature enabled with disable-default-queries",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1749,8 +1713,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR when code-scanning feature enabled with packs", "No overlay analysis on PR when code-scanning feature enabled with packs",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1768,8 +1731,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR when code-scanning feature enabled with queries", "No overlay analysis on PR when code-scanning feature enabled with queries",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1787,8 +1749,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR when code-scanning feature enabled with query-filters", "No overlay analysis on PR when code-scanning feature enabled with query-filters",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1806,8 +1767,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR when only language-specific feature enabled", "No overlay analysis on PR when only language-specific feature enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1819,8 +1779,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR when only code-scanning feature enabled", "No overlay analysis on PR when only code-scanning feature enabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1832,8 +1791,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis on PR when language-specific feature disabled", "No overlay analysis on PR when language-specific feature disabled",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1845,8 +1803,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay PR analysis by env", "Overlay PR analysis by env",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1857,8 +1814,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay PR analysis by env on a runner with low disk space", "Overlay PR analysis by env on a runner with low disk space",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1870,8 +1826,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay PR analysis by feature flag", "Overlay PR analysis by feature flag",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1884,8 +1839,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Fallback due to autobuild with traced language", "Fallback due to autobuild with traced language",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1897,8 +1851,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Fallback due to no build mode with traced language", "Fallback due to no build mode with traced language",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1910,8 +1863,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Fallback due to old CodeQL version", "Fallback due to old CodeQL version",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1922,8 +1874,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Fallback due to missing git root", "Fallback due to missing git root",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1934,8 +1885,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Fallback due to old git version with submodules", "Fallback due to old git version with submodules",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1947,8 +1897,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Fallback when git version cannot be determined and repo has submodules", "Fallback when git version cannot be determined and repo has submodules",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1960,8 +1909,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay enabled when git version cannot be determined and repo has no submodules", "Overlay enabled when git version cannot be determined and repo has no submodules",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -1974,8 +1922,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay when disabled via repository property", "No overlay when disabled via repository property",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -1990,8 +1937,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Overlay not disabled when repository property is false", "Overlay not disabled when repository property is false",
{ {
languages: [BuiltInLanguage.javascript], languages: [BuiltInLanguage.javascript],
@@ -2007,8 +1953,7 @@ test.serial(
}, },
); );
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"Environment variable override takes precedence over repository property", "Environment variable override takes precedence over repository property",
{ {
overlayDatabaseEnvVar: "overlay", overlayDatabaseEnvVar: "overlay",
@@ -2024,8 +1969,7 @@ test.serial(
// Exercise language-specific overlay analysis features code paths // Exercise language-specific overlay analysis features code paths
for (const language in BuiltInLanguage) { for (const language in BuiltInLanguage) {
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
`Check default overlay analysis feature for ${language}`, `Check default overlay analysis feature for ${language}`,
{ {
languages: [language], languages: [language],
@@ -2042,8 +1986,7 @@ for (const language in BuiltInLanguage) {
// overlay analysis enabled, even when the base overlay feature flag is on. // overlay analysis enabled, even when the base overlay feature flag is on.
// Using swift here as it doesn't currently have overlay support — update this if // Using swift here as it doesn't currently have overlay support — update this if
// swift gains overlay support. // swift gains overlay support.
test.serial( checkOverlayEnablementMacro.serial(
checkOverlayEnablementMacro,
"No overlay analysis for language without per-language overlay feature flag", "No overlay analysis for language without per-language overlay feature flag",
{ {
languages: [BuiltInLanguage.swift], languages: [BuiltInLanguage.swift],
+48 -65
View File
@@ -7,6 +7,7 @@ import {
checkExpectedLogMessages, checkExpectedLogMessages,
getRecordingLogger, getRecordingLogger,
LoggedMessage, LoggedMessage,
makeMacro,
} from "../testing-utils"; } from "../testing-utils";
import { ConfigurationError, prettyPrintPack } from "../util"; import { ConfigurationError, prettyPrintPack } from "../util";
@@ -15,7 +16,7 @@ import * as dbConfig from "./db-config";
/** /**
* Test macro for ensuring the packs block is valid * Test macro for ensuring the packs block is valid
*/ */
const parsePacksMacro = test.macro({ const parsePacksMacro = makeMacro({
exec: ( exec: (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
packsInput: string, packsInput: string,
@@ -33,7 +34,7 @@ const parsePacksMacro = test.macro({
/** /**
* Test macro for testing when the packs block is invalid * Test macro for testing when the packs block is invalid
*/ */
const parsePacksErrorMacro = test.macro({ const parsePacksErrorMacro = makeMacro({
exec: ( exec: (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
packsInput: string, packsInput: string,
@@ -49,34 +50,32 @@ const parsePacksErrorMacro = test.macro({
/** /**
* Test macro for testing when the packs block is invalid * Test macro for testing when the packs block is invalid
*/ */
const invalidPackNameMacro = test.macro({ const invalidPackNameMacro = makeMacro({
exec: (t: ExecutionContext, name: string) => exec: (t: ExecutionContext, arg: string) =>
parsePacksErrorMacro.exec( parsePacksErrorMacro.fn(
t, t,
name, arg,
[BuiltInLanguage.cpp], [BuiltInLanguage.cpp],
new RegExp(`^"${name}" is not a valid pack$`), new RegExp(`^"${arg}" is not a valid pack$`),
), ),
title: (_providedTitle: string | undefined, arg: string | undefined) => title: (_providedTitle: string | undefined, arg: string | undefined) =>
`Invalid pack string: ${arg}`, `Invalid pack string: ${arg}`,
}); });
test("no packs", parsePacksMacro, "", [], undefined); parsePacksMacro("no packs", "", [], undefined);
test("two packs", parsePacksMacro, "a/b,c/d@1.2.3", [BuiltInLanguage.cpp], { parsePacksMacro("two packs", "a/b,c/d@1.2.3", [BuiltInLanguage.cpp], {
[BuiltInLanguage.cpp]: ["a/b", "c/d@1.2.3"], [BuiltInLanguage.cpp]: ["a/b", "c/d@1.2.3"],
}); });
test( parsePacksMacro(
"two packs with spaces", "two packs with spaces",
parsePacksMacro,
" a/b , c/d@1.2.3 ", " a/b , c/d@1.2.3 ",
[BuiltInLanguage.cpp], [BuiltInLanguage.cpp],
{ {
[BuiltInLanguage.cpp]: ["a/b", "c/d@1.2.3"], [BuiltInLanguage.cpp]: ["a/b", "c/d@1.2.3"],
}, },
); );
test( parsePacksErrorMacro(
"two packs with language", "two packs with language",
parsePacksErrorMacro,
"a/b,c/d@1.2.3", "a/b,c/d@1.2.3",
[BuiltInLanguage.cpp, BuiltInLanguage.java], [BuiltInLanguage.cpp, BuiltInLanguage.java],
new RegExp( new RegExp(
@@ -85,9 +84,8 @@ test(
), ),
); );
test( parsePacksMacro(
"packs with other valid names", "packs with other valid names",
parsePacksMacro,
[ [
// ranges are ok // ranges are ok
"c/d@1.0", "c/d@1.0",
@@ -123,23 +121,23 @@ test(
}, },
); );
test(invalidPackNameMacro, "c"); // all packs require at least a scope and a name invalidPackNameMacro.test("c"); // all packs require at least a scope and a name
test(invalidPackNameMacro, "c-/d"); invalidPackNameMacro.test("c-/d");
test(invalidPackNameMacro, "-c/d"); invalidPackNameMacro.test("-c/d");
test(invalidPackNameMacro, "c/d_d"); invalidPackNameMacro.test("c/d_d");
test(invalidPackNameMacro, "c/d@@"); invalidPackNameMacro.test("c/d@@");
test(invalidPackNameMacro, "c/d@1.0.0:"); invalidPackNameMacro.test("c/d@1.0.0:");
test(invalidPackNameMacro, "c/d:"); invalidPackNameMacro.test("c/d:");
test(invalidPackNameMacro, "c/d:/a"); invalidPackNameMacro.test("c/d:/a");
test(invalidPackNameMacro, "@1.0.0:a"); invalidPackNameMacro.test("@1.0.0:a");
test(invalidPackNameMacro, "c/d@../a"); invalidPackNameMacro.test("c/d@../a");
test(invalidPackNameMacro, "c/d@b/../a"); invalidPackNameMacro.test("c/d@b/../a");
test(invalidPackNameMacro, "c/d:z@1"); invalidPackNameMacro.test("c/d:z@1");
/** /**
* Test macro for pretty printing pack specs * Test macro for pretty printing pack specs
*/ */
const packSpecPrettyPrintingMacro = test.macro({ const packSpecPrettyPrintingMacro = makeMacro({
exec: (t: ExecutionContext, packStr: string, packObj: dbConfig.Pack) => { exec: (t: ExecutionContext, packStr: string, packObj: dbConfig.Pack) => {
const parsed = dbConfig.parsePacksSpecification(packStr); const parsed = dbConfig.parsePacksSpecification(packStr);
t.deepEqual(parsed, packObj, "parsed pack spec is correct"); t.deepEqual(parsed, packObj, "parsed pack spec is correct");
@@ -163,36 +161,35 @@ const packSpecPrettyPrintingMacro = test.macro({
) => `Prettyprint pack spec: '${packStr}'`, ) => `Prettyprint pack spec: '${packStr}'`,
}); });
test(packSpecPrettyPrintingMacro, "a/b", { packSpecPrettyPrintingMacro.test("a/b", {
name: "a/b", name: "a/b",
version: undefined, version: undefined,
path: undefined, path: undefined,
}); });
test(packSpecPrettyPrintingMacro, "a/b@~1.2.3", { packSpecPrettyPrintingMacro.test("a/b@~1.2.3", {
name: "a/b", name: "a/b",
version: "~1.2.3", version: "~1.2.3",
path: undefined, path: undefined,
}); });
test(packSpecPrettyPrintingMacro, "a/b@~1.2.3:abc/def", { packSpecPrettyPrintingMacro.test("a/b@~1.2.3:abc/def", {
name: "a/b", name: "a/b",
version: "~1.2.3", version: "~1.2.3",
path: "abc/def", path: "abc/def",
}); });
test(packSpecPrettyPrintingMacro, "a/b:abc/def", { packSpecPrettyPrintingMacro.test("a/b:abc/def", {
name: "a/b", name: "a/b",
version: undefined, version: undefined,
path: "abc/def", path: "abc/def",
}); });
test(packSpecPrettyPrintingMacro, " a/b:abc/def ", { packSpecPrettyPrintingMacro.test(" a/b:abc/def ", {
name: "a/b", name: "a/b",
version: undefined, version: undefined,
path: "abc/def", path: "abc/def",
}); });
const calculateAugmentationMacro = test.macro({ const calculateAugmentationMacro = makeMacro({
exec: async ( exec: async (
t: ExecutionContext, t: ExecutionContext,
_title: string,
rawPacksInput: string | undefined, rawPacksInput: string | undefined,
rawQueriesInput: string | undefined, rawQueriesInput: string | undefined,
languages: Language[], languages: Language[],
@@ -207,11 +204,10 @@ const calculateAugmentationMacro = test.macro({
); );
t.deepEqual(actualAugmentationProperties, expectedAugmentationProperties); t.deepEqual(actualAugmentationProperties, expectedAugmentationProperties);
}, },
title: (_, title) => `Calculate Augmentation: ${title}`, title: (title) => `Calculate Augmentation: ${title}`,
}); });
test( calculateAugmentationMacro(
calculateAugmentationMacro,
"All empty", "All empty",
undefined, undefined,
undefined, undefined,
@@ -222,8 +218,7 @@ test(
}, },
); );
test( calculateAugmentationMacro(
calculateAugmentationMacro,
"With queries", "With queries",
undefined, undefined,
" a, b , c, d", " a, b , c, d",
@@ -235,8 +230,7 @@ test(
}, },
); );
test( calculateAugmentationMacro(
calculateAugmentationMacro,
"With queries combining", "With queries combining",
undefined, undefined,
" + a, b , c, d ", " + a, b , c, d ",
@@ -249,8 +243,7 @@ test(
}, },
); );
test( calculateAugmentationMacro(
calculateAugmentationMacro,
"With packs", "With packs",
" codeql/a , codeql/b , codeql/c , codeql/d ", " codeql/a , codeql/b , codeql/c , codeql/d ",
undefined, undefined,
@@ -262,8 +255,7 @@ test(
}, },
); );
test( calculateAugmentationMacro(
calculateAugmentationMacro,
"With packs combining", "With packs combining",
" + codeql/a, codeql/b, codeql/c, codeql/d", " + codeql/a, codeql/b, codeql/c, codeql/d",
undefined, undefined,
@@ -276,8 +268,7 @@ test(
}, },
); );
test( calculateAugmentationMacro(
calculateAugmentationMacro,
"With repo property queries", "With repo property queries",
undefined, undefined,
undefined, undefined,
@@ -294,8 +285,7 @@ test(
}, },
); );
test( calculateAugmentationMacro(
calculateAugmentationMacro,
"With repo property queries combining", "With repo property queries combining",
undefined, undefined,
undefined, undefined,
@@ -312,10 +302,9 @@ test(
}, },
); );
const calculateAugmentationErrorMacro = test.macro({ const calculateAugmentationErrorMacro = makeMacro({
exec: async ( exec: async (
t: ExecutionContext, t: ExecutionContext,
_title: string,
rawPacksInput: string | undefined, rawPacksInput: string | undefined,
rawQueriesInput: string | undefined, rawQueriesInput: string | undefined,
languages: Language[], languages: Language[],
@@ -333,11 +322,10 @@ const calculateAugmentationErrorMacro = test.macro({
{ message: expectedError }, { message: expectedError },
); );
}, },
title: (_, title) => `Calculate Augmentation Error: ${title}`, title: (title) => `Calculate Augmentation Error: ${title}`,
}); });
test( calculateAugmentationErrorMacro(
calculateAugmentationErrorMacro,
"Plus (+) with nothing else (queries)", "Plus (+) with nothing else (queries)",
undefined, undefined,
" + ", " + ",
@@ -346,8 +334,7 @@ test(
/The workflow property "queries" is invalid/, /The workflow property "queries" is invalid/,
); );
test( calculateAugmentationErrorMacro(
calculateAugmentationErrorMacro,
"Plus (+) with nothing else (packs)", "Plus (+) with nothing else (packs)",
" + ", " + ",
undefined, undefined,
@@ -356,8 +343,7 @@ test(
/The workflow property "packs" is invalid/, /The workflow property "packs" is invalid/,
); );
test( calculateAugmentationErrorMacro(
calculateAugmentationErrorMacro,
"Plus (+) with nothing else (repo property queries)", "Plus (+) with nothing else (repo property queries)",
undefined, undefined,
undefined, undefined,
@@ -368,8 +354,7 @@ test(
/The repository property "github-codeql-extra-queries" is invalid/, /The repository property "github-codeql-extra-queries" is invalid/,
); );
test( calculateAugmentationErrorMacro(
calculateAugmentationErrorMacro,
"Packs input with multiple languages", "Packs input with multiple languages",
" + a/b, c/d ", " + a/b, c/d ",
undefined, undefined,
@@ -378,8 +363,7 @@ test(
/Cannot specify a 'packs' input in a multi-language analysis/, /Cannot specify a 'packs' input in a multi-language analysis/,
); );
test( calculateAugmentationErrorMacro(
calculateAugmentationErrorMacro,
"Packs input with no languages", "Packs input with no languages",
" + a/b, c/d ", " + a/b, c/d ",
undefined, undefined,
@@ -388,8 +372,7 @@ test(
/No languages specified/, /No languages specified/,
); );
test( calculateAugmentationErrorMacro(
calculateAugmentationErrorMacro,
"Invalid packs", "Invalid packs",
" a-pack-without-a-scope ", " a-pack-without-a-scope ",
undefined, undefined,
+4 -4
View File
@@ -1,6 +1,6 @@
{ {
"bundleVersion": "codeql-bundle-v2.25.3", "bundleVersion": "codeql-bundle-v2.25.4",
"cliVersion": "2.25.3", "cliVersion": "2.25.4",
"priorBundleVersion": "codeql-bundle-v2.25.2", "priorBundleVersion": "codeql-bundle-v2.25.3",
"priorCliVersion": "2.25.2" "priorCliVersion": "2.25.3"
} }
+12 -21
View File
@@ -16,6 +16,7 @@ import {
mockCodeQLVersion, mockCodeQLVersion,
mockFeatureFlagApiEndpoint, mockFeatureFlagApiEndpoint,
setupActionsVars, setupActionsVars,
makeMacro,
} from "./testing-utils"; } from "./testing-utils";
import { GitHubVariant, withTmpDir } from "./util"; import { GitHubVariant, withTmpDir } from "./util";
import type { GitHubVersion } from "./util"; import type { GitHubVersion } from "./util";
@@ -42,10 +43,9 @@ const defaultTestCase: DiffInformedAnalysisTestCase = {
codeQLVersion: "2.21.0", codeQLVersion: "2.21.0",
}; };
const testShouldPerformDiffInformedAnalysis = test.macro({ const testShouldPerformDiffInformedAnalysis = makeMacro({
exec: async ( exec: async (
t: ExecutionContext, t: ExecutionContext,
_title: string,
partialTestCase: Partial<DiffInformedAnalysisTestCase>, partialTestCase: Partial<DiffInformedAnalysisTestCase>,
expectedResult: boolean, expectedResult: boolean,
) => { ) => {
@@ -94,18 +94,16 @@ const testShouldPerformDiffInformedAnalysis = test.macro({
getPullRequestBranchesStub.restore(); getPullRequestBranchesStub.restore();
}); });
}, },
title: (_, title) => `shouldPerformDiffInformedAnalysis: ${title}`, title: (title) => `shouldPerformDiffInformedAnalysis: ${title}`,
}); });
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns true in the default test case", "returns true in the default test case",
{}, {},
true, true,
); );
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns false when feature flag is disabled from the API", "returns false when feature flag is disabled from the API",
{ {
featureEnabled: false, featureEnabled: false,
@@ -113,8 +111,7 @@ test.serial(
false, false,
); );
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns false when CODEQL_ACTION_DIFF_INFORMED_QUERIES is set to false", "returns false when CODEQL_ACTION_DIFF_INFORMED_QUERIES is set to false",
{ {
featureEnabled: true, featureEnabled: true,
@@ -123,8 +120,7 @@ test.serial(
false, false,
); );
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns true when CODEQL_ACTION_DIFF_INFORMED_QUERIES is set to true", "returns true when CODEQL_ACTION_DIFF_INFORMED_QUERIES is set to true",
{ {
featureEnabled: false, featureEnabled: false,
@@ -133,8 +129,7 @@ test.serial(
true, true,
); );
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns false for CodeQL version 2.20.0", "returns false for CodeQL version 2.20.0",
{ {
codeQLVersion: "2.20.0", codeQLVersion: "2.20.0",
@@ -142,8 +137,7 @@ test.serial(
false, false,
); );
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns false for invalid GHES version", "returns false for invalid GHES version",
{ {
gitHubVersion: { gitHubVersion: {
@@ -154,8 +148,7 @@ test.serial(
false, false,
); );
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns false for GHES version 3.18.5", "returns false for GHES version 3.18.5",
{ {
gitHubVersion: { gitHubVersion: {
@@ -166,8 +159,7 @@ test.serial(
false, false,
); );
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns true for GHES version 3.19.0", "returns true for GHES version 3.19.0",
{ {
gitHubVersion: { gitHubVersion: {
@@ -178,8 +170,7 @@ test.serial(
true, true,
); );
test.serial( testShouldPerformDiffInformedAnalysis.serial(
testShouldPerformDiffInformedAnalysis,
"returns false when not a pull request", "returns false when not a pull request",
{ {
pullRequestBranches: undefined, pullRequestBranches: undefined,
+5 -7
View File
@@ -19,6 +19,7 @@ import {
createFeatures, createFeatures,
createTestConfig, createTestConfig,
DEFAULT_ACTIONS_VARS, DEFAULT_ACTIONS_VARS,
makeMacro,
makeVersionInfo, makeVersionInfo,
RecordingLogger, RecordingLogger,
setupActionsVars, setupActionsVars,
@@ -796,7 +797,7 @@ test.serial(
}, },
); );
const skippedUploadTest = test.macro({ const skippedUploadTest = makeMacro({
exec: async ( exec: async (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
config: Partial<configUtils.Config>, config: Partial<configUtils.Config>,
@@ -823,9 +824,8 @@ const skippedUploadTest = test.macro({
`tryUploadSarifIfRunFailed - skips upload ${providedTitle}`, `tryUploadSarifIfRunFailed - skips upload ${providedTitle}`,
}); });
test.serial( skippedUploadTest.serial(
"without CodeQL command", "without CodeQL command",
skippedUploadTest,
// No codeQLCmd // No codeQLCmd
{ {
analysisKinds: [AnalysisKind.RiskAssessment], analysisKinds: [AnalysisKind.RiskAssessment],
@@ -834,9 +834,8 @@ test.serial(
"CodeQL command not found", "CodeQL command not found",
); );
test.serial( skippedUploadTest.serial(
"if no language is configured", "if no language is configured",
skippedUploadTest,
// No explicit language configuration // No explicit language configuration
{ {
analysisKinds: [AnalysisKind.RiskAssessment], analysisKinds: [AnalysisKind.RiskAssessment],
@@ -845,9 +844,8 @@ test.serial(
"Unexpectedly, the configuration is not for a single language.", "Unexpectedly, the configuration is not for a single language.",
); );
test.serial( skippedUploadTest.serial(
"if multiple languages is configured", "if multiple languages is configured",
skippedUploadTest,
// Multiple explicit languages configured // Multiple explicit languages configured
{ {
analysisKinds: [AnalysisKind.RiskAssessment], analysisKinds: [AnalysisKind.RiskAssessment],
+15 -27
View File
@@ -22,6 +22,7 @@ import {
createTestConfig, createTestConfig,
getRecordingLogger, getRecordingLogger,
setupTests, setupTests,
makeMacro,
} from "./testing-utils"; } from "./testing-utils";
import { ConfigurationError, withTmpDir } from "./util"; import { ConfigurationError, withTmpDir } from "./util";
@@ -158,10 +159,9 @@ type PackInfo = {
qlpackFileName?: string; qlpackFileName?: string;
}; };
const testCheckPacksForOverlayCompatibility = test.macro({ const testCheckPacksForOverlayCompatibility = makeMacro({
exec: async ( exec: async (
t: ExecutionContext, t: ExecutionContext,
_title: string,
{ {
cliOverlayVersion, cliOverlayVersion,
languages, languages,
@@ -234,11 +234,10 @@ const testCheckPacksForOverlayCompatibility = test.macro({
); );
}); });
}, },
title: (_, title) => `checkPacksForOverlayCompatibility: ${title}`, title: (title) => `checkPacksForOverlayCompatibility: ${title}`,
}); });
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns false when CLI does not support overlay", "returns false when CLI does not support overlay",
{ {
cliOverlayVersion: undefined, cliOverlayVersion: undefined,
@@ -253,8 +252,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns true when there are no query packs", "returns true when there are no query packs",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -264,8 +262,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns true when query pack has not been compiled", "returns true when query pack has not been compiled",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -281,8 +278,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns true when query pack has expected overlay version", "returns true when query pack has expected overlay version",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -297,8 +293,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns true when query packs for all languages to analyze are compatible", "returns true when query packs for all languages to analyze are compatible",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -317,8 +312,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns true when query pack for a language not analyzed is incompatible", "returns true when query pack for a language not analyzed is incompatible",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -337,8 +331,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns false when query pack for a language to analyze is incompatible", "returns false when query pack for a language to analyze is incompatible",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -357,8 +350,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns false when query pack is missing .packinfo", "returns false when query pack is missing .packinfo",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -377,8 +369,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns false when query pack has different overlay version", "returns false when query pack has different overlay version",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -397,8 +388,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns false when query pack is missing overlayVersion in .packinfo", "returns false when query pack is missing overlayVersion in .packinfo",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -417,8 +407,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns false when .packinfo is not valid JSON", "returns false when .packinfo is not valid JSON",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
@@ -437,8 +426,7 @@ test(
}, },
); );
test( testCheckPacksForOverlayCompatibility(
testCheckPacksForOverlayCompatibility,
"returns true when query pack uses codeql-pack.yml filename", "returns true when query pack uses codeql-pack.yml filename",
{ {
cliOverlayVersion: 2, cliOverlayVersion: 2,
+14 -25
View File
@@ -13,6 +13,7 @@ import { BuiltInLanguage } from "../languages";
import { getRunnerLogger } from "../logging"; import { getRunnerLogger } from "../logging";
import { import {
createTestConfig, createTestConfig,
makeMacro,
mockCodeQLVersion, mockCodeQLVersion,
setupTests, setupTests,
} from "../testing-utils"; } from "../testing-utils";
@@ -51,10 +52,9 @@ const defaultDownloadTestCase: DownloadOverlayBaseDatabaseTestCase = {
resolveDatabaseOutput: { overlayBaseSpecifier: "20250626:XXX" }, resolveDatabaseOutput: { overlayBaseSpecifier: "20250626:XXX" },
}; };
const testDownloadOverlayBaseDatabaseFromCache = test.macro({ const testDownloadOverlayBaseDatabaseFromCache = makeMacro({
exec: async ( exec: async (
t, t,
_title: string,
partialTestCase: Partial<DownloadOverlayBaseDatabaseTestCase>, partialTestCase: Partial<DownloadOverlayBaseDatabaseTestCase>,
expectDownloadSuccess: boolean, expectDownloadSuccess: boolean,
) => { ) => {
@@ -142,18 +142,16 @@ const testDownloadOverlayBaseDatabaseFromCache = test.macro({
} }
}); });
}, },
title: (_, title) => `downloadOverlayBaseDatabaseFromCache: ${title}`, title: (title) => `downloadOverlayBaseDatabaseFromCache: ${title}`,
}); });
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns stats when successful", "returns stats when successful",
{}, {},
true, true,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when mode is OverlayDatabaseMode.OverlayBase", "returns undefined when mode is OverlayDatabaseMode.OverlayBase",
{ {
overlayDatabaseMode: OverlayDatabaseMode.OverlayBase, overlayDatabaseMode: OverlayDatabaseMode.OverlayBase,
@@ -161,8 +159,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when mode is OverlayDatabaseMode.None", "returns undefined when mode is OverlayDatabaseMode.None",
{ {
overlayDatabaseMode: OverlayDatabaseMode.None, overlayDatabaseMode: OverlayDatabaseMode.None,
@@ -170,8 +167,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when caching is disabled", "returns undefined when caching is disabled",
{ {
useOverlayDatabaseCaching: false, useOverlayDatabaseCaching: false,
@@ -179,8 +175,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined in test mode", "returns undefined in test mode",
{ {
isInTestMode: true, isInTestMode: true,
@@ -188,8 +183,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when cache miss", "returns undefined when cache miss",
{ {
restoreCacheResult: undefined, restoreCacheResult: undefined,
@@ -197,8 +191,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when download fails", "returns undefined when download fails",
{ {
restoreCacheResult: new Error("Download failed"), restoreCacheResult: new Error("Download failed"),
@@ -206,8 +199,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when downloaded database is invalid", "returns undefined when downloaded database is invalid",
{ {
hasBaseDatabaseOidsFile: false, hasBaseDatabaseOidsFile: false,
@@ -215,8 +207,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when downloaded database doesn't have an overlayBaseSpecifier", "returns undefined when downloaded database doesn't have an overlayBaseSpecifier",
{ {
resolveDatabaseOutput: {}, resolveDatabaseOutput: {},
@@ -224,8 +215,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when resolving database metadata fails", "returns undefined when resolving database metadata fails",
{ {
resolveDatabaseOutput: new Error("Failed to resolve database metadata"), resolveDatabaseOutput: new Error("Failed to resolve database metadata"),
@@ -233,8 +223,7 @@ test.serial(
false, false,
); );
test.serial( testDownloadOverlayBaseDatabaseFromCache.serial(
testDownloadOverlayBaseDatabaseFromCache,
"returns undefined when filesystem error occurs", "returns undefined when filesystem error occurs",
{ {
tryGetFolderBytesSucceeds: false, tryGetFolderBytesSucceeds: false,
+5 -7
View File
@@ -20,6 +20,7 @@ import {
createFeatures, createFeatures,
getRecordingLogger, getRecordingLogger,
initializeFeatures, initializeFeatures,
makeMacro,
mockBundleDownloadApi, mockBundleDownloadApi,
setupActionsVars, setupActionsVars,
setupTests, setupTests,
@@ -473,7 +474,7 @@ test.serial(
}, },
); );
const toolcacheInputFallbackMacro = test.macro({ const toolcacheInputFallbackMacro = makeMacro({
exec: async ( exec: async (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
featureList: Feature[], featureList: Feature[],
@@ -533,9 +534,8 @@ const toolcacheInputFallbackMacro = test.macro({
`getCodeQLSource falls back to downloading the CLI if ${providedTitle}`, `getCodeQLSource falls back to downloading the CLI if ${providedTitle}`,
}); });
test.serial( toolcacheInputFallbackMacro.serial(
"the toolcache doesn't have a CodeQL CLI when tools == toolcache", "the toolcache doesn't have a CodeQL CLI when tools == toolcache",
toolcacheInputFallbackMacro,
[Feature.AllowToolcacheInput], [Feature.AllowToolcacheInput],
{ GITHUB_EVENT_NAME: "dynamic" }, { GITHUB_EVENT_NAME: "dynamic" },
[], [],
@@ -545,9 +545,8 @@ test.serial(
], ],
); );
test.serial( toolcacheInputFallbackMacro.serial(
"the workflow trigger is not `dynamic`", "the workflow trigger is not `dynamic`",
toolcacheInputFallbackMacro,
[Feature.AllowToolcacheInput], [Feature.AllowToolcacheInput],
{ GITHUB_EVENT_NAME: "pull_request" }, { GITHUB_EVENT_NAME: "pull_request" },
[], [],
@@ -556,9 +555,8 @@ test.serial(
], ],
); );
test.serial( toolcacheInputFallbackMacro.serial(
"the feature flag is not enabled", "the feature flag is not enabled",
toolcacheInputFallbackMacro,
[], [],
{ GITHUB_EVENT_NAME: "dynamic" }, { GITHUB_EVENT_NAME: "dynamic" },
[], [],
+14 -23
View File
@@ -18,6 +18,7 @@ import {
assertNotLogged, assertNotLogged,
checkExpectedLogMessages, checkExpectedLogMessages,
createFeatures, createFeatures,
makeMacro,
makeTestToken, makeTestToken,
RecordingLogger, RecordingLogger,
setupTests, setupTests,
@@ -32,7 +33,7 @@ import {
setupTests(test); setupTests(test);
const sendFailedStatusReportTest = test.macro({ const sendFailedStatusReportTest = makeMacro({
exec: async ( exec: async (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
err: Error, err: Error,
@@ -88,16 +89,14 @@ const sendFailedStatusReportTest = test.macro({
title: (providedTitle = "") => `sendFailedStatusReport - ${providedTitle}`, title: (providedTitle = "") => `sendFailedStatusReport - ${providedTitle}`,
}); });
test.serial( sendFailedStatusReportTest.serial(
"reports generic error message for non-StartProxyError error", "reports generic error message for non-StartProxyError error",
sendFailedStatusReportTest,
new Error("Something went wrong today"), new Error("Something went wrong today"),
"Error from start-proxy Action omitted (Error).", "Error from start-proxy Action omitted (Error).",
); );
test.serial( sendFailedStatusReportTest.serial(
"reports generic error message for non-StartProxyError error with safe error message", "reports generic error message for non-StartProxyError error with safe error message",
sendFailedStatusReportTest,
new Error( new Error(
startProxyExports.getStartProxyErrorMessage( startProxyExports.getStartProxyErrorMessage(
startProxyExports.StartProxyErrorType.DownloadFailed, startProxyExports.StartProxyErrorType.DownloadFailed,
@@ -106,9 +105,8 @@ test.serial(
"Error from start-proxy Action omitted (Error).", "Error from start-proxy Action omitted (Error).",
); );
test.serial( sendFailedStatusReportTest.serial(
"reports generic error message for ConfigurationError error", "reports generic error message for ConfigurationError error",
sendFailedStatusReportTest,
new ConfigurationError("Something went wrong today"), new ConfigurationError("Something went wrong today"),
"Error from start-proxy Action omitted (ConfigurationError).", "Error from start-proxy Action omitted (ConfigurationError).",
"user-error", "user-error",
@@ -414,7 +412,7 @@ test("getCredentials accepts OIDC configurations", (t) => {
} }
}); });
const getCredentialsMacro = test.macro({ const getCredentialsMacro = makeMacro({
exec: async ( exec: async (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
credentials: startProxyExports.RawCredential[], credentials: startProxyExports.RawCredential[],
@@ -440,9 +438,8 @@ const getCredentialsMacro = test.macro({
title: (providedTitle = "") => `getCredentials - ${providedTitle}`, title: (providedTitle = "") => `getCredentials - ${providedTitle}`,
}); });
test( getCredentialsMacro(
"warns for PAT-like password without a username", "warns for PAT-like password without a username",
getCredentialsMacro,
[ [
{ {
type: "git_server", type: "git_server",
@@ -470,9 +467,8 @@ test(
}, },
); );
test( getCredentialsMacro(
"no warning for PAT-like password with a username", "no warning for PAT-like password with a username",
getCredentialsMacro,
[ [
{ {
type: "git_server", type: "git_server",
@@ -502,9 +498,8 @@ test(
}, },
); );
test( getCredentialsMacro(
"warns for PAT-like token without a username", "warns for PAT-like token without a username",
getCredentialsMacro,
[ [
{ {
type: "git_server", type: "git_server",
@@ -532,9 +527,8 @@ test(
}, },
); );
test( getCredentialsMacro(
"no warning for PAT-like token with a username", "no warning for PAT-like token with a username",
getCredentialsMacro,
[ [
{ {
type: "git_server", type: "git_server",
@@ -796,7 +790,7 @@ test.serial(
}, },
); );
const wrapFailureTest = test.macro({ const wrapFailureTest = makeMacro({
exec: async ( exec: async (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
setup: () => void, setup: () => void,
@@ -827,9 +821,8 @@ test.serial("downloadProxy - returns file path on success", async (t) => {
}); });
}); });
test.serial( wrapFailureTest.serial(
"downloadProxy", "downloadProxy",
wrapFailureTest,
() => { () => {
sinon.stub(toolcache, "downloadTool").throws(); sinon.stub(toolcache, "downloadTool").throws();
}, },
@@ -848,9 +841,8 @@ test.serial("extractProxy - returns file path on success", async (t) => {
}); });
}); });
test.serial( wrapFailureTest.serial(
"extractProxy", "extractProxy",
wrapFailureTest,
() => { () => {
sinon.stub(toolcache, "extractTar").throws(); sinon.stub(toolcache, "extractTar").throws();
}, },
@@ -874,9 +866,8 @@ test.serial("cacheProxy - returns file path on success", async (t) => {
}); });
}); });
test.serial( wrapFailureTest.serial(
"cacheProxy", "cacheProxy",
wrapFailureTest,
() => { () => {
sinon.stub(toolcache, "cacheDir").throws(); sinon.stub(toolcache, "cacheDir").throws();
}, },
+6 -9
View File
@@ -19,6 +19,7 @@ import {
setupTests, setupTests,
setupActionsVars, setupActionsVars,
createTestConfig, createTestConfig,
makeMacro,
} from "./testing-utils"; } from "./testing-utils";
import { BuildMode, ConfigurationError, withTmpDir, wrapError } from "./util"; import { BuildMode, ConfigurationError, withTmpDir, wrapError } from "./util";
@@ -291,10 +292,9 @@ test.serial(
}, },
); );
const testCreateInitWithConfigStatusReport = test.macro({ const testCreateInitWithConfigStatusReport = makeMacro({
exec: async ( exec: async (
t, t,
_title: string,
config: Config, config: Config,
expectedReportProperties: Partial<InitWithConfigStatusReport>, expectedReportProperties: Partial<InitWithConfigStatusReport>,
) => { ) => {
@@ -337,11 +337,10 @@ const testCreateInitWithConfigStatusReport = test.macro({
} }
}); });
}, },
title: (_, title) => `createInitWithConfigStatusReport: ${title}`, title: (title) => `createInitWithConfigStatusReport: ${title}`,
}); });
test.serial( testCreateInitWithConfigStatusReport.serial(
testCreateInitWithConfigStatusReport,
"returns a value", "returns a value",
createTestConfig({ createTestConfig({
buildMode: BuildMode.None, buildMode: BuildMode.None,
@@ -355,8 +354,7 @@ test.serial(
}, },
); );
test.serial( testCreateInitWithConfigStatusReport.serial(
testCreateInitWithConfigStatusReport,
"includes packs for a single language", "includes packs for a single language",
createTestConfig({ createTestConfig({
buildMode: BuildMode.None, buildMode: BuildMode.None,
@@ -372,8 +370,7 @@ test.serial(
}, },
); );
test.serial( testCreateInitWithConfigStatusReport.serial(
testCreateInitWithConfigStatusReport,
"includes packs for multiple languages", "includes packs for multiple languages",
createTestConfig({ createTestConfig({
buildMode: BuildMode.None, buildMode: BuildMode.None,
+27 -3
View File
@@ -2,7 +2,11 @@ import { TextDecoder } from "node:util";
import path from "path"; import path from "path";
import * as github from "@actions/github"; import * as github from "@actions/github";
import { ExecutionContext, TestFn } from "ava"; import test, {
type ExecutionContext,
type MacroDeclarationOptions,
type TestFn,
} from "ava";
import nock from "nock"; import nock from "nock";
import * as sinon from "sinon"; import * as sinon from "sinon";
@@ -85,8 +89,8 @@ function wrapOutput(context: TestContext) {
}; };
} }
export function setupTests(test: TestFn<any>) { export function setupTests(testFn: TestFn<any>) {
const typedTest = test as TestFn<TestContext>; const typedTest = testFn as TestFn<TestContext>;
typedTest.beforeEach((t) => { typedTest.beforeEach((t) => {
// Set an empty CodeQL object so that all method calls will fail // Set an empty CodeQL object so that all method calls will fail
@@ -139,6 +143,26 @@ export function setupTests(test: TestFn<any>) {
}); });
} }
/**
* Declare a reusable test implementation, with better type safety than `test.macro`.
*/
export function makeMacro<Args extends unknown[]>(
decl: MacroDeclarationOptions<Args, unknown>,
) {
const m = test.macro<Args>(decl);
const wrapper = (name: string, ...args: Args) => test(name, m, ...args);
wrapper.test = (...args: Args) => test(m, ...args);
wrapper.serial = (name: string, ...args: Args) =>
test.serial(name, m, ...args);
// Make the implementation available as `fn`. We don't call it `exec` so
// that results from this function are not valid arguments to `test`
// or `test.serial`.
wrapper.fn = decl.exec;
return wrapper;
}
/** /**
* Default values for environment variables typically set in an Actions * Default values for environment variables typically set in an Actions
* environment. Tests can override individual variables by passing them in the * environment. Tests can override individual variables by passing them in the
+7 -12
View File
@@ -6,7 +6,7 @@ import * as sinon from "sinon";
import { AnalysisKind, getAnalysisConfig } from "./analyses"; import { AnalysisKind, getAnalysisConfig } from "./analyses";
import { getRunnerLogger } from "./logging"; import { getRunnerLogger } from "./logging";
import { createFeatures, setupTests } from "./testing-utils"; import { createFeatures, makeMacro, setupTests } from "./testing-utils";
import { UploadResult } from "./upload-lib"; import { UploadResult } from "./upload-lib";
import * as uploadLib from "./upload-lib"; import * as uploadLib from "./upload-lib";
import { postProcessAndUploadSarif } from "./upload-sarif"; import { postProcessAndUploadSarif } from "./upload-sarif";
@@ -43,7 +43,7 @@ function mockPostProcessSarifFiles() {
return postProcessSarifFiles; return postProcessSarifFiles;
} }
const postProcessAndUploadSarifMacro = test.macro({ const postProcessAndUploadSarifMacro = makeMacro({
exec: async ( exec: async (
t: ExecutionContext<unknown>, t: ExecutionContext<unknown>,
sarifFiles: string[], sarifFiles: string[],
@@ -123,9 +123,8 @@ const postProcessAndUploadSarifMacro = test.macro({
title: (providedTitle = "") => `processAndUploadSarif - ${providedTitle}`, title: (providedTitle = "") => `processAndUploadSarif - ${providedTitle}`,
}); });
test.serial( postProcessAndUploadSarifMacro.serial(
"SARIF file", "SARIF file",
postProcessAndUploadSarifMacro,
["test.sarif"], ["test.sarif"],
(tempDir) => path.join(tempDir, "test.sarif"), (tempDir) => path.join(tempDir, "test.sarif"),
{ {
@@ -138,9 +137,8 @@ test.serial(
}, },
); );
test.serial( postProcessAndUploadSarifMacro.serial(
"JSON file", "JSON file",
postProcessAndUploadSarifMacro,
["test.json"], ["test.json"],
(tempDir) => path.join(tempDir, "test.json"), (tempDir) => path.join(tempDir, "test.json"),
{ {
@@ -153,9 +151,8 @@ test.serial(
}, },
); );
test.serial( postProcessAndUploadSarifMacro.serial(
"Code Scanning files", "Code Scanning files",
postProcessAndUploadSarifMacro,
["test.json", "test.sarif"], ["test.json", "test.sarif"],
undefined, undefined,
{ {
@@ -169,9 +166,8 @@ test.serial(
}, },
); );
test.serial( postProcessAndUploadSarifMacro.serial(
"Code Quality file", "Code Quality file",
postProcessAndUploadSarifMacro,
["test.quality.sarif"], ["test.quality.sarif"],
(tempDir) => path.join(tempDir, "test.quality.sarif"), (tempDir) => path.join(tempDir, "test.quality.sarif"),
{ {
@@ -184,9 +180,8 @@ test.serial(
}, },
); );
test.serial( postProcessAndUploadSarifMacro.serial(
"Mixed files", "Mixed files",
postProcessAndUploadSarifMacro,
["test.sarif", "test.quality.sarif"], ["test.sarif", "test.quality.sarif"],
undefined, undefined,
{ {