Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ on:

env:
# Common versions
GOLANGCI_VERSION: "v2.10.1"
GOLANGCI_VERSION: "v2.13.2"
DOCKER_BUILDX_VERSION: "v0.37.0"

# Common users. We can't run a step 'if secrets.AWS_USR != ""' but we can run
Expand Down
13 changes: 12 additions & 1 deletion .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ linters:
- exhaustive
- gocheckcompilerdirectives
- gochecksumtype
- goconst
- gocritic
- gocyclo
- gosec
Expand Down Expand Up @@ -151,10 +150,22 @@ linters:
- staticcheck
path: pkg/types/reference.go
text: 'SA1019:'
- linters:
- staticcheck
path: pkg/types/reference_test.go
text: "SA1019: .*Type is deprecated in favor of TerraformName.*"
- linters:
- staticcheck
path: pkg/types/markers/crossplane.go
text: 'SA1019:'
- linters:
- staticcheck
path: pkg/types/markers/crossplane_test.go
text: "SA1019: .*Type is deprecated in favor of TerraformName.*"
- linters:
- staticcheck
path: pkg/types/comments/comment_test.go
text: "SA1019: .*Type is deprecated in favor of TerraformName.*"
- linters:
- govet
text: 'buildtag:'
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ GO_PROJECT := github.com/crossplane/$(PROJECT_NAME)/v2

# GOLANGCILINT_VERSION is inherited from build submodule by default.
# Uncomment below if you need to override the version.
GOLANGCILINT_VERSION ?= 2.10.1
GOLANGCILINT_VERSION ?= 2.13.2
# GO_REQUIRED_VERSION ?= 1.22

