From 2b112e13f8c7b5720277451d2082455b9a68df25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 20:03:45 +0000 Subject: [PATCH 1/6] build(deps): bump golangci/golangci-lint-action from 6.5.2 to 9.0.0 Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 6.5.2 to 9.0.0. - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](https://github.com/golangci/golangci-lint-action/compare/v6.5.2...v9.0.0) --- updated-dependencies: - dependency-name: golangci/golangci-lint-action dependency-version: 9.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 34eee68..cf160fc 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -17,7 +17,7 @@ jobs: with: go-version: 1.23 - name: lint - uses: golangci/golangci-lint-action@v6.5.2 + uses: golangci/golangci-lint-action@v9.0.0 with: version: v1.62.2 From cc97cea55370754b89239cb87ca5ce3f320646f3 Mon Sep 17 00:00:00 2001 From: Espen Albert Date: Fri, 14 Nov 2025 09:59:50 +0000 Subject: [PATCH 2/6] chore: update golangci-lint configuration and bump version to v2.4.0 - Updated .golangci.yml to new format and settings, including enabling specific linters and adjusting exclusions. - Bumped golangci-lint version in Makefile from v1.62.2 to v2.4.0. (REQUIRED by the v9 of the ci-lint action) - Fixed fieldalignment issues in structs --- .golangci.yml | 215 ++++++++++++++------------------ Makefile | 2 +- appservices/appservices.go | 14 +-- appservices/appservices_test.go | 2 +- appservices/event_triggers.go | 32 ++--- 5 files changed, 118 insertions(+), 147 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 245515f..683d192 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,124 +1,97 @@ -linters-settings: - gocritic: - enabled-tags: - - diagnostic - - experimental - - opinionated - - performance - - style - disabled-checks: - - octalLiteral - gocyclo: - min-complexity: 15 - revive: - # see https://github.com/mgechev/revive#available-rules for details. - ignore-generated-header: true - severity: warning - rules: - - name: blank-imports - - name: context-as-argument - - name: context-keys-type - - name: dot-imports - - name: error-return - - name: error-strings - - name: error-naming - - name: errorf - - name: exported - - name: indent-error-flow - - name: if-return - - name: increment-decrement - - name: var-naming - - name: var-declaration - - name: package-comments - - name: range - - name: receiver-naming - - name: time-naming - - name: unexported-return - - name: indent-error-flow - - name: errorf - - name: empty-block - - name: superfluous-else - - name: struct-tag - - name: unused-parameter - - name: unused-receiver - - name: unreachable-code - - name: redefines-builtin-id +version: "2" +run: + modules-download-mode: readonly + tests: true linters: - # please, do not use `enable-all`: it's deprecated and will be removed soon. - # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint - disable-all: true + default: none enable: - - bodyclose # checks whether HTTP response body is closed successfully [fast: false, auto-fix: false] - - dogsled # Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) [fast: true, auto-fix: false] - - errcheck # Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases [fast: false, auto-fix: false] - - errorlint # errorlint is a linter for that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13. [fast: false, auto-fix: false] - - exhaustive # check exhaustiveness of enum switch statements [fast: false, auto-fix: false] - - gochecknoinits # Checks that no init functions are present in Go code [fast: true, auto-fix: false] - - gocritic # Provides many diagnostics that check for bugs, performance and style issues. [fast: false, auto-fix: false] - - gocyclo # Computes and checks the cyclomatic complexity of functions [fast: true, auto-fix: false] - - godot # Check if comments end in a period [fast: true, auto-fix: true] - - gofmt # Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification [fast: true, auto-fix: true] - - goimports # Goimports does everything that gofmt does. Additionally it checks unused imports [fast: true, auto-fix: true] - - goprintffuncname # Checks that printf-like functions are named with `f` at the end [fast: true, auto-fix: false] - - gosec # Inspects source code for security problems [fast: false, auto-fix: false] - - gosimple # Linter for Go source code that specializes in simplifying a code [fast: false, auto-fix: false] - - govet # Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string [fast: false, auto-fix: false] - - ineffassign # Detects when assignments to existing variables are not used [fast: true, auto-fix: false] - - misspell # Finds commonly misspelled English words in comments [fast: true, auto-fix: true] - - nakedret # Finds naked returns in functions greater than a specified function length [fast: true, auto-fix: false] - - nolintlint # Reports ill-formed or insufficient nolint directives [fast: true, auto-fix: false] - - revive # Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint. [fast: false, auto-fix: false] - - rowserrcheck # checks whether Err of rows is checked successfully [fast: false, auto-fix: false] - - staticcheck # Staticcheck is a go vet on steroids, applying a ton of static analysis checks [fast: false, auto-fix: false] - - stylecheck # Stylecheck is a replacement for golint [fast: false, auto-fix: false] - - thelper # thelper detects golang test helpers without t.Helper() call and checks the consistency of test helpers [fast: false, auto-fix: false] - - typecheck # Like the front-end of a Go compiler, parses and type-checks Go code [fast: false, auto-fix: false] - - unconvert # Remove unnecessary type conversions [fast: false, auto-fix: false] - - unparam # Reports unused function parameters [fast: false, auto-fix: false] - - unused # Checks Go code for unused constants, variables, functions and types [fast: false, auto-fix: false] - - whitespace # Tool for detection of leading and trailing whitespace [fast: true, auto-fix: true] + - bodyclose + - dogsled + - errcheck + - errorlint + - exhaustive + - gochecknoinits + - gocritic + - gocyclo + - godot + - goprintffuncname + - gosec + - govet + - ineffassign + - misspell + - nakedret + - nolintlint + - revive + - rowserrcheck + - staticcheck + - thelper + - unconvert + - unparam + - unused + - whitespace - # don't enable: -# - asciicheck # Simple linter to check that your code does not contain non-ASCII identifiers [fast: true, auto-fix: false] -# - cyclop # checks function and package cyclomatic complexity [fast: false, auto-fix: false] -# - deadcode # Finds unused code [fast: false, auto-fix: false] -# - dupl # Tool for code clone detection [fast: true, auto-fix: false] -# - durationcheck # check for two durations multiplied together [fast: false, auto-fix: false] -# - exhaustivestruct # Checks if all struct's fields are initialized [fast: false, auto-fix: false] -# - forbidigo # Forbids identifiers [fast: true, auto-fix: false] -# - forcetypeassert # finds forced type assertions [fast: true, auto-fix: false] -# - funlen # Tool for detection of long functions [fast: true, auto-fix: false] -# - gci # Gci control golang package import order and make it always deterministic. [fast: true, auto-fix: true] -# - gochecknoglobals # check that no global variables exist [fast: true, auto-fix: false] -# - gocognit # Computes and checks the cognitive complexity of functions [fast: true, auto-fix: false] -# - goconst # Finds repeated strings that could be replaced by a constant [fast: true, auto-fix: false] -# - godox # Tool for detection of FIXME, TODO and other comment keywords [fast: true, auto-fix: false] -# - gomnd # An analyzer to detect magic numbers. [fast: true, auto-fix: false] -# - goerr113 # Golang linter to check the errors handling expressions [fast: false, auto-fix: false] -# - gofumpt # Gofumpt checks whether code was gofumpt-ed. [fast: true, auto-fix: true] -# - goheader # Checks is file header matches to pattern [fast: true, auto-fix: false] -# - gomoddirectives # Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod. [fast: true, auto-fix: false] -# - gomodguard # Allow and block list linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations. [fast: true, auto-fix: false] -# - importas # Enforces consistent import aliases [fast: false, auto-fix: false] -# - interfacer # Linter that suggests narrower interface types [fast: false, auto-fix: false] -# - lll # Reports long lines [fast: true, auto-fix: false] -# - makezero # Finds slice declarations with non-zero initial length [fast: false, auto-fix: false] -# - maligned # Tool to detect Go structs that would take less memory if their fields were sorted [fast: false, auto-fix: false] -# - nestif # Reports deeply nested if statements [fast: true, auto-fix: false] -# - nilerr # Finds the code that returns nil even if it checks that the error is not nil. [fast: false, auto-fix: false] -# - nlreturn # nlreturn checks for a new line before return and branch statements to increase code clarity [fast: true, auto-fix: false] -# - noctx # noctx finds sending http request without context.Context [fast: false, auto-fix: false] -# - paralleltest # paralleltest detects missing usage of t.Parallel() method in your Go test [fast: true, auto-fix: false] -# - prealloc # Finds slice declarations that could potentially be preallocated [fast: true, auto-fix: false] -# - predeclared # find code that shadows one of Go's predeclared identifiers [fast: true, auto-fix: false] -# - promlinter # Check Prometheus metrics naming via promlint [fast: true, auto-fix: false] -# - scopelint # Scopelint checks for unpinned variables in go programs [fast: true, auto-fix: false] -# - sqlclosecheck # Checks that sql.Rows and sql.Stmt are closed. [fast: false, auto-fix: false] -# - structcheck # Finds unused struct fields [fast: false, auto-fix: false] -# - testpackage # linter that makes you use a separate _test package [fast: true, auto-fix: false] -# - tparallel # tparallel detects inappropriate usage of t.Parallel() method in your Go test codes [fast: false, auto-fix: false] -# - wastedassign # wastedassign finds wasted assignment statements. [fast: false, auto-fix: false] -# - wrapcheck # Checks that errors returned from external packages are wrapped [fast: false, auto-fix: false] -# - wsl # Whitespace Linter - Forces you to use empty lines! [fast: true, auto-fix: false] -# - varcheck # Finds unused global variables and constants [fast: false, auto-fix: false] -# - ifshort # Checks that your code uses short syntax for if-statements whenever possible [fast: true, auto-fix: false] + settings: + gocritic: + enabled-tags: + - diagnostic + - experimental + - opinionated + - performance + - style + disabled-checks: + - octalLiteral + gocyclo: + min-complexity: 15 + revive: + ignore-generated-header: true + severity: warning + rules: + - name: blank-imports + - name: context-as-argument + - name: context-keys-type + - name: dot-imports + - name: error-return + - name: error-strings + - name: error-naming + - name: errorf + - name: exported + - name: indent-error-flow + - name: if-return + - name: increment-decrement + - name: var-naming + - name: var-declaration + - name: package-comments + - name: range + - name: receiver-naming + - name: time-naming + - name: unexported-return + - name: empty-block + - name: superfluous-else + - name: struct-tag + - name: unused-parameter + - name: unused-receiver + - name: unreachable-code + - name: redefines-builtin-id + govet: + enable-all: true + misspell: + locale: US + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - govet + text: "fieldalignment: struct with 232 pointer bytes could be 224" + - path: event_triggers\.go + linters: + - govet + text: "fieldalignment:.*EventTriggerConfig" +formatters: + enable: + - gofmt + - goimports diff --git a/Makefile b/Makefile index 3781d6f..bd503ed 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # A Self-Documenting Makefile: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html SOURCE_FILES?=./... -GOLANGCI_VERSION=v1.62.2 +GOLANGCI_VERSION=v2.4.0 COVERAGE=coverage.out export PATH := ./bin:$(PATH) diff --git a/appservices/appservices.go b/appservices/appservices.go index 5a0bf97..a767297 100644 --- a/appservices/appservices.go +++ b/appservices/appservices.go @@ -49,17 +49,15 @@ type ( // Client manages communication with Ops Manager API. type Client struct { - client *http.Client - BaseURL *url.URL - UserAgent string + client *http.Client + BaseURL *url.URL + Apps AppsService + EventTriggers EventTriggersService + onRequestCompleted RequestCompletionCallback + UserAgent string // copy raw atlas server response to the Response struct withRaw bool - - Apps AppsService - EventTriggers EventTriggersService - - onRequestCompleted RequestCompletionCallback } type service struct { diff --git a/appservices/appservices_test.go b/appservices/appservices_test.go index c96520b..2814388 100644 --- a/appservices/appservices_test.go +++ b/appservices/appservices_test.go @@ -131,8 +131,8 @@ func TestNew(t *testing.T) { type testRequestBody struct { TestName string `json:"testName"` - TestCounter int64 `json:"testCounter"` TestUserData string `json:"testUserData"` + TestCounter int64 `json:"testCounter"` } func TestNewRequest_withUserData(t *testing.T) { diff --git a/appservices/event_triggers.go b/appservices/event_triggers.go index 86b5081..31d4bfb 100644 --- a/appservices/event_triggers.go +++ b/appservices/event_triggers.go @@ -173,44 +173,44 @@ func (s *EventTriggersServiceOp) Delete(ctx context.Context, groupID, appID, tri // EventTrigger Represents a response of a trigger. type EventTrigger struct { + EventProcessors map[string]interface{} `json:"event_processors,omitempty"` + Disabled *bool `json:"disabled,omitempty"` + LastModified *int64 `json:"last_modified,omitempty"` + Config EventTriggerConfig `json:"config,omitempty"` ID string `json:"_id,omitempty"` Name string `json:"name,omitempty"` Type string `json:"type,omitempty"` FunctionID string `json:"function_id,omitempty"` FunctionName string `json:"function_name,omitempty"` - Disabled *bool `json:"disabled,omitempty"` - Config EventTriggerConfig `json:"config,omitempty"` - EventProcessors map[string]interface{} `json:"event_processors,omitempty"` - LastModified *int64 `json:"last_modified,omitempty"` } // EventTriggerRequest Represents a request of create a trigger. type EventTriggerRequest struct { + Config *EventTriggerConfig `json:"config,omitempty"` + EventProcessors map[string]interface{} `json:"event_processors,omitempty"` + Disabled *bool `json:"disabled,omitempty"` Name string `json:"name,omitempty"` Type string `json:"type,omitempty"` FunctionID string `json:"function_id,omitempty"` - Disabled *bool `json:"disabled,omitempty"` - Config *EventTriggerConfig `json:"config,omitempty"` - EventProcessors map[string]interface{} `json:"event_processors,omitempty"` } // EventTriggerConfig Represents a request of a trigger config. type EventTriggerConfig struct { OperationTypes []string `json:"operation_types,omitempty"` - OperationType string `json:"operation_type,omitempty"` Providers []string `json:"providers,omitempty"` - Database string `json:"database,omitempty"` - Collection string `json:"collection,omitempty"` - ServiceID string `json:"service_id,omitempty"` - Match interface{} `json:"match,omitempty"` - Project interface{} `json:"project,omitempty"` FullDocument *bool `json:"full_document,omitempty"` FullDocumentBeforeChange *bool `json:"full_document_before_change,omitempty"` - Schedule string `json:"schedule,omitempty"` - ScheduleType string `json:"schedule_type,omitempty"` Unordered *bool `json:"unordered,omitempty"` - ClusterName string `json:"clusterName,omitempty"` TolerateResumeErrors *bool `json:"tolerate_resume_errors,omitempty"` SkipCatchupEvents *bool `json:"skip_catchup_events,omitempty"` MaximumThroughput *bool `json:"maximum_throughput,omitempty"` + Match interface{} `json:"match,omitempty"` + Project interface{} `json:"project,omitempty"` + OperationType string `json:"operation_type,omitempty"` + Database string `json:"database,omitempty"` + Collection string `json:"collection,omitempty"` + ServiceID string `json:"service_id,omitempty"` + Schedule string `json:"schedule,omitempty"` + ScheduleType string `json:"schedule_type,omitempty"` + ClusterName string `json:"clusterName,omitempty"` } From 86c86a5c07c72a6e8a2bd42a97e94b5743558b51 Mon Sep 17 00:00:00 2001 From: Espen Albert Date: Fri, 14 Nov 2025 10:02:08 +0000 Subject: [PATCH 3/6] chore: update golangci-lint version in CI workflow to v2.4.0 - Updated golangci-lint version in .github/workflows/pr.yml to v2.4.0, ensuring consistency with the Makefile. --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index cf160fc..edce73a 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -19,7 +19,7 @@ jobs: - name: lint uses: golangci/golangci-lint-action@v9.0.0 with: - version: v1.62.2 + version: v2.4.0 # Also update GOLANGCI_VERSION variable in Makefile when updating this version tests-on-unix: needs: golangci-lint # run after golangci-lint action to not produce duplicated errors From 564ba5e314db0921a7164cfd73750af39f9569fd Mon Sep 17 00:00:00 2001 From: Espen Albert Date: Fri, 14 Nov 2025 10:02:53 +0000 Subject: [PATCH 4/6] chore: remove deprecated field --- .golangci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 683d192..c4f169f 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -43,7 +43,6 @@ linters: gocyclo: min-complexity: 15 revive: - ignore-generated-header: true severity: warning rules: - name: blank-imports From 37f663c50cea91320cac31c2ab4b3b7e2adaf671 Mon Sep 17 00:00:00 2001 From: Espen Albert Date: Fri, 14 Nov 2025 10:08:47 +0000 Subject: [PATCH 5/6] chore: refactor EventTriggerConfig structure and update golangci-lint configuration - Reordered fields in EventTriggerConfig for clarity and consistency. - Restored Config field in EventTrigger struct. - Removed specific rules from golangci-lint configuration to streamline linting process. --- .golangci.yml | 8 -------- appservices/event_triggers.go | 14 +++++++------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index c4f169f..2f0572d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -82,14 +82,6 @@ linters: - common-false-positives - legacy - std-error-handling - rules: - - linters: - - govet - text: "fieldalignment: struct with 232 pointer bytes could be 224" - - path: event_triggers\.go - linters: - - govet - text: "fieldalignment:.*EventTriggerConfig" formatters: enable: - gofmt diff --git a/appservices/event_triggers.go b/appservices/event_triggers.go index 31d4bfb..f4bd4be 100644 --- a/appservices/event_triggers.go +++ b/appservices/event_triggers.go @@ -176,12 +176,12 @@ type EventTrigger struct { EventProcessors map[string]interface{} `json:"event_processors,omitempty"` Disabled *bool `json:"disabled,omitempty"` LastModified *int64 `json:"last_modified,omitempty"` - Config EventTriggerConfig `json:"config,omitempty"` ID string `json:"_id,omitempty"` Name string `json:"name,omitempty"` Type string `json:"type,omitempty"` FunctionID string `json:"function_id,omitempty"` FunctionName string `json:"function_name,omitempty"` + Config EventTriggerConfig `json:"config,omitempty"` } // EventTriggerRequest Represents a request of create a trigger. @@ -196,21 +196,21 @@ type EventTriggerRequest struct { // EventTriggerConfig Represents a request of a trigger config. type EventTriggerConfig struct { - OperationTypes []string `json:"operation_types,omitempty"` - Providers []string `json:"providers,omitempty"` + Match interface{} `json:"match,omitempty"` + Project interface{} `json:"project,omitempty"` + Unordered *bool `json:"unordered,omitempty"` FullDocument *bool `json:"full_document,omitempty"` FullDocumentBeforeChange *bool `json:"full_document_before_change,omitempty"` - Unordered *bool `json:"unordered,omitempty"` TolerateResumeErrors *bool `json:"tolerate_resume_errors,omitempty"` SkipCatchupEvents *bool `json:"skip_catchup_events,omitempty"` MaximumThroughput *bool `json:"maximum_throughput,omitempty"` - Match interface{} `json:"match,omitempty"` - Project interface{} `json:"project,omitempty"` + Collection string `json:"collection,omitempty"` OperationType string `json:"operation_type,omitempty"` Database string `json:"database,omitempty"` - Collection string `json:"collection,omitempty"` ServiceID string `json:"service_id,omitempty"` Schedule string `json:"schedule,omitempty"` ScheduleType string `json:"schedule_type,omitempty"` ClusterName string `json:"clusterName,omitempty"` + Providers []string `json:"providers,omitempty"` + OperationTypes []string `json:"operation_types,omitempty"` } From 49652c33650332ebc9b1e02106bb39f7a220757a Mon Sep 17 00:00:00 2001 From: Espen Albert Date: Fri, 14 Nov 2025 10:16:50 +0000 Subject: [PATCH 6/6] fix: update test for fieldalignment-optimized struct order --- appservices/appservices_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/appservices/appservices_test.go b/appservices/appservices_test.go index 2814388..1b00f9b 100644 --- a/appservices/appservices_test.go +++ b/appservices/appservices_test.go @@ -142,8 +142,7 @@ func TestNewRequest_withUserData(t *testing.T) { inURL, outURL := requestPath, defaultBaseURL+requestPath inBody, outBody := &testRequestBody{TestName: "l", TestUserData: "u"}, - `{"testName":"l","testCounter":0,`+ - `"testUserData":"u"}`+"\n" + `{"testName":"l","testUserData":"u","testCounter":0}`+"\n" req, _ := c.NewRequest(ctx, http.MethodGet, inURL, inBody) // test relative URL was expanded