Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 4 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ jobs:
- name: Lint Go
uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
with:
version: v2.4.0
version: v2.10.0
skip-cache: true

vulnerability-scan:
Expand All @@ -105,7 +105,9 @@ jobs:
contents: read
security-events: write # for reporting vulnerabilities via code-scanning API
with:
target-branch: ${{ github.event.pull_request.base.ref || github.ref_name }}
# Use PR head branch (the feature branch) when running from a pull_request event.
# Fallback to github.head_ref (sanity) or ref name for other contexts.
target-branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref_name }}

unit-test:
name: Unit Tests
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/vulncheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ jobs:
with:
persist-credentials: false
fetch-depth: 0
ref: ${{ inputs.target-branch || 'main' }}
# For a pull_request event use the PR head branch (github.head_ref)
# to this ensures vulncheck runs against the feature branch.
# Otherwise, fall back to inputs.target-branch, github.ref_name, then 'main'.
ref: ${{ (github.event_name == 'pull_request' && github.head_ref) || inputs.target-branch || github.ref_name || 'main' }}

- name: Check Go version
id: get-go-version
Expand Down
4 changes: 2 additions & 2 deletions Makefile.tools
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
OAPICODEGEN = github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen@v2.1.0
LEFTHOOK = github.com/evilmartians/lefthook@v1.6.9
GOLANGCILINT = github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.4.0
GOLANGCILINT = github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.10.0
PROTOCGENGO = google.golang.org/protobuf/cmd/protoc-gen-go@v1.32.0
GOFUMPT = mvdan.cc/gofumpt@v0.6.0
COUNTERFEITER = github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1
COUNTERFEITER = github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2
NFPM = github.com/goreleaser/nfpm/v2/cmd/nfpm@v2.36.1
GOTESTCOVERAGE = github.com/vladopajic/go-test-coverage/v2@v2.10.1
BENCHSTAT = golang.org/x/perf/cmd/benchstat@v0.0.0-20240404204407-f3e401e020e4
Expand Down
2 changes: 1 addition & 1 deletion api/grpc/mpi/v1/mocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

package v1

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . CommandServiceClient
//counterfeiter:generate . FileServiceClient
//counterfeiter:generate . FileService_GetFileStreamServer
Expand Down
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
module github.com/nginx/agent/v3

go 1.24.2
go 1.25.0

toolchain go1.24.13
toolchain go1.25.7

