@@ -90,17 +90,31 @@ func (j *WatchRepositoryTagsJob) computeEvents(tags []string) ([]types.Event, er
9090
9191 events := []types.Event {}
9292
93- if j .details .trackedImage .Policy != nil {
94- tags = j .details .trackedImage .Policy .Filter (tags )
95- }
93+ // This contains all tracked images that share the same imageIdentifier and thus, the same watcher
94+ allRelatedTrackedImages := getRelatedTrackedImages (j .details .trackedImage , trackedImages )
95+
96+ for _ , trackedImage := range allRelatedTrackedImages {
97+
98+ filteredTags := tags
99+
100+ // The fact that they are related, does not mean they share the exact same Policy configuration, so wee need
101+ // to calculate the tags here for each image.
102+ filteredTags = j .details .trackedImage .Policy .Filter (tags )
103+
104+ for _ , tag := range filteredTags {
96105
97- for _ , trackedImage := range getRelatedTrackedImages (j .details .trackedImage , trackedImages ) {
98- for _ , tag := range tags {
99106 update , err := trackedImage .Policy .ShouldUpdate (trackedImage .Image .Tag (), tag )
100107 if err != nil {
101108 continue
102109 }
103- if update && ! exists (tag , events ) {
110+ if update == false {
111+ continue
112+ }
113+ // When using tags watcher we rely completely on tag names to deal with updates.
114+ if trackedImage .Image .Tag () == tag {
115+ break
116+ }
117+ if ! exists (tag , events ) {
104118 event := types.Event {
105119 Repository : types.Repository {
106120 Name : trackedImage .Image .Repository (),
@@ -134,11 +148,10 @@ func exists(tag string, events []types.Event) bool {
134148func getRelatedTrackedImages (ours * types.TrackedImage , all []* types.TrackedImage ) []* types.TrackedImage {
135149 b := all [:0 ]
136150 for _ , x := range all {
137- if x .Image . Repository () == ours .Image . Repository ( ) {
151+ if getImageIdentifier ( x .Image , x . Policy . KeepTag ()) == getImageIdentifier ( ours .Image , ours . Policy . KeepTag () ) {
138152 b = append (b , x )
139153 }
140154 }
141-
142155 return b
143156}
144157
0 commit comments