github.com/argoproj/argo-cd/v2@v2.10.9/applicationset/services/pull_request/utils.go (about) 1 package pull_request 2 3 import ( 4 "context" 5 "fmt" 6 "regexp" 7 8 argoprojiov1alpha1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" 9 ) 10 11 func compileFilters(filters []argoprojiov1alpha1.PullRequestGeneratorFilter) ([]*Filter, error) { 12 outFilters := make([]*Filter, 0, len(filters)) 13 for _, filter := range filters { 14 outFilter := &Filter{} 15 var err error 16 if filter.BranchMatch != nil { 17 outFilter.BranchMatch, err = regexp.Compile(*filter.BranchMatch) 18 if err != nil { 19 return nil, fmt.Errorf("error compiling BranchMatch regexp %q: %v", *filter.BranchMatch, err) 20 } 21 } 22 if filter.TargetBranchMatch != nil { 23 outFilter.TargetBranchMatch, err = regexp.Compile(*filter.TargetBranchMatch) 24 if err != nil { 25 return nil, fmt.Errorf("error compiling TargetBranchMatch regexp %q: %v", *filter.TargetBranchMatch, err) 26 } 27 } 28 outFilters = append(outFilters, outFilter) 29 } 30 return outFilters, nil 31 } 32 33 func matchFilter(pullRequest *PullRequest, filter *Filter) bool { 34 if filter.BranchMatch != nil && !filter.BranchMatch.MatchString(pullRequest.Branch) { 35 return false 36 } 37 if filter.TargetBranchMatch != nil && !filter.TargetBranchMatch.MatchString(pullRequest.TargetBranch) { 38 return false 39 } 40 41 return true 42 } 43 44 func ListPullRequests(ctx context.Context, provider PullRequestService, filters []argoprojiov1alpha1.PullRequestGeneratorFilter) ([]*PullRequest, error) { 45 compiledFilters, err := compileFilters(filters) 46 if err != nil { 47 return nil, err 48 } 49 50 pullRequests, err := provider.List(ctx) 51 if err != nil { 52 return nil, err 53 } 54 55 if len(compiledFilters) == 0 { 56 return pullRequests, nil 57 } 58 59 filteredPullRequests := make([]*PullRequest, 0, len(pullRequests)) 60 for _, pullRequest := range pullRequests { 61 for _, filter := range compiledFilters { 62 matches := matchFilter(pullRequest, filter) 63 if matches { 64 filteredPullRequests = append(filteredPullRequests, pullRequest) 65 break 66 } 67 } 68 } 69 70 return filteredPullRequests, nil 71 }