CORENET-6886: downstream sync to kube 1.35 and go to 1.25#281
CORENET-6886: downstream sync to kube 1.35 and go to 1.25#281openshift-merge-bot[bot] merged 17 commits intoopenshift:mainfrom
Conversation
|
@yingwang-0320: This pull request references CORENET-6886 which is a valid jira issue. DetailsIn response to this: Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
WalkthroughBumps Go toolchain and images to 1.25, updates CI/trivy, upgrades go.mod dependencies, adds exported device-ID sorting (with callers/tests updated), refactors per-node kubeconfig/cert validation and CSR retry/error paths, treats STATUS/GC as plugin-level commands, and seeds informer stores in tests instead of waiting for cache sync. Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/test.yml:
- Line 32: Replace the use of sudo -E which preserves the full environment;
instead preserve only PATH when invoking the script (e.g., call sudo env
"PATH=$PATH" ./hack/test-go.sh or use sudo --preserve-env=PATH
./hack/test-go.sh) so that the run step that executes hack/test-go.sh does not
forward all env vars to root.
In `@go.mod`:
- Line 18: The grpc dependency version in go.mod (google.golang.org/grpc
v1.73.0) is vulnerable; update the module to at least v1.79.3 by changing the
version entry for google.golang.org/grpc to v1.79.3 (or later) and then run
module tooling to resolve transitive changes (e.g., update with go commands and
run go mod tidy) so the project builds against the fixed gRPC release and
removes the vulnerable version from the dependency graph.
In `@pkg/k8sclient/kubeconfig.go`:
- Around line 116-118: The code currently logs non-x509 errors from
ServerVersion() but leaves cfg pointing at the invalid per-node config so
kubernetes.NewForConfig(cfg) will use a bad config; update the control flow in
the ServerVersion() handling (the block that calls ServerVersion() and logs via
logging.Errorf) to either return the error immediately or explicitly fall back
to the bootstrap config by reassigning cfg to the bootstrap credentials before
continuing; locate the ServerVersion() call and the subsequent
kubernetes.NewForConfig(cfg) usage and ensure that on any non-x509 error you do
one of those two actions so kubernetes.NewForConfig never receives the known-bad
per-node cfg.
In `@pkg/kubeletclient/kubeletclient.go`:
- Around line 146-147: The sort mutates cached kubelet state because
types.SortDeviceIDs(resourceMap) operates on slices that alias rc.resources
entries via dev.DeviceIds; to fix, when building resourceMap inside
GetPodResourceMap, deep-copy each dev.DeviceIds slice into a new slice (e.g.,
append a nil slice or make+copy) before assigning into resourceMap so in-place
sorting of resourceMap cannot change rc.resources or race with concurrent calls;
update the code paths that insert dev.DeviceIds into resourceMap to use the
copied slice and keep the rest unchanged.
In `@pkg/types/types.go`:
- Around line 184-188: The loop in SortDeviceIDs dereferences rInfo without
checking for nil, which can panic for nil map values; update the loop in
SortDeviceIDs to first check if rInfo == nil and continue if so, then retain the
existing check for rInfo.DeviceIDs != nil before calling sort.Strings on
ResourceInfo.DeviceIDs so nil entries are safely skipped.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 922e9b3a-7b67-4e89-add8-b87e1a2ac467
⛔ Files ignored due to path filters (286)
go.sumis excluded by!**/*.sumvendor/github.com/gogo/protobuf/AUTHORSis excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/CONTRIBUTORSis excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/Makefileis excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/clone.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/custom_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/decode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/discard.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/duration.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/duration_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/encode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/encode_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/equal.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/extensions.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/extensions_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/lib.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/lib_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/message_set.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/pointer_reflect.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/pointer_unsafe.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/properties.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/properties_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/skip_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_marshal.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_merge.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_unmarshal.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/text.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/text_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/text_parser.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/timestamp.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/timestamp_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/wrappers.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/wrappers_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/sortkeys/sortkeys.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/CHANGELOG.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/core_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/decorator_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/automaxprocs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroup.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroups.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroups2.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cpu_quota_linux.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cpu_quota_unsupported.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/mountpoint.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/runtime.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/subsys.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/main.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo_t_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/group.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/node.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/ordering.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson_event_writer.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson_reporter.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/suite.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/gojson_report.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/reporting_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/table_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/types/config.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/types/types.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/types/version.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/gomega/CHANGELOG.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/gomega/gomega_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/.gitignoreis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/.travis.ymlis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/Makefileis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/appveyor.ymlis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/go113.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/stack.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/desc.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/labels.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/metric.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_nocgo_darwin.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/process_collector_procfsenabled.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/vec.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/wrap.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/decode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/encode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/expfmt.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/fuzz.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/openmetrics_create.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/text_create.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/text_parse.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/alert.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/labels.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/labelset.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/metric.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/time.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/value.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/value_histogram.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/value_type.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/.golangci.ymlis excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/Makefile.commonis excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/arp.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/fs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/fs_statfs_notype.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/fscache.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/internal/fs/fs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/internal/util/parse.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/internal/util/sysreadfile.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/mountstats.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_dev_snmp6.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_ip_socket.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_protocols.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_tcp.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_cgroup.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_io.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_netstat.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_smaps.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_snmp.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_snmp6.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_status.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_sys.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/softirqs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/bool_func.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/count.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/flag.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/func.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/golangflag.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/ipnet_slice.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/string_to_string.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/text.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/time.gois excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/.codecov.ymlis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/.gitignoreis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/CHANGELOG.mdis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/CODE_OF_CONDUCT.mdis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/CONTRIBUTING.mdis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/Makefileis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/README.mdis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/automaxprocs.gois excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/internal/cgroups/doc.gois excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/maxprocs/maxprocs.gois excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/maxprocs/version.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/PATENTSis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/semver/semver.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/context/context.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/html/escape.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/html/parse.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/html/render.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config_go124.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config_go125.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config_go126.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config_pre_go124.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/frame.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/gotrack.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/http2.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/server.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/timer.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched_priority_rfc7540.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched_priority_rfc9218.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched_roundrobin.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/internal/httpcommon/request.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/internal/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/internal/oauth2.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/internal/token.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/internal/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/oauth2.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/pkce.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/token.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sync/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sync/PATENTSis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sync/errgroup/errgroup.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/plan9/pwd_go15_plan9.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/plan9/pwd_plan9.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/affinity_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/fdset.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/ifreq_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/mkall.shis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/mkerrors.shis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/syscall_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/syscall_netbsd.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/syscall_solaris.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zsyscall_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/ztypes_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/windows/syscall_windows.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/windows/types_windows.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/windows/zsyscall_windows.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/term/terminal.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/unicode/bidi/core.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ast/inspector/cursor.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/gcexportdata/importer.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/external.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/golist.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/golist_overlay.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/loadmode_string.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/packages.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/visit.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/objectpath/objectpath.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/callee.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/imports.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/map.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/ui.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/aliases/aliases.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/aliases/aliases_go122.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/core/event.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/core/export.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/core/fast.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/event.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/keys/keys.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/keys/standard.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/keys/util.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/label/label.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/bimport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/exportdata.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/gcimporter.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/iexport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/iimport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/predeclared.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/support.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke_unix.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/vendor.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/version.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/packagesinternal/packages.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/codes.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/decoder.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/encoder.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/flags.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/reloc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/support.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/sync.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/version.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/deps.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/import.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/manifest.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/stdlib.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/common.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/coretype.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/free.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/normalize.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/termlist.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/typeterm.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/classify_call.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/element.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/errorcode.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/fx.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/isnamed.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/qualifier.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/recv.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/toonew.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/types.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/varkind.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/zerovalue.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/versions/features.gois excluded by!vendor/**,!**/vendor/**
📒 Files selected for processing (14)
.github/workflows/build.yml.github/workflows/image-build.yml.github/workflows/release.yml.github/workflows/test.ymlgo.modimages/Dockerfileimages/Dockerfile.debugimages/Dockerfile.thickpkg/checkpoint/checkpoint.gopkg/checkpoint/checkpoint_test.gopkg/k8sclient/kubeconfig.gopkg/kubeletclient/kubeletclient.gopkg/multus/multus_cni100_test.gopkg/types/types.go
| types.SortDeviceIDs(resourceMap) | ||
| return resourceMap, nil |
There was a problem hiding this comment.
In-place sort mutates cached kubelet data due slice aliasing.
At Line 146, sorting resourceMap mutates rc.resources entries because new map entries reuse dev.DeviceIds slices (Line 155). That creates hidden state mutation and potential races on concurrent GetPodResourceMap calls.
Proposed fix (copy slice when inserting)
func (rc *kubeletClient) getDevicePluginResources(devices []*podresourcesapi.ContainerDevices, resourceMap map[string]*types.ResourceInfo) {
for _, dev := range devices {
if rInfo, ok := resourceMap[dev.ResourceName]; ok {
rInfo.DeviceIDs = append(rInfo.DeviceIDs, dev.DeviceIds...)
} else {
- resourceMap[dev.ResourceName] = &types.ResourceInfo{DeviceIDs: dev.DeviceIds}
+ resourceMap[dev.ResourceName] = &types.ResourceInfo{
+ DeviceIDs: append([]string(nil), dev.DeviceIds...),
+ }
}
}
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@pkg/kubeletclient/kubeletclient.go` around lines 146 - 147, The sort mutates
cached kubelet state because types.SortDeviceIDs(resourceMap) operates on slices
that alias rc.resources entries via dev.DeviceIds; to fix, when building
resourceMap inside GetPodResourceMap, deep-copy each dev.DeviceIds slice into a
new slice (e.g., append a nil slice or make+copy) before assigning into
resourceMap so in-place sorting of resourceMap cannot change rc.resources or
race with concurrent calls; update the code paths that insert dev.DeviceIds into
resourceMap to use the copied slice and keep the rest unchanged.
There was a problem hiding this comment.
Hi @bpickard22 , for this comment, do you think we need modify like AI suggested or not.
There was a problem hiding this comment.
Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!
There was a problem hiding this comment.
sorting is idempotent, I will make an issue to track that we should fix this, but that can happen upstream. This is fine to merge as is
The trivy-action@0.29.0 was trying to install Trivy v0.57.1 which no longer exists in the GitHub releases. This was causing all PR builds to fail on the "Image thick plugin" job. Update to v0.35.0 which properly installs the latest Trivy version. Assisted by Claude Sonnet 4.5 Signed-off-by: Benjamin Pickard <bpickard@redhat.com>
When a namespace uses a primary User-Defined Network (UDN) with a device-plugin resource (e.g. SR-IOV), OVN-Kubernetes uses the last device in the list for the primary interface while Multus assigns earlier devices to cluster-default/secondary interfaces. The kubelet and checkpoint paths build the list from map iteration, so order was non-deterministic and the "last" device could differ between callers. Sorting ensures both Multus and OVN-K8s see the same order so the last device is consistently the one reserved for the primary UDN. Signed-off-by: Yun Zhou <yunz@nvidia.com>
Signed-off-by: Ying Wang <yingwang@rehat.com>
Signed-off-by: Ying Wang <yingwang@rehat.com>
…00_test.go Signed-off-by: Ying Wang <yingwang@rehat.com>
Signed-off-by: Ying Wang <yingwang@rehat.com>
…ation Listing all pods across all namespaces during bootstrap is expensive in large clusters and unnecessary since the result is discarded. Use the lightweight /version endpoint to validate connectivity instead. Signed-off-by: Peng Liu <pliu@redhat.com>
Validate the per-node kubeconfig when a current certificate is available and fall back to the bootstrap kubeconfig only when the per-node config is no longer trusted. Also rebuild the derived per-node rest.Config from the reloaded bootstrap config so TLS settings are preserved and refreshed consistently. Signed-off-by: Peng Liu <pliu@redhat.com>
Signed-off-by: Ying Wang <yingwang@rehat.com>
feaf3d0 to
1a8007f
Compare
|
/retest |
|
/verified by pre-merge testing |
|
@yingwang-0320: This PR has been marked as verified by DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
@yingwang-0320: This pull request references CORENET-6886 which is a valid jira issue. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
@bpickard22 could you please help review? |
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Dockerfile.openshift (1)
26-29:⚠️ Potential issue | 🔴 CriticalBuild will fail:
rhel10stage no longer exists.The
rhel10builder stage was removed, but line 29 still referencesCOPY --from=rhel10. This will cause the Docker build to fail with an error likeinvalid from flag value rhel10: no such stage.Line 26 also creates a directory that will never be populated.
🐛 Proposed fix: Remove rhel10 references
- mkdir -p /usr/src/multus-cni/rhel10/bin && \ mkdir -p /usr/src/multus-cni/rhel9/bin && \ mkdir -p /usr/src/multus-cni/rhel8/bin -COPY --from=rhel10 /usr/src/multus-cni/bin /usr/src/multus-cni/rhel10/bin COPY --from=rhel9 /usr/src/multus-cni/bin /usr/src/multus-cni/rhel9/bin COPY --from=rhel8 /usr/src/multus-cni/bin /usr/src/multus-cni/rhel8/binAlso verify that the runtime binary selection logic on line 33-34 handles the absence of rhel10 correctly (it should, since it uses
VERSION_IDfrom the base image).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dockerfile.openshift` around lines 26 - 29, The Dockerfile references a non-existent builder stage "rhel10" (the COPY --from=rhel10 and mkdir for /usr/src/multus-cni/rhel10/bin), causing builds to fail; remove the rhel10 mkdir and the COPY --from=rhel10 entry and update any related filesystem setup to only create/populate rhel9 and rhel8 directories, then verify the runtime binary selection logic (the code that picks binaries based on VERSION_ID from the base image) correctly handles the absence of rhel10 so no further changes are needed.
♻️ Duplicate comments (3)
go.mod (1)
18-18:⚠️ Potential issue | 🔴 CriticalUpgrade
google.golang.org/grpcto a patched version (>= v1.79.3).Line 18 still pins
google.golang.org/grpc v1.73.0, which is in the vulnerable range for GHSA-p77j-4mvh-x3m3 (authz bypass). Please bump to at leastv1.79.3and refresh module resolution (go mod tidy) so the vulnerable version is removed from the graph.#!/bin/bash set -euo pipefail echo "== Current grpc version in go.mod ==" rg -nP '^\s*google\.golang\.org/grpc\s+v' go.mod echo echo "== OSV check for google.golang.org/grpc v1.73.0 ==" cat <<'JSON' > /tmp/osv-query.json { "package": { "name": "google.golang.org/grpc", "ecosystem": "Go" }, "version": "1.73.0" } JSON curl -sS https://api.osv.dev/v1/query -H 'Content-Type: application/json' --data `@/tmp/osv-query.json` echo echo "== Expected result ==" echo "- OSV response contains GHSA-p77j-4mvh-x3m3 for v1.73.0" echo "- go.mod should be updated to grpc >= v1.79.3"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@go.mod` at line 18, Update the pinned dependency for google.golang.org/grpc in go.mod from v1.73.0 to at least v1.79.3 to address GHSA-p77j-4mvh-x3m3, then run module resolution (go mod tidy) to refresh the dependency graph and update go.sum; ensure the line containing "google.golang.org/grpc" now shows v1.79.3 or newer and verify with a local OSV or go list check that v1.73.0 is no longer present.pkg/types/types.go (1)
185-187:⚠️ Potential issue | 🔴 CriticalGuard nil
*ResourceInfoentries before dereferencing.Line 186 dereferences
rInfowithout a nil check; a nil map value will panic at runtime.Proposed fix
func SortDeviceIDs(resourceMap map[string]*ResourceInfo) { for _, rInfo := range resourceMap { + if rInfo == nil { + continue + } if rInfo.DeviceIDs != nil { sort.Strings(rInfo.DeviceIDs) } } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/types/types.go` around lines 185 - 187, The loop over resourceMap dereferences rInfo (a *ResourceInfo) without checking for nil which can panic; update the loop that iterates resourceMap to first guard that rInfo != nil (e.g., continue when rInfo is nil) before accessing rInfo.DeviceIDs and then sort.Strings(rInfo.DeviceIDs) only when rInfo and rInfo.DeviceIDs are non-nil to avoid runtime panics.pkg/k8sclient/kubeconfig.go (1)
100-118:⚠️ Potential issue | 🟠 MajorDon't continue after per-node validation fails.
At Line 100
cfgis switched to the per-node config. IfServerVersion()fails with anything other than the specific unknown-authority case, Lines 116-118 only log and Line 121 still builds a client from that same config. That keeps CSR renewal on a kubeconfig we've already proven unusable, and this function can later return aClientInfobuilt from the same stale per-node config.Either return the validation error here or explicitly reset
cfgtobootstrapKubeconfigbefore continuing.🐛 Minimal fix
_, err = tempClient.Discovery().ServerVersion() if err != nil { if strings.Contains(err.Error(), "x509: certificate signed by unknown authority") { logging.Verbosef("cert mgr gets invalid per-node config. rebuild from bootstrap kubeconfig") newBootstrapKubeconfig, reloadErr := clientcmd.BuildConfigFromFlags("", bootstrapKubeconfigFile) if reloadErr != nil { return nil, logging.Errorf("failed to reload bootstrap kubeconfig: %v", reloadErr) } bootstrapKubeconfig = newBootstrapKubeconfig config = getPerNodeKubeconfig(bootstrapKubeconfig, certDir) cfg = bootstrapKubeconfig } else { - logging.Errorf("failed to validate per-node kubeconfig: %v", err) + return nil, logging.Errorf("failed to validate per-node kubeconfig: %v", err) } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/k8sclient/kubeconfig.go` around lines 100 - 118, The per-node kubeconfig validation currently logs non-unknown-authority errors but continues using the invalid cfg; update the error path in the block that checks tempClient.Discovery().ServerVersion() so that when err is non-nil and not the "x509: certificate signed by unknown authority" case you return the validation error immediately (use logging.Errorf with the err) instead of just logging, or alternatively reset cfg back to bootstrapKubeconfig (and recompute config/getPerNodeKubeconfig as needed) before proceeding; make this change around the tempClient, ServerVersion, bootstrapKubeconfig, cfg, and getPerNodeKubeconfig usage.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@Dockerfile.openshift`:
- Around line 26-29: The Dockerfile references a non-existent builder stage
"rhel10" (the COPY --from=rhel10 and mkdir for /usr/src/multus-cni/rhel10/bin),
causing builds to fail; remove the rhel10 mkdir and the COPY --from=rhel10 entry
and update any related filesystem setup to only create/populate rhel9 and rhel8
directories, then verify the runtime binary selection logic (the code that picks
binaries based on VERSION_ID from the base image) correctly handles the absence
of rhel10 so no further changes are needed.
---
Duplicate comments:
In `@go.mod`:
- Line 18: Update the pinned dependency for google.golang.org/grpc in go.mod
from v1.73.0 to at least v1.79.3 to address GHSA-p77j-4mvh-x3m3, then run module
resolution (go mod tidy) to refresh the dependency graph and update go.sum;
ensure the line containing "google.golang.org/grpc" now shows v1.79.3 or newer
and verify with a local OSV or go list check that v1.73.0 is no longer present.
In `@pkg/k8sclient/kubeconfig.go`:
- Around line 100-118: The per-node kubeconfig validation currently logs
non-unknown-authority errors but continues using the invalid cfg; update the
error path in the block that checks tempClient.Discovery().ServerVersion() so
that when err is non-nil and not the "x509: certificate signed by unknown
authority" case you return the validation error immediately (use logging.Errorf
with the err) instead of just logging, or alternatively reset cfg back to
bootstrapKubeconfig (and recompute config/getPerNodeKubeconfig as needed) before
proceeding; make this change around the tempClient, ServerVersion,
bootstrapKubeconfig, cfg, and getPerNodeKubeconfig usage.
In `@pkg/types/types.go`:
- Around line 185-187: The loop over resourceMap dereferences rInfo (a
*ResourceInfo) without checking for nil which can panic; update the loop that
iterates resourceMap to first guard that rInfo != nil (e.g., continue when rInfo
is nil) before accessing rInfo.DeviceIDs and then sort.Strings(rInfo.DeviceIDs)
only when rInfo and rInfo.DeviceIDs are non-nil to avoid runtime panics.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: ec81035c-273e-4199-b4d5-88f97d1c8f29
⛔ Files ignored due to path filters (283)
go.sumis excluded by!**/*.sumvendor/github.com/gogo/protobuf/AUTHORSis excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/CONTRIBUTORSis excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/Makefileis excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/clone.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/custom_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/decode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/deprecated.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/discard.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/duration.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/duration_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/encode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/encode_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/equal.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/extensions.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/extensions_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/lib.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/lib_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/message_set.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/pointer_reflect.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/pointer_unsafe.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/properties.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/properties_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/skip_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_marshal.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_merge.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_unmarshal.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/text.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/text_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/text_parser.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/timestamp.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/timestamp_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/wrappers.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/proto/wrappers_gogo.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/gogo/protobuf/sortkeys/sortkeys.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/CHANGELOG.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/core_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/decorator_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/automaxprocs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroup.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroups.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroups2.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cpu_quota_linux.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cpu_quota_unsupported.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/mountpoint.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/runtime.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/subsys.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/main.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo_t_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/group.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/node.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/ordering.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson_event_writer.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson_reporter.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/internal/suite.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/gojson_report.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/reporting_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/table_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/types/config.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/types/types.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/ginkgo/v2/types/version.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/gomega/CHANGELOG.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/onsi/gomega/gomega_dsl.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/.gitignoreis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/.travis.ymlis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/Makefileis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/appveyor.ymlis excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/go113.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/pkg/errors/stack.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/desc.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/internal/difflib.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/internal/go_runtime_metrics.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/labels.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/metric.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/process_collector_darwin.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/process_collector_mem_nocgo_darwin.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/process_collector_procfsenabled.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/promhttp/instrument_server.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/vec.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/client_golang/prometheus/wrap.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/decode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/encode.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/expfmt.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/fuzz.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/openmetrics_create.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/text_create.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/expfmt/text_parse.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/alert.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/labels.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/labelset.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/metric.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/time.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/value.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/value_histogram.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/common/model/value_type.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/.golangci.ymlis excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/Makefile.commonis excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/arp.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/fs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/fs_statfs_notype.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/fscache.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/internal/fs/fs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/internal/util/parse.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/internal/util/sysreadfile.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/mountstats.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_dev_snmp6.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_ip_socket.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_protocols.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_tcp.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/net_unix.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_cgroup.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_io.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_netstat.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_smaps.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_snmp.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_snmp6.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_status.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/proc_sys.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/prometheus/procfs/softirqs.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/README.mdis excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/bool_func.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/count.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/errors.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/flag.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/func.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/golangflag.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/ipnet_slice.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/string_to_string.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/text.gois excluded by!vendor/**,!**/vendor/**vendor/github.com/spf13/pflag/time.gois excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/.codecov.ymlis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/.gitignoreis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/CHANGELOG.mdis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/CODE_OF_CONDUCT.mdis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/CONTRIBUTING.mdis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/Makefileis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/README.mdis excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/automaxprocs.gois excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/internal/cgroups/doc.gois excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/maxprocs/maxprocs.gois excluded by!vendor/**,!**/vendor/**vendor/go.uber.org/automaxprocs/maxprocs/version.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/PATENTSis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/mod/semver/semver.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/context/context.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/html/escape.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/html/parse.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/html/render.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config_go124.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config_go125.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config_go126.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/config_pre_go124.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/frame.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/gotrack.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/http2.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/server.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/timer.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched_priority_rfc7540.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched_priority_rfc9218.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/writesched_roundrobin.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/internal/httpcommon/request.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/internal/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/internal/oauth2.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/internal/token.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/internal/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/oauth2.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/pkce.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/token.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sync/LICENSEis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sync/PATENTSis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sync/errgroup/errgroup.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/plan9/pwd_go15_plan9.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/plan9/pwd_plan9.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/affinity_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/fdset.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/ifreq_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/mkall.shis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/mkerrors.shis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/syscall_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/syscall_netbsd.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/syscall_solaris.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zsyscall_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/ztypes_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/windows/syscall_windows.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/windows/types_windows.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/windows/zsyscall_windows.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/term/terminal.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/unicode/bidi/core.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ast/inspector/cursor.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/gcexportdata/importer.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/external.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/golist.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/golist_overlay.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/loadmode_string.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/packages.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/visit.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/objectpath/objectpath.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/callee.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/imports.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/map.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/ui.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/aliases/aliases.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/aliases/aliases_go122.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/core/event.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/core/export.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/core/fast.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/event.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/keys/keys.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/keys/standard.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/keys/util.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/event/label/label.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/bimport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/exportdata.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/gcimporter.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/iexport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/iimport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/predeclared.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/support.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke_unix.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/vendor.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gocommand/version.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/packagesinternal/packages.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/codes.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/decoder.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/doc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/encoder.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/flags.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/reloc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/support.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/sync.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/pkgbits/version.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/deps.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/import.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/manifest.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/stdlib/stdlib.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/common.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/coretype.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/free.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/normalize.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/termlist.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typeparams/typeterm.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/classify_call.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/element.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/errorcode.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/fx.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/isnamed.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/qualifier.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/recv.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/toonew.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/typesinternal/types.gois excluded by!vendor/**,!**/vendor/**
📒 Files selected for processing (17)
.ci-operator.yaml.github/workflows/build.yml.github/workflows/image-build.yml.github/workflows/release.yml.github/workflows/test.ymlDockerfile.microshiftDockerfile.openshiftgo.modimages/Dockerfileimages/Dockerfile.debugimages/Dockerfile.thickpkg/checkpoint/checkpoint.gopkg/checkpoint/checkpoint_test.gopkg/k8sclient/kubeconfig.gopkg/kubeletclient/kubeletclient.gopkg/multus/multus_cni100_test.gopkg/types/types.go
✅ Files skipped from review due to trivial changes (10)
- .github/workflows/build.yml
- images/Dockerfile
- .github/workflows/image-build.yml
- images/Dockerfile.debug
- images/Dockerfile.thick
- .github/workflows/release.yml
- pkg/checkpoint/checkpoint_test.go
- Dockerfile.microshift
- .github/workflows/test.yml
- .ci-operator.yaml
🚧 Files skipped from review as they are similar to previous changes (3)
- pkg/kubeletclient/kubeletclient.go
- pkg/checkpoint/checkpoint.go
- pkg/multus/multus_cni100_test.go
Signed-off-by: Ying Wang <yingwang@rehat.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@go.mod`:
- Line 3: The go.mod toolchain directive currently specifies an invalid Go
version ("go 1.25.0"); update the module directive to a valid Go 1.25.x patch
(for example change the directive to "go 1.25.8") so the project uses a real,
supported Go toolchain version; modify the go directive in go.mod accordingly.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 128ae539-b2fa-4637-9392-20d67929738c
⛔ Files ignored due to path filters (43)
go.sumis excluded by!**/*.sumvendor/golang.org/x/mod/semver/semver.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/http2/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/net/trace/events.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/deviceauth.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/oauth2.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/pkce.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/token.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/oauth2/transport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sync/errgroup/errgroup.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/mkerrors.shis excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_386.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_amd64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_arm.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_arm64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_loong64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_mips.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_mips64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_ppc.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_s390x.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/japanese/eucjp.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/japanese/iso2022jp.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/japanese/shiftjis.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/korean/euckr.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/traditionalchinese/big5.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/text/encoding/unicode/unicode.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/ast/inspector/cursor.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/packages/visit.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/objectpath/objectpath.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/go/types/typeutil/map.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/bimport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/iexport.gois excluded by!vendor/**,!**/vendor/**vendor/golang.org/x/tools/internal/gcimporter/iimport.gois excluded by!vendor/**,!**/vendor/**
📒 Files selected for processing (1)
go.mod
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@pkg/types/types.go`:
- Around line 192-193: There are two stray closing braces after the
SortDeviceIDs definition that break parsing; open pkg/types/types.go, locate the
SortDeviceIDs function (or type) near the end of the file and remove the extra
top-level `}` characters that appear after its closing brace so the file has
only the matching braces for declared types/functions and parses correctly.
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
65a177d to
1b84d1e
Compare
Signed-off-by: Ying Wang <yingwang@rehat.com>
67e3580 to
424c4dc
Compare
Signed-off-by: Ying Wang <yingwang@rehat.com>
|
@coderabbitai resume |
✅ Actions performedReviews resumed. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@go.mod`:
- Line 3: Update the Go module version declaration: replace the "go 1.25.7"
directive in go.mod with "go 1.25.8" (i.e., change the literal go version string
"1.25.7" to "1.25.8") so the module uses the official Go 1.25.8 release.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 76743f8e-ccb2-42c6-9735-c21b680499a3
📒 Files selected for processing (3)
Dockerfile.openshiftgo.modpkg/types/types.go
✅ Files skipped from review due to trivial changes (1)
- Dockerfile.openshift
| module gopkg.in/k8snetworkplumbingwg/multus-cni.v4 | ||
|
|
||
| go 1.24.2 | ||
| go 1.25.7 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Verify Go 1.25.7 is a valid release
echo "=== Checking Go 1.25.x releases ==="
curl -s https://go.dev/dl/?mode=json | jq -r '.[] | select(.version | startswith("go1.25")) | .version' | sort -VRepository: openshift/multus-cni
Length of output: 108
Use Go 1.25.8 instead of 1.25.7.
Go 1.25.7 is not an official release. Only Go 1.25.8 is available in the 1.25.x series. Update go 1.25.7 to go 1.25.8 on line 3.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@go.mod` at line 3, Update the Go module version declaration: replace the "go
1.25.7" directive in go.mod with "go 1.25.8" (i.e., change the literal go
version string "1.25.7" to "1.25.8") so the module uses the official Go 1.25.8
release.
There was a problem hiding this comment.
ci needs go 1.25.7
There was a problem hiding this comment.
@yingwang-0320, understood — the OpenShift CI uses Red Hat-supplied Go toolchains (as seen in the rhel-9-release-golang-1.25-openshift-4.22 builder images), which can differ from official golang.org releases. Go 1.25.7 being a valid toolchain for that environment makes sense. Apologies for the noise.
📝 Learnings were identified and not saved (knowledge base disabled). Enable
There was a problem hiding this comment.
CI servers are using go 1.25.7
There was a problem hiding this comment.
@yingwang-0320, noted — Go 1.25.7 is the correct version used by the OpenShift CI servers. No changes needed.
📝 Learnings were identified and not saved (knowledge base disabled). Enable
STATUS and GC are plugin-level commands with no pod context per the CNI 1.1.0 spec. The thick plugin daemon incorrectly required CNI_CONTAINERID, CNI_NETNS, and K8S_POD_NAME/K8S_POD_NAMESPACE for these commands, causing failures when invoked by kubelet. Signed-off-by: Jason Kary <jkary@redhat.com>
- Check os.OpenFile error in STATUS/GC test - Document that k8sArgs may be nil for STATUS/GC in HandleCNIRequest Made-with: Cursor
There was a problem hiding this comment.
🧹 Nitpick comments (1)
pkg/server/thick_cni_test.go (1)
178-178: Consider adding error check for consistency.The new test context at line 108 properly checks the
os.OpenFileerror, but this existing call does not. For consistency within the file, consider applying the same pattern.♻️ Optional fix for consistency
- os.OpenFile(configPath, os.O_RDONLY|os.O_CREATE, 0755) + _, err = os.OpenFile(configPath, os.O_RDONLY|os.O_CREATE, 0755) + Expect(err).NotTo(HaveOccurred())🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@pkg/server/thick_cni_test.go` at line 178, The os.OpenFile(configPath, os.O_RDONLY|os.O_CREATE, 0755) call lacks error handling; update the call to capture the returned file and error (e.g., f, err := os.OpenFile(...)), check err and fail the test or t.Fatal on error, and ensure the file is closed (defer f.Close()) to match the error-checking pattern used elsewhere in this test file and maintain consistency with the other OpenFile usage around configPath.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@pkg/server/thick_cni_test.go`:
- Line 178: The os.OpenFile(configPath, os.O_RDONLY|os.O_CREATE, 0755) call
lacks error handling; update the call to capture the returned file and error
(e.g., f, err := os.OpenFile(...)), check err and fail the test or t.Fatal on
error, and ensure the file is closed (defer f.Close()) to match the
error-checking pattern used elsewhere in this test file and maintain consistency
with the other OpenFile usage around configPath.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: e9f4674f-40a8-4746-96bd-dac5c976119c
📒 Files selected for processing (3)
pkg/multus/multus.gopkg/server/server.gopkg/server/thick_cni_test.go
|
@yingwang-0320: The following test failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
|
/verified by pre-merge testing |
|
@yingwang-0320: This PR has been marked as verified by DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
cherry-picked commits from k8snetworkplumbingwg/multus-cni#1490 |
|
/lgtm |
|
/approve |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: bpickard22, yingwang-0320 The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
1 similar comment
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: bpickard22, yingwang-0320 The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
make build & make test
e2e test passed locally.