@@ -205,30 +205,43 @@ func addSourceAnnotationToTask(file, resourcesURI string) error {
205
205
annotationsPattern := regexp .MustCompile (`^\s+annotations:\s*$` )
206
206
sourceAnnotationPattern := regexp .MustCompile (`^\s+tekton\.dev/source:\s*".*"$` )
207
207
208
- // Flag to indicate if the "tekton.dev/source" annotation is already present
209
- var sourceAnnotationExists bool
208
+ // Flag to indicate if we are within the annotations block
209
+ var inAnnotationsBlock bool
210
+
211
+ // Buffer to store annotations lines
212
+ var annotationsBuffer []string
210
213
211
214
// Read the file line by line
212
215
for scanner .Scan () {
213
216
line := scanner .Text ()
214
217
215
- // Check if the line matches the annotations pattern
216
- if annotationsPattern .MatchString (line ) {
217
- // If annotations block is found, initialize sourceAnnotationExists to false
218
- sourceAnnotationExists = false
219
- } else if ! sourceAnnotationExists && sourceAnnotationPattern .MatchString (line ) {
220
- // If source annotation is found within annotations block, set sourceAnnotationExists to true
221
- sourceAnnotationExists = true
222
- }
223
-
224
- // Append the line to updatedContent slice
225
- updatedContent = append (updatedContent , line )
226
-
227
- // Check if we are still within the annotations block
228
- if ! sourceAnnotationExists && annotationsPattern .MatchString (line ) {
218
+ switch {
219
+ case annotationsPattern .MatchString (line ):
220
+ // If annotations block is found, set the inAnnotationsBlock flag to true
221
+ inAnnotationsBlock = true
222
+ // Append the line to updatedContent slice
223
+ updatedContent = append (updatedContent , line )
229
224
// Add the source annotation as the first line of the annotations block
230
225
updatedContent = append (updatedContent , fmt .Sprintf (" tekton.dev/source: \" %s\" " , repoURL ))
231
- sourceAnnotationExists = true // Set sourceAnnotationExists to true after adding the annotation
226
+ case inAnnotationsBlock :
227
+ switch {
228
+ case sourceAnnotationPattern .MatchString (line ):
229
+ // Skip the existing source annotation
230
+ continue
231
+ case strings .TrimSpace (line ) == "" || ! strings .HasPrefix (line , " " ):
232
+ // If a non-indented line or an empty line is found, we consider it as the end of the annotations block
233
+ inAnnotationsBlock = false
234
+ // Append buffered annotations lines
235
+ updatedContent = append (updatedContent , annotationsBuffer ... )
236
+ // Append the current line
237
+ updatedContent = append (updatedContent , line )
238
+ default :
239
+ // Buffer the annotation lines
240
+ annotationsBuffer = append (annotationsBuffer , line )
241
+ }
242
+ default :
243
+ // Append the line to updatedContent slice
244
+ updatedContent = append (updatedContent , line )
232
245
}
233
246
}
234
247
0 commit comments