Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(manager/terraform): support OCI charts in helm_release #19869

Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
86d7a53
feat(manager/terraform): support OCI charts in helm_release
morremeyer Jan 16, 2023
14dba67
Update lib/modules/manager/terraform/util.ts
morremeyer Jan 17, 2023
555e96d
Update lib/modules/manager/terraform/util.ts
morremeyer Jan 17, 2023
582f99c
refactor: simplify if conditions
morremeyer Jan 17, 2023
b2a36cb
refactor: remove redundant line
morremeyer Jan 17, 2023
23d47dd
fixup! refactor: simplify if conditions
morremeyer Jan 17, 2023
86591c4
style: remove unneeded whitespace change
morremeyer Jan 17, 2023
2908900
Merge remote-tracking branch 'upstream/main' into feat/manager-terraf…
morremeyer Jan 17, 2023
fe5daf2
Update lib/modules/manager/terraform/extractors/resources/helm-releas…
morremeyer Jan 17, 2023
4fe8e20
Update lib/modules/manager/terraform/extractors/resources/helm-releas…
morremeyer Jan 17, 2023
86086bc
fix: swap else if conditions
morremeyer Jan 17, 2023
0a7707d
refactor: use existing helmv3 util function instead of writing a new one
morremeyer Jan 17, 2023
b53fc47
Update lib/modules/manager/terraform/util.ts
morremeyer Jan 17, 2023
ddb2387
Update lib/modules/manager/helmv3/utils.ts
morremeyer Jan 17, 2023
a1af388
refactor: re-add OCI regex to helm extractor
morremeyer Jan 17, 2023
1d46b1c
Merge branch 'main' into feat/manager-terraform-helm-release-oci-regi…
morremeyer Jan 18, 2023
89bb93b
test: add test for isOCIRegistry null and undefined cases
morremeyer Jan 18, 2023
690dc0d
Update lib/modules/manager/terraform/extractors/resources/helm-releas…
morremeyer Jan 19, 2023
3a0e66f
Update lib/modules/manager/helmv3/utils.spec.ts
morremeyer Jan 19, 2023
9b06be3
Update lib/modules/manager/helmv3/utils.spec.ts
morremeyer Jan 19, 2023
50c8df3
Update lib/modules/manager/terraform/extractors/resources/helm-releas…
morremeyer Jan 19, 2023
c48e9dd
Update lib/modules/manager/terraform/extractors/resources/helm-releas…
morremeyer Jan 19, 2023
72e3279
Merge remote-tracking branch 'upstream/main' into feat/manager-terraf…
morremeyer Jan 19, 2023
c8cdae9
fixup! feat(manager/terraform): support OCI charts in helm_release
morremeyer Jan 19, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 15 additions & 1 deletion lib/modules/manager/helmv3/utils.spec.ts
Original file line number Diff line number Diff line change
@@ -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,18 @@ describe('modules/manager/helmv3/utils', () => {
expect(repository).toBeFalse();
});
});

describe('.isOCIRegistry()', () => {
it('return false if repository is null', () => {
// TODO #7154
const repository = isOCIRegistry(null as never);
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
expect(repository).toBeFalse();
});

it('return false if repository is undefined', () => {
// TODO #7154
const repository = isOCIRegistry(undefined as never);
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
expect(repository).toBeFalse();
});
});
});
11 changes: 9 additions & 2 deletions lib/modules/manager/helmv3/utils.ts
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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"
}
9 changes: 8 additions & 1 deletion lib/modules/manager/terraform/extract.spec.ts
Original file line number Diff line number Diff line change
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 @@ -619,6 +619,13 @@ describe('modules/manager/terraform/extract', () => {
depType: 'helm_release',
registryUrls: [undefined],
},
{
currentValue: 'v0.22.1',
datasource: 'docker',
depName: 'public.ecr.aws/karpenter/karpenter',
depType: 'helm_release',
registryUrls: [undefined],
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
},
]);
});

Expand Down
10 changes: 10 additions & 0 deletions lib/modules/manager/terraform/extractors/resources/helm-release.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
import is from '@sindresorhus/is';
import { regEx } from '../../../../../util/regex';
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
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';

const ociRegex = regEx(/^oci:\/\//);

morremeyer marked this conversation as resolved.
Show resolved Hide resolved
export class HelmReleaseExtractor extends DependencyExtractor {
getCheckList(): string[] {
return [`"helm_release"`];
Expand All @@ -27,9 +32,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(ociRegex, '');
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
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
Original file line number Diff line number Diff line change
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