argoproj / argo-cd

Declarative Continuous Deployment for Kubernetes
https://argo-cd.readthedocs.io
Apache License 2.0
17.72k stars 5.4k forks source link

Allow git client to discover non-semver tags #18899

Open klagroix opened 3 months ago

klagroix commented 3 months ago

Summary

https://github.com/argoproj/argo-cd/pull/17566 updated Argo CD to be able to compare semver tags. This allows us to use a constraint like >=1.2.0 to select the latest git tag that meets the constraint.

While this works well for git repositories that are tagged following semver, this does not work for repositories using a different versioning scheme (example: calver)

Motivation

Auto-discovery of git tags allows for nicer tracking and deployment vs retagging a git tag (like `production) or overwriting the target revision per-application when a new tag is released. While semver is the most widely used versioning scheme, it's not the only one in use. It would be nice if ArgoCD supported different versioning schemes in additon to semver.

(i.e. the same motivation as https://github.com/argoproj/argo-cd/issues/5609 and https://github.com/argoproj/argo-cd/pull/17566)

Proposal

Allow for lexical sort like is supported in ArgoCD Image Updater. Assuming a regex pattern could be provided like ArgoCD Image Updater, this method could be used for non-semver versioning schemes (including calver)

pnowy commented 6 days ago

I could imagine other use-case for this feature. So let's assume that you have a single repository with multiple manifests (applications) (e.g. microservices apps) and would like to track each app separately based on the specific tag group. Then with this feature you could define the tracking rule with some prefix, e.g. targetRevision: app1-*. Then we could have multiple tags like: app1-1.0.0, app1-1.0.1 for app1 and app2-1.0.1, app2-1.0.2 for app 2 - each pushed separately by CI/CD pipeline when specific app is released.

I think above use-case is not possible to handle with current tracking.