Skip to content

Commit c03cd80

Browse files
committed
refactor: address review feedback on overlay fallback
1 parent 1564596 commit c03cd80

5 files changed

Lines changed: 265 additions & 129 deletions

File tree

lib/init-action.js

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

src/config-utils.test.ts

Lines changed: 58 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -2201,79 +2201,70 @@ test.serial(
22012201
},
22022202
);
22032203

2204-
test.serial(
2205-
"applyIncrementalAnalysisSettings: no-op when mode is not Overlay and diff-informed is unavailable",
2206-
(t) => {
2207-
const config = createTestConfig({});
2208-
config.overlayDatabaseMode = OverlayDatabaseMode.None;
2209-
const logger = getRunnerLogger(true);
2210-
2211-
configUtils.applyIncrementalAnalysisSettings(
2212-
config,
2213-
{ shouldRun: false, isAvailable: false },
2214-
logger,
2215-
);
2216-
2217-
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.None);
2218-
t.deepEqual(config.extraQueryExclusions, []);
2219-
},
2220-
);
2204+
test("applyIncrementalAnalysisSettings: no-op when mode is not Overlay and diff-informed is unavailable", (t) => {
2205+
const config = createTestConfig({});
2206+
config.overlayDatabaseMode = OverlayDatabaseMode.None;
2207+
const logger = getRunnerLogger(true);
2208+
2209+
configUtils.applyIncrementalAnalysisSettings(
2210+
config,
2211+
{ shouldRun: false, hasDiffRanges: false },
2212+
logger,
2213+
);
22212214

2222-
test.serial(
2223-
"applyIncrementalAnalysisSettings: keeps overlay mode and adds exclusions when diff-informed analysis is disabled",
2224-
(t) => {
2225-
const config = createTestConfig({});
2226-
config.overlayDatabaseMode = OverlayDatabaseMode.Overlay;
2227-
const logger = getRunnerLogger(true);
2215+
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.None);
2216+
t.deepEqual(config.extraQueryExclusions, []);
2217+
});
22282218

2229-
configUtils.applyIncrementalAnalysisSettings(
2230-
config,
2231-
{ shouldRun: false, isAvailable: false },
2232-
logger,
2233-
);
2219+
test("applyIncrementalAnalysisSettings: keeps overlay mode and adds exclusions when diff-informed analysis shouldn't run", (t) => {
2220+
const config = createTestConfig({});
2221+
config.overlayDatabaseMode = OverlayDatabaseMode.Overlay;
2222+
const logger = getRunnerLogger(true);
22342223

2235-
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.Overlay);
2236-
t.deepEqual(config.extraQueryExclusions, [
2237-
{ exclude: { tags: "exclude-from-incremental" } },
2238-
]);
2239-
},
2240-
);
2224+
configUtils.applyIncrementalAnalysisSettings(
2225+
config,
2226+
{ shouldRun: false, hasDiffRanges: false },
2227+
logger,
2228+
);
22412229

2242-
test.serial(
2243-
"applyIncrementalAnalysisSettings: reverts to None without exclusions when diff-informed analysis is unavailable",
2244-
(t) => {
2245-
const config = createTestConfig({});
2246-
config.overlayDatabaseMode =
2247-
OverlayDatabaseMode.Overlay as OverlayDatabaseMode;
2248-
const logger = getRunnerLogger(true);
2230+
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.Overlay);
2231+
t.deepEqual(config.extraQueryExclusions, [
2232+
{ exclude: { tags: "exclude-from-incremental" } },
2233+
]);
2234+
});
22492235

