From 9aa26b1993a09b37bb43ced023a044d028ad31ba Mon Sep 17 00:00:00 2001 From: oliveromahony Date: Mon, 14 Aug 2023 16:30:39 +0100 Subject: [PATCH 1/3] More tidying of code and memory leaks (#432) * fixes from benchmarking * removed pprof --- main.go | 10 -------- src/core/environment.go | 9 +++++--- src/plugins/dataplane_status.go | 4 +--- src/plugins/metrics.go | 1 - .../nginx/agent/v2/src/core/environment.go | 9 +++++--- .../advanced-metrics/metric_gen/generator.go | 3 +++ test/performance/environment_test.go | 23 +++++++++++++++++++ .../nginx/agent/v2/src/core/environment.go | 9 +++++--- .../agent/v2/src/plugins/dataplane_status.go | 4 +--- .../nginx/agent/v2/src/plugins/metrics.go | 1 - 10 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 test/performance/environment_test.go diff --git a/main.go b/main.go index 2ffe5eb66b..32df876eca 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,6 @@ package main import ( "context" - "net/http" "os" "os/signal" "runtime" @@ -27,8 +26,6 @@ import ( "github.com/nginx/agent/v2/src/extensions" "github.com/nginx/agent/v2/src/plugins" - _ "net/http/pprof" - "github.com/google/uuid" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -58,13 +55,6 @@ func init() { } func main() { - address, debug := os.LookupEnv("PROFILE_ADDRESS") - if debug { - go func() { - log.Println(http.ListenAndServe(address, nil)) - }() - } - config.RegisterRunner(func(cmd *cobra.Command, _ []string) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() diff --git a/src/core/environment.go b/src/core/environment.go index ae5a98567e..92afd9757b 100644 --- a/src/core/environment.go +++ b/src/core/environment.go @@ -117,6 +117,10 @@ func (env *EnvironmentType) NewHostInfoWithContext(ctx context.Context, agentVer return &proto.HostInfo{} } + if tags == nil { + tags = &[]string{} + } + hostInfoFacacde := &proto.HostInfo{ Agent: agentVersion, Boot: hostInformation.BootTime, @@ -175,8 +179,7 @@ func getUnixName() string { release := toStr(utsname.Release[:]) version := toStr(utsname.Version[:]) machine := toStr(utsname.Machine[:]) - - return strings.Join([]string{sysName, nodeName, release, version, machine}, " ") + return fmt.Sprintf("%s %s %s %s %s", sysName, nodeName, release, version, machine) } func (env *EnvironmentType) GetHostname() string { @@ -795,7 +798,7 @@ func releaseInfo(osReleaseFile string) (release *proto.ReleaseInfo) { hostReleaseInfo := getHostReleaseInfo() osRelease, err := getOsRelease(osReleaseFile) if err != nil { - log.Warnf("Could not read from %s file: %v", osReleaseFile, err) + log.Warnf("Could not read from osRelease file: %v", err) return hostReleaseInfo } return mergeHostAndOsReleaseInfo(hostReleaseInfo, osRelease) diff --git a/src/plugins/dataplane_status.go b/src/plugins/dataplane_status.go index 724bfb741f..c3a63ea70c 100644 --- a/src/plugins/dataplane_status.go +++ b/src/plugins/dataplane_status.go @@ -186,7 +186,6 @@ func (dps *DataPlaneStatus) healthGoRoutine(pipeline core.MessagePipeInterface) func (dps *DataPlaneStatus) dataplaneStatus(forceDetails bool) *proto.DataplaneStatus { processes := dps.env.Processes() - log.Tracef("dataplaneStatus: processes %v", processes) forceDetails = forceDetails || time.Now().UTC().Add(-dps.reportInterval).After(dps.lastSendDetails) agentActivityStatuses := []*proto.AgentActivityStatus{} @@ -209,7 +208,6 @@ func (dps *DataPlaneStatus) dataplaneStatus(forceDetails bool) *proto.DataplaneS DataplaneSoftwareDetails: dataplaneSoftwareDetails, AgentActivityStatus: agentActivityStatuses, } - return dataplaneStatus } @@ -223,7 +221,7 @@ func (dps *DataPlaneStatus) hostInfo(send bool) (info *proto.HostInfo) { dps.envHostInfo = hostInfo log.Tracef("hostInfo: %v", hostInfo) - return dps.envHostInfo + return hostInfo } func (dps *DataPlaneStatus) detailsForProcess(processes []*core.Process, send bool) (details []*proto.NginxDetails) { diff --git a/src/plugins/metrics.go b/src/plugins/metrics.go index 6a8825114b..a064dd3384 100644 --- a/src/plugins/metrics.go +++ b/src/plugins/metrics.go @@ -315,7 +315,6 @@ func createCollectorConfigsMap(config *config.Config, env core.Environment, bina ClientVersion: config.Nginx.NginxClientVersion, } } - return collectorConfigsMap } diff --git a/test/integration/vendor/github.com/nginx/agent/v2/src/core/environment.go b/test/integration/vendor/github.com/nginx/agent/v2/src/core/environment.go index ae5a98567e..92afd9757b 100644 --- a/test/integration/vendor/github.com/nginx/agent/v2/src/core/environment.go +++ b/test/integration/vendor/github.com/nginx/agent/v2/src/core/environment.go @@ -117,6 +117,10 @@ func (env *EnvironmentType) NewHostInfoWithContext(ctx context.Context, agentVer return &proto.HostInfo{} } + if tags == nil { + tags = &[]string{} + } + hostInfoFacacde := &proto.HostInfo{ Agent: agentVersion, Boot: hostInformation.BootTime, @@ -175,8 +179,7 @@ func getUnixName() string { release := toStr(utsname.Release[:]) version := toStr(utsname.Version[:]) machine := toStr(utsname.Machine[:]) - - return strings.Join([]string{sysName, nodeName, release, version, machine}, " ") + return fmt.Sprintf("%s %s %s %s %s", sysName, nodeName, release, version, machine) } func (env *EnvironmentType) GetHostname() string { @@ -795,7 +798,7 @@ func releaseInfo(osReleaseFile string) (release *proto.ReleaseInfo) { hostReleaseInfo := getHostReleaseInfo() osRelease, err := getOsRelease(osReleaseFile) if err != nil { - log.Warnf("Could not read from %s file: %v", osReleaseFile, err) + log.Warnf("Could not read from osRelease file: %v", err) return hostReleaseInfo } return mergeHostAndOsReleaseInfo(hostReleaseInfo, osRelease) diff --git a/test/performance/advanced-metrics/metric_gen/generator.go b/test/performance/advanced-metrics/metric_gen/generator.go index 3246486bf6..c57c3acd56 100644 --- a/test/performance/advanced-metrics/metric_gen/generator.go +++ b/test/performance/advanced-metrics/metric_gen/generator.go @@ -113,6 +113,9 @@ func (g *Generator) Generate(ctx context.Context, output chan *Message) error { for { select { case <-ctx.Done(): + if !timer.Stop() { + <-timer.C + } return case <-timer.C: g.regenerateCache() diff --git a/test/performance/environment_test.go b/test/performance/environment_test.go new file mode 100644 index 0000000000..b2be7bef14 --- /dev/null +++ b/test/performance/environment_test.go @@ -0,0 +1,23 @@ +package performance + +import ( + "testing" + + "github.com/nginx/agent/v2/src/core" +) + +func BenchmarkNewHostInfo(b *testing.B) { + b.ResetTimer() + env := &core.EnvironmentType{} + for i := 0; i < b.N; i++ { + env.NewHostInfo("", nil, "", false) + } +} + +func BenchmarkProceses(b *testing.B) { + b.ResetTimer() + env := &core.EnvironmentType{} + for i := 0; i < b.N; i++ { + env.Processes() + } +} diff --git a/test/performance/vendor/github.com/nginx/agent/v2/src/core/environment.go b/test/performance/vendor/github.com/nginx/agent/v2/src/core/environment.go index ae5a98567e..92afd9757b 100644 --- a/test/performance/vendor/github.com/nginx/agent/v2/src/core/environment.go +++ b/test/performance/vendor/github.com/nginx/agent/v2/src/core/environment.go @@ -117,6 +117,10 @@ func (env *EnvironmentType) NewHostInfoWithContext(ctx context.Context, agentVer return &proto.HostInfo{} } + if tags == nil { + tags = &[]string{} + } + hostInfoFacacde := &proto.HostInfo{ Agent: agentVersion, Boot: hostInformation.BootTime, @@ -175,8 +179,7 @@ func getUnixName() string { release := toStr(utsname.Release[:]) version := toStr(utsname.Version[:]) machine := toStr(utsname.Machine[:]) - - return strings.Join([]string{sysName, nodeName, release, version, machine}, " ") + return fmt.Sprintf("%s %s %s %s %s", sysName, nodeName, release, version, machine) } func (env *EnvironmentType) GetHostname() string { @@ -795,7 +798,7 @@ func releaseInfo(osReleaseFile string) (release *proto.ReleaseInfo) { hostReleaseInfo := getHostReleaseInfo() osRelease, err := getOsRelease(osReleaseFile) if err != nil { - log.Warnf("Could not read from %s file: %v", osReleaseFile, err) + log.Warnf("Could not read from osRelease file: %v", err) return hostReleaseInfo } return mergeHostAndOsReleaseInfo(hostReleaseInfo, osRelease) diff --git a/test/performance/vendor/github.com/nginx/agent/v2/src/plugins/dataplane_status.go b/test/performance/vendor/github.com/nginx/agent/v2/src/plugins/dataplane_status.go index 724bfb741f..c3a63ea70c 100644 --- a/test/performance/vendor/github.com/nginx/agent/v2/src/plugins/dataplane_status.go +++ b/test/performance/vendor/github.com/nginx/agent/v2/src/plugins/dataplane_status.go @@ -186,7 +186,6 @@ func (dps *DataPlaneStatus) healthGoRoutine(pipeline core.MessagePipeInterface) func (dps *DataPlaneStatus) dataplaneStatus(forceDetails bool) *proto.DataplaneStatus { processes := dps.env.Processes() - log.Tracef("dataplaneStatus: processes %v", processes) forceDetails = forceDetails || time.Now().UTC().Add(-dps.reportInterval).After(dps.lastSendDetails) agentActivityStatuses := []*proto.AgentActivityStatus{} @@ -209,7 +208,6 @@ func (dps *DataPlaneStatus) dataplaneStatus(forceDetails bool) *proto.DataplaneS DataplaneSoftwareDetails: dataplaneSoftwareDetails, AgentActivityStatus: agentActivityStatuses, } - return dataplaneStatus } @@ -223,7 +221,7 @@ func (dps *DataPlaneStatus) hostInfo(send bool) (info *proto.HostInfo) { dps.envHostInfo = hostInfo log.Tracef("hostInfo: %v", hostInfo) - return dps.envHostInfo + return hostInfo } func (dps *DataPlaneStatus) detailsForProcess(processes []*core.Process, send bool) (details []*proto.NginxDetails) { diff --git a/test/performance/vendor/github.com/nginx/agent/v2/src/plugins/metrics.go b/test/performance/vendor/github.com/nginx/agent/v2/src/plugins/metrics.go index 6a8825114b..a064dd3384 100644 --- a/test/performance/vendor/github.com/nginx/agent/v2/src/plugins/metrics.go +++ b/test/performance/vendor/github.com/nginx/agent/v2/src/plugins/metrics.go @@ -315,7 +315,6 @@ func createCollectorConfigsMap(config *config.Config, env core.Environment, bina ClientVersion: config.Nginx.NginxClientVersion, } } - return collectorConfigsMap } From 25311de2e15560806b60e58224da1c9e824982ea Mon Sep 17 00:00:00 2001 From: Donal Hurley Date: Mon, 14 Aug 2023 17:05:45 +0100 Subject: [PATCH 2/3] Improve error logging for gRPC EOF errors (#429) --- sdk/client/commander.go | 7 ++++++- sdk/client/metric_reporter.go | 7 ++++++- .../github.com/nginx/agent/sdk/v2/client/commander.go | 7 ++++++- .../nginx/agent/sdk/v2/client/metric_reporter.go | 7 ++++++- .../github.com/nginx/agent/sdk/v2/client/commander.go | 7 ++++++- .../nginx/agent/sdk/v2/client/metric_reporter.go | 7 ++++++- vendor/github.com/nginx/agent/sdk/v2/client/commander.go | 7 ++++++- .../nginx/agent/sdk/v2/client/metric_reporter.go | 7 ++++++- 8 files changed, 48 insertions(+), 8 deletions(-) diff --git a/sdk/client/commander.go b/sdk/client/commander.go index 8439675432..d3a3f53fb0 100644 --- a/sdk/client/commander.go +++ b/sdk/client/commander.go @@ -401,7 +401,12 @@ func (c *commander) handleGrpcError(messagePrefix string, err error) error { if st, ok := status.FromError(err); ok { log.Errorf("%s: error communicating with %s, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) } else if err == io.EOF { - log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) + _, err = c.channel.Recv() + if st, ok = status.FromError(err); ok { + log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) + } else { + log.Errorf("%s: unable to receive error message for EOF from %s, %v", messagePrefix, c.grpc.Target(), err) + } } else { log.Errorf("%s: unknown grpc error while communicating with %s, %v", messagePrefix, c.grpc.Target(), err) } diff --git a/sdk/client/metric_reporter.go b/sdk/client/metric_reporter.go index 74a96e9e7b..44158b4e92 100644 --- a/sdk/client/metric_reporter.go +++ b/sdk/client/metric_reporter.go @@ -228,7 +228,12 @@ func (r *metricReporter) handleGrpcError(messagePrefix string, err error) error if st, ok := status.FromError(err); ok { log.Errorf("%s: error communicating with %s, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) } else if err == io.EOF { - log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) + _, err = r.channel.CloseAndRecv() + if st, ok = status.FromError(err); ok { + log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) + } else { + log.Errorf("%s: unable to receive error message for EOF from %s, %v", messagePrefix, r.grpc.Target(), err) + } } else { log.Errorf("%s: unknown grpc error while communicating with %s, %v", messagePrefix, r.grpc.Target(), err) } diff --git a/test/integration/vendor/github.com/nginx/agent/sdk/v2/client/commander.go b/test/integration/vendor/github.com/nginx/agent/sdk/v2/client/commander.go index 8439675432..d3a3f53fb0 100644 --- a/test/integration/vendor/github.com/nginx/agent/sdk/v2/client/commander.go +++ b/test/integration/vendor/github.com/nginx/agent/sdk/v2/client/commander.go @@ -401,7 +401,12 @@ func (c *commander) handleGrpcError(messagePrefix string, err error) error { if st, ok := status.FromError(err); ok { log.Errorf("%s: error communicating with %s, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) } else if err == io.EOF { - log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) + _, err = c.channel.Recv() + if st, ok = status.FromError(err); ok { + log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) + } else { + log.Errorf("%s: unable to receive error message for EOF from %s, %v", messagePrefix, c.grpc.Target(), err) + } } else { log.Errorf("%s: unknown grpc error while communicating with %s, %v", messagePrefix, c.grpc.Target(), err) } diff --git a/test/integration/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go b/test/integration/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go index 74a96e9e7b..44158b4e92 100644 --- a/test/integration/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go +++ b/test/integration/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go @@ -228,7 +228,12 @@ func (r *metricReporter) handleGrpcError(messagePrefix string, err error) error if st, ok := status.FromError(err); ok { log.Errorf("%s: error communicating with %s, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) } else if err == io.EOF { - log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) + _, err = r.channel.CloseAndRecv() + if st, ok = status.FromError(err); ok { + log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) + } else { + log.Errorf("%s: unable to receive error message for EOF from %s, %v", messagePrefix, r.grpc.Target(), err) + } } else { log.Errorf("%s: unknown grpc error while communicating with %s, %v", messagePrefix, r.grpc.Target(), err) } diff --git a/test/performance/vendor/github.com/nginx/agent/sdk/v2/client/commander.go b/test/performance/vendor/github.com/nginx/agent/sdk/v2/client/commander.go index 8439675432..d3a3f53fb0 100644 --- a/test/performance/vendor/github.com/nginx/agent/sdk/v2/client/commander.go +++ b/test/performance/vendor/github.com/nginx/agent/sdk/v2/client/commander.go @@ -401,7 +401,12 @@ func (c *commander) handleGrpcError(messagePrefix string, err error) error { if st, ok := status.FromError(err); ok { log.Errorf("%s: error communicating with %s, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) } else if err == io.EOF { - log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) + _, err = c.channel.Recv() + if st, ok = status.FromError(err); ok { + log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) + } else { + log.Errorf("%s: unable to receive error message for EOF from %s, %v", messagePrefix, c.grpc.Target(), err) + } } else { log.Errorf("%s: unknown grpc error while communicating with %s, %v", messagePrefix, c.grpc.Target(), err) } diff --git a/test/performance/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go b/test/performance/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go index 74a96e9e7b..44158b4e92 100644 --- a/test/performance/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go +++ b/test/performance/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go @@ -228,7 +228,12 @@ func (r *metricReporter) handleGrpcError(messagePrefix string, err error) error if st, ok := status.FromError(err); ok { log.Errorf("%s: error communicating with %s, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) } else if err == io.EOF { - log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) + _, err = r.channel.CloseAndRecv() + if st, ok = status.FromError(err); ok { + log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) + } else { + log.Errorf("%s: unable to receive error message for EOF from %s, %v", messagePrefix, r.grpc.Target(), err) + } } else { log.Errorf("%s: unknown grpc error while communicating with %s, %v", messagePrefix, r.grpc.Target(), err) } diff --git a/vendor/github.com/nginx/agent/sdk/v2/client/commander.go b/vendor/github.com/nginx/agent/sdk/v2/client/commander.go index 8439675432..d3a3f53fb0 100644 --- a/vendor/github.com/nginx/agent/sdk/v2/client/commander.go +++ b/vendor/github.com/nginx/agent/sdk/v2/client/commander.go @@ -401,7 +401,12 @@ func (c *commander) handleGrpcError(messagePrefix string, err error) error { if st, ok := status.FromError(err); ok { log.Errorf("%s: error communicating with %s, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) } else if err == io.EOF { - log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) + _, err = c.channel.Recv() + if st, ok = status.FromError(err); ok { + log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, c.grpc.Target(), st.Code().String(), st.Message()) + } else { + log.Errorf("%s: unable to receive error message for EOF from %s, %v", messagePrefix, c.grpc.Target(), err) + } } else { log.Errorf("%s: unknown grpc error while communicating with %s, %v", messagePrefix, c.grpc.Target(), err) } diff --git a/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go b/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go index 74a96e9e7b..44158b4e92 100644 --- a/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go +++ b/vendor/github.com/nginx/agent/sdk/v2/client/metric_reporter.go @@ -228,7 +228,12 @@ func (r *metricReporter) handleGrpcError(messagePrefix string, err error) error if st, ok := status.FromError(err); ok { log.Errorf("%s: error communicating with %s, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) } else if err == io.EOF { - log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) + _, err = r.channel.CloseAndRecv() + if st, ok = status.FromError(err); ok { + log.Errorf("%s: server %s is not processing requests, code=%s, message=%v", messagePrefix, r.grpc.Target(), st.Code().String(), st.Message()) + } else { + log.Errorf("%s: unable to receive error message for EOF from %s, %v", messagePrefix, r.grpc.Target(), err) + } } else { log.Errorf("%s: unknown grpc error while communicating with %s, %v", messagePrefix, r.grpc.Target(), err) } From a13f6cabb716ba509500b883f36ca09beb0f3297 Mon Sep 17 00:00:00 2001 From: Jon Torre <78599298+Jcahilltorre@users.noreply.github.com> Date: Mon, 14 Aug 2023 17:07:57 +0100 Subject: [PATCH 3/3] fix: bump hugo theme to 0.35.0 (#436) --- hugo/config/_default/config.toml | 2 ++ hugo/go.mod | 2 +- hugo/go.sum | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hugo/config/_default/config.toml b/hugo/config/_default/config.toml index 0617255c01..beef81917f 100644 --- a/hugo/config/_default/config.toml +++ b/hugo/config/_default/config.toml @@ -9,6 +9,8 @@ refLinksErrorLevel = "ERROR" enableRobotsTXT = "true" #canonifyURLs = true pluralizeListTitles = false +pygmentsCodeFences = true +pygmentsUseClasses = true [caches] [caches.modules] diff --git a/hugo/go.mod b/hugo/go.mod index 20444e1152..8f339975e4 100644 --- a/hugo/go.mod +++ b/hugo/go.mod @@ -2,4 +2,4 @@ module github.com/nginx/agent/hugo go 1.18 -require github.com/nginxinc/nginx-hugo-theme v0.34.0 // indirect +require github.com/nginxinc/nginx-hugo-theme v0.35.0 // indirect diff --git a/hugo/go.sum b/hugo/go.sum index 4bf5a4f8fa..f7435db64a 100644 --- a/hugo/go.sum +++ b/hugo/go.sum @@ -6,3 +6,5 @@ github.com/nginxinc/nginx-hugo-theme v0.34.0-alpha h1:8tKWnkhxP5Nk0V64v8rE9T3cru github.com/nginxinc/nginx-hugo-theme v0.34.0-alpha/go.mod h1:DPNgSS5QYxkjH/BfH4uPDiTfODqWJ50NKZdorguom8M= github.com/nginxinc/nginx-hugo-theme v0.34.0 h1:G7LPVq7w1ls6IS4+OkTwjhFb67rLCzPdfZvW1/sn2Cw= github.com/nginxinc/nginx-hugo-theme v0.34.0/go.mod h1:DPNgSS5QYxkjH/BfH4uPDiTfODqWJ50NKZdorguom8M= +github.com/nginxinc/nginx-hugo-theme v0.35.0 h1:7XB2GMy6qeJgKEJy9wOS3SYKYpfvLW3/H+UHRPLM4FU= +github.com/nginxinc/nginx-hugo-theme v0.35.0/go.mod h1:DPNgSS5QYxkjH/BfH4uPDiTfODqWJ50NKZdorguom8M=