PLATFORMS ?= linux_amd64 linux_arm64
Expand Down
2 changes: 1 addition & 1 deletion pkg/examples/conversion/example_conversions.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func ApplyAPIConverters(pc *config.Provider, startPath, licenseHeaderPath string
var convertedFileContent string
if !info.IsDir() && strings.HasSuffix(info.Name(), ".yaml") {
log.Printf("Converting: %s\n", path)
content, err := os.ReadFile(filepath.Clean(path))
content, err := os.ReadFile(filepath.Clean(path)) //nolint:gosec // generation only
if err != nil {
return errors.Wrapf(err, "failed to read the %s file", path)
}
Expand Down
180 changes: 90 additions & 90 deletions pkg/internal/ratelimiter/encapsulating_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -182,14 +182,14 @@ func TestEncapsulatingRateLimiterAdd(t *testing.T) {
rl1 := &fakeRateLimiter{name: "rl1"}
req1 := newReq("req-1")
return args{
op: addOp{key: "k1", rl: rl1, req: req1},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1},
Requests: map[string]sets.Set[reconcile.Request]{"k1": sets.New[reconcile.Request](req1)},
},
}
op: addOp{key: "k1", rl: rl1, req: req1},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1},
Requests: map[string]sets.Set[reconcile.Request]{"k1": sets.New[reconcile.Request](req1)},
},
}
},
},
"ExistingKeyNewRequest": {
Expand All @@ -200,15 +200,15 @@ func TestEncapsulatingRateLimiterAdd(t *testing.T) {
req1 := newReq("req-1")
req2 := newReq("req-2")
return args{
pre: []addOp{{key: "k1", rl: rl1, req: req1}},
op: addOp{key: "k1", rl: rlIgnored, req: req2},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k1", req2: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1},
Requests: map[string]sets.Set[reconcile.Request]{"k1": sets.New[reconcile.Request](req1, req2)},
},
}
pre: []addOp{{key: "k1", rl: rl1, req: req1}},
op: addOp{key: "k1", rl: rlIgnored, req: req2},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k1", req2: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1},
Requests: map[string]sets.Set[reconcile.Request]{"k1": sets.New[reconcile.Request](req1, req2)},
},
}
},
},
"ExistingKeySameRequest": {
Expand All @@ -218,15 +218,15 @@ func TestEncapsulatingRateLimiterAdd(t *testing.T) {
rlIgnored := &fakeRateLimiter{name: "rl-ignored"}
req1 := newReq("req-1")
return args{
pre: []addOp{{key: "k1", rl: rl1, req: req1}},
op: addOp{key: "k1", rl: rlIgnored, req: req1},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1},
Requests: map[string]sets.Set[reconcile.Request]{"k1": sets.New[reconcile.Request](req1)},
},
}
pre: []addOp{{key: "k1", rl: rl1, req: req1}},
op: addOp{key: "k1", rl: rlIgnored, req: req1},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1},
Requests: map[string]sets.Set[reconcile.Request]{"k1": sets.New[reconcile.Request](req1)},
},
}
},
},
"RequestMovesAndOldKeyDropped": {
Expand All @@ -236,18 +236,18 @@ func TestEncapsulatingRateLimiterAdd(t *testing.T) {
rl2 := &fakeRateLimiter{name: "rl2"}
req1 := newReq("req-1")
return args{
pre: []addOp{{key: "k1", rl: rl1, req: req1}},
op: addOp{key: "k2", rl: rl2, req: req1},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k2"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k2": rl2},
Requests: map[string]sets.Set[reconcile.Request]{"k2": sets.New[reconcile.Request](req1)},
},
forgetByRL: map[*fakeRateLimiter][]reconcile.Request{
rl1: {req1},
},
}
pre: []addOp{{key: "k1", rl: rl1, req: req1}},
op: addOp{key: "k2", rl: rl2, req: req1},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k2"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k2": rl2},
Requests: map[string]sets.Set[reconcile.Request]{"k2": sets.New[reconcile.Request](req1)},
},
forgetByRL: map[*fakeRateLimiter][]reconcile.Request{
rl1: {req1},
},
}
},
},
"RequestMovesButOldKeyRetained": {
Expand All @@ -258,24 +258,24 @@ func TestEncapsulatingRateLimiterAdd(t *testing.T) {
req1 := newReq("req-1")
req2 := newReq("req-2")
return args{
pre: []addOp{
{key: "k1", rl: rl1, req: req1},
{key: "k1", rl: rl1, req: req2},
},
op: addOp{key: "k2", rl: rl2, req: req1},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k2", req2: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1, "k2": rl2},
Requests: map[string]sets.Set[reconcile.Request]{
"k1": sets.New[reconcile.Request](req2),
"k2": sets.New[reconcile.Request](req1),
},
},
forgetByRL: map[*fakeRateLimiter][]reconcile.Request{
rl1: {req1},
pre: []addOp{
{key: "k1", rl: rl1, req: req1},
{key: "k1", rl: rl1, req: req2},
},
op: addOp{key: "k2", rl: rl2, req: req1},
}, want{
state: state{
Inner: map[reconcile.Request]string{req1: "k2", req2: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1, "k2": rl2},
Requests: map[string]sets.Set[reconcile.Request]{
"k1": sets.New[reconcile.Request](req2),
"k2": sets.New[reconcile.Request](req1),
},
}
},
forgetByRL: map[*fakeRateLimiter][]reconcile.Request{
rl1: {req1},
},
}
},
},
}
Expand Down Expand Up @@ -314,14 +314,14 @@ func TestEncapsulatingRateLimiterRemove(t *testing.T) {
reason: "Removing an unknown request must be a no-op: no state change and no Forget calls.",
setup: func() (args, want) {
return args{
req: newReq("req-1"),
}, want{
state: state{
Inner: map[reconcile.Request]string{},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{},
Requests: map[string]sets.Set[reconcile.Request]{},
},
}
req: newReq("req-1"),
}, want{
state: state{
Inner: map[reconcile.Request]string{},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{},
Requests: map[string]sets.Set[reconcile.Request]{},
},
}
},
},
"OnlyRequestForKey": {
Expand All @@ -330,18 +330,18 @@ func TestEncapsulatingRateLimiterRemove(t *testing.T) {
rl1 := &fakeRateLimiter{name: "rl1"}
req1 := newReq("req-1")
return args{
pre: []addOp{{key: "k1", rl: rl1, req: req1}},
req: req1,
}, want{
state: state{
Inner: map[reconcile.Request]string{},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{},
Requests: map[string]sets.Set[reconcile.Request]{},
},
forgetByRL: map[*fakeRateLimiter][]reconcile.Request{
rl1: {req1},
},
}
pre: []addOp{{key: "k1", rl: rl1, req: req1}},
req: req1,
}, want{
state: state{
Inner: map[reconcile.Request]string{},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{},
Requests: map[string]sets.Set[reconcile.Request]{},
},
forgetByRL: map[*fakeRateLimiter][]reconcile.Request{
rl1: {req1},
},
}
},
},
"OneOfMultipleRequests": {
Expand All @@ -351,21 +351,21 @@ func TestEncapsulatingRateLimiterRemove(t *testing.T) {
req1 := newReq("req-1")
req2 := newReq("req-2")
return args{
pre: []addOp{
{key: "k1", rl: rl1, req: req1},
{key: "k1", rl: rl1, req: req2},
},
req: req1,
}, want{
state: state{
Inner: map[reconcile.Request]string{req2: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1},
Requests: map[string]sets.Set[reconcile.Request]{"k1": sets.New[reconcile.Request](req2)},
},
forgetByRL: map[*fakeRateLimiter][]reconcile.Request{
rl1: {req1},
},
}
pre: []addOp{
{key: "k1", rl: rl1, req: req1},
{key: "k1", rl: rl1, req: req2},
},
req: req1,
}, want{
state: state{
Inner: map[reconcile.Request]string{req2: "k1"},
RateLimiters: map[string]workqueue.TypedRateLimiter[reconcile.Request]{"k1": rl1},
Requests: map[string]sets.Set[reconcile.Request]{"k1": sets.New[reconcile.Request](req2)},
},
forgetByRL: map[*fakeRateLimiter][]reconcile.Request{
rl1: {req1},
},
}
},
},
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/pipeline/hooks_deprecated_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ func (mu *lifecycleMarkerUpdater) updateVersionFile(group, version string, resou
}