2250-
configUtils.applyIncrementalAnalysisSettings(
2251-
config,
2252-
{ shouldRun: true, isAvailable: false },
2253-
logger,
2254-
);
2236+
test("applyIncrementalAnalysisSettings: disables overlay analysis when diff-informed analysis is unavailable", (t) => {
2237+
const config = createTestConfig({});
2238+
// Cast needed so TypeScript doesn't narrow `overlayDatabaseMode` to the
2239+
// literal `Overlay` type, which would then reject the `None` assertion
2240+
// below after the function under test mutates the field.
2241+
config.overlayDatabaseMode =
2242+
OverlayDatabaseMode.Overlay as OverlayDatabaseMode;
2243+
const logger = getRunnerLogger(true);
2244+
2245+
configUtils.applyIncrementalAnalysisSettings(
2246+
config,
2247+
{ shouldRun: true, hasDiffRanges: false },
2248+
logger,
2249+
);
22552250

2256-
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.None);
2257-
t.deepEqual(config.extraQueryExclusions, []);
2258-
},
2259-
);
2251+
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.None);
2252+
t.deepEqual(config.extraQueryExclusions, []);
2253+
});
22602254

2261-
test.serial(
2262-
"applyIncrementalAnalysisSettings: adds exclusions for diff-informed-only runs",
2263-
(t) => {
2264-
const config = createTestConfig({});
2265-
config.overlayDatabaseMode = OverlayDatabaseMode.None;
2266-
const logger = getRunnerLogger(true);
2255+
test("applyIncrementalAnalysisSettings: adds exclusions for diff-informed-only runs", (t) => {
2256+
const config = createTestConfig({});
2257+
config.overlayDatabaseMode = OverlayDatabaseMode.None;
2258+
const logger = getRunnerLogger(true);
22672259

2268-
configUtils.applyIncrementalAnalysisSettings(
2269-
config,
2270-
{ shouldRun: true, isAvailable: true },
2271-
logger,
2272-
);
2260+
configUtils.applyIncrementalAnalysisSettings(
2261+
config,
2262+
{ shouldRun: true, hasDiffRanges: true },
2263+
logger,
2264+
);
22732265

2274-
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.None);
2275-
t.deepEqual(config.extraQueryExclusions, [
2276-
{ exclude: { tags: "exclude-from-incremental" } },
2277-
]);
2278-
},
2279-
);
2266+
t.is(config.overlayDatabaseMode, OverlayDatabaseMode.None);
2267+
t.deepEqual(config.extraQueryExclusions, [
2268+
{ exclude: { tags: "exclude-from-incremental" } },
2269+
]);
2270+
});

src/config-utils.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,8 +1085,11 @@ function hasQueryCustomisation(userConfig: UserConfig): boolean {
10851085
* If overlay mode was selected for a PR but diff-informed analysis should have
10861086
* run and could not be prepared, fall back to a full non-overlay analysis.
10871087
* Query exclusions for incremental-only queries are applied only when the final
1088-
* configuration still uses overlay analysis or diff-informed analysis is
1089-
* actually available.
1088+
* configuration still uses overlay analysis or the diff ranges are available.
1089+
*
1090+
* Note that `overlayDatabaseMode === Overlay` does not imply
1091+
* `diffInformedAnalysis.shouldRun`: the two are configured independently
1092+
* so we handle each combination explicitly.
10901093
*/
10911094
export function applyIncrementalAnalysisSettings(
10921095
config: Config,
@@ -1096,9 +1099,9 @@ export function applyIncrementalAnalysisSettings(
10961099
if (
10971100
config.overlayDatabaseMode === OverlayDatabaseMode.Overlay &&
10981101
diffInformedAnalysis.shouldRun &&
1099-
!diffInformedAnalysis.isAvailable
1102+
!diffInformedAnalysis.hasDiffRanges
11001103
) {
1101-
logger.warning(
1104+
logger.info(
11021105
"Diff-informed analysis is not available for this pull request. " +
11031106
`Reverting overlay database mode to ${OverlayDatabaseMode.None}.`,
11041107
);
@@ -1107,7 +1110,7 @@ export function applyIncrementalAnalysisSettings(
11071110

11081111
if (
11091112
config.overlayDatabaseMode === OverlayDatabaseMode.Overlay ||
1110-
diffInformedAnalysis.isAvailable
1113+
diffInformedAnalysis.hasDiffRanges
11111114
) {
11121115
config.extraQueryExclusions.push({
11131116
exclude: { tags: "exclude-from-incremental" },

0 commit comments

Comments
 (0)