52
52
// singleApproverPaths defines paths in cloud or core repos that only require a single approver.
53
53
// The map key is the repo (cloud|teleport|teleport.e) and the value is a list of paths.
54
54
singleApproverPaths = map [string ][]string {
55
- "cloud" : [] string {
55
+ "cloud" : {
56
56
"deploy/fluxcd/config/values.yaml" ,
57
57
"deploy/fluxcd/config/*/values.yaml" ,
58
58
"deploy/fluxcd/config/*/*/values.yaml" ,
68
68
// require a single approver. The map key is the repo (cloud|teleport|teleport.e) and the
69
69
// value is a list of authors. BOTS ONLY - DO NOT INCLUDE EMPLOYEE GITHUB HANDLES.
70
70
singleApproverAuthors = map [string ][]string {
71
- "cloud" : [] string {Dependabot , DependabotBatcher , RenovateBotPrivate , RenovateBotPublic },
71
+ "cloud" : {Dependabot , DependabotBatcher , RenovateBotPrivate , RenovateBotPublic },
72
72
}
73
73
)
74
74
@@ -255,12 +255,12 @@ func (r *Assignments) getDocsReviewers(e *env.Environment, files []github.PullRe
255
255
// the changed docs files. If so, add them as docs reviewers.
256
256
repoReviewers := r .repoReviewers (e )
257
257
a , b := getReviewerSets (e .Author , repoReviewers , r .c .CodeReviewersOmit )
258
- prefCodeReviewers := r .getAllPreferredReviewers (repoReviewers , append (a , b ... ), files )
258
+ preferredCodeReviewers := r .getAllPreferredReviewers (repoReviewers , append (a , b ... ), files )
259
259
260
260
// Get the docs reviewer pool, which does not depend on the files
261
261
// changed by a pull request.
262
262
docsA , docsB := getReviewerSets (e .Author , r .c .DocsReviewers , r .c .DocsReviewersOmit )
263
- reviewers := append (prefCodeReviewers , append (docsA , docsB ... )... )
263
+ reviewers := append (preferredCodeReviewers , append (docsA , docsB ... )... )
264
264
265
265
// If no docs reviewers were assigned, assign admin reviews.
266
266
if len (reviewers ) == 0 {
@@ -438,20 +438,17 @@ func (r *Assignments) CheckInternal(e *env.Environment, reviews []github.Review,
438
438
switch {
439
439
case changes .Docs && changes .Code :
440
440
log .Printf ("Check: Found docs and code changes." )
441
- if err := r .checkInternalDocsReviews (e , reviews , files ); err != nil {
442
- return trace .Wrap (err )
443
- }
444
- if err := r .checkInternalCodeReviews (e , changes , reviews ); err != nil {
441
+ if err := r .checkInternalReviews (e , changes , reviews , files ); err != nil {
445
442
return trace .Wrap (err )
446
443
}
447
444
case ! changes .Docs && changes .Code :
448
445
log .Printf ("Check: Found code changes." )
449
- if err := r .checkInternalCodeReviews (e , changes , reviews ); err != nil {
446
+ if err := r .checkInternalReviews (e , changes , reviews , files ); err != nil {
450
447
return trace .Wrap (err )
451
448
}
452
449
case changes .Docs && ! changes .Code :
453
450
log .Printf ("Check: Found docs changes." )
454
- if err := r .checkInternalDocsReviews ( e , reviews , files ); err != nil {
451
+ if err := r .checkInternalReviews ( e , changes , reviews , files ); err != nil {
455
452
return trace .Wrap (err )
456
453
}
457
454
// Strange state, an empty commit? Check admins.
@@ -478,23 +475,18 @@ func (r *Assignments) checkInternalReleaseReviews(reviews []github.Review) error
478
475
return trace .BadParameter ("requires at least one approval from %v" , reviewers )
479
476
}
480
477
481
- // checkInternalDocsReviews checks whether docs review requirements are satisfied
478
+ // checkInternalReviews checks whether review requirements are satisfied
482
479
// for a PR authored by an internal employee
483
- func (r * Assignments ) checkInternalDocsReviews (e * env.Environment , reviews []github.Review , files []github.PullRequestFile ) error {
484
- reviewers := r . getDocsReviewers ( e , files )
480
+ func (r * Assignments ) checkInternalReviews (e * env.Environment , changes env. Changes , reviews []github.Review , files []github.PullRequestFile ) error {
481
+ setA , setB := getReviewerSets ( e . Author , r . repoReviewers ( e ), r . c . CodeReviewersOmit )
485
482
486
- if check (reviewers , reviews ) {
487
- return nil
483
+ // If this PR touches docs, then approvals from docs reviewers also count.
484
+ // Add them to set B, as docs reviewers are not required so long as we get
485
+ // the appropriate number of approvals.
486
+ if changes .Docs {
487
+ setB = append (setB , r .getDocsReviewers (e , files )... )
488
488
}
489
489
490
- return trace .BadParameter ("requires at least one approval from %v" , reviewers )
491
- }
492
-
493
- // checkInternalCodeReviews checks whether code review requirements are satisfied
494
- // for a PR authored by an internal employee
495
- func (r * Assignments ) checkInternalCodeReviews (e * env.Environment , changes env.Changes , reviews []github.Review ) error {
496
- setA , setB := getReviewerSets (e .Author , r .repoReviewers (e ), r .c .CodeReviewersOmit )
497
-
498
490
// PRs can be approved if you either have multiple code owners that approve
499
491
// or code owner and code reviewer. An exception is for PRs that
500
492
// only modify paths that require a single approver.
0 commit comments