From 4d8061edbfc37aa6e59a1cb1744ec9a646fa3bf1 Mon Sep 17 00:00:00 2001 From: mblum14 Date: Fri, 17 Jan 2025 13:46:12 -0500 Subject: [PATCH 1/3] fix(terragrunt-manager): Update terragrunt packageName Closes renovate/renovate#33370 - Closes #33370 Fix dependency.packageName evaluated by the terragrunt manager when the terraform source url contains double slashes and ssh as the protocol (e.g., git::ssh://git@mygit.com/hashicorp/example.git//subdir/test?ref=1.1.0 ) --- .../manager/terragrunt/__fixtures__/2.hcl | 5 ++++ .../manager/terragrunt/__fixtures__/3.hcl | 5 ++++ .../manager/terragrunt/__fixtures__/4.hcl | 5 ++++ .../manager/terragrunt/extract.spec.ts | 27 ++++++++++++++++--- lib/modules/manager/terragrunt/modules.ts | 2 +- 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/lib/modules/manager/terragrunt/__fixtures__/2.hcl b/lib/modules/manager/terragrunt/__fixtures__/2.hcl index 3c41a5dfc360a0..8aab1449c049f9 100644 --- a/lib/modules/manager/terragrunt/__fixtures__/2.hcl +++ b/lib/modules/manager/terragrunt/__fixtures__/2.hcl @@ -155,6 +155,11 @@ terraform { source = "git::ssh://git@mygit.com/hashicorp/example?ref=v1.0.3" } +# gittags_ssh_subdir +terraform { + source = "git::ssh://git@mygit.com/hashicorp/example//subdir/test?ref=v1.0.4" +} + # invalid, ignored by test since it does not have source on the next line terraform { } diff --git a/lib/modules/manager/terragrunt/__fixtures__/3.hcl b/lib/modules/manager/terragrunt/__fixtures__/3.hcl index 24e81c345cfc7b..22079aae6c9fe9 100644 --- a/lib/modules/manager/terragrunt/__fixtures__/3.hcl +++ b/lib/modules/manager/terragrunt/__fixtures__/3.hcl @@ -155,6 +155,11 @@ terraform { source = "git::ssh://git@mygit.com/hashicorp/example?ref=v1.0.3&depth=1" } +# gittags_ssh_subdir +terraform { + source = "git::ssh://git@mygit.com/hashicorp/example//subdir/test?ref=v1.0.4&depth=1" +} + # invalid, ignored by test since it does not have source on the next line terraform { } diff --git a/lib/modules/manager/terragrunt/__fixtures__/4.hcl b/lib/modules/manager/terragrunt/__fixtures__/4.hcl index 8ac54753fe0d21..ae2e971f0a4522 100644 --- a/lib/modules/manager/terragrunt/__fixtures__/4.hcl +++ b/lib/modules/manager/terragrunt/__fixtures__/4.hcl @@ -155,6 +155,11 @@ terraform { source = "git::ssh://git@mygit.com/hashicorp/example?depth=1&ref=v1.0.3" } +# gittags_ssh_subdir +terraform { + source = "git::ssh://git@mygit.com/hashicorp/example//subdir/test?depth=1&ref=v1.0.4" +} + # invalid, ignored by test since it does not have source on the next line terraform { } diff --git a/lib/modules/manager/terragrunt/extract.spec.ts b/lib/modules/manager/terragrunt/extract.spec.ts index a87f17f6002fe8..8515b80be1a9f3 100644 --- a/lib/modules/manager/terragrunt/extract.spec.ts +++ b/lib/modules/manager/terragrunt/extract.spec.ts @@ -200,6 +200,13 @@ describe('modules/manager/terragrunt/extract', () => { depType: 'gitTags', packageName: 'ssh://git@mygit.com/hashicorp/example', }, + { + currentValue: 'v1.0.4', + datasource: 'git-tags', + depName: 'mygit.com/hashicorp/example', + depType: 'gitTags', + packageName: 'ssh://git@mygit.com/hashicorp/example', + }, { skipReason: 'no-source', }, @@ -255,7 +262,7 @@ describe('modules/manager/terragrunt/extract', () => { }, ], }); - expect(res?.deps).toHaveLength(36); + expect(res?.deps).toHaveLength(37); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(4); }); @@ -418,6 +425,13 @@ describe('modules/manager/terragrunt/extract', () => { depType: 'gitTags', packageName: 'ssh://git@mygit.com/hashicorp/example', }, + { + currentValue: 'v1.0.4', + datasource: 'git-tags', + depName: 'mygit.com/hashicorp/example', + depType: 'gitTags', + packageName: 'ssh://git@mygit.com/hashicorp/example', + }, { skipReason: 'no-source', }, @@ -466,7 +480,7 @@ describe('modules/manager/terragrunt/extract', () => { }, ], }); - expect(res?.deps).toHaveLength(35); + expect(res?.deps).toHaveLength(36); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(4); }); @@ -629,6 +643,13 @@ describe('modules/manager/terragrunt/extract', () => { depType: 'gitTags', packageName: 'ssh://git@mygit.com/hashicorp/example', }, + { + currentValue: 'v1.0.4', + datasource: 'git-tags', + depName: 'mygit.com/hashicorp/example', + depType: 'gitTags', + packageName: 'ssh://git@mygit.com/hashicorp/example', + }, { skipReason: 'no-source', }, @@ -677,7 +698,7 @@ describe('modules/manager/terragrunt/extract', () => { }, ], }); - expect(res?.deps).toHaveLength(35); + expect(res?.deps).toHaveLength(36); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(4); }); diff --git a/lib/modules/manager/terragrunt/modules.ts b/lib/modules/manager/terragrunt/modules.ts index 0079b18581303b..8ffb23897bb078 100644 --- a/lib/modules/manager/terragrunt/modules.ts +++ b/lib/modules/manager/terragrunt/modules.ts @@ -87,7 +87,7 @@ export function analyseTerragruntModule( dep.datasource = detectGitTagDatasource(url); if (dep.datasource === GitTagsDatasource.id) { if (containsSubDirectory) { - dep.packageName = `${origin}${pathname.split('//')[0]}`; + dep.packageName = `${protocol}//${host}${pathname.split('//')[0]}`; } else { dep.packageName = url; } From 64f641e06df675b0349c31b7c5b096413f0041d0 Mon Sep 17 00:00:00 2001 From: mblum14 Date: Fri, 24 Jan 2025 08:35:09 -0500 Subject: [PATCH 2/3] spec(terragrunt-manager): Remove unnecessary specs --- .../manager/terragrunt/__fixtures__/2.hcl | 5 ----- .../manager/terragrunt/__fixtures__/4.hcl | 5 ----- lib/modules/manager/terragrunt/extract.spec.ts | 18 ++---------------- lib/modules/manager/terragrunt/modules.ts | 3 ++- 4 files changed, 4 insertions(+), 27 deletions(-) diff --git a/lib/modules/manager/terragrunt/__fixtures__/2.hcl b/lib/modules/manager/terragrunt/__fixtures__/2.hcl index 8aab1449c049f9..3c41a5dfc360a0 100644 --- a/lib/modules/manager/terragrunt/__fixtures__/2.hcl +++ b/lib/modules/manager/terragrunt/__fixtures__/2.hcl @@ -155,11 +155,6 @@ terraform { source = "git::ssh://git@mygit.com/hashicorp/example?ref=v1.0.3" } -# gittags_ssh_subdir -terraform { - source = "git::ssh://git@mygit.com/hashicorp/example//subdir/test?ref=v1.0.4" -} - # invalid, ignored by test since it does not have source on the next line terraform { } diff --git a/lib/modules/manager/terragrunt/__fixtures__/4.hcl b/lib/modules/manager/terragrunt/__fixtures__/4.hcl index ae2e971f0a4522..8ac54753fe0d21 100644 --- a/lib/modules/manager/terragrunt/__fixtures__/4.hcl +++ b/lib/modules/manager/terragrunt/__fixtures__/4.hcl @@ -155,11 +155,6 @@ terraform { source = "git::ssh://git@mygit.com/hashicorp/example?depth=1&ref=v1.0.3" } -# gittags_ssh_subdir -terraform { - source = "git::ssh://git@mygit.com/hashicorp/example//subdir/test?depth=1&ref=v1.0.4" -} - # invalid, ignored by test since it does not have source on the next line terraform { } diff --git a/lib/modules/manager/terragrunt/extract.spec.ts b/lib/modules/manager/terragrunt/extract.spec.ts index 8515b80be1a9f3..e8533f64f5e1eb 100644 --- a/lib/modules/manager/terragrunt/extract.spec.ts +++ b/lib/modules/manager/terragrunt/extract.spec.ts @@ -200,13 +200,6 @@ describe('modules/manager/terragrunt/extract', () => { depType: 'gitTags', packageName: 'ssh://git@mygit.com/hashicorp/example', }, - { - currentValue: 'v1.0.4', - datasource: 'git-tags', - depName: 'mygit.com/hashicorp/example', - depType: 'gitTags', - packageName: 'ssh://git@mygit.com/hashicorp/example', - }, { skipReason: 'no-source', }, @@ -262,7 +255,7 @@ describe('modules/manager/terragrunt/extract', () => { }, ], }); - expect(res?.deps).toHaveLength(37); + expect(res?.deps).toHaveLength(36); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(4); }); @@ -643,13 +636,6 @@ describe('modules/manager/terragrunt/extract', () => { depType: 'gitTags', packageName: 'ssh://git@mygit.com/hashicorp/example', }, - { - currentValue: 'v1.0.4', - datasource: 'git-tags', - depName: 'mygit.com/hashicorp/example', - depType: 'gitTags', - packageName: 'ssh://git@mygit.com/hashicorp/example', - }, { skipReason: 'no-source', }, @@ -698,7 +684,7 @@ describe('modules/manager/terragrunt/extract', () => { }, ], }); - expect(res?.deps).toHaveLength(36); + expect(res?.deps).toHaveLength(35); expect(res?.deps.filter((dep) => dep.skipReason)).toHaveLength(4); }); diff --git a/lib/modules/manager/terragrunt/modules.ts b/lib/modules/manager/terragrunt/modules.ts index 8ffb23897bb078..2ff6e3665f0bb5 100644 --- a/lib/modules/manager/terragrunt/modules.ts +++ b/lib/modules/manager/terragrunt/modules.ts @@ -87,7 +87,8 @@ export function analyseTerragruntModule( dep.datasource = detectGitTagDatasource(url); if (dep.datasource === GitTagsDatasource.id) { if (containsSubDirectory) { - dep.packageName = `${protocol}//${host}${pathname.split('//')[0]}`; + const tempLookupName = url.split('//'); + dep.packageName = tempLookupName[0] + '//' + tempLookupName[1]; } else { dep.packageName = url; } From 02be7228c8ad46407d0ed90a4b4d48eb65817edf Mon Sep 17 00:00:00 2001 From: mblum14 Date: Thu, 30 Jan 2025 17:25:23 -0500 Subject: [PATCH 3/3] style: Remove unused var --- lib/modules/manager/terragrunt/modules.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/modules/manager/terragrunt/modules.ts b/lib/modules/manager/terragrunt/modules.ts index 2ff6e3665f0bb5..a6690cdc2c0726 100644 --- a/lib/modules/manager/terragrunt/modules.ts +++ b/lib/modules/manager/terragrunt/modules.ts @@ -71,7 +71,7 @@ export function analyseTerragruntModule( dep.datasource = GithubTagsDatasource.id; } else if (gitTagsRefMatch?.groups) { const { url, tag } = gitTagsRefMatch.groups; - const { hostname, host, origin, pathname, protocol } = new URL(url); + const { hostname, host, pathname, protocol } = new URL(url); const containsSubDirectory = pathname.includes('//'); if (containsSubDirectory) { logger.debug('Terragrunt module contains subdirectory');