@@ -435,6 +435,7 @@ type releaseNoteEntry struct {
435435 prNumber string
436436}
437437
438+ // modifyEntryTitle removes the specified prefixes from the title.
438439func modifyEntryTitle (title string , prefixes []string ) string {
439440 entryWithoutTag := title
440441 for _ , prefix := range prefixes {
@@ -444,6 +445,16 @@ func modifyEntryTitle(title string, prefixes []string) string {
444445 return strings .ToUpper (string (entryWithoutTag [0 ])) + entryWithoutTag [1 :]
445446}
446447
448+ // trimAreaFromTitle removes the prefixed area from title to avoid duplication.
449+ func trimAreaFromTitle (title , area string ) string {
450+ titleWithoutArea := title
451+ pattern := `(?i)^` + regexp .QuoteMeta (area + ":" )
452+ re := regexp .MustCompile (pattern )
453+ titleWithoutArea = re .ReplaceAllString (titleWithoutArea , "" )
454+ titleWithoutArea = strings .TrimSpace (titleWithoutArea )
455+ return titleWithoutArea
456+ }
457+
447458// generateReleaseNoteEntry processes a commit into a PR line item for the release notes.
448459func generateReleaseNoteEntry (c * commit ) (* releaseNoteEntry , error ) {
449460 entry := & releaseNoteEntry {}
@@ -501,6 +512,7 @@ func generateReleaseNoteEntry(c *commit) (*releaseNoteEntry, error) {
501512 }
502513
503514 if * prefixAreaLabel {
515+ entry .title = trimAreaFromTitle (entry .title , area )
504516 entry .title = fmt .Sprintf ("- %s: %s" , area , entry .title )
505517 } else {
506518 entry .title = fmt .Sprintf ("- %s" , entry .title )
0 commit comments