@@ -11,6 +11,7 @@ import (
1111 "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode"
1212 "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/keys"
1313 apipac "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
14+ "github.com/openshift-pipelines/pipelines-as-code/pkg/events"
1415 "github.com/openshift-pipelines/pipelines-as-code/pkg/opscomments"
1516 "github.com/openshift-pipelines/pipelines-as-code/pkg/params"
1617 "github.com/openshift-pipelines/pipelines-as-code/pkg/params/info"
@@ -149,7 +150,42 @@ func getName(prun *tektonv1.PipelineRun) string {
149150 return name
150151}
151152
152- func MatchPipelinerunByAnnotation (ctx context.Context , logger * zap.SugaredLogger , pruns []* tektonv1.PipelineRun , cs * params.Run , event * info.Event , vcx provider.Interface ) ([]Match , error ) {
153+ // checkPipelineRunAnnotation checks if the Pipelinerun has
154+ // `on-event`/`on-target-branch annotations` with `on-cel-expression`
155+ // and if present then warns the user that `on-cel-expression` will take precedence.
156+ func checkPipelineRunAnnotation (prun * tektonv1.PipelineRun , eventEmitter * events.EventEmitter , repo * apipac.Repository ) {
157+ // Define the annotations to check in a slice for easy iteration
158+ checks := []struct {
159+ key string
160+ value string
161+ }{
162+ {"on-event" , prun .GetObjectMeta ().GetAnnotations ()[keys .OnEvent ]},
163+ {"on-target-branch" , prun .GetObjectMeta ().GetAnnotations ()[keys .OnTargetBranch ]},
164+ }
165+
166+ // Preallocate the annotations slice with the exact capacity needed
167+ annotations := make ([]string , 0 , len (checks ))
168+
169+ // Iterate through each check and append the key if the value is non-empty
170+ for _ , check := range checks {
171+ if check .value != "" {
172+ annotations = append (annotations , check .key )
173+ }
174+ }
175+
176+ prName := getName (prun )
177+ if len (annotations ) > 0 {
178+ ignoredAnnotations := strings .Join (annotations , ", " )
179+ msg := fmt .Sprintf (
180+ "Warning: The Pipelinerun '%s' has 'on-cel-expression' defined along with [%s] annotation(s). The `on-cel-expression` will take precedence and these annotations will be ignored" ,
181+ prName ,
182+ ignoredAnnotations ,
183+ )
184+ eventEmitter .EmitMessage (repo , zap .WarnLevel , "RespositoryTakesOnCelExpressionPrecedence" , msg )
185+ }
186+ }
187+
188+ func MatchPipelinerunByAnnotation (ctx context.Context , logger * zap.SugaredLogger , pruns []* tektonv1.PipelineRun , cs * params.Run , event * info.Event , vcx provider.Interface , eventEmitter * events.EventEmitter , repo * apipac.Repository ) ([]Match , error ) {
153189 matchedPRs := []Match {}
154190 infomsg := fmt .Sprintf ("matching pipelineruns to event: URL=%s, target-branch=%s, source-branch=%s, target-event=%s" ,
155191 event .URL ,
@@ -226,7 +262,10 @@ func MatchPipelinerunByAnnotation(ctx context.Context, logger *zap.SugaredLogger
226262 if event .EventType == opscomments .NoOpsCommentEventType .String () || event .EventType == opscomments .OnCommentEventType .String () {
227263 continue
228264 }
265+
229266 if celExpr , ok := prun .GetObjectMeta ().GetAnnotations ()[keys .OnCelExpression ]; ok {
267+ checkPipelineRunAnnotation (prun , eventEmitter , repo )
268+
230269 out , err := celEvaluate (ctx , celExpr , event , vcx )
231270 if err != nil {
232271 logger .Errorf ("there was an error evaluating the CEL expression, skipping: %v" , err )
0 commit comments