Skip to content

Commit

Permalink
feat(manager/terraform): support OCI charts in helm_release (#19869)
Browse files Browse the repository at this point in the history
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
  • Loading branch information
3 people committed Jan 19, 2023
1 parent ff648e6 commit c5db2dc
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 5 deletions.
14 changes: 13 additions & 1 deletion lib/modules/manager/helmv3/utils.spec.ts
@@ -1,4 +1,4 @@
import { isAlias, resolveAlias } from './utils';
import { isAlias, isOCIRegistry, resolveAlias } from './utils';

describe('modules/manager/helmv3/utils', () => {
describe('.resolveAlias()', () => {
Expand Down Expand Up @@ -70,4 +70,16 @@ describe('modules/manager/helmv3/utils', () => {
expect(repository).toBeFalse();
});
});

describe('.isOCIRegistry()', () => {
it('return false if repository is null', () => {
const repository = isOCIRegistry(null);
expect(repository).toBeFalse();
});

it('return false if repository is undefined', () => {
const repository = isOCIRegistry(undefined);
expect(repository).toBeFalse();
});
});
});
11 changes: 9 additions & 2 deletions lib/modules/manager/helmv3/utils.ts
@@ -1,3 +1,4 @@
import is from '@sindresorhus/is';
import upath from 'upath';
import { logger } from '../../../logger';
import { DockerDatasource } from '../../datasource/docker';
Expand Down Expand Up @@ -82,8 +83,14 @@ export function isAlias(repository: string): boolean {
return repository.startsWith('@') || repository.startsWith('alias:');
}

export function isOCIRegistry(repository: Repository): boolean {
return repository.repository.startsWith('oci://');
export function isOCIRegistry(
repository: Repository | string | null | undefined
): boolean {
if (is.nullOrUndefined(repository)) {
return false;
}
const repo = is.string(repository) ? repository : repository.repository;
return repo.startsWith('oci://');
}

export function aliasRecordToRepositories(
Expand Down
7 changes: 7 additions & 0 deletions lib/modules/manager/terraform/__fixtures__/helm.tf
Expand Up @@ -38,3 +38,10 @@ resource "helm_release" "invalid_3" {
chart = "redis"
version = "6.0.1"
}

## chart in OCI registry
resource "helm_release" "karpenter" {
name = "karpenter"
chart = "oci://public.ecr.aws/karpenter/karpenter"
version = "v0.22.1"
}
8 changes: 7 additions & 1 deletion lib/modules/manager/terraform/extract.spec.ts
Expand Up @@ -574,7 +574,7 @@ describe('modules/manager/terraform/extract', () => {

it('extract helm releases', async () => {
const res = await extractPackageFile(helm, 'helm.tf', {});
expect(res?.deps).toHaveLength(6);
expect(res?.deps).toHaveLength(7);
expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(2);
expect(res?.deps).toIncludeAllPartialMembers([
{
Expand Down Expand Up @@ -617,6 +617,12 @@ describe('modules/manager/terraform/extract', () => {
depName: 'redis',
depType: 'helm_release',
},
{
currentValue: 'v0.22.1',
datasource: 'docker',
depName: 'public.ecr.aws/karpenter/karpenter',
depType: 'helm_release',
},
]);
});

Expand Down
@@ -1,5 +1,7 @@
import is from '@sindresorhus/is';
import { DockerDatasource } from '../../../../datasource/docker';
import { HelmDatasource } from '../../../../datasource/helm';
import { isOCIRegistry } from '../../../helmv3/utils';
import type { PackageDependency } from '../../../types';
import { DependencyExtractor } from '../../base';
import { checkIfStringIsPath } from '../../util';
Expand Down Expand Up @@ -29,9 +31,14 @@ export class HelmReleaseExtractor extends DependencyExtractor {
}
if (!helmRelease.chart) {
dep.skipReason = 'invalid-name';
} else if (isOCIRegistry(helmRelease.chart)) {
// For oci charts, we remove the oci:// and use the docker datasource
dep.depName = helmRelease.chart.replace('oci://', '');
dep.datasource = DockerDatasource.id;
} else if (checkIfStringIsPath(helmRelease.chart)) {
dep.skipReason = 'local-chart';
}

dependencies.push(dep);
}
}
Expand Down
2 changes: 1 addition & 1 deletion lib/modules/manager/terraform/readme.md
Expand Up @@ -33,7 +33,7 @@ Renovate can update the `required_version` attribute of the Terraform block.

#### helm_release

Renovate can update the version attribute of `helm_release` resources.
Renovate can update the version attribute of `helm_release` resources. This applies to both helm chart repositories and [charts published in OCI registries](https://helm.sh/docs/topics/registries/).

| Name | Public hosting | Private hosting |
| ---------------- | :------------: | :-------------: |
Expand Down

0 comments on commit c5db2dc

Please sign in to comment.