@@ -720,17 +720,6 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
720720 return fmt .Errorf ("error initializing comment reporter" )
721721 }
722722
723- err = utils .ReportInitialJobsStatus (commentReporter , jobsForImpactedProjects )
724- if err != nil {
725- slog .Error ("Failed to comment initial status for jobs" ,
726- "prNumber" , prNumber ,
727- "jobCount" , len (jobsForImpactedProjects ),
728- "error" , err ,
729- )
730- commentReporterManager .UpdateComment (fmt .Sprintf (":x: Failed to comment initial status for jobs: %v" , err ))
731- return fmt .Errorf ("failed to comment initial status for jobs" )
732- }
733-
734723 err = utils .SetPRStatusForJobs (ghService , prNumber , jobsForImpactedProjects )
735724 if err != nil {
736725 slog .Error ("Error setting status for PR" ,
@@ -741,6 +730,40 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
741730 return fmt .Errorf ("error setting status for PR: %v" , err )
742731 }
743732
733+ nLayers , _ := orchestrator_scheduler .CountUniqueLayers (jobsForImpactedProjects )
734+ slog .Debug ("Number of layers" ,
735+ "prNumber" , prNumber ,
736+ "nLayers" , nLayers ,
737+ "respectLayers" , config .RespectLayers ,
738+ )
739+ if config .RespectLayers && nLayers > 1 {
740+ slog .Debug ("Respecting layers" ,
741+ "prNumber" , prNumber )
742+ err = utils .ReportLayersTableForJobs (commentReporter , jobsForImpactedProjects )
743+ if err != nil {
744+ slog .Error ("Failed to comment initial status for jobs" ,
745+ "prNumber" , prNumber ,
746+ "jobCount" , len (jobsForImpactedProjects ),
747+ "error" , err ,
748+ )
749+ commentReporterManager .UpdateComment (fmt .Sprintf (":x: Failed to comment initial status for jobs: %v" , err ))
750+ return fmt .Errorf ("failed to comment initial status for jobs" )
751+ }
752+ slog .Debug ("not performing plan since there are multiple layers and respect_layers is enabled" )
753+ return nil
754+ } else {
755+ err = utils .ReportInitialJobsStatus (commentReporter , jobsForImpactedProjects )
756+ if err != nil {
757+ slog .Error ("Failed to comment initial status for jobs" ,
758+ "prNumber" , prNumber ,
759+ "jobCount" , len (jobsForImpactedProjects ),
760+ "error" , err ,
761+ )
762+ commentReporterManager .UpdateComment (fmt .Sprintf (":x: Failed to comment initial status for jobs: %v" , err ))
763+ return fmt .Errorf ("failed to comment initial status for jobs" )
764+ }
765+ }
766+
744767 slog .Debug ("Preparing job and project maps" ,
745768 "prNumber" , prNumber ,
746769 "projectCount" , len (impactedProjects ),
@@ -788,6 +811,9 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
788811 "jobCount" , len (impactedJobsMap ),
789812 )
790813
814+ if config .RespectLayers {
815+
816+ }
791817 batchId , _ , err := utils .ConvertJobsToDiggerJobs (
792818 * diggerCommand ,
793819 models .DiggerVCSGithub ,
@@ -1427,7 +1453,7 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
14271453 "branchName" , prBranchName ,
14281454 )
14291455
1430- impactedProjects , impactedProjectsSourceMapping , requestedProject , _ , err := generic .ProcessIssueCommentEvent (issueNumber , commentBody , config , projectsGraph , ghService )
1456+ processEventResult , err := generic .ProcessIssueCommentEvent (issueNumber , commentBody , config , projectsGraph , ghService )
14311457 if err != nil {
14321458 slog .Error ("Error processing issue comment event" ,
14331459 "issueNumber" , issueNumber ,
@@ -1436,45 +1462,49 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
14361462 commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error processing event: %v" , err ))
14371463 return fmt .Errorf ("error processing event" )
14381464 }
1465+ impactedProjectsForComment := processEventResult .ImpactedProjectsForComment
1466+ impactedProjectsSourceMapping := processEventResult .ImpactedProjectsSourceMapping
1467+ allImpactedProjects := processEventResult .AllImpactedProjects
14391468
14401469 slog .Info ("Issue comment event processed successfully" ,
14411470 "issueNumber" , issueNumber ,
1442- "impactedProjectCount" , len (impactedProjects ),
1443- "requestedProject" , requestedProject ,
1471+ "impactedProjectCount" , len (impactedProjectsForComment ),
1472+ "allImpactedProjectsCount" , len (allImpactedProjects ),
1473+
14441474 )
14451475
1446- jobs , coverAllImpactedProjects , err := generic .ConvertIssueCommentEventToJobs (repoFullName , actor , issueNumber , commentBody , impactedProjects , requestedProject , config .Workflows , prBranchName , defaultBranch )
1476+ jobs , coverAllImpactedProjects , err := generic .ConvertIssueCommentEventToJobs (repoFullName , actor , issueNumber , commentBody , impactedProjectsForComment , allImpactedProjects , config .Workflows , prBranchName , defaultBranch )
14471477 if err != nil {
14481478 slog .Error ("Error converting event to jobs" ,
14491479 "issueNumber" , issueNumber ,
1450- "impactedProjectCount" , len (impactedProjects ),
1480+ "impactedProjectCount" , len (impactedProjectsForComment ),
14511481 "error" , err ,
14521482 )
14531483 commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error converting event to jobs: %v" , err ))
14541484 return fmt .Errorf ("error converting event to jobs" )
14551485 }
1456-
1486+
14571487 slog .Info ("Issue comment event converted to jobs successfully" ,
14581488 "issueNumber" , issueNumber ,
14591489 "jobCount" , len (jobs ),
14601490 )
14611491
14621492 // if flag set we dont allow more projects impacted than the number of changed files in PR (safety check)
14631493 if config2 .LimitByNumOfFilesChanged () {
1464- if len (impactedProjects ) > len (changedFiles ) {
1494+ if len (impactedProjectsForComment ) > len (changedFiles ) {
14651495 slog .Error ("Number of impacted projects exceeds number of changed files" ,
14661496 "issueNumber" , issueNumber ,
1467- "impactedProjectCount" , len (impactedProjects ),
1497+ "impactedProjectCount" , len (impactedProjectsForComment ),
14681498 "changedFileCount" , len (changedFiles ),
14691499 )
14701500
1471- commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error the number impacted projects %v exceeds number of changed files: %v" , len (impactedProjects ), len (changedFiles )))
1501+ commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error the number impacted projects %v exceeds number of changed files: %v" , len (impactedProjectsForComment ), len (changedFiles )))
14721502
14731503 slog .Debug ("Detailed event information" ,
14741504 slog .Group ("details" ,
14751505 slog .Any ("changedFiles" , changedFiles ),
14761506 slog .Int ("configLength" , len (diggerYmlStr )),
1477- slog .Int ("impactedProjectCount" , len (impactedProjects )),
1507+ slog .Int ("impactedProjectCount" , len (impactedProjectsForComment )),
14781508 ),
14791509 )
14801510
@@ -1483,20 +1513,20 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
14831513 }
14841514
14851515 maxImpactedProjectsPerChange := config2 .MaxImpactedProjectsPerChange ()
1486- if len (impactedProjects ) > maxImpactedProjectsPerChange {
1516+ if len (impactedProjectsForComment ) > maxImpactedProjectsPerChange {
14871517 slog .Error ("Number of impacted projects exceeds number of changed files" ,
14881518 "prNumber" , issueNumber ,
1489- "impactedProjectCount" , len (impactedProjects ),
1519+ "impactedProjectCount" , len (impactedProjectsForComment ),
14901520 "changedFileCount" , len (changedFiles ),
14911521 )
14921522
1493- commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error the number impacted projects %v exceeds Max allowed ImpactedProjectsPerChange: %v, we set this limit to protect against hitting github API limits" , len (impactedProjects ), maxImpactedProjectsPerChange ))
1523+ commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error the number impacted projects %v exceeds Max allowed ImpactedProjectsPerChange: %v, we set this limit to protect against hitting github API limits" , len (impactedProjectsForComment ), maxImpactedProjectsPerChange ))
14941524
14951525 slog .Debug ("Detailed event information" ,
14961526 slog .Group ("details" ,
14971527 slog .Any ("changedFiles" , changedFiles ),
14981528 slog .Int ("configLength" , len (diggerYmlStr )),
1499- slog .Int ("impactedProjectCount" , len (impactedProjects )),
1529+ slog .Int ("impactedProjectCount" , len (impactedProjectsForComment )),
15001530 ),
15011531 )
15021532 return fmt .Errorf ("error processing event" )
@@ -1506,11 +1536,11 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
15061536 if config .PrLocks {
15071537 slog .Info ("Processing PR locks for impacted projects" ,
15081538 "issueNumber" , issueNumber ,
1509- "projectCount" , len (impactedProjects ),
1539+ "projectCount" , len (impactedProjectsForComment ),
15101540 "command" , * diggerCommand ,
15111541 )
15121542
1513- for _ , project := range impactedProjects {
1543+ for _ , project := range impactedProjectsForComment {
15141544 prLock := dg_locking.PullRequestLock {
15151545 InternalLock : locking.BackendDBLock {
15161546 OrgId : orgId ,
@@ -1580,12 +1610,12 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
15801610
15811611 slog .Debug ("Preparing job and project maps" ,
15821612 "issueNumber" , issueNumber ,
1583- "projectCount" , len (impactedProjects ),
1613+ "projectCount" , len (impactedProjectsForComment ),
15841614 "jobCount" , len (jobs ),
15851615 )
15861616
15871617 impactedProjectsMap := make (map [string ]dg_configuration.Project )
1588- for _ , p := range impactedProjects {
1618+ for _ , p := range impactedProjectsForComment {
15891619 impactedProjectsMap [p .Name ] = p
15901620 }
15911621
0 commit comments