6
6
"encoding/json"
7
7
"errors"
8
8
"fmt"
9
+ "github.com/davecgh/go-spew/spew"
9
10
"github.com/diggerhq/digger/backend/ci_backends"
11
+ config2 "github.com/diggerhq/digger/backend/config"
10
12
"github.com/diggerhq/digger/backend/locking"
11
13
"github.com/diggerhq/digger/backend/segment"
12
14
"github.com/diggerhq/digger/backend/services"
@@ -371,7 +373,7 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
371
373
}
372
374
}
373
375
374
- diggerYmlStr , ghService , config , projectsGraph , _ , _ , err := getDiggerConfigForPR (gh , organisationId , prLabelsStr , installationId , repoFullName , repoOwner , repoName , cloneURL , prNumber )
376
+ diggerYmlStr , ghService , config , projectsGraph , _ , _ , changedFiles , err := getDiggerConfigForPR (gh , organisationId , prLabelsStr , installationId , repoFullName , repoOwner , repoName , cloneURL , prNumber )
375
377
if err != nil {
376
378
log .Printf ("getDiggerConfigForPR error: %v" , err )
377
379
return fmt .Errorf ("error getting digger config" )
@@ -400,6 +402,25 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
400
402
return nil
401
403
}
402
404
405
+ // ratio of impacted projects to changed files should be less than MAX_RATIO
406
+ maxProjects := config2 .GetMaxProjectsCreated ()
407
+ if maxProjects > 0 {
408
+ if len (impactedProjects ) > maxProjects {
409
+ log .Printf ("Error the number impacted projects %v exceeds maximum allowed: %v" , len (impactedProjects ), maxProjects )
410
+ commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error the number impacted projects %v exceeds maximum allowed: %v" , len (impactedProjects ), maxProjects ))
411
+ log .Printf ("Information about the event:" )
412
+ log .Printf ("GH payload: %v" , payload )
413
+ log .Printf ("PR changed files: %v" , changedFiles )
414
+ log .Printf ("digger.yml STR: %v" , diggerYmlStr )
415
+ log .Printf ("Parsed config: %v" , config )
416
+ log .Printf ("Dependency graph:" )
417
+ spew .Dump (projectsGraph )
418
+ log .Printf ("Impacted Projects: %v" , impactedProjects )
419
+ log .Printf ("Impacted Project jobs: %v" , jobsForImpactedProjects )
420
+ return fmt .Errorf ("error processing event" )
421
+ }
422
+ }
423
+
403
424
diggerCommand , err := orchestrator_scheduler .GetCommandFromJob (jobsForImpactedProjects [0 ])
404
425
if err != nil {
405
426
log .Printf ("could not determine digger command from job: %v" , jobsForImpactedProjects [0 ].Commands )
@@ -573,24 +594,24 @@ func GetDiggerConfigForBranch(gh utils.GithubClientProvider, installationId int6
573
594
}
574
595
575
596
// TODO: Refactor this func to receive ghService as input
576
- func getDiggerConfigForPR (gh utils.GithubClientProvider , orgId uint , prLabels []string , installationId int64 , repoFullName string , repoOwner string , repoName string , cloneUrl string , prNumber int ) (string , * dg_github.GithubService , * dg_configuration.DiggerConfig , graph.Graph [string , dg_configuration.Project ], * string , * string , error ) {
597
+ func getDiggerConfigForPR (gh utils.GithubClientProvider , orgId uint , prLabels []string , installationId int64 , repoFullName string , repoOwner string , repoName string , cloneUrl string , prNumber int ) (string , * dg_github.GithubService , * dg_configuration.DiggerConfig , graph.Graph [string , dg_configuration.Project ], * string , * string , [] string , error ) {
577
598
ghService , _ , err := utils .GetGithubService (gh , installationId , repoFullName , repoOwner , repoName )
578
599
if err != nil {
579
600
log .Printf ("Error getting github service: %v" , err )
580
- return "" , nil , nil , nil , nil , nil , fmt .Errorf ("error getting github service" )
601
+ return "" , nil , nil , nil , nil , nil , nil , fmt .Errorf ("error getting github service" )
581
602
}
582
603
583
604
var prBranch string
584
605
prBranch , prCommitSha , err := ghService .GetBranchName (prNumber )
585
606
if err != nil {
586
607
log .Printf ("Error getting branch name: %v" , err )
587
- return "" , nil , nil , nil , nil , nil , fmt .Errorf ("error getting branch name" )
608
+ return "" , nil , nil , nil , nil , nil , nil , fmt .Errorf ("error getting branch name" )
588
609
}
589
610
590
611
changedFiles , err := ghService .GetChangedFiles (prNumber )
591
612
if err != nil {
592
613
log .Printf ("Error getting changed files: %v" , err )
593
- return "" , nil , nil , nil , nil , nil , fmt .Errorf ("error getting changed files" )
614
+ return "" , nil , nil , nil , nil , nil , nil , fmt .Errorf ("error getting changed files" )
594
615
}
595
616
596
617
// check if items should be loaded from cache
@@ -600,17 +621,17 @@ func getDiggerConfigForPR(gh utils.GithubClientProvider, orgId uint, prLabels []
600
621
log .Printf ("could not load from cache" )
601
622
} else {
602
623
log .Printf ("successfully loaded from cache" )
603
- return diggerYmlStr , ghService , config , * dependencyGraph , & prBranch , & prCommitSha , nil
624
+ return diggerYmlStr , ghService , config , * dependencyGraph , & prBranch , & prCommitSha , changedFiles , nil
604
625
}
605
626
}
606
627
607
628
diggerYmlStr , ghService , config , dependencyGraph , err := GetDiggerConfigForBranch (gh , installationId , repoFullName , repoOwner , repoName , cloneUrl , prBranch , changedFiles )
608
629
if err != nil {
609
630
log .Printf ("Error loading digger.yml: %v" , err )
610
- return "" , nil , nil , nil , nil , nil , fmt .Errorf ("error loading digger.yml: %v" , err )
631
+ return "" , nil , nil , nil , nil , nil , nil , fmt .Errorf ("error loading digger.yml: %v" , err )
611
632
}
612
633
613
- return diggerYmlStr , ghService , config , dependencyGraph , & prBranch , & prCommitSha , nil
634
+ return diggerYmlStr , ghService , config , dependencyGraph , & prBranch , & prCommitSha , changedFiles , nil
614
635
}
615
636
616
637
func retrieveConfigFromCache (orgId uint , repoFullName string ) (string , * dg_configuration.DiggerConfig , * graph.Graph [string , dg_configuration.Project ], error ) {
@@ -717,7 +738,7 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
717
738
}
718
739
}
719
740
720
- diggerYmlStr , ghService , config , projectsGraph , branch , commitSha , err := getDiggerConfigForPR (gh , orgId , prLabelsStr , installationId , repoFullName , repoOwner , repoName , cloneURL , issueNumber )
741
+ diggerYmlStr , ghService , config , projectsGraph , branch , commitSha , changedFiles , err := getDiggerConfigForPR (gh , orgId , prLabelsStr , installationId , repoFullName , repoOwner , repoName , cloneURL , issueNumber )
721
742
if err != nil {
722
743
commentReporterManager .UpdateComment (fmt .Sprintf (":x: Could not load digger config, error: %v" , err ))
723
744
log .Printf ("getDiggerConfigForPR error: %v" , err )
@@ -763,6 +784,33 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
763
784
}
764
785
log .Printf ("GitHub IssueComment event processed successfully\n " )
765
786
787
+ jobs , _ , err := generic .ConvertIssueCommentEventToJobs (repoFullName , actor , issueNumber , commentBody , impactedProjects , requestedProject , config .Workflows , prBranchName , defaultBranch )
788
+ if err != nil {
789
+ log .Printf ("Error converting event to jobs: %v" , err )
790
+ commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error converting event to jobs: %v" , err ))
791
+ return fmt .Errorf ("error converting event to jobs" )
792
+ }
793
+ log .Printf ("GitHub IssueComment event converted to Jobs successfully\n " )
794
+
795
+ // ratio of impacted projects to changed files should be less than MAX_RATIO
796
+ maxProjects := config2 .GetMaxProjectsCreated ()
797
+ if maxProjects > 0 {
798
+ if len (impactedProjects ) > maxProjects {
799
+ log .Printf ("Error the number impacted projects %v exceeds maximum allowed: %v" , len (impactedProjects ), maxProjects )
800
+ commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error the number impacted projects %v exceeds maximum allowed: %v" , len (impactedProjects ), maxProjects ))
801
+ log .Printf ("Information about the event:" )
802
+ log .Printf ("GH payload: %v" , payload )
803
+ log .Printf ("PR changed files: %v" , changedFiles )
804
+ log .Printf ("digger.yml STR: %v" , diggerYmlStr )
805
+ log .Printf ("Parsed config: %v" , config )
806
+ log .Printf ("Dependency graph:" )
807
+ spew .Dump (projectsGraph )
808
+ log .Printf ("Impacted Projects: %v" , impactedProjects )
809
+ log .Printf ("Impacted Project jobs: %v" , jobs )
810
+ return fmt .Errorf ("error processing event" )
811
+ }
812
+ }
813
+
766
814
// perform unlocking in backend
767
815
if config .PrLocks {
768
816
for _ , project := range impactedProjects {
@@ -791,14 +839,6 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
791
839
return nil
792
840
}
793
841
794
- jobs , _ , err := generic .ConvertIssueCommentEventToJobs (repoFullName , actor , issueNumber , commentBody , impactedProjects , requestedProject , config .Workflows , prBranchName , defaultBranch )
795
- if err != nil {
796
- log .Printf ("Error converting event to jobs: %v" , err )
797
- commentReporterManager .UpdateComment (fmt .Sprintf (":x: Error converting event to jobs: %v" , err ))
798
- return fmt .Errorf ("error converting event to jobs" )
799
- }
800
- log .Printf ("GitHub IssueComment event converted to Jobs successfully\n " )
801
-
802
842
err = utils .ReportInitialJobsStatus (commentReporter , jobs )
803
843
if err != nil {
804
844
log .Printf ("Failed to comment initial status for jobs: %v" , err )
0 commit comments