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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
7 changes: 5 additions & 2 deletions .golangci.yaml
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
version: "2"

linters:
# https://golangci-lint.run/usage/linters/#enabled-by-default-linters
enable:
# default linters
- errcheck
- gosimple
- govet
- ineffassign
- staticcheck
- unused
# optional linters

formatters:
enable:
- goimports

2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ ENVTEST_K8S_VERSION = 1.33.2
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
CONTROLLER_GEN = go run ${PROJECT_DIR}/vendor/sigs.k8s.io/controller-tools/cmd/controller-gen
ENVTEST = go run ${PROJECT_DIR}/vendor/sigs.k8s.io/controller-runtime/tools/setup-envtest
GOLANGCI_LINT = go run ${PROJECT_DIR}/vendor/github.com/golangci/golangci-lint/cmd/golangci-lint
GOLANGCI_LINT = go run ${PROJECT_DIR}/vendor/github.com/golangci/golangci-lint/v2/cmd/golangci-lint

HOME ?= /tmp/kubebuilder-testing
ifeq ($(HOME), /)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,21 @@ func executeCommandC(root *cobra.Command, args ...string) (c *cobra.Command, out
func Test_mergeCloudConfig(t *testing.T) {
tmpDir, err := os.MkdirTemp("", "cccmo-azure-creds-injector")
require.NoError(t, err)
defer os.Remove(tmpDir)
defer func() {
require.NoError(t, os.RemoveAll(tmpDir))
}()

inputFile, err := os.CreateTemp(tmpDir, "dummy-config")
require.NoError(t, err)
defer os.Remove(inputFile.Name())
defer func() {
require.NoError(t, os.Remove(inputFile.Name()))
}()
Comment on lines +38 to +40
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE="cmd/azure-config-credentials-injector/credentials_injector_test.go"

echo "Inspect temp file creation and cleanup calls:"
nl -ba "$FILE" | sed -n '29,55p'
rg -nP 'CreateTemp|\.Close\(|os\.Remove\(|os\.RemoveAll\(' "$FILE"

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 200


🏁 Script executed:

#!/bin/bash
set -euo pipefail

FILE="cmd/azure-config-credentials-injector/credentials_injector_test.go"

# Check if file exists and show its relevant lines
if [ -f "$FILE" ]; then
  echo "=== Lines 29-55 of the file ==="
  sed -n '29,55p' "$FILE"
  echo ""
  echo "=== All CreateTemp, Close, and Remove calls ==="
  rg -n 'CreateTemp|\.Close\(|os\.Remove\(|os\.RemoveAll\(' "$FILE"
else
  echo "File not found: $FILE"
fi

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 1239


🏁 Script executed:

#!/bin/bash
FILE="cmd/azure-config-credentials-injector/credentials_injector_test.go"

# Check the full file for all CreateTemp usages
echo "=== All CreateTemp calls in file ==="
rg -n 'CreateTemp' "$FILE"

# Get file size to see if we should review the whole thing
wc -l "$FILE"

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 330


Close temp file handles before deferred os.Remove cleanup.

inputFile and outputFile are not closed after os.CreateTemp (lines 36, 42). On platforms with strict file handling (Windows, etc.), attempting to delete open files will fail, causing the deferred cleanup to fail and tests to become flaky.

Add inputFile.Close() after line 37 and outputFile.Close() after line 43.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/azure-config-credentials-injector/credentials_injector_test.go` around
lines 38 - 40, The temp files created as inputFile and outputFile in
credentials_injector_test.go are not closed before the deferred os.Remove, which
can cause deletion to fail on some platforms; after each os.CreateTemp call
(i.e., immediately after inputFile is created and after outputFile is created)
call inputFile.Close() and outputFile.Close() respectively so the defer that
removes the files succeeds; ensure you still defer os.Remove for cleanup and
only close the file handles (not remove) at those points.


outputFile, err := os.CreateTemp(tmpDir, "dummy-config-merged")
require.NoError(t, err)
defer os.Remove(outputFile.Name())
defer func() {
require.NoError(t, os.Remove(outputFile.Name()))
}()

cleanupEnv := func(envVars map[string]string) {
for envVarName := range envVars {
Expand Down
2 changes: 1 addition & 1 deletion cmd/cluster-cloud-controller-manager-operator/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ func main() {
if err = (&controllers.CloudOperatorReconciler{
ClusterOperatorStatusClient: controllers.ClusterOperatorStatusClient{
Client: mgr.GetClient(),
Recorder: mgr.GetEventRecorderFor("cloud-controller-manager-operator"),
Recorder: mgr.GetEventRecorderFor("cloud-controller-manager-operator"), //nolint:staticcheck // manager expects legacy recorder interface here
Clock: mgrClock,
ReleaseVersion: controllers.GetReleaseVersion(),
ManagedNamespace: *managedNamespace,
Expand Down
4 changes: 2 additions & 2 deletions cmd/config-sync-controllers/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ func main() {
if err = (&controllers.CloudConfigReconciler{
ClusterOperatorStatusClient: controllers.ClusterOperatorStatusClient{
Client: mgr.GetClient(),
Recorder: mgr.GetEventRecorderFor("cloud-controller-manager-operator-cloud-config-sync-controller"),
Recorder: mgr.GetEventRecorderFor("cloud-controller-manager-operator-cloud-config-sync-controller"), //nolint:staticcheck // manager expects legacy recorder interface here
Clock: sharedClock,
ReleaseVersion: controllers.GetReleaseVersion(),
ManagedNamespace: *managedNamespace,
Expand All @@ -192,7 +192,7 @@ func main() {
if err = (&controllers.TrustedCABundleReconciler{
ClusterOperatorStatusClient: controllers.ClusterOperatorStatusClient{
Client: mgr.GetClient(),
Recorder: mgr.GetEventRecorderFor("cloud-controller-manager-operator-ca-sync-controller"),
Recorder: mgr.GetEventRecorderFor("cloud-controller-manager-operator-ca-sync-controller"), //nolint:staticcheck // manager expects legacy recorder interface here
Clock: sharedClock,
ReleaseVersion: controllers.GetReleaseVersion(),
ManagedNamespace: *managedNamespace,
Expand Down
344 changes: 185 additions & 159 deletions go.mod

Large diffs are not rendered by default.

765 changes: 397 additions & 368 deletions go.sum

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions pkg/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,9 @@ func TestGetImagesFromJSONFile(t *testing.T) {
file, err := os.CreateTemp(os.TempDir(), tc.path)
path = file.Name()
assert.NoError(t, err)
defer file.Close()
defer func() {
assert.NoError(t, file.Close())
}()

_, err = file.WriteString(tc.imagesContent)
assert.NoError(t, err)
Expand Down Expand Up @@ -309,7 +311,9 @@ func TestComposeConfig(t *testing.T) {
file, err := os.CreateTemp(os.TempDir(), "images")
path := file.Name()
assert.NoError(t, err)
defer file.Close()
defer func() {
assert.NoError(t, file.Close())
}()

if tc.imagesContent == "" {
tc.imagesContent = defaultImagesFileContent
Expand Down
13 changes: 3 additions & 10 deletions pkg/controllers/resourceapply/resourceapply.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import (
"k8s.io/klog/v2"
"k8s.io/utils/ptr"

"sigs.k8s.io/controller-runtime/pkg/client"
coreclientv1 "sigs.k8s.io/controller-runtime/pkg/client"

"github.com/openshift/library-go/pkg/operator/resource/resourceapply"
Expand Down Expand Up @@ -67,7 +66,7 @@ func setSpecHashAnnotation(objMeta *metav1.ObjectMeta, spec interface{}) error {
}

// ApplyResource applies resources of unspecified type
func ApplyResource(ctx context.Context, client coreclientv1.Client, recorder record.EventRecorder, resource client.Object) (bool, error) {
func ApplyResource(ctx context.Context, client coreclientv1.Client, recorder record.EventRecorder, resource coreclientv1.Object) (bool, error) {
switch t := resource.(type) {
case *appsv1.Deployment:
return applyDeployment(ctx, client, recorder, t)
Expand Down Expand Up @@ -202,10 +201,7 @@ func applyDeployment(ctx context.Context, client coreclientv1.Client, recorder r

// Check if deployment recreation needed
// Currently it is necessary if pod selector was changed
needRecreate := false
if !reflect.DeepEqual(existingCopy.Spec.Selector, required.Spec.Selector) {
needRecreate = true
}
needRecreate := !reflect.DeepEqual(existingCopy.Spec.Selector, required.Spec.Selector)
if needRecreate {
klog.Infof("Deployment need to be recreated with new parameters")
recorder.Event(
Expand Down Expand Up @@ -291,10 +287,7 @@ func applyDaemonSet(ctx context.Context, client coreclientv1.Client, recorder re

// Check if ds recreation needed
// Currently it is necessary if pod selector was changed
needRecreate := false
if !reflect.DeepEqual(existingCopy.Spec.Selector, required.Spec.Selector) {
needRecreate = true
}
needRecreate := !reflect.DeepEqual(existingCopy.Spec.Selector, required.Spec.Selector)
if needRecreate {
klog.Infof("DaemonSet need to be recreated with new parameters")
recorder.Event(
Expand Down
6 changes: 3 additions & 3 deletions pkg/controllers/status_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ func TestOperatorSetStatusProgressing(t *testing.T) {
err = optr.setStatusProgressing(context.TODO(), nil)
assert.NoErrorf(t, err, "Failed to set Progressing status on ClusterOperator")

err = optr.Client.Get(context.TODO(), client.ObjectKey{Name: clusterOperatorName}, gotCO)
err = optr.Get(context.TODO(), client.ObjectKey{Name: clusterOperatorName}, gotCO)
assert.NoErrorf(t, err, "Failed to fetch ClusterOperator")
var conditionAfterAnotherSync configv1.ClusterOperatorStatusCondition
for _, coCondition := range gotCO.Status.Conditions {
Expand Down Expand Up @@ -261,7 +261,7 @@ func TestOperatorSetStatusDegraded(t *testing.T) {
err = optr.setStatusDegraded(context.TODO(), tc.passErr, nil)
assert.NoErrorf(t, err, "Failed to set Degraded status on ClusterOperator")

err = optr.Client.Get(context.TODO(), client.ObjectKey{Name: clusterOperatorName}, gotCO)
err = optr.Get(context.TODO(), client.ObjectKey{Name: clusterOperatorName}, gotCO)
assert.NoErrorf(t, err, "Failed to fetch ClusterOperator")

var conditionAfterAnotherSync configv1.ClusterOperatorStatusCondition
Expand Down Expand Up @@ -408,7 +408,7 @@ func TestOperatorSetStatusAvailable(t *testing.T) {
err = optr.setStatusAvailable(context.TODO(), tc.overrides)
assert.NoErrorf(t, err, "Failed to set Available status on ClusterOperator")

err = optr.Client.Get(context.TODO(), client.ObjectKey{Name: clusterOperatorName}, gotCO)
err = optr.Get(context.TODO(), client.ObjectKey{Name: clusterOperatorName}, gotCO)
assert.NoErrorf(t, err, "Failed to fetch ClusterOperator")

var conditionAfterAnotherSync configv1.ClusterOperatorStatusCondition
Expand Down
2 changes: 1 addition & 1 deletion tools/tools.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
package tools

import (
_ "github.com/golangci/golangci-lint/cmd/golangci-lint"
_ "github.com/golangci/golangci-lint/v2/cmd/golangci-lint"
_ "github.com/onsi/ginkgo/v2/ginkgo"
_ "sigs.k8s.io/controller-runtime/tools/setup-envtest"
_ "sigs.k8s.io/controller-tools/cmd/controller-gen"
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

52 changes: 52 additions & 0 deletions vendor/codeberg.org/chavacava/garif/README.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions vendor/codeberg.org/chavacava/garif/doc.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading