Description
When using v1.1.1 CRD-based configuration with useAnnotations: true bridge mode (to maintain backward compatibility with annotation-configured Applications), the newest-build update strategy exhibits two critical bugs:
allow-tags regex filter is ignored during tag selection
- Tag sorting selects wrong "newest" image when multi-arch and single-arch images coexist in the same repository
Both bugs cause production image downgrades/wrong deployments.
Environment
- argocd-image-updater: v1.1.1 (chart 1.1.5)
- Registry: AWS ECR
- Strategy:
newest-build via annotations
- Configuration:
useAnnotations: true in ImageUpdater CR
Bug 1: allow-tags filter ignored
Application annotations:
argocd-image-updater.argoproj.io/silverbolt-bin-packed.allow-tags: "regexp:^ga-.*"
argocd-image-updater.argoproj.io/silverbolt-bin-packed.update-strategy: "newest-build"
ImageUpdater CR:
spec:
applicationRefs:
- namePattern: "*"
useAnnotations: true
Expected: Only tags matching ^ga-.* should be considered. The updater should select ga-015fcaa as the newest matching tag.
Actual: The updater selected beta-015fcaa instead (same image digest, different tag name). This happened across 14 production tenant applications simultaneously. The beta-* tag does not match the allow-tags regex pattern.
It appears the tag filter is applied after selection rather than before, or not applied at all when reading from annotations in bridge mode.
Bug 2: newest-build picks wrong image across format boundaries
Application annotations:
argocd-image-updater.argoproj.io/configuration-manager.allow-tags: "regexp:^master-.*"
argocd-image-updater.argoproj.io/configuration-manager.update-strategy: "newest-build"
Registry state:
| Tag |
Pushed |
Size |
Format |
master-2e869c0 |
2026-04-06 |
673 MB |
single-arch |
master-55c4b56 |
2025-09-07 |
851 MB |
multi-arch OCI index |
Expected: master-2e869c0 should be selected as it was pushed most recently.
Actual: master-55c4b56 (September 2025) was selected, causing a 7-month downgrade in production. The old image uses application/vnd.oci.image.index.v1+json (multi-arch manifest) while newer images are single-arch.
The v0.x newest-build strategy used the registry's push timestamp (imagePushedAt in ECR) for sorting. v1.1 appears to use the image manifest's internal created timestamp, which is misleading for multi-arch images.
Impact
These bugs caused production incidents:
- 14 tenant applications deployed with wrong tag prefix (
beta- instead of ga-)
- 2 services downgraded to 7-month-old images
- 1 service changed to a
latest tag
All required manual intervention to revert.
Suggested fix
- In the
useAnnotations code path, ensure allowTags regex is applied to filter the tag list before GetNewestVersionFromTags sorts and selects.
- For
newest-build strategy, use the registry-reported push/upload timestamp rather than the image manifest's created field, matching v0.x behavior.
Workaround
Rolled back to v0.12 (annotation-based) which correctly applies allow-tags and sorts by registry push timestamp.
Description
When using v1.1.1 CRD-based configuration with
useAnnotations: truebridge mode (to maintain backward compatibility with annotation-configured Applications), thenewest-buildupdate strategy exhibits two critical bugs:allow-tagsregex filter is ignored during tag selectionBoth bugs cause production image downgrades/wrong deployments.
Environment
newest-buildvia annotationsuseAnnotations: truein ImageUpdater CRBug 1:
allow-tagsfilter ignoredApplication annotations:
ImageUpdater CR:
Expected: Only tags matching
^ga-.*should be considered. The updater should selectga-015fcaaas the newest matching tag.Actual: The updater selected
beta-015fcaainstead (same image digest, different tag name). This happened across 14 production tenant applications simultaneously. Thebeta-*tag does not match theallow-tagsregex pattern.It appears the tag filter is applied after selection rather than before, or not applied at all when reading from annotations in bridge mode.
Bug 2:
newest-buildpicks wrong image across format boundariesApplication annotations:
Registry state:
master-2e869c0master-55c4b56Expected:
master-2e869c0should be selected as it was pushed most recently.Actual:
master-55c4b56(September 2025) was selected, causing a 7-month downgrade in production. The old image usesapplication/vnd.oci.image.index.v1+json(multi-arch manifest) while newer images are single-arch.The v0.x
newest-buildstrategy used the registry's push timestamp (imagePushedAtin ECR) for sorting. v1.1 appears to use the image manifest's internalcreatedtimestamp, which is misleading for multi-arch images.Impact
These bugs caused production incidents:
beta-instead ofga-)latesttagAll required manual intervention to revert.
Suggested fix
useAnnotationscode path, ensureallowTagsregex is applied to filter the tag list beforeGetNewestVersionFromTagssorts and selects.newest-buildstrategy, use the registry-reported push/upload timestamp rather than the image manifest'screatedfield, matching v0.x behavior.Workaround
Rolled back to v0.12 (annotation-based) which correctly applies
allow-tagsand sorts by registry push timestamp.