diff --git a/lib/modules/manager/helmsman/__fixtures__/validHelmsfile.yaml b/lib/modules/manager/helmsman/__fixtures__/validHelmsfile.yaml index 6bb8d4ee90bb97..02ab9005a3df95 100644 --- a/lib/modules/manager/helmsman/__fixtures__/validHelmsfile.yaml +++ b/lib/modules/manager/helmsman/__fixtures__/validHelmsfile.yaml @@ -2,6 +2,7 @@ namespaces: redis-operator: strimzi: monitoring: + test-apps: helmRepos: ot-helm: "https://ot-container-kit.github.io/helm-charts/" @@ -11,14 +12,14 @@ helmRepos: prometheus-community: https://prometheus-community.github.io/helm-charts apps: -# valid apps + # valid apps kube-prometheus: enabled: true namespace: monitoring chart: prometheus-community/kube-prometheus-stack version: 19.0.3 valuesFiles: - - ./kube-prometheus/values.yaml + - ./kube-prometheus/values.yaml priority: -90 loki: enabled: true @@ -44,14 +45,19 @@ apps: namespace: strimzi chart: strimzi/strimzi-kafka-operator version: 0.25.0 + podinfo: + enabled: true + namespace: test-apps + chart: oci://ghcr.io/stefanprodan/charts/podinfo + version: 6.4.0 -# missing version + # missing version strimzi-operator-missing-version: enabled: true namespace: strimzi chart: strimzi/strimzi-kafka-operator -# malformed chart + # malformed chart loki-no-registry-ref: enabled: true namespace: monitoring @@ -68,7 +74,7 @@ apps: chart: prometheus-community/ version: 19.0.3 valuesFiles: - - ./kube-prometheus/values.yaml + - ./kube-prometheus/values.yaml priority: -90 otlp-collector-no-chart: enabled: true diff --git a/lib/modules/manager/helmsman/__snapshots__/extract.spec.ts.snap b/lib/modules/manager/helmsman/__snapshots__/extract.spec.ts.snap index 8fe89cff087513..1aa37de040d7fc 100644 --- a/lib/modules/manager/helmsman/__snapshots__/extract.spec.ts.snap +++ b/lib/modules/manager/helmsman/__snapshots__/extract.spec.ts.snap @@ -48,6 +48,12 @@ exports[`modules/manager/helmsman/extract extractPackageFile() extract deps 1`] "https://strimzi.io/charts/", ], }, + { + "currentValue": "6.4.0", + "datasource": "docker", + "depName": "podinfo", + "packageName": "ghcr.io/stefanprodan/charts/podinfo", + }, { "datasource": "helm", "depName": "strimzi-operator-missing-version", diff --git a/lib/modules/manager/helmsman/extract.spec.ts b/lib/modules/manager/helmsman/extract.spec.ts index 6350530ce5046c..ff8c429cb5063d 100644 --- a/lib/modules/manager/helmsman/extract.spec.ts +++ b/lib/modules/manager/helmsman/extract.spec.ts @@ -20,11 +20,17 @@ describe('modules/manager/helmsman/extract', () => { expect(result).toBeNull(); }); + it('returns null if apps not defined', () => { + const fileName = 'incorrect.yaml'; + const result = extractPackageFile('incorrect', fileName, {}); + expect(result).toBeNull(); + }); + it('extract deps', () => { const fileName = 'helmsman.yaml'; const result = extractPackageFile(multiDepFile, fileName, {}); expect(result).not.toBeNull(); - expect(result?.deps).toHaveLength(10); + expect(result?.deps).toHaveLength(11); expect(result?.deps.filter((value) => value.skipReason)).toHaveLength(5); expect(result).toMatchSnapshot(); }); diff --git a/lib/modules/manager/helmsman/extract.ts b/lib/modules/manager/helmsman/extract.ts index 531c49a84e9272..c6419ab49bb659 100644 --- a/lib/modules/manager/helmsman/extract.ts +++ b/lib/modules/manager/helmsman/extract.ts @@ -2,6 +2,7 @@ import is from '@sindresorhus/is'; import { load } from 'js-yaml'; import { logger } from '../../../logger'; import { regEx } from '../../../util/regex'; +import { DockerDatasource } from '../../datasource/docker'; import { HelmDatasource } from '../../datasource/helm'; import type { ExtractConfig, @@ -31,6 +32,14 @@ function createDep( } dep.currentValue = anApp.version; + // in case of OCI repository, we need a PackageDependency with a DockerDatasource and a packageName + const isOci = anApp.chart?.startsWith('oci://'); + if (isOci) { + dep.datasource = DockerDatasource.id; + dep.packageName = anApp.chart!.replace('oci://', ''); + return dep; + } + const regexResult = anApp.chart ? chartRegex.exec(anApp.chart) : null; if (!regexResult?.groups) { dep.skipReason = 'invalid-url'; @@ -63,8 +72,8 @@ export function extractPackageFile( const doc = load(content, { json: true, }) as HelmsmanDocument; - if (!(doc?.helmRepos && doc.apps)) { - logger.debug({ packageFile }, `Missing helmRepos and/or apps keys`); + if (!doc.apps) { + logger.debug({ packageFile }, `Missing apps keys`); return null; } diff --git a/lib/modules/manager/helmsman/index.ts b/lib/modules/manager/helmsman/index.ts index 6a6b47e8238904..16e49a64515ba6 100644 --- a/lib/modules/manager/helmsman/index.ts +++ b/lib/modules/manager/helmsman/index.ts @@ -1,4 +1,5 @@ import type { Category } from '../../../constants'; +import { DockerDatasource } from '../../datasource/docker'; import { HelmDatasource } from '../../datasource/helm'; export { extractPackageFile } from './extract'; @@ -8,4 +9,4 @@ export const defaultConfig = { export const categories: Category[] = ['cd', 'helm', 'kubernetes']; -export const supportedDatasources = [HelmDatasource.id]; +export const supportedDatasources = [HelmDatasource.id, DockerDatasource.id];