Skip to content

Commit be1177a

Browse files
yhakbardenis256
andauthored
chore: Bumping go-getter and dependencies (#4692)
* chore: Bumping go-getter * Go getter update * Engine version update * chore: lint issues * Symlinks update test * Opts passing * Custom git getter * chore: extracted symlink git client * chore: go getter git version * go-getter simplification --------- Co-authored-by: Denis O <[email protected]>
1 parent 1c25d8b commit be1177a

File tree

4 files changed

+134
-65
lines changed

4 files changed

+134
-65
lines changed

cli/commands/run/download_source.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,28 @@ func UpdateGetters(terragruntOptions *options.TerragruntOptions, terragruntConfi
274274
}
275275
}
276276

277+
// preserveSymlinksOption is a custom client option that ensures DisableSymlinks
278+
// setting is preserved during git operations
279+
func preserveSymlinksOption() getter.ClientOption {
280+
return func(c *getter.Client) error {
281+
// Create a custom git getter that preserves symlink settings
282+
if c.Getters != nil {
283+
if gitGetter, exists := c.Getters["git"]; exists {
284+
// Replace with a wrapper that preserves symlink settings
285+
c.Getters["git"] = &symlinkPreservingGitGetter{
286+
original: gitGetter,
287+
client: c,
288+
}
289+
}
290+
}
291+
292+
// Ensure DisableSymlinks is set to false
293+
c.DisableSymlinks = false
294+
295+
return nil
296+
}
297+
}
298+
277299
// Download the code from the Canonical Source URL into the Download Folder using the go-getter library
278300
func downloadSource(ctx context.Context, l log.Logger, src *tf.Source, opts *options.TerragruntOptions, cfg *config.TerragruntConfig, r *report.Report) error {
279301
canonicalSourceURL := src.CanonicalSourceURL.String()
@@ -323,11 +345,11 @@ func downloadSource(ctx context.Context, l log.Logger, src *tf.Source, opts *opt
323345

324346
// Fallback to standard go-getter
325347
return opts.RunWithErrorHandling(ctx, l, r, func() error {
326-
return getter.GetAny(src.DownloadDir, src.CanonicalSourceURL.String(), UpdateGetters(opts, cfg))
348+
return getter.GetAny(src.DownloadDir, src.CanonicalSourceURL.String(), UpdateGetters(opts, cfg), preserveSymlinksOption())
327349
})
328350
}
329351

330-
// ValidateWorkingDir checks if working terraformSource.WorkingDir exists and is directory
352+
// ValidateWorkingDir checks if working terraformSource.WorkingDir exists and is a directory
331353
func ValidateWorkingDir(terraformSource *tf.Source) error {
332354
workingLocalDir := strings.ReplaceAll(terraformSource.WorkingDir, terraformSource.DownloadDir+filepath.FromSlash("/"), "")
333355
if util.IsFile(terraformSource.WorkingDir) {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package run
2+
3+
import (
4+
"net/url"
5+
6+
"github.com/hashicorp/go-getter"
7+
)
8+
9+
// Since go-getter v1.7.9, symbolic links are disabled by default and are automatically
10+
// disabled during git submodule operations. This wrapper preserves the original
11+
// DisableSymlinks setting to ensure symlinks remain enabled when configured.
12+
13+
// symlinkPreservingGitGetter wraps the original git getter to preserve symlink settings
14+
type symlinkPreservingGitGetter struct {
15+
original getter.Getter
16+
client *getter.Client
17+
}
18+
19+
// Get overrides the original GitGetter to preserve symlink settings
20+
func (g *symlinkPreservingGitGetter) Get(dst string, u *url.URL) error {
21+
// Store the original DisableSymlinks setting
22+
originalDisableSymlinks := g.client.DisableSymlinks
23+
24+
// Call the original getter
25+
err := g.original.Get(dst, u)
26+
27+
// Restore the original DisableSymlinks setting
28+
g.client.DisableSymlinks = originalDisableSymlinks
29+
30+
return err
31+
}
32+
33+
// GetFile overrides the original GitGetter to preserve symlink settings
34+
func (g *symlinkPreservingGitGetter) GetFile(dst string, u *url.URL) error {
35+
return g.original.GetFile(dst, u)
36+
}
37+
38+
// ClientMode overrides the original GitGetter to preserve symlink settings
39+
func (g *symlinkPreservingGitGetter) ClientMode(u *url.URL) (getter.ClientMode, error) {
40+
return g.original.ClientMode(u)
41+
}
42+
43+
// SetClient overrides the original GitGetter to preserve symlink settings
44+
func (g *symlinkPreservingGitGetter) SetClient(c *getter.Client) {
45+
g.client = c
46+
g.original.SetClient(c)
47+
}

go.mod

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ require (
2222
github.com/google/uuid v1.6.0
2323
github.com/gruntwork-io/boilerplate v0.8.1
2424
github.com/gruntwork-io/go-commons v0.17.2
25-
github.com/gruntwork-io/terragrunt-engine-go v0.0.15
25+
github.com/gruntwork-io/terragrunt-engine-go v0.0.16
2626
github.com/gruntwork-io/terratest v0.50.0
2727
github.com/hashicorp/go-cleanhttp v0.5.2
28-
github.com/hashicorp/go-getter v1.7.8
28+
github.com/hashicorp/go-getter v1.7.9
2929
github.com/hashicorp/go-getter/v2 v2.2.3
3030
github.com/hashicorp/go-hclog v1.6.3
3131
github.com/hashicorp/go-multierror v1.1.1
@@ -71,12 +71,12 @@ require (
7171
golang.org/x/mod v0.26.0
7272
golang.org/x/oauth2 v0.30.0
7373
golang.org/x/sync v0.16.0
74-
golang.org/x/sys v0.34.0
75-
golang.org/x/term v0.33.0
76-
golang.org/x/text v0.27.0
77-
google.golang.org/api v0.244.0
74+
golang.org/x/sys v0.35.0
75+
golang.org/x/term v0.34.0
76+
golang.org/x/text v0.28.0
77+
google.golang.org/api v0.247.0
7878
google.golang.org/grpc v1.74.2
79-
google.golang.org/protobuf v1.36.6
79+
google.golang.org/protobuf v1.36.7
8080
gopkg.in/ini.v1 v1.67.0
8181
)
8282

@@ -101,10 +101,10 @@ require (
101101
atomicgo.dev/keyboard v0.2.9 // indirect
102102
atomicgo.dev/schedule v0.1.0 // indirect
103103
cel.dev/expr v0.24.0 // indirect
104-
cloud.google.com/go v0.121.4 // indirect
105-
cloud.google.com/go/auth v0.16.3 // indirect
104+
cloud.google.com/go v0.121.6 // indirect
105+
cloud.google.com/go/auth v0.16.5 // indirect
106106
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
107-
cloud.google.com/go/compute/metadata v0.7.0 // indirect
107+
cloud.google.com/go/compute/metadata v0.8.0 // indirect
108108
cloud.google.com/go/iam v1.5.2 // indirect
109109
cloud.google.com/go/kms v1.22.0 // indirect
110110
cloud.google.com/go/longrunning v0.6.7 // indirect
@@ -190,7 +190,7 @@ require (
190190
github.com/felixge/httpsnoop v1.0.4 // indirect
191191
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
192192
github.com/getsops/gopgagent v0.0.0-20241224165529-7044f28e491e // indirect
193-
github.com/go-jose/go-jose/v4 v4.1.0 // indirect
193+
github.com/go-jose/go-jose/v4 v4.1.2 // indirect
194194
github.com/go-logr/logr v1.4.3 // indirect
195195
github.com/go-logr/stdr v1.2.2 // indirect
196196
github.com/go-ozzo/ozzo-validation v3.6.0+incompatible // indirect
@@ -230,7 +230,7 @@ require (
230230
github.com/jmespath/go-jmespath v0.4.0 // indirect
231231
github.com/jstemmer/go-junit-report v1.0.0 // indirect
232232
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
233-
github.com/klauspost/compress v1.17.11 // indirect
233+
github.com/klauspost/compress v1.18.0 // indirect
234234
github.com/kylelemons/godebug v1.1.0 // indirect
235235
github.com/labstack/gommon v0.4.2 // indirect
236236
github.com/lib/pq v1.10.9 // indirect
@@ -289,18 +289,18 @@ require (
289289
github.com/zclconf/go-cty-yaml v1.1.0 // indirect
290290
github.com/zeebo/errs v1.4.0 // indirect
291291
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
292-
go.opentelemetry.io/contrib/detectors/gcp v1.36.0 // indirect
293-
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect
294-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
292+
go.opentelemetry.io/contrib/detectors/gcp v1.37.0 // indirect
293+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.62.0 // indirect
294+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect
295295
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
296296
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
297-
golang.org/x/crypto v0.40.0 // indirect
298-
golang.org/x/net v0.42.0 // indirect
297+
golang.org/x/crypto v0.41.0 // indirect
298+
golang.org/x/net v0.43.0 // indirect
299299
golang.org/x/time v0.12.0 // indirect
300-
golang.org/x/tools v0.34.0 // indirect
301-
google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect
302-
google.golang.org/genproto/googleapis/api v0.0.0-20250721164621-a45f3dfb1074 // indirect
303-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 // indirect
300+
golang.org/x/tools v0.35.0 // indirect
301+
google.golang.org/genproto v0.0.0-20250811230008-5f3141c8851a // indirect
302+
google.golang.org/genproto/googleapis/api v0.0.0-20250811230008-5f3141c8851a // indirect
303+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250811230008-5f3141c8851a // indirect
304304
gopkg.in/yaml.v2 v2.4.0 // indirect
305305
gopkg.in/yaml.v3 v3.0.1 // indirect
306306
sigs.k8s.io/yaml v1.4.0 // indirect

0 commit comments

Comments
 (0)