From af2accbaf8aa538cc7655777734219c230bd286c Mon Sep 17 00:00:00 2001 From: Chance Zibolski Date: Thu, 8 Feb 2024 11:10:58 -0800 Subject: [PATCH 01/10] feat(kustomize): support OCI helm charts Signed-off-by: Chance Zibolski --- .../__fixtures__/kustomizeHelmChart.yaml | 4 +++ .../__snapshots__/extract.spec.ts.snap | 11 +++++++ lib/modules/manager/kustomize/extract.spec.ts | 29 +++++++++++++++++++ lib/modules/manager/kustomize/extract.ts | 23 +++++++++++---- lib/modules/manager/kustomize/readme.md | 1 + 5 files changed, 62 insertions(+), 6 deletions(-) diff --git a/lib/modules/manager/kustomize/__fixtures__/kustomizeHelmChart.yaml b/lib/modules/manager/kustomize/__fixtures__/kustomizeHelmChart.yaml index 56f4887e4ac969..1995c95721ff2d 100644 --- a/lib/modules/manager/kustomize/__fixtures__/kustomizeHelmChart.yaml +++ b/lib/modules/manager/kustomize/__fixtures__/kustomizeHelmChart.yaml @@ -13,3 +13,7 @@ helmCharts: releaseName: moria version: 3.1.3 repo: https://itzg.github.io/minecraft-server-charts +- name: redis + releaseName: redis + version: 18.12.1 + repo: oci://registry-1.docker.io/bitnamicharts diff --git a/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap index 2d21234e895c42..c5eded773f3cce 100644 --- a/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap @@ -174,6 +174,17 @@ exports[`modules/manager/kustomize/extract extractPackageFile() parses helmChart "https://itzg.github.io/minecraft-server-charts", ], }, + { + "currentValue": "18.12.1", + "datasource": "docker", + "depName": "redis", + "depType": "OCIChart", + "packageName": "registry-1.docker.io/bitnamicharts/redis", + "pinDigests": false, + "registryUrls": [ + "https://registry-1.docker.io/bitnamicharts", + ], + }, ], } `; diff --git a/lib/modules/manager/kustomize/extract.spec.ts b/lib/modules/manager/kustomize/extract.spec.ts index 75c2cb52cd9408..f6fb5a1bbddd39 100644 --- a/lib/modules/manager/kustomize/extract.spec.ts +++ b/lib/modules/manager/kustomize/extract.spec.ts @@ -167,6 +167,7 @@ describe('modules/manager/kustomize/extract', () => { currentValue: '29.6.0', registryUrls: [registryUrl], datasource: HelmDatasource.id, + depType: 'HelmChart', }; const pkg = extractHelmChart({ name: sample.depName, @@ -175,6 +176,24 @@ describe('modules/manager/kustomize/extract', () => { }); expect(pkg).toEqual(sample); }); + + it('should correctly extract an OCI chart', () => { + const sample = { + depName: 'redis', + packageName: 'registry-1.docker.io/bitnamicharts/redis', + currentValue: '18.12.1', + registryUrls: ['https://registry-1.docker.io/bitnamicharts'], + datasource: DockerDatasource.id, + pinDigests: false, + depType: 'OCIChart', + }; + const pkg = extractHelmChart({ + name: sample.depName, + version: sample.currentValue, + repo: 'oci://registry-1.docker.io/bitnamicharts', + }); + expect(pkg).toEqual(sample); + }); }); describe('image extraction', () => { @@ -447,8 +466,18 @@ describe('modules/manager/kustomize/extract', () => { depType: 'HelmChart', depName: 'minecraft', currentValue: '3.1.3', + datasource: 'helm', registryUrls: ['https://itzg.github.io/minecraft-server-charts'], }, + { + depType: 'OCIChart', + depName: 'redis', + currentValue: '18.12.1', + datasource: 'docker', + packageName: 'registry-1.docker.io/bitnamicharts/redis', + pinDigests: false, + registryUrls: ['https://registry-1.docker.io/bitnamicharts'], + }, ], }); }); diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index 3c021d6fad7bd9..92ae47ac1909b3 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -8,6 +8,7 @@ import { GitTagsDatasource } from '../../datasource/git-tags'; import { GithubTagsDatasource } from '../../datasource/github-tags'; import { HelmDatasource } from '../../datasource/helm'; import { splitImageParts } from '../dockerfile/extract'; +import { isOCIRegistry } from '../helmv3/utils'; import type { PackageDependency, PackageFileContent } from '../types'; import type { HelmChart, Image, Kustomize } from './types'; @@ -143,13 +144,26 @@ export function extractHelmChart( if (!helmChart.name) { return null; } - - return { + const res: PackageDependency = { depName: helmChart.name, currentValue: helmChart.version, registryUrls: [helmChart.repo], datasource: HelmDatasource.id, + depType: 'HelmChart', }; + + if (isOCIRegistry(helmChart.repo)) { + res.datasource = DockerDatasource.id; + const repoUrl = helmChart.repo.replace('oci://', ''); + res.packageName = `${repoUrl}/${helmChart.name}`; + res.registryUrls = [`https://${repoUrl}`]; + // https://github.com/helm/helm/issues/10312 + // https://github.com/helm/helm/issues/10678 + res.pinDigests = false; + res.depType = 'OCIChart'; + } + + return res; } export function parseKustomize( @@ -238,10 +252,7 @@ export function extractPackageFile( for (const helmChart of coerceArray(pkg.helmCharts)) { const dep = extractHelmChart(helmChart); if (dep) { - deps.push({ - ...dep, - depType: 'HelmChart', - }); + deps.push(dep); } } diff --git a/lib/modules/manager/kustomize/readme.md b/lib/modules/manager/kustomize/readme.md index ed665229dc393d..a5593b4a7f3a19 100644 --- a/lib/modules/manager/kustomize/readme.md +++ b/lib/modules/manager/kustomize/readme.md @@ -18,6 +18,7 @@ This manager uses three `depType`s to allow fine-grained control of which depend - Component - Kustomization - HelmChart +- OCIChart **Limitations** From 26302286716ef50bf9547646d6434907956bade9 Mon Sep 17 00:00:00 2001 From: Chance Zibolski Date: Mon, 12 Feb 2024 08:44:25 -0800 Subject: [PATCH 02/10] kustomize: Remove redundant registryUrl for OCIChart --- .../__snapshots__/extract.spec.ts.snap | 3 -- lib/modules/manager/kustomize/extract.spec.ts | 2 -- lib/modules/manager/kustomize/extract.ts | 29 ++++++++++--------- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap index c5eded773f3cce..396eb9e1e0a8f0 100644 --- a/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap @@ -181,9 +181,6 @@ exports[`modules/manager/kustomize/extract extractPackageFile() parses helmChart "depType": "OCIChart", "packageName": "registry-1.docker.io/bitnamicharts/redis", "pinDigests": false, - "registryUrls": [ - "https://registry-1.docker.io/bitnamicharts", - ], }, ], } diff --git a/lib/modules/manager/kustomize/extract.spec.ts b/lib/modules/manager/kustomize/extract.spec.ts index f6fb5a1bbddd39..bf3c9994854fe3 100644 --- a/lib/modules/manager/kustomize/extract.spec.ts +++ b/lib/modules/manager/kustomize/extract.spec.ts @@ -182,7 +182,6 @@ describe('modules/manager/kustomize/extract', () => { depName: 'redis', packageName: 'registry-1.docker.io/bitnamicharts/redis', currentValue: '18.12.1', - registryUrls: ['https://registry-1.docker.io/bitnamicharts'], datasource: DockerDatasource.id, pinDigests: false, depType: 'OCIChart', @@ -476,7 +475,6 @@ describe('modules/manager/kustomize/extract', () => { datasource: 'docker', packageName: 'registry-1.docker.io/bitnamicharts/redis', pinDigests: false, - registryUrls: ['https://registry-1.docker.io/bitnamicharts'], }, ], }); diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index 92ae47ac1909b3..54d0ab06017ae8 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -144,26 +144,27 @@ export function extractHelmChart( if (!helmChart.name) { return null; } - const res: PackageDependency = { + + if (isOCIRegistry(helmChart.repo)) { + return { + depName: helmChart.name, + currentValue: helmChart.version, + datasource: DockerDatasource.id, + packageName: `${helmChart.repo.replace('oci://', '')}/${helmChart.name}`, + // https://github.com/helm/helm/issues/10312 + // https://github.com/helm/helm/issues/10678 + pinDigests: false, + depType: 'OCIChart', + }; + } + + return { depName: helmChart.name, currentValue: helmChart.version, registryUrls: [helmChart.repo], datasource: HelmDatasource.id, depType: 'HelmChart', }; - - if (isOCIRegistry(helmChart.repo)) { - res.datasource = DockerDatasource.id; - const repoUrl = helmChart.repo.replace('oci://', ''); - res.packageName = `${repoUrl}/${helmChart.name}`; - res.registryUrls = [`https://${repoUrl}`]; - // https://github.com/helm/helm/issues/10312 - // https://github.com/helm/helm/issues/10678 - res.pinDigests = false; - res.depType = 'OCIChart'; - } - - return res; } export function parseKustomize( From c5db80bee129042d7f0308eafc0a569eacdc414b Mon Sep 17 00:00:00 2001 From: Chance Zibolski Date: Mon, 12 Feb 2024 16:00:45 -0800 Subject: [PATCH 03/10] kustomize: depType: Use depType HelmChart instead of OCIChart --- .../manager/kustomize/__snapshots__/extract.spec.ts.snap | 2 +- lib/modules/manager/kustomize/extract.spec.ts | 6 +++--- lib/modules/manager/kustomize/extract.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap index 396eb9e1e0a8f0..bcf1a04260898c 100644 --- a/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap @@ -178,7 +178,7 @@ exports[`modules/manager/kustomize/extract extractPackageFile() parses helmChart "currentValue": "18.12.1", "datasource": "docker", "depName": "redis", - "depType": "OCIChart", + "depType": "HelmChart", "packageName": "registry-1.docker.io/bitnamicharts/redis", "pinDigests": false, }, diff --git a/lib/modules/manager/kustomize/extract.spec.ts b/lib/modules/manager/kustomize/extract.spec.ts index bf3c9994854fe3..aa48b0a49fec37 100644 --- a/lib/modules/manager/kustomize/extract.spec.ts +++ b/lib/modules/manager/kustomize/extract.spec.ts @@ -465,14 +465,14 @@ describe('modules/manager/kustomize/extract', () => { depType: 'HelmChart', depName: 'minecraft', currentValue: '3.1.3', - datasource: 'helm', + datasource: HelmDatasource.id, registryUrls: ['https://itzg.github.io/minecraft-server-charts'], }, { - depType: 'OCIChart', + depType: 'HelmChart', depName: 'redis', currentValue: '18.12.1', - datasource: 'docker', + datasource: DockerDatasource.id, packageName: 'registry-1.docker.io/bitnamicharts/redis', pinDigests: false, }, diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index 54d0ab06017ae8..dc8f8e067f4865 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -154,7 +154,7 @@ export function extractHelmChart( // https://github.com/helm/helm/issues/10312 // https://github.com/helm/helm/issues/10678 pinDigests: false, - depType: 'OCIChart', + depType: 'HelmChart', }; } From 5498802f42b705df7dac444253d2dc2994b3a8bc Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 13 Mar 2024 14:54:39 +0100 Subject: [PATCH 04/10] Update lib/modules/manager/kustomize/extract.spec.ts --- lib/modules/manager/kustomize/extract.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/manager/kustomize/extract.spec.ts b/lib/modules/manager/kustomize/extract.spec.ts index a4ca81163c1875..2938c6ce87495b 100644 --- a/lib/modules/manager/kustomize/extract.spec.ts +++ b/lib/modules/manager/kustomize/extract.spec.ts @@ -184,7 +184,7 @@ describe('modules/manager/kustomize/extract', () => { currentValue: '18.12.1', datasource: DockerDatasource.id, pinDigests: false, - depType: 'OCIChart', + depType: 'HelmChart', }; const pkg = extractHelmChart({ name: sample.depName, From 415ad13942a025bca6536248970cb07b53e0b4df Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 13 Mar 2024 14:57:30 +0100 Subject: [PATCH 05/10] fix: add alias support --- lib/modules/manager/kustomize/extract.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index 1857466aff6b3e..36e7678faf578e 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -141,6 +141,7 @@ export function extractImage( export function extractHelmChart( helmChart: HelmChart, + aliases?: Record | undefined, ): PackageDependency | null { if (!helmChart.name) { return null; @@ -148,10 +149,7 @@ export function extractHelmChart( if (isOCIRegistry(helmChart.repo)) { return { - depName: helmChart.name, - currentValue: helmChart.version, - datasource: DockerDatasource.id, - packageName: `${helmChart.repo.replace('oci://', '')}/${helmChart.name}`, + ...getDep(`${helmChart.repo.replace('oci://', '')}/${helmChart.name}:${helmChart.version}`, false, aliases), // https://github.com/helm/helm/issues/10312 // https://github.com/helm/helm/issues/10678 pinDigests: false, @@ -253,7 +251,7 @@ export function extractPackageFile( // grab the helm charts for (const helmChart of coerceArray(pkg.helmCharts)) { - const dep = extractHelmChart(helmChart); + const dep = extractHelmChart(helmChart, config.registryAliases); if (dep) { deps.push(dep); } From 3d7521428b1cdcb1fb5ec2a9adffd0b012e83af7 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 13 Mar 2024 14:59:10 +0100 Subject: [PATCH 06/10] Apply suggestions from code review --- lib/modules/manager/kustomize/extract.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index 36e7678faf578e..9a5a85523af385 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -153,7 +153,6 @@ export function extractHelmChart( // https://github.com/helm/helm/issues/10312 // https://github.com/helm/helm/issues/10678 pinDigests: false, - depType: 'HelmChart', }; } @@ -162,7 +161,6 @@ export function extractHelmChart( currentValue: helmChart.version, registryUrls: [helmChart.repo], datasource: HelmDatasource.id, - depType: 'HelmChart', }; } @@ -253,7 +251,10 @@ export function extractPackageFile( for (const helmChart of coerceArray(pkg.helmCharts)) { const dep = extractHelmChart(helmChart, config.registryAliases); if (dep) { - deps.push(dep); + deps.push({ + ...dep, + depType: 'HelmChart', + }); } } From 61c30e6a9d1ce2f6749cdd4a9b04198924132f67 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 13 Mar 2024 15:04:14 +0100 Subject: [PATCH 07/10] Update lib/modules/manager/kustomize/extract.ts --- lib/modules/manager/kustomize/extract.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index 9a5a85523af385..d17a75491fcbbc 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -150,6 +150,7 @@ export function extractHelmChart( if (isOCIRegistry(helmChart.repo)) { return { ...getDep(`${helmChart.repo.replace('oci://', '')}/${helmChart.name}:${helmChart.version}`, false, aliases), + depName: helmChart.name, // https://github.com/helm/helm/issues/10312 // https://github.com/helm/helm/issues/10678 pinDigests: false, From d4ca01b4438507b69deeb213f496a3c00068ab1a Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 13 Mar 2024 15:05:19 +0100 Subject: [PATCH 08/10] Apply suggestions from code review --- lib/modules/manager/kustomize/extract.spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/modules/manager/kustomize/extract.spec.ts b/lib/modules/manager/kustomize/extract.spec.ts index 2938c6ce87495b..f6f2f67ac613b4 100644 --- a/lib/modules/manager/kustomize/extract.spec.ts +++ b/lib/modules/manager/kustomize/extract.spec.ts @@ -167,7 +167,6 @@ describe('modules/manager/kustomize/extract', () => { currentValue: '29.6.0', registryUrls: [registryUrl], datasource: HelmDatasource.id, - depType: 'HelmChart', }; const pkg = extractHelmChart({ name: sample.depName, @@ -184,7 +183,6 @@ describe('modules/manager/kustomize/extract', () => { currentValue: '18.12.1', datasource: DockerDatasource.id, pinDigests: false, - depType: 'HelmChart', }; const pkg = extractHelmChart({ name: sample.depName, From 882baf601951506f97f54c68fd316938424e2589 Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 13 Mar 2024 15:11:23 +0100 Subject: [PATCH 09/10] Update lib/modules/manager/kustomize/extract.ts --- lib/modules/manager/kustomize/extract.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index d17a75491fcbbc..ae0a3f081f2e9e 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -148,9 +148,11 @@ export function extractHelmChart( } if (isOCIRegistry(helmChart.repo)) { + const dep = getDep(`${helmChart.repo.replace('oci://', '')}/${helmChart.name}:${helmChart.version}`, false, aliases); return { - ...getDep(`${helmChart.repo.replace('oci://', '')}/${helmChart.name}:${helmChart.version}`, false, aliases), + ...dep, depName: helmChart.name, + packageName: dep.depName, // https://github.com/helm/helm/issues/10312 // https://github.com/helm/helm/issues/10678 pinDigests: false, From 486fd36055337841161361757b158bd4994018cc Mon Sep 17 00:00:00 2001 From: Michael Kriese Date: Wed, 13 Mar 2024 15:17:26 +0100 Subject: [PATCH 10/10] fix: prettier and snapshot --- .../manager/kustomize/__snapshots__/extract.spec.ts.snap | 1 + lib/modules/manager/kustomize/extract.ts | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap index bcf1a04260898c..210d7ccf638dd8 100644 --- a/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/kustomize/__snapshots__/extract.spec.ts.snap @@ -175,6 +175,7 @@ exports[`modules/manager/kustomize/extract extractPackageFile() parses helmChart ], }, { + "currentDigest": undefined, "currentValue": "18.12.1", "datasource": "docker", "depName": "redis", diff --git a/lib/modules/manager/kustomize/extract.ts b/lib/modules/manager/kustomize/extract.ts index ae0a3f081f2e9e..6ffc65a5e977bd 100644 --- a/lib/modules/manager/kustomize/extract.ts +++ b/lib/modules/manager/kustomize/extract.ts @@ -148,7 +148,11 @@ export function extractHelmChart( } if (isOCIRegistry(helmChart.repo)) { - const dep = getDep(`${helmChart.repo.replace('oci://', '')}/${helmChart.name}:${helmChart.version}`, false, aliases); + const dep = getDep( + `${helmChart.repo.replace('oci://', '')}/${helmChart.name}:${helmChart.version}`, + false, + aliases, + ); return { ...dep, depName: helmChart.name,