require (
buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.9-20250912141014-52f32327d4b0.1
Expand Down Expand Up @@ -39,6 +39,7 @@ require (
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.141.0
github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.141.0
github.com/open-telemetry/opentelemetry-collector-contrib/testbed v0.141.0
github.com/pkg/errors v0.9.1
github.com/prometheus/client_model v0.6.2
github.com/prometheus/common v0.67.4
github.com/shirou/gopsutil/v4 v4.25.11
Expand Down Expand Up @@ -250,7 +251,6 @@ require (
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/pierrec/lz4/v4 v4.1.22 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
github.com/prometheus/otlptranslator v1.0.0 // indirect
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import (
"strconv"
"testing"

"github.com/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestCollectCPUStats(t *testing.T) {
Expand Down Expand Up @@ -78,8 +80,14 @@ func TestCollectCPUStats(t *testing.T) {
cgroupCPUSource := NewCPUSource(test.basePath)
cpuStat, err := cgroupCPUSource.collectCPUStats(ctx)

// Assert error
assert.IsType(tt, test.errorType, err)
if test.errorType != nil {
// satisfy the linter's requirement for a more specific check than IsType.
require.Condition(tt, func() bool {
return errors.As(err, &test.errorType)
}, "Error should be of type %T", test.errorType)
} else {
require.NoError(tt, err)
}

// Assert result
assert.Equal(tt, test.cpuStat, cpuStat)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ import (
"strconv"
"testing"

"github.com/pkg/errors"
"github.com/shirou/gopsutil/v4/mem"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestVirtualMemoryStat(t *testing.T) {
Expand Down Expand Up @@ -115,7 +117,14 @@ func TestVirtualMemoryStat(t *testing.T) {
virtualMemoryStat, err := cgroupCPUSource.VirtualMemoryStat()

// Assert error
assert.IsType(tt, test.errorType, err)
if test.errorType != nil {
// satisfy the linter's requirement for a more specific check than IsType.
require.Condition(tt, func() bool {
return errors.As(err, &test.errorType)
}, "Error should be of type %T", test.errorType)
} else {
require.NoError(tt, err)
}

// Assert result
assert.Equal(tt, test.virtualMemoryStat, *virtualMemoryStat)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func NewScraper(
mb := metadata.NewMetricsBuilder(cfg.MetricsBuilderConfig, settings)
rb := mb.NewResourceBuilder()

operators := make([]operator.Config, 0)
operators := make([]operator.Config, 0, len(cfg.AccessLogs))

for _, accessLog := range cfg.AccessLogs {
logger.Info("Adding access log file operator", zap.String("file_path", accessLog.FilePath))
Expand Down
2 changes: 1 addition & 1 deletion internal/collector/types/mocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@

package types

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . CollectorInterface
2 changes: 1 addition & 1 deletion internal/command/command_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (

var _ bus.Plugin = (*CommandPlugin)(nil)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . commandService

type (
Expand Down
2 changes: 1 addition & 1 deletion internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -1407,7 +1407,7 @@ func resolveExtensions() Extensions {

func updateHeaders(headers []Header) []Header {
var err error
newHeaders := []Header{}
newHeaders := make([]Header, 0, len(headers))

for _, header := range headers {
value := header.Value
Expand Down
2 changes: 1 addition & 1 deletion internal/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -977,7 +977,7 @@ func TestResolveExtensions(t *testing.T) {
extension := resolveExtensions()
require.NotNil(t, extension)

var result []string
result := make([]string, 0, len(extension.HeadersSetter.Headers))
for _, header := range extension.HeadersSetter.Headers {
result = append(result, header.Value)
}
Expand Down
2 changes: 1 addition & 1 deletion internal/datasource/config/nginx_config_parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ var globFunction = func(path string) ([]string, error) {
return matches, nil
}

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . ConfigParser

type (
Expand Down
6 changes: 3 additions & 3 deletions internal/file/file_manager_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ import (
"github.com/nginx/agent/v3/pkg/files"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . fileOperator

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . fileManagerServiceInterface

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . fileServiceOperatorInterface

const (
Expand Down
2 changes: 1 addition & 1 deletion internal/grpc/grpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import (
"google.golang.org/protobuf/proto"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . GrpcConnectionInterface

type (
Expand Down
7 changes: 4 additions & 3 deletions internal/grpc/grpc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -350,10 +350,11 @@ func validateError(t *testing.T, validationError error, isErrorExpected bool) {

func Test_ValidateGrpcError(t *testing.T) {
result := ValidateGrpcError(TestError{})
assert.IsType(t, TestError{}, result)

if result != nil {
require.ErrorIs(t, TestError{}, result)
}
result = ValidateGrpcError(status.Errorf(codes.InvalidArgument, "error"))
assert.IsType(t, &backoff.PermanentError{}, result)
require.ErrorIs(t, &backoff.PermanentError{}, result)
}

func Test_transportCredentials(t *testing.T) {
Expand Down
8 changes: 4 additions & 4 deletions internal/resource/resource_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,16 @@ const (
unixPlusAPIFormat = "http://nginx-plus-api%s"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . resourceServiceInterface

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . logTailerOperator

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . instanceOperator

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . processOperator

type resourceServiceInterface interface {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ func TestCredentialWatcherService_addWatcher(t *testing.T) {
}

func TestCredentialWatcherService_watchFiles(t *testing.T) {
var files []string
files := make([]string, 0, 3)

ctx := context.Background()
cws := NewCredentialWatcherService(types.AgentConfig(), model.Command)
Expand Down
4 changes: 2 additions & 2 deletions internal/watcher/health/health_watcher_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
mpi "github.com/nginx/agent/v3/api/grpc/mpi/v1"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . healthWatcherOperator

type (
Expand Down Expand Up @@ -139,7 +139,7 @@ func (hw *HealthWatcherService) Watch(ctx context.Context, ch chan<- InstanceHea
func (hw *HealthWatcherService) health(ctx context.Context) (updatedStatuses []*mpi.InstanceHealth, isHealthDiff bool,
) {
currentHealth := make(map[string]*mpi.InstanceHealth, len(hw.watchers))
allStatuses := make([]*mpi.InstanceHealth, 0)
allStatuses := make([]*mpi.InstanceHealth, 0, len(hw.watchers))

for instanceID, watcher := range hw.watchers {
instanceHealth, err := watcher.Health(ctx, hw.instances[instanceID])
Expand Down
5 changes: 3 additions & 2 deletions internal/watcher/instance/instance_watcher_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import (

const defaultAgentPath = "/run/nginx-agent"

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . processParser

type (
Expand Down Expand Up @@ -188,7 +188,6 @@ func (iw *InstanceWatcherService) HandleNginxConfigContextUpdate(ctx context.Con
func (iw *InstanceWatcherService) checkForUpdates(
ctx context.Context,
) {
var instancesToParse []*mpi.Instance
correlationID := logger.GenerateCorrelationID()
newCtx := context.WithValue(ctx, logger.CorrelationIDContextKey, correlationID)

Expand All @@ -197,6 +196,8 @@ func (iw *InstanceWatcherService) checkForUpdates(
slog.ErrorContext(newCtx, "Instance watcher updates", "error", err)
}

instancesToParse := make([]*mpi.Instance, 0, len(instanceUpdates.UpdatedInstances)+
len(instanceUpdates.NewInstances))
instancesToParse = append(instancesToParse, instanceUpdates.UpdatedInstances...)
instancesToParse = append(instancesToParse, instanceUpdates.NewInstances...)

Expand Down
2 changes: 1 addition & 1 deletion internal/watcher/process/process_operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
"github.com/shirou/gopsutil/v4/process"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . ProcessOperatorInterface
type (
// ProcessOperator provides details about running NGINX processes.
Expand Down
2 changes: 1 addition & 1 deletion internal/watcher/watcher_plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import (
pkgConfig "github.com/nginx/agent/v3/pkg/config"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . instanceWatcherServiceInterface

type (
Expand Down
7 changes: 4 additions & 3 deletions pkg/files/file_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"os"
"slices"
"strconv"
"strings"

mpi "github.com/nginx/agent/v3/api/grpc/mpi/v1"
"github.com/nginx/agent/v3/internal/datasource/cert"
Expand Down Expand Up @@ -120,7 +121,7 @@ func FileMode(mode string) os.FileMode {
// GenerateConfigVersion returns a unique config version for a set of files.
// The config version is calculated by joining the file hashes together and generating a unique ID.
func GenerateConfigVersion(fileSlice []*mpi.File) string {
var hashes string
var sb strings.Builder

files := make([]*mpi.File, len(fileSlice))
copy(files, fileSlice)
Expand All @@ -129,10 +130,10 @@ func GenerateConfigVersion(fileSlice []*mpi.File) string {
})

for _, file := range files {
hashes += file.GetFileMeta().GetHash()
sb.WriteString(file.GetFileMeta().GetHash())
}

return GenerateHash([]byte(hashes))
return GenerateHash([]byte(sb.String()))
}

// GenerateHash returns the hash value of a file's contents.
Expand Down
2 changes: 1 addition & 1 deletion pkg/host/exec/exec.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
"github.com/shirou/gopsutil/v4/host"
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . ExecInterface
type ExecInterface interface {
RunCmd(ctx context.Context, cmd string, args ...string) (*bytes.Buffer, error)
Expand Down
2 changes: 1 addition & 1 deletion pkg/host/info.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ var (
containerdPattern = regexp.MustCompile("sandboxes/([a-f0-9]{64})")
)

//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.8.1 -generate
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6@v6.11.2 -generate
//counterfeiter:generate . InfoInterface

type (
Expand Down
2 changes: 1 addition & 1 deletion test/helpers/go_utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (
)

func TestGoVersion(t *testing.T) {
expected := "1.24.0"
expected := "1.25.7"

actual, err := GoVersion(t, 2)

Expand Down
2 changes: 1 addition & 1 deletion test/integration/metrics/metrics_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func (s *MetricsTestSuite) TestNginxMetrics_TestRequestCount() {
family := s.metricFamilies[metricName]
s.Require().NotNil(family)

var baselineMetric []float64
baselineMetric := make([]float64, 0, 1)
baselineMetric = append(baselineMetric, utils.SumMetricFamily(family))
s.T().Logf("NGINX HTTP request count total: %v", baselineMetric[0])

Expand Down
Loading