mirror of
https://github.com/renovatebot/renovate.git
synced 2025-01-13 07:26:26 +00:00
feat(manager/helmsman): Add OCI support (#24183)
This commit is contained in:
parent
640258f976
commit
a65129f246
5 changed files with 37 additions and 9 deletions
|
@ -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
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
|
Loading…
Reference in a new issue