// Write back to file
if err := os.WriteFile(filePath, []byte(updatedContent), 0600); err != nil {
if err := os.WriteFile(filePath, []byte(updatedContent), 0600); err != nil { //nolint:gosec // generation only
return errors.Wrapf(err, "cannot write file %s", filePath)
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/pipeline/hooks_storage_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ func (svu *storageVersionMarkerUpdater) updateVersionFile(group, version string,
}

// Write back to file
if err := os.WriteFile(filePath, []byte(updatedContent), 0600); err != nil {
if err := os.WriteFile(filePath, []byte(updatedContent), 0600); err != nil { //nolint:gosec // generation only
return errors.Wrapf(err, "cannot write file %s", filePath)
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/registry/meta.go
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ func (pm *ProviderMetadata) ScrapeRepo(config *ScrapeConfiguration) error {
r := &Resource{}
// don't scrape if file is empty
filename := filepath.Clean(path)
b, err := os.ReadFile(filename)
b, err := os.ReadFile(filename) //nolint:gosec // generation only
if err != nil {
return errors.Wrap(err, "failed to read markdown file")
}
Expand Down
16 changes: 8 additions & 8 deletions pkg/resource/lateinit.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ func zeroValueJSONOmitEmptyFilter(cName string) ValueFilter {
return true
case (k == reflect.Slice || k == reflect.Map) && v.Len() == 0:
return true
case k == reflect.Ptr && v.Elem().IsZero():
case k == reflect.Pointer && v.Elem().IsZero():
return true
default:
return false
Expand All @@ -159,7 +159,7 @@ func zeroElemPtrFilter(cName string) ValueFilter {
}

t := v.Type()
if t.Kind() != reflect.Ptr || v.IsNil() {
if t.Kind() != reflect.Pointer || v.IsNil() {
return false
}
if v.Elem().IsZero() {
Expand Down Expand Up @@ -220,10 +220,10 @@ func (li *GenericLateInitializer) LateInitialize(desiredObject, observedObject a
}

typeOfDesiredObject, typeOfObservedObject := reflect.TypeOf(desiredObject), reflect.TypeOf(observedObject)
if typeOfDesiredObject.Kind() != reflect.Ptr || typeOfDesiredObject.Elem().Kind() != reflect.Struct {
if typeOfDesiredObject.Kind() != reflect.Pointer || typeOfDesiredObject.Elem().Kind() != reflect.Struct {
return false, errors.Errorf(errFmtNotPtrToStruct, "desiredObject", desiredObject)
}
if typeOfObservedObject.Kind() != reflect.Ptr || typeOfObservedObject.Elem().Kind() != reflect.Struct {
if typeOfObservedObject.Kind() != reflect.Pointer || typeOfObservedObject.Elem().Kind() != reflect.Struct {
return false, errors.Errorf(errFmtNotPtrToStruct, "observedObject", observedObject)
}
if reflect.TypeOf(desiredObject) != reflect.TypeOf(observedObject) {
Expand Down Expand Up @@ -294,7 +294,7 @@ func (li *GenericLateInitializer) handleStruct(parentName string, desiredObject

switch desiredStructField.Type.Kind() { //nolint:exhaustive
// handle pointer struct field
case reflect.Ptr:
case reflect.Pointer:
desiredKeepField, err = li.handlePtr(cName, desiredFieldValue, observedFieldValue)

case reflect.Slice:
Expand Down Expand Up @@ -334,7 +334,7 @@ func (li *GenericLateInitializer) handlePtr(cName string, desiredFieldValue, obs
desiredKeepField = nestedFieldAssigned

default: // then cr object's field is not set but response object contains a value, carry it
if desiredFieldValue.Kind() == reflect.Ptr && desiredFieldValue.IsNil() {
if desiredFieldValue.Kind() == reflect.Pointer && desiredFieldValue.IsNil() {
desiredFieldValue.Set(reflect.New(desiredFieldValue.Type().Elem()))
}

Expand Down Expand Up @@ -364,7 +364,7 @@ func (li *GenericLateInitializer) handleSlice(cName string, desiredFieldValue, o
// check slice item's kind (not slice type)
switch item.Elem().Kind() { //nolint:exhaustive
// if dealing with a slice of pointers
case reflect.Ptr:
case reflect.Pointer:
_, err = li.handlePtr(cName, item.Elem(), observedFieldValue.Index(i))
case reflect.Struct:
_, err = li.handleStruct(cName, item.Interface(), observedFieldValue.Index(i).Addr().Interface())
Expand Down Expand Up @@ -407,7 +407,7 @@ func (li *GenericLateInitializer) handleMap(cName string, desiredFieldValue, obs
// check map item's kind (not map type)
switch item.Elem().Kind() { //nolint:exhaustive
// if dealing with a slice of pointers
case reflect.Ptr:
case reflect.Pointer:
_, err = li.handlePtr(cName, item.Elem(), observedFieldValue.MapIndex(k))
// else if dealing with a slice of slices
case reflect.Slice:
Expand Down
Loading