From ab7f6793649f80d4443bc25dccfd6fce9e5e5962 Mon Sep 17 00:00:00 2001
From: Matthew Dawson <github@mjdsystems.ca>
Date: Mon, 17 Jul 2023 14:06:20 -0400
Subject: [PATCH] fix(datasource/helm): Skip helm charts with no listed
 versions (#23223)

---
 .../helm/__fixtures__/index_emptypackage.yaml | 19 +++++++++++++++++++
 lib/modules/datasource/helm/index.spec.ts     | 18 ++++++++++++++++++
 lib/modules/datasource/helm/index.ts          |  3 +++
 3 files changed, 40 insertions(+)
 create mode 100644 lib/modules/datasource/helm/__fixtures__/index_emptypackage.yaml

diff --git a/lib/modules/datasource/helm/__fixtures__/index_emptypackage.yaml b/lib/modules/datasource/helm/__fixtures__/index_emptypackage.yaml
new file mode 100644
index 0000000000..fef501521b
--- /dev/null
+++ b/lib/modules/datasource/helm/__fixtures__/index_emptypackage.yaml
@@ -0,0 +1,19 @@
+apiVersion: v1
+entries:
+  aerospike: []
+  ambassador:
+  - apiVersion: v1
+    appVersion: 0.70.1
+    created: 2019-06-02T08:56:36.119470813Z
+    description: A Helm chart for Datawire Ambassador
+    digest: 880002d74accfc9dab1debcc78c134fb4989e73ff84b137ce7aa92bf4d726297
+    engine: gotpl
+    home: https://www.getambassador.io/
+    icon: https://www.getambassador.io/images/logo.png
+    name: ambassador
+    sources:
+    - https://github.com/datawire/ambassador
+    - https://github.com/prometheus/statsd_exporter
+    urls:
+    - https://charts.helm.sh/stable/packages/ambassador-2.7.0.tgz
+    version: 2.7.0
diff --git a/lib/modules/datasource/helm/index.spec.ts b/lib/modules/datasource/helm/index.spec.ts
index c4dc79ae96..7a272957dc 100644
--- a/lib/modules/datasource/helm/index.spec.ts
+++ b/lib/modules/datasource/helm/index.spec.ts
@@ -167,6 +167,24 @@ describe('modules/datasource/helm/index', () => {
       expect(releases).toMatchSnapshot();
     });
 
+    it('returns list of versions for other packages if one packages has no versions', async () => {
+      httpMock
+        .scope('https://example-repository.com')
+        .get('/index.yaml')
+        .reply(200, Fixtures.get('index_emptypackage.yaml'));
+      const releases = await getPkgReleases({
+        datasource: HelmDatasource.id,
+        packageName: 'ambassador',
+        registryUrls: ['https://example-repository.com'],
+      });
+      expect(releases).toMatchObject({
+        homepage: 'https://www.getambassador.io/',
+        registryUrl: 'https://example-repository.com',
+        sourceUrl: 'https://github.com/datawire/ambassador',
+        releases: expect.toBeArrayOfSize(1),
+      });
+    });
+
     it('adds trailing slash to subdirectories', async () => {
       httpMock
         .scope('https://example-repository.com')
diff --git a/lib/modules/datasource/helm/index.ts b/lib/modules/datasource/helm/index.ts
index 8fcf881eda..6d8e2ef4c0 100644
--- a/lib/modules/datasource/helm/index.ts
+++ b/lib/modules/datasource/helm/index.ts
@@ -60,6 +60,9 @@ export class HelmDatasource extends Datasource {
       }
       const result: HelmRepositoryData = {};
       for (const [name, releases] of Object.entries(doc.entries)) {
+        if (releases.length === 0) {
+          continue;
+        }
         const latestRelease = releases[0];
         const sourceUrl = findSourceUrl(latestRelease);
         result[name] = {
-- 
GitLab