diff --git a/sdkexamples/install.go b/sdkexamples/install.go index c06ab439d9..a6392cb75d 100644 --- a/sdkexamples/install.go +++ b/sdkexamples/install.go @@ -34,7 +34,8 @@ func runInstall(ctx context.Context, logger *log.Logger, settings *cli.EnvSettin installClient.KeyFile, installClient.CaFile, installClient.InsecureSkipTLSVerify, - installClient.PlainHTTP) + installClient.PlainHTTP, + nil) if err != nil { return fmt.Errorf("failed to created registry client: %w", err) } diff --git a/sdkexamples/main.go b/sdkexamples/main.go index 8ad753694d..e3fc9d1192 100644 --- a/sdkexamples/main.go +++ b/sdkexamples/main.go @@ -5,6 +5,7 @@ import ( "context" "fmt" "log" + "log/slog" "net/http" "os" @@ -42,7 +43,7 @@ func initActionConfigList(settings *cli.EnvSettings, logger *log.Logger, allName return actionConfig, nil } -func newRegistryClient(settings *cli.EnvSettings, certFile, keyFile, caFile string, insecureSkipTLSVerify, plainHTTP bool) (*registry.Client, error) { +func newRegistryClient(settings *cli.EnvSettings, certFile, keyFile, caFile string, insecureSkipTLSVerify, plainHTTP bool, logger *slog.Logger) (*registry.Client, error) { opts := []registry.ClientOption{ registry.ClientOptDebug(settings.Debug), @@ -55,6 +56,13 @@ func newRegistryClient(settings *cli.EnvSettings, certFile, keyFile, caFile stri opts = append(opts, registry.ClientOptPlainHTTP()) } + // Inject a custom structured logger for diagnostic messages. + // This prevents Helm from mutating global process state, which is + // important when embedding Helm as a library. + if logger != nil { + opts = append(opts, registry.ClientOptLogger(logger)) + } + if certFile != "" && keyFile != "" || caFile != "" || insecureSkipTLSVerify { tlsConf, err := NewTLSConfig( WithInsecureSkipVerify(insecureSkipTLSVerify), diff --git a/sdkexamples/pull.go b/sdkexamples/pull.go index a074d38cdf..2ed695cb5b 100644 --- a/sdkexamples/pull.go +++ b/sdkexamples/pull.go @@ -27,7 +27,8 @@ func runPull(logger *log.Logger, settings *cli.EnvSettings, chartRef, chartVersi pullClient.KeyFile, pullClient.CaFile, pullClient.InsecureSkipTLSVerify, - pullClient.PlainHTTP) + pullClient.PlainHTTP, + nil) if err != nil { return fmt.Errorf("failed to created registry client: %w", err) } diff --git a/sdkexamples/upgrade.go b/sdkexamples/upgrade.go index 4826bc523c..75b436e315 100644 --- a/sdkexamples/upgrade.go +++ b/sdkexamples/upgrade.go @@ -32,7 +32,8 @@ func runUpgrade(ctx context.Context, logger *log.Logger, settings *cli.EnvSettin upgradeClient.KeyFile, upgradeClient.CaFile, upgradeClient.InsecureSkipTLSVerify, - upgradeClient.PlainHTTP) + upgradeClient.PlainHTTP, + nil) if err != nil { return fmt.Errorf("missing registry client: %w", err) } diff --git a/versioned_docs/version-3/sdk/_install.mdx b/versioned_docs/version-3/sdk/_install.mdx index 3f31b66ef5..b7ed8d3227 100644 --- a/versioned_docs/version-3/sdk/_install.mdx +++ b/versioned_docs/version-3/sdk/_install.mdx @@ -30,6 +30,7 @@ func runInstall(ctx context.Context, logger *log.Logger, settings *cli.EnvSettin registryClient, err := newRegistryClientTLS( settings, logger, + nil, installClient.CertFile, installClient.KeyFile, installClient.CaFile, diff --git a/versioned_docs/version-3/sdk/_main.mdx b/versioned_docs/version-3/sdk/_main.mdx index 1d8c2a6be9..7d40a2a0d0 100644 --- a/versioned_docs/version-3/sdk/_main.mdx +++ b/versioned_docs/version-3/sdk/_main.mdx @@ -6,6 +6,7 @@ import ( "context" "fmt" "log" + "log/slog" "os" "helm.sh/helm/v3/pkg/action" @@ -43,7 +44,7 @@ func initActionConfigList(settings *cli.EnvSettings, logger *log.Logger, allName return actionConfig, nil } -func newRegistryClient(settings *cli.EnvSettings, plainHTTP bool) (*registry.Client, error) { +func newRegistryClient(settings *cli.EnvSettings, plainHTTP bool, logger *slog.Logger) (*registry.Client, error) { opts := []registry.ClientOption{ registry.ClientOptDebug(settings.Debug), registry.ClientOptEnableCache(true), @@ -53,6 +54,12 @@ func newRegistryClient(settings *cli.EnvSettings, plainHTTP bool) (*registry.Cli if plainHTTP { opts = append(opts, registry.ClientOptPlainHTTP()) } + // Inject a custom structured logger for diagnostic messages. + // This prevents Helm from mutating global process state, which is + // important when embedding Helm as a library. + if logger != nil { + opts = append(opts, registry.ClientOptLogger(logger)) + } // Create a new registry client registryClient, err := registry.NewClient(opts...) @@ -62,7 +69,7 @@ func newRegistryClient(settings *cli.EnvSettings, plainHTTP bool) (*registry.Cli return registryClient, nil } -func newRegistryClientTLS(settings *cli.EnvSettings, logger *log.Logger, certFile, keyFile, caFile string, insecureSkipTLSverify, plainHTTP bool) (*registry.Client, error) { +func newRegistryClientTLS(settings *cli.EnvSettings, logger *log.Logger, slogger *slog.Logger, certFile, keyFile, caFile string, insecureSkipTLSverify, plainHTTP bool) (*registry.Client, error) { if certFile != "" && keyFile != "" || caFile != "" || insecureSkipTLSverify { registryClient, err := registry.NewRegistryClientWithTLS( logger.Writer(), @@ -78,7 +85,7 @@ func newRegistryClientTLS(settings *cli.EnvSettings, logger *log.Logger, certFil } return registryClient, nil } - registryClient, err := newRegistryClient(settings, plainHTTP) + registryClient, err := newRegistryClient(settings, plainHTTP, slogger) if err != nil { return nil, err } diff --git a/versioned_docs/version-3/sdk/_pull.mdx b/versioned_docs/version-3/sdk/_pull.mdx index c5295be3ca..5e7a377492 100644 --- a/versioned_docs/version-3/sdk/_pull.mdx +++ b/versioned_docs/version-3/sdk/_pull.mdx @@ -16,7 +16,7 @@ func runPull(logger *log.Logger, settings *cli.EnvSettings, chartRef, chartVersi return fmt.Errorf("failed to init action config: %w", err) } - registryClient, err := newRegistryClient(settings, false) + registryClient, err := newRegistryClient(settings, false, nil) if err != nil { return fmt.Errorf("failed to created registry client: %w", err) } diff --git a/versioned_docs/version-3/sdk/_upgrade.mdx b/versioned_docs/version-3/sdk/_upgrade.mdx index 0f2f862096..cb242bc4cb 100644 --- a/versioned_docs/version-3/sdk/_upgrade.mdx +++ b/versioned_docs/version-3/sdk/_upgrade.mdx @@ -28,6 +28,7 @@ func runUpgrade(ctx context.Context, logger *log.Logger, settings *cli.EnvSettin registryClient, err := newRegistryClientTLS( settings, logger, + nil, upgradeClient.CertFile, upgradeClient.KeyFile, upgradeClient.CaFile,