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 1 commit
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
14 changes: 12 additions & 2 deletions lib/modules/manager/terraform/extractors/resources/helm-release.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import is from '@sindresorhus/is';
import { DockerDatasource } from '../../../../datasource/docker';
import { HelmDatasource } from '../../../../datasource/helm';
import type { PackageDependency } from '../../../types';
import { DependencyExtractor } from '../../base';
import { checkIfStringIsPath } from '../../util';
import { checkIfChartIsOCI, checkIfStringIsPath, ociRegex } from '../../util';

export class HelmReleaseExtractor extends DependencyExtractor {
getCheckList(): string[] {
Expand All @@ -25,9 +26,18 @@ export class HelmReleaseExtractor extends DependencyExtractor {
depName: helmRelease.chart,
datasource: HelmDatasource.id,
};

// For oci charts, we remove the oci:// and use the docker datasource
const isOciChart = checkIfChartIsOCI(helmRelease.chart);
if (isOciChart) {
dep.depName = helmRelease.chart.replace(ociRegex, '');
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
dep.datasource = DockerDatasource.id;
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
}

if (!helmRelease.chart) {
dep.skipReason = 'invalid-name';
} else if (checkIfStringIsPath(helmRelease.chart)) {
// OCI charts strings are valid paths, therefore we exclude them here
} else if (!isOciChart && 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
7 changes: 7 additions & 0 deletions lib/modules/manager/terraform/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@ export function checkIfStringIsPath(path: string): boolean {
return !!match;
}

const ociRegex = /^oci:\/\//;
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
export { ociRegex };
export function checkIfChartIsOCI(chart: string): boolean {
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
const match = ociRegex.exec(chart);
return !!match;
morremeyer marked this conversation as resolved.
Show resolved Hide resolved
}

export function massageProviderLookupName(dep: PackageDependency): void {
if (!dep.packageName) {
dep.packageName = dep.depName;
Expand Down