From d589c9a9a86640018428c5088c98bf38d33768ba Mon Sep 17 00:00:00 2001 From: wawa0210 Date: Thu, 22 Oct 2020 15:12:53 +0800 Subject: [PATCH] helm search supports semver pre version numbers starting with 0 Signed-off-by: wawa0210 (cherry picked from commit da6b240fe702d7c1bcdf86b9503191f873fe37dd) --- cmd/helm/search_repo.go | 18 ++++++++--- cmd/helm/search_repo_test.go | 8 +++++ .../helm/repository/testing-index.yaml | 30 +++++++++++++++++++ .../search-semver-pre-invalid-release.txt | 2 ++ .../search-semver-pre-zero-devel-release.txt | 2 ++ 5 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 cmd/helm/testdata/output/search-semver-pre-invalid-release.txt create mode 100644 cmd/helm/testdata/output/search-semver-pre-zero-devel-release.txt diff --git a/cmd/helm/search_repo.go b/cmd/helm/search_repo.go index bf82a60515e..a6ec16ea6df 100644 --- a/cmd/helm/search_repo.go +++ b/cmd/helm/search_repo.go @@ -154,16 +154,26 @@ func (o *searchRepoOptions) applyConstraint(res []*search.Result) ([]*search.Res data := res[:0] foundNames := map[string]bool{} + appendSearchResults := func(res *search.Result) { + data = append(data, res) + if !o.versions { + foundNames[res.Name] = true // If user hasn't requested all versions, only show the latest that matches + } + } for _, r := range res { if _, found := foundNames[r.Name]; found { continue } v, err := semver.NewVersion(r.Chart.Version) - if err != nil || constraint.Check(v) { - data = append(data, r) - if !o.versions { - foundNames[r.Name] = true // If user hasn't requested all versions, only show the latest that matches + + if err != nil { + // If the current version number check appears ErrSegmentStartsZero or ErrInvalidPrerelease error and not devel mode, ingore + if (err == semver.ErrSegmentStartsZero || err == semver.ErrInvalidPrerelease) && !o.devel { + continue } + appendSearchResults(r) + } else if constraint.Check(v) { + appendSearchResults(r) } } diff --git a/cmd/helm/search_repo_test.go b/cmd/helm/search_repo_test.go index 39c9c53f5d5..86519cd4266 100644 --- a/cmd/helm/search_repo_test.go +++ b/cmd/helm/search_repo_test.go @@ -68,6 +68,14 @@ func TestSearchRepositoriesCmd(t *testing.T) { name: "search for 'maria', expect valid json output", cmd: "search repo maria --output json", golden: "output/search-output-json.txt", + }, { + name: "search for 'maria', expect one match with semver begin with zero development version", + cmd: "search repo maria --devel", + golden: "output/search-semver-pre-zero-devel-release.txt", + }, { + name: "search for 'nginx-ingress', expect one match with invalid development pre version", + cmd: "search repo nginx-ingress --devel", + golden: "output/search-semver-pre-invalid-release.txt", }, { name: "search for 'alpine', expect valid yaml output", cmd: "search repo alpine --output yaml", diff --git a/cmd/helm/testdata/helmhome/helm/repository/testing-index.yaml b/cmd/helm/testdata/helmhome/helm/repository/testing-index.yaml index e00e7de7974..d76501e5715 100644 --- a/cmd/helm/testdata/helmhome/helm/repository/testing-index.yaml +++ b/cmd/helm/testdata/helmhome/helm/repository/testing-index.yaml @@ -55,3 +55,33 @@ entries: - name: Bitnami email: containers@bitnami.com icon: "" + - name: mariadb + url: https://charts.helm.sh/stable/mariadb-0.3.0-0565674.tgz + checksum: 65229f6de44a2be9f215d11dbff311673fc8ba56 + home: https://mariadb.org + sources: + - https://github.com/bitnami/bitnami-docker-mariadb + version: 0.3.0-0565674 + description: Chart for MariaDB + keywords: + - mariadb + - mysql + - database + - sql + maintainers: + - name: Bitnami + email: containers@bitnami.com + icon: "" + nginx-ingress: + - name: nginx-ingress + url: https://github.com/kubernetes/ingress-nginx/ingress-a.b.c.sdfsdf.tgz + checksum: 25229f6de44a2be9f215d11dbff31167ddc8ba56 + home: https://github.com/kubernetes/ingress-nginx + sources: + - https://github.com/kubernetes/ingress-nginx + version: a.b.c.sdfsdf + description: Chart for nginx-ingress + keywords: + - ingress + - nginx + icon: "" diff --git a/cmd/helm/testdata/output/search-semver-pre-invalid-release.txt b/cmd/helm/testdata/output/search-semver-pre-invalid-release.txt new file mode 100644 index 00000000000..ea39e2978ed --- /dev/null +++ b/cmd/helm/testdata/output/search-semver-pre-invalid-release.txt @@ -0,0 +1,2 @@ +NAME CHART VERSION APP VERSION DESCRIPTION +testing/nginx-ingress a.b.c.sdfsdf Chart for nginx-ingress diff --git a/cmd/helm/testdata/output/search-semver-pre-zero-devel-release.txt b/cmd/helm/testdata/output/search-semver-pre-zero-devel-release.txt new file mode 100644 index 00000000000..971c6523e91 --- /dev/null +++ b/cmd/helm/testdata/output/search-semver-pre-zero-devel-release.txt @@ -0,0 +1,2 @@ +NAME CHART VERSION APP VERSION DESCRIPTION +testing/mariadb 0.3.0-0565674 Chart for MariaDB