@@ -40,6 +40,8 @@ import {
4040import {
4141 getDiffInformedAnalysisBranches ,
4242 getPullRequestEditedDiffRanges ,
43+ hasDiffRangesJsonFile ,
44+ shouldPerformDiffInformedAnalysis ,
4345 writeDiffRangesJsonFile ,
4446} from "./diff-informed-analysis-utils" ;
4547import { EnvVar } from "./environment" ;
@@ -438,6 +440,30 @@ async function run(startedAt: Date) {
438440 return ;
439441 }
440442
443+ // If overlay is enabled and diff-informed analysis should have run but
444+ // failed to produce output, revert to non-overlay analysis. Overlay
445+ // without diff-informed is an untested combination that can produce
446+ // inaccurate results.
447+ try {
448+ if (
449+ config . overlayDatabaseMode === OverlayDatabaseMode . Overlay &&
450+ ( await shouldPerformDiffInformedAnalysis ( codeql , features , logger ) ) &&
451+ ! hasDiffRangesJsonFile ( )
452+ ) {
453+ logger . warning (
454+ "Diff-informed analysis is not available for this pull request. " +
455+ `Reverting overlay database mode to ${ OverlayDatabaseMode . None } .` ,
456+ ) ;
457+ config . overlayDatabaseMode = OverlayDatabaseMode . None ;
458+ }
459+ } catch ( e ) {
460+ logger . warning (
461+ `Failed to determine diff-informed analysis availability, ` +
462+ `reverting overlay database mode to ${ OverlayDatabaseMode . None } : ${ getErrorMessage ( e ) } ` ,
463+ ) ;
464+ config . overlayDatabaseMode = OverlayDatabaseMode . None ;
465+ }
466+
441467 let overlayBaseDatabaseStats : OverlayBaseDatabaseDownloadStats | undefined ;
442468 let dependencyCachingStatus : DependencyCacheRestoreStatusReport | undefined ;
443469 try {
0 commit comments