NO-ISSUE: Add OpenShift Tests Extension (OTE) for baremetal E2E tests#607
NO-ISSUE: Add OpenShift Tests Extension (OTE) for baremetal E2E tests#607jadhaj wants to merge 7 commits into
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughAdds a Cobra-based test-extension CLI and Makefile build target, refreshes go.mod with new requires and replace rules, introduces extensive baremetal e2e helper utilities and a deployment_sanity Ginkgo suite, and updates lint/CRD annotations. ChangesBaremetal E2E Test Framework
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes 🚥 Pre-merge checks | ✅ 7 | ❌ 5❌ Failed checks (5 warnings)
✅ Passed checks (7 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Warning Review ran into problems🔥 ProblemsGit: Failed to clone repository. Please run the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
/payload-job-with-prs #607 openshift/origin#31197 |
There was a problem hiding this comment.
Actionable comments posted: 9
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@go.mod`:
- Around line 494-528: The replace block pins multiple k8s-related modules to
commit d18f3f005eaa; update that commit hash to the latest openshift/kubernetes
fork commit 73359c58edaa across all replace lines (the entries referencing
k8s.io/api, k8s.io/apimachinery, k8s.io/client-go, k8s.io/kubernetes, etc.) so
the go.mod replacement uses the May 18 2026 commit, or if intentionally pinned
to d18f3f005eaa add a brief justification in the PR explaining why the older
commit must remain.
In `@Makefile`:
- Line 40: The Makefile contains GONOSUMDB="github.com/openshift/origin" which
disables go checksum verification for that module; either remove the GONOSUMDB
assignment or add a clear comment above it explaining why the origin module must
be exempted (e.g., private fork, replaced module, or transient checksum issues).
Update the Makefile line with either the removal of GONOSUMDB or a one-line
justification comment referencing GONOSUMDB and the origin module so future
readers understand the necessity.
- Line 40: Add a descriptive comment above the Makefile assignment containing
GONOSUMDB, CGO_ENABLED and GO_COMPLIANCE_POLICY that documents why
GO_COMPLIANCE_POLICY="exempt_all" is required for the test binary build: explain
it’s an OpenShift-specific environment variable used in similar projects, state
whether the exemption is blanket or if specific policies could be targeted, and
reference any compliance/security approval or ticket if available (mention the
symbols GONOSUMDB, CGO_ENABLED, GO_COMPLIANCE_POLICY and the test binary build
context so reviewers can find the line to update).
In `@test/e2e/baremetal/deployment_sanity.go`:
- Around line 117-121: The replica sizing currently sets replicasNum :=
len(workerNodes) + 1 using compat_otp.GetClusterNodesBy("worker"), which assumes
dedicated worker nodes; change this to derive replicas from the cluster
topology/control-plane topology or from the number of schedulable nodes instead
of worker-only nodes—e.g., query the cluster configuration (ControlPlaneTopology
or node role/schedulable flags) and compute replicasNum accordingly before
calling oc.Run("create") for deploy34195 (variable deployCreationErr and
namespace ns34195); ensure the new logic handles SNO, DualReplica, Arbiter and
HyperShift cases and falls back to a safe default when topology metadata is
unavailable.
In `@test/e2e/baremetal/utils.go`:
- Around line 361-363: The constants ilo6_157 and ilo6_160 are assigned the
wrong URLs (each points to the other version); swap their assigned URL values so
ilo6_157 contains the URL for the 1.57 firmware and ilo6_160 contains the URL
for the 1.60 firmware, and make the same swap for the duplicate definitions
later in the file (the other block around the second occurrence) so selection
logic using ilo6_157/ilo6_160 fetches the correct firmware.
- Line 92: The jsonpath passed to oc in the deployment availability check is
malformed due to an extra trailing single quote in the argument used in
waitForDeployStatus: locate the call that builds statusOp
(oc.AsAdmin().Run("get").Args(...
"-o=jsonpath={.status.conditions[?(@.type=='Available')].status}'") and remove
the stray trailing single quote so the jsonpath becomes balanced (e.g.
"-o=jsonpath={.status.conditions[?(@.type=='Available')].status}"); ensure the
Go string quotes around the Args entry remain correct after removing the extra
quote.
- Around line 165-167: The code is using strconv.Atoi to parse Prometheus memory
metric strings (memUsage from response.Data.Result[0].Value[1]), but Prometheus
returns numeric strings that may be decimals or scientific notation; replace
strconv.Atoi with strconv.ParseFloat(memUsage, 64) (as done for the CPU parsing
elsewhere), handle the error similarly via
o.Expect(err).NotTo(o.HaveOccurred()), and convert the resulting float64 to the
desired integer type if you need an integer availableMem variable — update
references to availableMem accordingly.
- Around line 562-571: The code is using shell-wrapped commands
(startDateCmd/endDateCmd) with fmt.Sprintf and exec.Command("bash","-c",...)
which is injection-prone; change both invocations to call exec.Command directly
with arguments (e.g. exec.Command("openssl","x509","-in", certFilePath,
"-noout","-startdate") and similarly for "-enddate"), capture the Output()
bytes, convert to string, and strip the "notBefore=" / "notAfter=" prefix using
simple string manipulation (strings.TrimSpace and strings.TrimPrefix or
strings.SplitN) instead of piping through shell cut; update variables
startDateOutput/endDateOutput handling and any error messages accordingly.
- Around line 225-226: The defer Close() calls are registered before checking
errors from os.Open(os.Open) and os.Create, which can leave source or dest nil
and cause a panic; fix by moving the defer source.Close() to immediately after
confirming err == nil for the os.Open call (same for defer dest.Close() after
the os.Create call), ensuring you only defer Close() when the file handle
(source or dest) is non-nil and keep existing error handling logic intact.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 10356e77-6693-4c97-8f39-a31fb7bbdea3
⛔ Files ignored due to path filters (294)
go.sumis excluded by!**/*.sumvendor/4d63.com/gocheckcompilerdirectives/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/4d63.com/gocheckcompilerdirectives/checkcompilerdirectives/checkcompilerdirectives.gois excluded by!**/vendor/**,!vendor/**vendor/4d63.com/gochecknoglobals/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/4d63.com/gochecknoglobals/checknoglobals/check_no_globals.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/4meepo/tagalign/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/4meepo/tagalign/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/4meepo/tagalign/.goreleaser.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/4meepo/tagalign/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/4meepo/tagalign/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/4meepo/tagalign/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/4meepo/tagalign/options.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/4meepo/tagalign/tagalign.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Abirdcfly/dupword/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/Abirdcfly/dupword/.goreleaser.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Abirdcfly/dupword/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/Abirdcfly/dupword/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Abirdcfly/dupword/dupword.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Abirdcfly/dupword/version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/errname/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/errname/pkg/analyzer/analyzer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/errname/pkg/analyzer/facts.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/nilnil/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/nilnil/pkg/analyzer/analyzer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/nilnil/pkg/analyzer/config.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/nilnil/pkg/analyzer/func_type_stack.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/analyzer/analyzer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/analyzer/checkers_factory.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/analysisutil/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/analysisutil/encoded.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/analysisutil/file.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/analysisutil/format.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/analysisutil/object.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/analysisutil/pkg.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/blank_import.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/bool_compare.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/call_meta.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/checker.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/checkers_registry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/compares.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/contains.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/empty.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/encoded_compare.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/equal_values.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/error_is_as.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/error_nil.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/expected_actual.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/float_compare.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/formatter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/go_require.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_basic_type.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_bool.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_comparison.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_context.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_diagnostic.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_encoded.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_error.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_format.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_http.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_interface.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_len.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_naming.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_nil.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_pkg_func.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_suite.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_testing.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/len.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/negative_positive.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/nil_compare.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/printf/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/printf/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/printf/printf.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/regexp.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/require_error.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/suite_broken_parallel.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/suite_dont_use_pkg.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/suite_extra_assert_call.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/suite_method_signature.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/suite_subtest_run.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/suite_thelper.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/checkers/useless_assert.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/config/config.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/config/flag_value_types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Antonboom/testifylint/internal/testify/const.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/COPYINGis excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/decode.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/deprecated.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/encode.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/error.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/internal/tz.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/lex.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/meta.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/parse.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/type_fields.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/BurntSushi/toml/type_toml.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Djarvur/go-err113/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/Djarvur/go-err113/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Djarvur/go-err113/.travis.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Djarvur/go-err113/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/Djarvur/go-err113/README.adocis excluded by!**/vendor/**,!vendor/**vendor/github.com/Djarvur/go-err113/comparison.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Djarvur/go-err113/definition.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Djarvur/go-err113/err113.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/analyzer/analyzer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/comment/cache.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/comment/directive.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/pattern/list.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/structure/fields-cache.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/structure/fields.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/SECURITY.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/collection.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/constraints.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/OpenPeeDeeP/depguard/v2/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/OpenPeeDeeP/depguard/v2/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/OpenPeeDeeP/depguard/v2/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/OpenPeeDeeP/depguard/v2/depguard.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/OpenPeeDeeP/depguard/v2/internal/utils/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/OpenPeeDeeP/depguard/v2/internal/utils/variables.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/OpenPeeDeeP/depguard/v2/settings.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/.editorconfigis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/.goreleaser.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/Bitfileis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/COPYINGis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/chroma.jpgis excluded by!**/*.jpg,!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/coalesce.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/colour.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/delegate.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/emitters.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatters/api.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatters/html/html.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatters/json.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatters/svg/font_liberation_mono.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatters/svg/svg.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatters/tokens.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatters/tty_indexed.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/formatters/tty_truecolour.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/iterator.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/caddyfile.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/cl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/dns.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/emacs.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abap.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abnf.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript_3.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ada.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/agda.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/al.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/alloy.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/angular2.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/antlr.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apacheconf.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apl.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/applescript.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arangodb_aql.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arduino.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/armasm.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/atl.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autohotkey.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autoit.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/awk.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ballerina.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash_session.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/batchfile.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/beef.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bibtex.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bicep.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/blitzbasic.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bnf.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bqn.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/brainfuck.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c#.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cap_n_proto.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cassandra_cql.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ceylon.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfengine3.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfstatement.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chaiscript.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chapel.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cheetah.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/clojure.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cmake.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cobol.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coffeescript.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/common_lisp.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coq.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/crystal.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/css.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/csv.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cue.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cython.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/d.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dart.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dax.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/desktop_entry.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/diff.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/django_jinja.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dns.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/docker.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dtd.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dylan.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ebnf.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elixir.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elm.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/emacslisp.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erlang.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/factor.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fennel.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fish.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/forth.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortran.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortranfixed.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fsharp.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gas.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript3.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gherkin.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gleam.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/glsl.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gnuplot.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/go_template.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/graphql.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groff.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groovy.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/handlebars.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hare.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/haskell.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hcl.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hexdump.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlb.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlsl.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/holyc.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/html.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hy.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/idris.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/igor.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ini.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/io.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/iscdhcpd.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/j.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/janet.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/java.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/javascript.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/json.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonata.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonnet.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/julia.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jungle.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kotlin.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lean.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lighttpd_configuration_file.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/llvm.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lua.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/makefile.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mako.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mason.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/materialize_sql_dialect.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mathematica.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/matlab.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mcfunction.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/meson.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/minizinc.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mlir.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modula-2.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mojo.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/monkeyc.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/morrowindscript.xmlis excluded by!**/vendor/**,!vendor/**vendor/github.com/alecthomas/chroma/v2/lexers/embedded/myghty.xmlis excluded by!**/vendor/**,!vendor/**
📒 Files selected for processing (6)
.gitignoreMakefilecmd/cluster-baremetal-tests-ext/main.gogo.modtest/e2e/baremetal/deployment_sanity.gotest/e2e/baremetal/utils.go
|
/payload-job-with-prs periodic-ci-openshift-openshift-tests-private-release-4.22-amd64-nightly-metal-ipi-ovn-vmedia-disk-encryption-f7 openshift/origin#31197 |
|
@jadhaj: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command
See details on https://pr-payload-tests.ci.openshift.org/runs/ci/43fe9340-5420-11f1-970d-8a7ad95989b8-0 |
|
@jadhaj: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command
See details on https://pr-payload-tests.ci.openshift.org/runs/ci/82618880-5421-11f1-9478-129ee9157c6d-0 |
bc1ce19 to
85fd696
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (1)
test/e2e/baremetal/deployment_sanity.go (1)
117-145:⚠️ Potential issue | 🟠 Major | ⚡ Quick winKeep replica sizing aligned with the worker-only assertion.
Line 129 counts every schedulable node, but Lines 161-170 still require every pod to land on a worker. On compact baremetal or arbiter-style topologies with schedulable control-plane nodes and zero/few dedicated workers, that overstates
replicasNumand makes this test fail deterministically for topology reasons. Size from actual worker nodes and skip when none exist.🛠️ Minimal fix
case "HighlyAvailable": - // Standard cluster - use schedulable nodes count - schedulableNodes, nodeErr := oc.AsAdmin().Run("get").Args("nodes", "-o=jsonpath={.items[?(@.spec.taints[*].effect!='NoSchedule')].metadata.name}").Output() - if nodeErr == nil && schedulableNodes != "" { - nodeList := strings.Fields(schedulableNodes) - if len(nodeList) > 0 { - replicasNum = len(nodeList) + 1 - } - } else { - // Fallback to worker nodes count if schedulable query fails - workerNodes, workerErr := compat_otp.GetClusterNodesBy(oc, "worker") - if workerErr == nil && len(workerNodes) > 0 { - replicasNum = len(workerNodes) + 1 - } - } + workerNodes, workerErr := compat_otp.GetClusterNodesBy(oc, "worker") + o.Expect(workerErr).NotTo(o.HaveOccurred()) + if len(workerNodes) == 0 { + g.Skip("cluster has no dedicated worker nodes; worker-only scheduling is not applicable") + } + replicasNum = len(workerNodes) + 1As per coding guidelines, “OpenShift supports SNO (1 node, ControlPlaneTopology=SingleReplica), Two-Node Fixed (2 CP nodes, ControlPlaneTopology=DualReplica), Two-Node with Arbiter (2 CP + arbiter, ControlPlaneTopology=HighlyAvailableArbiter), and HyperShift (External). Flag changes introducing ... assuming dedicated worker nodes exist”.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/baremetal/deployment_sanity.go` around lines 117 - 145, The code in the HighlyAvailable branch currently computes replicasNum from all schedulable nodes using the oc.AsAdmin().Run("get") jsonpath (variable schedulableNodes) which can include control-plane nodes; instead, use compat_otp.GetClusterNodesBy(oc, "worker") to size replicasNum from actual worker nodes only, set replicasNum = len(workerNodes) + 1 when len(workerNodes) > 0, and if there are zero worker nodes skip the test (or return early) rather than falling back to schedulable node counts; remove or avoid the schedulableNodes jsonpath-based logic and update logs to reflect using worker node counts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@go.mod`:
- Line 386: The forced replace of module
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc =>
... v0.53.0 must be documented or reconciled: either add a clear comment in
go.mod next to the replace explaining the compatibility reason for pinning to
v0.53.0 (what breaks with v0.61.0 and which component requires the downgrade),
or update/remove the replace to align with the module graph (upgrade to v0.61.0
or remove the override) so indirect dependency resolution is consistent; look
for the replace entry referencing otelgrpc v0.53.0 and update the file
accordingly.
---
Duplicate comments:
In `@test/e2e/baremetal/deployment_sanity.go`:
- Around line 117-145: The code in the HighlyAvailable branch currently computes
replicasNum from all schedulable nodes using the oc.AsAdmin().Run("get")
jsonpath (variable schedulableNodes) which can include control-plane nodes;
instead, use compat_otp.GetClusterNodesBy(oc, "worker") to size replicasNum from
actual worker nodes only, set replicasNum = len(workerNodes) + 1 when
len(workerNodes) > 0, and if there are zero worker nodes skip the test (or
return early) rather than falling back to schedulable node counts; remove or
avoid the schedulableNodes jsonpath-based logic and update logs to reflect using
worker node counts.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 99f5ded6-4ab1-4a2b-b2c7-f2dcc0328af0
⛔ Files ignored due to path filters (1)
go.sumis excluded by!**/*.sum
📒 Files selected for processing (4)
Makefilego.modtest/e2e/baremetal/deployment_sanity.gotest/e2e/baremetal/utils.go
c68844f to
c94a735
Compare
53855aa to
a0b915c
Compare
There was a problem hiding this comment.
Actionable comments posted: 6
♻️ Duplicate comments (1)
test/e2e/baremetal/deployment_sanity.go (1)
117-170:⚠️ Potential issue | 🟠 Major | ⚡ Quick winTopology handling is still incomplete and keeps a worker-only assumption.
Line 142–Line 145 fall back to defaults for
DualReplica,HighlyAvailableArbiter, andExternal, while Line 161–Line 170 still require worker-only placement. This can fail valid supported topologies that do not guarantee dedicated workers.As per coding guidelines, “OpenShift supports SNO (1 node, ControlPlaneTopology=SingleReplica), Two-Node Fixed (2 CP nodes, ControlPlaneTopology=DualReplica), Two-Node with Arbiter (2 CP + arbiter, ControlPlaneTopology=HighlyAvailableArbiter), and HyperShift (External). Flag changes introducing ... assuming dedicated worker nodes exist”.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/baremetal/deployment_sanity.go` around lines 117 - 170, The test assumes worker-only placement and doesn't handle DualReplica, HighlyAvailableArbiter, and External topologies: update the topology handling around replicasNum to explicitly handle "DualReplica" (set replicasNum=2) and "HighlyAvailableArbiter" (set an appropriate replica count, e.g., 3 or another safe value), and keep the existing fallback for "External"/unknown; then change the pod placement assertions so they no longer require compat_otp.IsWorkerNode to be true for every pod — instead verify pods are on schedulable nodes (no NoSchedule taint) by using compat_otp.GetPodNodeName and a node-taint/schedulable check (or fall back to compat_otp.GetClusterNodesBy when appropriate), and convert the strict o.Expect(res).To(o.BeTrue()) into a non-fatal warning/log or a conditional check that accepts control-plane placement for supported topologies while still failing for clearly unschedulable placements; update references in the deployment creation/check code around replicasNum, deploy34195, compat_otp.GetClusterNodesBy, compat_otp.GetPodNodeName, and compat_otp.IsWorkerNode.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@cmd/cluster-baremetal-tests-ext/main.go`:
- Around line 37-38: Replace the panic call that prints the ginkgo build error
with a clean CLI error path: instead of panic(fmt.Sprintf("couldn't build
extension test specs from ginkgo: %+v", err.Error())), write the error message
to stderr (e.g., fmt.Fprintln(os.Stderr, "couldn't build extension test specs
from ginkgo:", err)) and exit with a non-zero code (os.Exit(1)) or return the
error from main if your CLI framework expects an error return; update the
surrounding code that calls this block to handle the returned error if
applicable.
In `@go.mod`:
- Around line 240-241: Update the pinned OpenTelemetry modules to a safe,
aligned release: change go.opentelemetry.io/otel and
go.opentelemetry.io/otel/trace from v1.37.0 to v1.41.0 (or a later compatible
v1.41+), ensuring both modules use the same version; after editing go.mod, run
module resolution (e.g., go get ./... or go mod tidy) to update the lock info
and verify builds/tests that reference these modules (symbols:
go.opentelemetry.io/otel, go.opentelemetry.io/otel/trace).
In `@test/e2e/baremetal/deployment_sanity.go`:
- Line 206: The log call using e2e.Logf in deployment_sanity.go incorrectly uses
"%s" for minRequiredMemoryInBytes (an integer); update the format specifier to
"%d" (or "%v") so the integer prints correctly and keep the other arguments
(node, minRequiredMemoryInBytes) in the same order; locate the e2e.Logf
invocation that mentions "Node %s does not meet minimum required memory" and
change the format string accordingly.
In `@test/e2e/baremetal/utils.go`:
- Around line 143-147: The code currently ignores the error returned by
oc.AsAdmin().WithoutNamespace().Run("get")...Output(), which can lead to
misleading parse errors on completionTime; update the block that assigns
completionTime to capture and check the command error (the second return value
from Output()) before calling time.Parse: if the oc command error is non-nil,
log and return that error immediately instead of attempting to parse
completionTime. Ensure you reference the existing symbols completionTime and the
Output() call on oc.AsAdmin().WithoutNamespace().Run("get") and preserve the
existing time.Parse(layout, completionTime) path only when the command
succeeded.
- Around line 57-59: The code splits a string into parts and indexes parts[1]
and parts[2] without checking length (variables available/degraded), which can
panic on malformed input; update the logic in the function that contains parts
:= strings.Split(line, ":") to first verify len(parts) >= 3 (or the exact
expected count), handle short slices by skipping the line or returning an error,
and only then set available := parts[1] == "True" and degraded := parts[2] ==
"False" so indexing is safe (adjust surrounding control flow/logging to surface
the malformed input).
- Around line 292-294: Replace the shell pipeline that builds `cmd :=
fmt.Sprintf(\`cat %v | grep -v '.True.*False.*False' || true\`, coLogFile)` and
runs `exec.Command("bash", "-c", cmd).Output()` with native Go file reading:
open `coLogFile` with `os.Open`, scan lines with `bufio.Scanner`, compile the
regex `regexp.MustCompile(\`\.True.*False.*False\`)`, and check for any line
that does NOT match the pattern; if such a line is found set the same error/flag
behavior you currently expect (fail the test via
`o.Expect(err).NotTo(o.HaveOccurred())` or return the equivalent boolean),
ensure you close the file with `defer file.Close()` and handle scanner errors
the same way the current `err` is handled.
---
Duplicate comments:
In `@test/e2e/baremetal/deployment_sanity.go`:
- Around line 117-170: The test assumes worker-only placement and doesn't handle
DualReplica, HighlyAvailableArbiter, and External topologies: update the
topology handling around replicasNum to explicitly handle "DualReplica" (set
replicasNum=2) and "HighlyAvailableArbiter" (set an appropriate replica count,
e.g., 3 or another safe value), and keep the existing fallback for
"External"/unknown; then change the pod placement assertions so they no longer
require compat_otp.IsWorkerNode to be true for every pod — instead verify pods
are on schedulable nodes (no NoSchedule taint) by using
compat_otp.GetPodNodeName and a node-taint/schedulable check (or fall back to
compat_otp.GetClusterNodesBy when appropriate), and convert the strict
o.Expect(res).To(o.BeTrue()) into a non-fatal warning/log or a conditional check
that accepts control-plane placement for supported topologies while still
failing for clearly unschedulable placements; update references in the
deployment creation/check code around replicasNum, deploy34195,
compat_otp.GetClusterNodesBy, compat_otp.GetPodNodeName, and
compat_otp.IsWorkerNode.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: c0dac187-47f0-432c-a112-10819cd6ac6e
⛔ Files ignored due to path filters (1)
go.sumis excluded by!**/*.sum
📒 Files selected for processing (5)
Makefilecmd/cluster-baremetal-tests-ext/main.gogo.modtest/e2e/baremetal/deployment_sanity.gotest/e2e/baremetal/utils.go
a0b915c to
0b9b766
Compare
There was a problem hiding this comment.
Actionable comments posted: 5
♻️ Duplicate comments (4)
test/e2e/baremetal/utils.go (2)
143-147:⚠️ Potential issue | 🟠 Major | ⚡ Quick winHandle
occommand failure in uptime query.Line 143 discards the error from the
oc get clusterversioncommand. If the command fails,completionTimemay be empty or malformed, causing a confusing parse error downstream.🛡️ Proposed fix
- completionTime, _ := oc.AsAdmin().WithoutNamespace().Run("get").Args("clusterversion", "-o=jsonpath={.items[*].status.history[*].completionTime}").Output() + completionTime, err := oc.AsAdmin().WithoutNamespace().Run("get").Args("clusterversion", "-o=jsonpath={.items[*].status.history[*].completionTime}").Output() + if err != nil { + return 0, fmt.Errorf("failed to query clusterversion completionTime: %v", err) + } returnTime, perr := time.Parse(layout, completionTime)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/baremetal/utils.go` around lines 143 - 147, The oc command error is being ignored when calling oc.AsAdmin().WithoutNamespace().Run("get").Args(...).Output(); capture the returned error (instead of discarding with _), check if err != nil and return 0, err (or wrap/log it) before attempting time.Parse on completionTime to avoid parsing empty/malformed output; update the completionTime retrieval line and add an error check referencing the oc.AsAdmin().WithoutNamespace().Run(...).Output() call and the completionTime variable so the function returns early on oc failures.
55-59:⚠️ Potential issue | 🟠 Major | ⚡ Quick winGuard split result before indexing operator condition fields.
strings.Split(line, ":")can return fewer than 3 parts if a line is malformed or partial. Indexingparts[1]andparts[2]without a length check will panic.🛡️ Proposed fix
for _, line := range lines { e2e.Logf("%s", line) parts := strings.Split(line, ":") + if len(parts) < 3 { + return false, fmt.Errorf("unexpected clusteroperator status format: %q", line) + } available := parts[1] == "True" degraded := parts[2] == "False"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/baremetal/utils.go` around lines 55 - 59, Guard against malformed lines before indexing the split result: after calling strings.Split(line, ":"), check that len(parts) >= 3 before accessing parts[1] and parts[2]; if the check fails, log the malformed line with e2e.Logf (or continue/skip) and avoid setting available/degraded to prevent a panic. Update the loop in the function that uses strings.Split(line, ":") (referencing variables parts, available, degraded and the e2e.Logf call) to perform this length check and handle the short-split case safely.test/e2e/baremetal/deployment_sanity.go (1)
206-206:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix format verb mismatch in memory log line.
minRequiredMemoryInBytesis anint, but the format string uses%s. This produces garbled output like[%!s(int=1000000000)].🔧 Proposed fix
- e2e.Logf("\nNode %s does not meet minimum required memory %s Bytes ", node, minRequiredMemoryInBytes) + e2e.Logf("\nNode %s does not meet minimum required memory %d Bytes ", node, minRequiredMemoryInBytes)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/baremetal/deployment_sanity.go` at line 206, The log call using e2e.Logf prints minRequiredMemoryInBytes with a %s verb but minRequiredMemoryInBytes is an int; change the format verb to a numeric one (e.g., %d or %v) in the e2e.Logf invocation so the memory value prints correctly (refer to the e2e.Logf call and the minRequiredMemoryInBytes variable).cmd/cluster-baremetal-tests-ext/main.go (1)
36-38:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winReplace panic with clean CLI error output.
For a CLI tool, print the error to stderr and exit cleanly instead of producing a panic stack trace. This provides better user experience.
🧹 Proposed fix
specs, err := g.BuildExtensionTestSpecsFromOpenShiftGinkgoSuite() if err != nil { - panic(fmt.Sprintf("couldn't build extension test specs from ginkgo: %+v", err.Error())) + fmt.Fprintf(os.Stderr, "couldn't build extension test specs from ginkgo: %v\n", err) + os.Exit(1) }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@cmd/cluster-baremetal-tests-ext/main.go` around lines 36 - 38, The current error handling in main (the block that builds extension test specs from Ginkgo and panics on error) should be replaced with clean CLI error output: instead of panic(fmt.Sprintf(..., err.Error())), write the error message to stderr (e.g., using fmt.Fprintln to os.Stderr) with a clear prefix like "error: couldn't build extension test specs from ginkgo:" and then call os.Exit with a non‑zero status (1); locate the failing code around the Ginkgo spec build in main and replace the panic path accordingly.
🧹 Nitpick comments (3)
test/e2e/baremetal/utils.go (2)
579-596: 💤 Low valueConsider escaping date strings in Python script.
Date strings from openssl are interpolated directly into the Python script. While openssl output is predictable, using
%qformatting or escaping quotes would be more robust against edge cases.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/baremetal/utils.go` around lines 579 - 596, The pythonScript builds a Python heredoc by interpolating startDate and endDate directly via fmt.Sprintf, which can break if those strings contain quotes or unexpected characters; update the fmt.Sprintf call that sets pythonScript (and any uses of startDate/endDate) to escape the date strings using Go's %q verb or otherwise wrap/escape them so they become valid Python string literals (e.g., replace '%s' with '%q' or call strconv.Quote) before embedding into pythonScript to ensure safe, robust handling.
9-9: 💤 Low valueReplace deprecated
ioutilwithospackage.
io/ioutilhas been deprecated since Go 1.16. Useos.ReadFileinstead.♻️ Proposed fix
import ( "context" "encoding/base64" "encoding/json" "fmt" "io" - "io/ioutil" "os"And at line 420:
- content, err := ioutil.ReadFile(proxyFilePath) + content, err := os.ReadFile(proxyFilePath)Also applies to: 420-420
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/baremetal/utils.go` at line 9, Replace the deprecated import "io/ioutil" with the "os" package and update all calls from ioutil.ReadFile(...) to os.ReadFile(...); modify the import list in test/e2e/baremetal/utils.go to remove "io/ioutil" and add "os", and update any usages of ioutil.ReadFile in this file to call os.ReadFile and handle the same returned ([]byte, error) values.test/e2e/baremetal/deployment_sanity.go (1)
13-53: 💤 Low valueConsider removing commented-out code blocks.
These commented-out test suite templates add noise to the file. If they're planned for future implementation, consider tracking them in an issue and removing from the codebase.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@test/e2e/baremetal/deployment_sanity.go` around lines 13 - 53, Remove the large commented-out test suite templates (the blocks starting with g.Describe that reference compat_otp.NewCLI("baremetal-deployment-sanity") and the g.It test cases) from deployment_sanity.go; if these placeholders are intended for future work, open a tracking issue and move the content there (or add a short TODO with the issue number) instead of leaving full commented blocks in the file.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@go.mod`:
- Around line 420-426: Update the OpenTelemetry module versions in go.mod to
v1.41.0 or later for the listed modules to address CVE-2026-29181: replace the
versions for go.opentelemetry.io/otel,
go.opentelemetry.io/otel/exporters/otlp/otlptrace,
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc,
go.opentelemetry.io/otel/metric, go.opentelemetry.io/otel/sdk,
go.opentelemetry.io/otel/sdk/metric, and go.opentelemetry.io/otel/trace from
v1.36.0/v1.37.0 to v1.41.0 (or newer), then run module tidy (e.g., `go get`/`go
mod tidy`) to update the lock info and ensure compatibility.
In `@test/e2e/baremetal/deployment_sanity.go`:
- Around line 71-83: The test is discarding errors from checkOperatorsRunning
and checkNodesRunning; change the calls to capture both return values (res, err
:= checkOperatorsRunning(oc) and res, err := checkNodesRunning(oc)), then assert
that err is nil before asserting res is true (e.g., o.Expect(err).To(o.BeNil())
or fail the test with the error) so any underlying oc command failure surfaces
clearly; update both occurrences referencing the functions checkOperatorsRunning
and checkNodesRunning and the oc parameter.
In `@test/e2e/baremetal/utils.go`:
- Around line 199-213: The functions getUserFromSecret and getPassFromSecret
accept a namespace parameter but call oc get secrets using the hardcoded
machineAPINamespace; update the secret retrieval to use the passed namespace
parameter (replace machineAPINamespace with namespace in the
oc.AsAdmin().Run(...).Args(... "-n", ... ) call) so the functions actually
operate on the provided namespace; alternatively, if callers never pass a
different namespace, remove the unused namespace parameter from both function
signatures and all call-sites—ensure the chosen approach is applied consistently
in getUserFromSecret and getPassFromSecret.
- Around line 162-168: The memory parsing code assumes response.Data.Result[0]
exists and will panic on empty Prometheus results; update the logic around
json.Unmarshal and access to response.Data.Result to first assert/unpack safely
(e.g., check that response.Data.Result != nil and len(response.Data.Result) >
0), use a safe type assertion when extracting response.Data.Result[0].Value[1]
(ensure it's a string before calling strconv.ParseFloat), and fail the test with
a clear o.Expect assertion or handle empty results by setting availableMem to a
sensible default; refer to the identifiers Response, response.Data.Result,
memUsage, strconv.ParseFloat, and availableMem when making the checks and
assertions.
- Around line 135-138: The code indexes response.Data.Result[0].Value[1] without
checking the result set, which will panic on empty Prometheus responses; update
the function that reads cpuUsage (the block assigning cpuUsage, parsing to
cpu_usage with strconv.ParseFloat and returning cpu_usage) to first check that
response.Data.Result has at least one element and that Result[0].Value has at
least two elements, return a clear error (or zero and an error) if the checks
fail, and only then extract the string and call strconv.ParseFloat as before.
---
Duplicate comments:
In `@cmd/cluster-baremetal-tests-ext/main.go`:
- Around line 36-38: The current error handling in main (the block that builds
extension test specs from Ginkgo and panics on error) should be replaced with
clean CLI error output: instead of panic(fmt.Sprintf(..., err.Error())), write
the error message to stderr (e.g., using fmt.Fprintln to os.Stderr) with a clear
prefix like "error: couldn't build extension test specs from ginkgo:" and then
call os.Exit with a non‑zero status (1); locate the failing code around the
Ginkgo spec build in main and replace the panic path accordingly.
In `@test/e2e/baremetal/deployment_sanity.go`:
- Line 206: The log call using e2e.Logf prints minRequiredMemoryInBytes with a
%s verb but minRequiredMemoryInBytes is an int; change the format verb to a
numeric one (e.g., %d or %v) in the e2e.Logf invocation so the memory value
prints correctly (refer to the e2e.Logf call and the minRequiredMemoryInBytes
variable).
In `@test/e2e/baremetal/utils.go`:
- Around line 143-147: The oc command error is being ignored when calling
oc.AsAdmin().WithoutNamespace().Run("get").Args(...).Output(); capture the
returned error (instead of discarding with _), check if err != nil and return 0,
err (or wrap/log it) before attempting time.Parse on completionTime to avoid
parsing empty/malformed output; update the completionTime retrieval line and add
an error check referencing the oc.AsAdmin().WithoutNamespace().Run(...).Output()
call and the completionTime variable so the function returns early on oc
failures.
- Around line 55-59: Guard against malformed lines before indexing the split
result: after calling strings.Split(line, ":"), check that len(parts) >= 3
before accessing parts[1] and parts[2]; if the check fails, log the malformed
line with e2e.Logf (or continue/skip) and avoid setting available/degraded to
prevent a panic. Update the loop in the function that uses strings.Split(line,
":") (referencing variables parts, available, degraded and the e2e.Logf call) to
perform this length check and handle the short-split case safely.
---
Nitpick comments:
In `@test/e2e/baremetal/deployment_sanity.go`:
- Around line 13-53: Remove the large commented-out test suite templates (the
blocks starting with g.Describe that reference
compat_otp.NewCLI("baremetal-deployment-sanity") and the g.It test cases) from
deployment_sanity.go; if these placeholders are intended for future work, open a
tracking issue and move the content there (or add a short TODO with the issue
number) instead of leaving full commented blocks in the file.
In `@test/e2e/baremetal/utils.go`:
- Around line 579-596: The pythonScript builds a Python heredoc by interpolating
startDate and endDate directly via fmt.Sprintf, which can break if those strings
contain quotes or unexpected characters; update the fmt.Sprintf call that sets
pythonScript (and any uses of startDate/endDate) to escape the date strings
using Go's %q verb or otherwise wrap/escape them so they become valid Python
string literals (e.g., replace '%s' with '%q' or call strconv.Quote) before
embedding into pythonScript to ensure safe, robust handling.
- Line 9: Replace the deprecated import "io/ioutil" with the "os" package and
update all calls from ioutil.ReadFile(...) to os.ReadFile(...); modify the
import list in test/e2e/baremetal/utils.go to remove "io/ioutil" and add "os",
and update any usages of ioutil.ReadFile in this file to call os.ReadFile and
handle the same returned ([]byte, error) values.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 9b028b24-24f4-4a87-b5ae-d991e4d250a6
⛔ Files ignored due to path filters (295)
go.sumis excluded by!**/*.sumvendor/cel.dev/expr/.bazelversionis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/.gitattributesis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/BUILD.bazelis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/CODE_OF_CONDUCT.mdis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/CONTRIBUTING.mdis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/GOVERNANCE.mdis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/MAINTAINERS.mdis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/MODULE.bazelis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/README.mdis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/WORKSPACEis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/WORKSPACE.bzlmodis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/checked.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cel.dev/expr/cloudbuild.yamlis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/eval.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cel.dev/expr/explain.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cel.dev/expr/regen_go_proto.shis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/regen_go_proto_canonical_protos.shis excluded by!**/vendor/**,!vendor/**vendor/cel.dev/expr/syntax.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cel.dev/expr/value.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/CHANGES.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/README.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/auth.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/compute.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/detect.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/doc.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/filetypes.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/aws_provider.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/executable_provider.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/file_provider.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/info.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/programmatic_provider.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/externalaccountuser/externalaccountuser.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/gdch/gdch.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/impersonate/idtoken.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/impersonate/impersonate.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/internal/stsexchange/sts_exchange.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/grpctransport/dial_socketopt.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/grpctransport/directpath.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/grpctransport/grpctransport.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/grpctransport/pool.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/httptransport/httptransport.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/httptransport/transport.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/compute/compute.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/compute/manufacturer.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/credsfile/credsfile.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/credsfile/filetype.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/credsfile/parse.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/internal.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/jwt/jwt.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/transport/cba.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/transport/cert/default_cert.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/transport/cert/enterprise_cert.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/transport/cert/workload_cert.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/transport/s2a.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/internal/transport/transport.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/oauth2adapt/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/oauth2adapt/oauth2adapt.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/auth/threelegged.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/CHANGES.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/README.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/log.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/metadata.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/retry.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/retry_linux.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/syscheck.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/syscheck_linux.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/compute/metadata/syscheck_windows.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/iam/CHANGES.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/iam/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/iam/README.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/iam/apiv1/iampb/iam_policy.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/iam/apiv1/iampb/options.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/iam/apiv1/iampb/policy.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/iam/apiv1/iampb/resource_policy_member.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/iam/iam.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/.repo-metadata-full.jsonis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/README.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/annotate.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/gen_info.shis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/optional/optional.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/retry.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/trace/trace.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/version/update_version.shis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/internal/version/version.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/alert_policy_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/auxiliary.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/auxiliary_go123.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/doc.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/gapic_metadata.jsonis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/group_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/helpers.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/metric_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/alert.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/alert_service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/common.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/dropped_labels.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/group.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/group_service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/metric.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/metric_service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/mutation_record.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/notification.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/notification_service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/query_service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/service_service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/snooze.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/snooze_service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/span_context.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/uptime.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/uptime_service.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/notification_channel_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/query_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/service_monitoring_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/snooze_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/uptime_check_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/apiv3/v2/version.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/monitoring/internal/version.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/CHANGES.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/README.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/TESTING.mdis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/acl.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/bucket.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/copy.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/doc.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/dynamic_delay.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/emulator_test.shis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/experimental/experimental.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/grpc_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/grpc_dp.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/grpc_metrics.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/grpc_reader.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/grpc_reader_multi_range.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/grpc_writer.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/hmac.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/http_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/iam.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/apiv2/auxiliary.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/apiv2/auxiliary_go123.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/apiv2/doc.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/apiv2/gapic_metadata.jsonis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/apiv2/helpers.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/apiv2/storage_client.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.gois excluded by!**/*.pb.go,!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/apiv2/version.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/experimental.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/internal/version.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/invoke.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/notifications.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/option.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/post_policy_v4.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/reader.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/storage.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/storage.replayis excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/trace.gois excluded by!**/vendor/**,!vendor/**vendor/cloud.google.com/go/storage/writer.gois excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/COPYINGis excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/doc.gois excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/handle_linux.gois excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/internal/fdutils/fd_linux.gois excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/internal/libpathrs/error_unix.gois excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/internal/libpathrs/libpathrs_linux.gois excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/procfs/procfs_linux.gois excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/root_linux.gois excluded by!**/vendor/**,!vendor/**vendor/cyphar.com/go-pathrs/utils_linux.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/core.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/error.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/progress.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/response.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-pipeline-go/pipeline/version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/NOTICE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/profiles/latest/containerregistry/mgmt/containerregistry/models.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_identifier.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_type.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy/policy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/resource_identifier.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/resource_type.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/pipeline.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_bearer_token.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_register_rp.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_trace_namespace.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/runtime.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/to.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/BREAKING_CHANGES.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/MIGRATION.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TOKEN_CACHING.MDis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TROUBLESHOOTING.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/assets.jsonis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/authentication_record.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azidentity.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_cli_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_developer_cli_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_pipelines_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/chained_token_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/ci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_assertion_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_certificate_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_secret_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/confidential_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/default_azure_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/developer_credential_util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/device_code_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/environment_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.workis excluded by!**/*.work,!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/interactive_browser_credential.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/cache.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/logging.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed-identity-matrix.jsonis excluded by!**/vendor/**,!vendor/**
📒 Files selected for processing (5)
Makefilecmd/cluster-baremetal-tests-ext/main.gogo.modtest/e2e/baremetal/deployment_sanity.gotest/e2e/baremetal/utils.go
730495a to
66f13cb
Compare
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: jadhaj The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
|
/payload-job-with-prs periodic-ci-openshift-openshift-tests-private-release-4.22-amd64-nightly-metal-ipi-ovn-vmedia-disk-encryption-f7 openshift/origin#31197 |
|
@jadhaj: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command
See details on https://pr-payload-tests.ci.openshift.org/runs/ci/4173d420-55a9-11f1-80d3-3c322e744e25-0 |
|
/payload-job-with-prs periodic-ci-openshift-openshift-tests-private-release-4.22-amd64-nightly-metal-ipi-ovn-vmedia-bmc-verify-ca-f28 openshift/origin#31197 |
|
@jadhaj: trigger 0 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command |
|
/payload-job-with-prs periodic-ci-openshift-openshift-tests-private-release-4.22-multi-nightly-metal-ipi-ovn-ipv4-amd-f7 openshift/origin#31197 |
|
@jadhaj: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command
See details on https://pr-payload-tests.ci.openshift.org/runs/ci/4b70e150-55b0-11f1-8100-f1449358b03c-0 |
Migrate baremetal E2E tests from openshift-tests-private to
cluster-baremetal-operator using the OpenShift Tests Extension (OTE)
framework. This enables the tests to run as part of the release payload.
Key changes:
1. Test Extension as Separate Go Module
- Created cmd/cluster-baremetal-tests-ext/ with dedicated go.mod/vendor
- Isolates OTE dependencies from main operator module
- Includes 6 baremetal deployment sanity tests migrated from
openshift-tests-private
2. OTE Framework Integration
- Registered suite: cluster-baremetal/all
- Parent suite: openshift/conformance/parallel
- Platform filter: baremetal
- Uses OpenShift Ginkgo fork with 31 Kubernetes replace directives
3. Build and Packaging
- Dockerfile: Added RUN make build-tests and COPY for test binary
- Makefile: Added build-tests target with GONOSUMDB and
GO_COMPLIANCE_POLICY settings
- Binary compressed with gzip for container image
4. Test Path Structure
- Moved tests to test/e2e/openshift/baremetal/ to avoid conflicts
with upstream BMO/IrSO tests
5. Security Fixes
- Fixed CVE-2026-29181: Upgraded OpenTelemetry from v1.37.0 to v1.41.0
in test extension module
- Fixed gosec G703 path traversal warnings in hack/readme_inputs/main.go
- Replaced shell command execution with native Go file reading in
clusterOperatorHealthcheck function
6. CI Compatibility Fixes
- Regenerated manifests to fix generate-check checksum mismatch
- Fixed vendor case-sensitivity: renamed Microsoft → microsoft
(224 files) for Linux CI compatibility
- Pinned kustomize to v4.5.4 to fix gnostic API incompatibility
- Cleaned up unused golangci-lint and kustomize dependencies (~200
transitive deps) from main go.mod
7. Dependency Management
- Main module go.mod reverted to pre-OTE state (OpenTelemetry v1.35.0)
- Test extension maintains separate dependencies with security fixes
- Vendor directories synchronized with go.mod/go.sum
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
38267e4 to
40c3876
Compare
|
@jadhaj: This pull request explicitly references no 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. |
| g.BeforeEach(func() { | ||
| compat_otp.SkipForSNOCluster(oc) | ||
| iaasPlatform = compat_otp.CheckPlatform(oc) | ||
| if !(iaasPlatform == "baremetal") { |
There was a problem hiding this comment.
nit: let's change it to iaasPlatform != "baremetal" at some point
There was a problem hiding this comment.
nit: file named utils tend to grow beyond any reasonable size as project developers. Let's plan to split it up into more meaningful and measurable bits. At the very least, you can separate general Kubernetes utilities (nodes, pods, etc) from Metal3-specific stuff (BMH, HFS, etc).
| replace github.com/onsi/ginkgo/v2 => github.com/openshift/onsi-ginkgo/v2 v2.6.1-0.20260303184444-1cc650aa0565 | ||
|
|
||
| // Kubernetes replace directives from openshift/origin | ||
| // Required for OTE compatibility with OpenShift's kubernetes fork |
There was a problem hiding this comment.
Wow, I hope these won't become a nightmare to update
Remove unnecessary GOFLAGS=-mod=mod usage and use vendored copies of tools where available: 1. CONTROLLER_GEN: Use vendored copy instead of downloading from internet - Changed from: GOFLAGS=-mod=mod go run sigs.k8s.io/controller-tools/cmd/controller-gen - Changed to: go run vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go 2. GOLANGCI_LINT: Use go run with version (not vendored) - Removed GOFLAGS=-mod=mod (redundant with go run) - Added @v2.1.6 version pin 3. KUSTOMIZE: Already correct (not vendored, version pinned) - Removed GOFLAGS=-mod=mod (redundant with go run) 4. unit target: Use vendor by default - Removed GOFLAGS=-mod=mod 5. generate target: Use vendor by default - Removed GOFLAGS=-mod=mod This ensures deterministic builds using vendored dependencies where available, and eliminates unnecessary downloads from the internet.
Restore tools.go to vendor golangci-lint and kustomize dependencies: - Added github.com/golangci/golangci-lint/v2/cmd/golangci-lint - Added sigs.k8s.io/kustomize/kustomize/v4 Updated Makefile to use vendored paths: - GOLANGCI_LINT: Use vendor/github.com/golangci/golangci-lint/v2/cmd/golangci-lint/main.go - KUSTOMIZE: Use vendor/sigs.k8s.io/kustomize/kustomize/v4/main.go This fixes the error when -mod=vendor is set globally: 'go: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.1.6: cannot query module due to -mod=vendor' Now all tools use vendored dependencies for deterministic builds without needing -mod=mod or internet downloads.
Add cleanup step in vendor target to remove temporary files that upstream modules accidentally committed: - cover.out (test coverage files) - *.swp (vim swap files) These files are ignored by .gitignore but the CI vendor consistency check explicitly fails if they exist, even if ignored. The cleanup runs automatically after 'go mod vendor' to ensure vendor/ is clean for CI checks.
- Fix sed command for macOS compatibility (add empty string after -i) - Regenerate manifests after vendor changes - Commit upstream temporary files (cover.out, .swp) from vendored modules - Update .gitignore to allow these patterns in vendor/ directory - Remove cleanup from make vendor target (files now tracked in git) This resolves CI vendor consistency errors where go mod vendor recreates files from upstream modules that weren't committed. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The previous approach of vendoring golangci-lint caused out-of-memory errors during build-tests due to ~170 additional dependencies and 4120 files added to vendor/. Solution: - Remove golangci-lint from tools.go (no longer vendored) - Update GOLANGCI_LINT in Makefile to use GOFLAGS="" override - This allows go run @Version to download golangci-lint at runtime - Use golangci-lint v2.12.2 which supports Go 1.25.0 - Remove .swp pattern from .gitignore (was from golangci-lint dep) The GOFLAGS="" override bypasses any global -mod=vendor setting for just the golangci-lint command, avoiding download errors while keeping all other tools vendored. This reduces vendor/ by ~4000 files and fixes CI build memory issues. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Use -i.bak instead of -i '' to work on both BSD sed (macOS) and GNU sed (Linux). The backup files are immediately removed after sed completes. This fixes CI failures on Linux where GNU sed interprets '' as a filename rather than an empty backup extension. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
@jadhaj: The following tests 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. |
Implements OTE framework to migrate baremetal E2E tests from openshift-tests-private to cluster-baremetal-operator repository.
Changes:
Tests use platform=="baremetal" selector and run under origin CI. Binary: cluster-baremetal-tests-ext (payload test extension)
Summary by CodeRabbit
New Features
Chores