Skip to content

NO-ISSUE: Add OpenShift Tests Extension (OTE) for baremetal E2E tests#607

Open
jadhaj wants to merge 7 commits into
openshift:mainfrom
jadhaj:add-ote-baremetal-tests
Open

NO-ISSUE: Add OpenShift Tests Extension (OTE) for baremetal E2E tests#607
jadhaj wants to merge 7 commits into
openshift:mainfrom
jadhaj:add-ote-baremetal-tests

Conversation

@jadhaj
Copy link
Copy Markdown
Contributor

@jadhaj jadhaj commented May 20, 2026

Implements OTE framework to migrate baremetal E2E tests from openshift-tests-private to cluster-baremetal-operator repository.

Changes:

  • Add cmd/cluster-baremetal-tests-ext/main.go: OTE binary entry point that registers as openshift:payload:cluster-baremetal extension
  • Add test/e2e/baremetal/deployment_sanity.go: 6 migrated baremetal tests
    • Cluster operators running check (OCP-29146)
    • Nodes running check (OCP-29147)
    • Deployment availability check (OCP-29148)
    • Worker node validation (OCP-29149)
    • CPU usage check (OCP-29150)
    • Memory check (OCP-29151)
  • Add test/e2e/baremetal/utils.go: Helper functions using compat_otp
  • Update go.mod: Add OTE dependencies and OpenShift kubernetes replaces
  • Update Makefile: Add build-tests target with -mod=mod approach
  • Remove vendor/: Use Go module cache instead of vendoring (10k+ files)

Tests use platform=="baremetal" selector and run under origin CI. Binary: cluster-baremetal-tests-ext (payload test extension)

Summary by CodeRabbit

  • New Features

    • Added an end-to-end baremetal test suite validating cluster operator health, node readiness, deployment scheduling, and node resource usage.
    • Added a CLI to build and run a baremetal test extension and expose test subcommands.
    • Added extensive e2e test utilities and helpers for provisioning, metrics, and environment handling.
  • Chores

    • Updated dependency set and module replacements across the project.
    • Improved build and lint tooling behavior and added a test-build target.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 20, 2026

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds 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.

Changes

Baremetal E2E Test Framework

Layer / File(s) Summary
Makefile & tools
Makefile, tools.go
Run controller-gen and golangci-lint via module entrypoints with GOFLAGS=-mod=mod; update unit and generate to use GOFLAGS=-mod=mod; add build-tests to build and gzip cmd/cluster-baremetal-tests-ext; remove kustomize import from tools.go and document it is run via go run in Makefile.
Dependency and module pins
go.mod
Adds ginkgo/gomega, openshift-tests-extension, spf13/cobra; refreshes many indirect dependencies and adds replace rules redirecting metal3/k8s/onsi modules to OpenShift forks/staging and pinned commits.
Test extension entrypoint
cmd/cluster-baremetal-tests-ext/main.go
New Cobra CLI that builds OpenShift Ginkgo specs, filters to baremetal via platform selectors, registers them under openshift/payload/cluster-baremetalcluster-baremetal/all, and exposes default subcommands.
E2E helper utilities
test/e2e/baremetal/utils.go
Adds Response type and many helper functions for oc/jsonpath wrappers, Prometheus queries, BMH polling, firmware/NIC URL builders, proxy handling, certificate checks, IPv6/dual-stack detection, copying artifacts, and related utilities used by tests.
Deployment sanity test suite
test/e2e/baremetal/deployment_sanity.go
Adds Ginkgo suite INSTALLER_GENERAL with specs to check clusteroperators, node readiness, deployment availability and pod scheduling, replica placement onto workers, per-node CPU and memory thresholds; other installer suites left commented.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

🚥 Pre-merge checks | ✅ 7 | ❌ 5

❌ Failed checks (5 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 28.13% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Structure And Quality ⚠️ Warning Tests lack meaningful assertion messages (26+ bare assertions without context). Test 3 checks 3 unrelated behaviors. Test 4 checks 5+ behaviors, violating single responsibility principle. Add failure messages to assertions (e.g., o.Expect(..., "context"). Split tests into focused single-responsibility specs.
Microshift Test Compatibility ⚠️ Warning Tests use ClusterOperator API (config.openshift.io) and openshift-monitoring namespace unavailable on MicroShift, with no [Skipped:MicroShift] or [apigroup:...] protection. Add [apigroup:config.openshift.io] tag to test names, or add exutil.IsMicroShiftCluster() checks with g.Skip(), or add [Skipped:MicroShift] labels.
Topology-Aware Scheduling Compatibility ⚠️ Warning Test case 34195 lacks topology-aware handling for DualReplica, HighlyAvailableArbiter, and External. Replica count defaults to 3 on unsupported topologies with insufficient schedulable nodes. Handle DualReplica/HighlyAvailableArbiter with 2 replicas max. Skip External topology or verify worker nodes exist. Cap replicas to available schedulable nodes to prevent scheduling failures.
Ipv6 And Disconnected Network Test Compatibility ⚠️ Warning Tests 32361/34195 pull from public quay.io without mirroring (disconnected failure). Tests 39126/39125 hardcode localhost:9090 URLs in pod exec. Tests 32361/34195: Use cluster-internal registry or add [Skipped:Disconnected]. Tests 39126/39125: Use prometheus service DNS instead of localhost:9090.
✅ Passed checks (7 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed All Ginkgo test names in deployment_sanity.go are static and deterministic with no dynamic values, generated identifiers, or timestamps. Test titles use descriptive strings with static bug IDs.
Single Node Openshift (Sno) Test Compatibility ✅ Passed All 6 new tests protected by compat_otp.SkipForSNOCluster() in BeforeEach. Test at line 112 also explicitly handles SNO topology by adjusting replica count to 1.
Ote Binary Stdout Contract ✅ Passed OTE binary stdout contract verified: main.go has no fmt.Print/log/klog calls. Test package uses lazy-loaded Ginkgo suites with framework-intercepted logging only.
Title check ✅ Passed The title clearly summarizes the main change: adding an OpenShift Tests Extension (OTE) for baremetal E2E tests, which is the primary objective of the changeset.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

Review ran into problems

🔥 Problems

Git: Failed to clone repository. Please run the @coderabbitai full review command to re-trigger a full review. If the issue persists, set path_filters to include or exclude specific files.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci openshift-ci Bot requested review from dtantsur and elfosardo May 20, 2026 07:35
@jadhaj
Copy link
Copy Markdown
Contributor Author

jadhaj commented May 20, 2026

/payload-job-with-prs #607 openshift/origin#31197

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 20, 2026

@jadhaj: it appears that you have attempted to use some version of the payload command, but your comment was incorrectly formatted and cannot be acted upon. See the docs for usage info.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

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

📥 Commits

Reviewing files that changed from the base of the PR and between 6a7e66f and 551cb4a.

⛔ Files ignored due to path filters (294)
  • go.sum is excluded by !**/*.sum
  • vendor/4d63.com/gocheckcompilerdirectives/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/4d63.com/gocheckcompilerdirectives/checkcompilerdirectives/checkcompilerdirectives.go is excluded by !**/vendor/**, !vendor/**
  • vendor/4d63.com/gochecknoglobals/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/4d63.com/gochecknoglobals/checknoglobals/check_no_globals.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/4meepo/tagalign/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/4meepo/tagalign/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/4meepo/tagalign/.goreleaser.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/4meepo/tagalign/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/4meepo/tagalign/Makefile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/4meepo/tagalign/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/4meepo/tagalign/options.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/4meepo/tagalign/tagalign.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Abirdcfly/dupword/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Abirdcfly/dupword/.goreleaser.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Abirdcfly/dupword/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Abirdcfly/dupword/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Abirdcfly/dupword/dupword.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Abirdcfly/dupword/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/errname/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/errname/pkg/analyzer/analyzer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/errname/pkg/analyzer/facts.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/nilnil/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/nilnil/pkg/analyzer/analyzer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/nilnil/pkg/analyzer/config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/nilnil/pkg/analyzer/func_type_stack.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/analyzer/analyzer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/analyzer/checkers_factory.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/analysisutil/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/analysisutil/encoded.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/analysisutil/file.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/analysisutil/format.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/analysisutil/object.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/analysisutil/pkg.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/blank_import.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/bool_compare.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/call_meta.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/checker.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/checkers_registry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/compares.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/contains.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/empty.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/encoded_compare.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/equal_values.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/error_is_as.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/error_nil.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/expected_actual.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/float_compare.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/formatter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/go_require.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_basic_type.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_bool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_comparison.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_context.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_diagnostic.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_encoded.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_error.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_format.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_http.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_interface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_len.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_naming.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_nil.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_pkg_func.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_suite.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/helpers_testing.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/len.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/negative_positive.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/nil_compare.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/printf/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/printf/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/printf/printf.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/regexp.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/require_error.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/suite_broken_parallel.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/suite_dont_use_pkg.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/suite_extra_assert_call.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/suite_method_signature.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/suite_subtest_run.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/suite_thelper.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/checkers/useless_assert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/config/config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/config/flag_value_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Antonboom/testifylint/internal/testify/const.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/COPYING is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/deprecated.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/encode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/error.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/internal/tz.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/lex.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/meta.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/parse.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/type_fields.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/BurntSushi/toml/type_toml.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Djarvur/go-err113/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Djarvur/go-err113/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Djarvur/go-err113/.travis.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Djarvur/go-err113/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Djarvur/go-err113/README.adoc is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Djarvur/go-err113/comparison.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Djarvur/go-err113/definition.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Djarvur/go-err113/err113.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/analyzer/analyzer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/comment/cache.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/comment/directive.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/pattern/list.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/structure/fields-cache.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/GaijinEntertainment/go-exhaustruct/v3/internal/structure/fields.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/CHANGELOG.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/LICENSE.txt is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/Makefile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/SECURITY.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/collection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/constraints.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Masterminds/semver/v3/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/OpenPeeDeeP/depguard/v2/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/OpenPeeDeeP/depguard/v2/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/OpenPeeDeeP/depguard/v2/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/OpenPeeDeeP/depguard/v2/depguard.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/OpenPeeDeeP/depguard/v2/internal/utils/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/OpenPeeDeeP/depguard/v2/internal/utils/variables.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/OpenPeeDeeP/depguard/v2/settings.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/.editorconfig is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/.goreleaser.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/Bitfile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/COPYING is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/Makefile is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/chroma.jpg is excluded by !**/*.jpg, !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/coalesce.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/colour.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/delegate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/emitters.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatter.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatters/api.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatters/html/html.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatters/json.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatters/svg/font_liberation_mono.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatters/svg/svg.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatters/tokens.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatters/tty_indexed.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/formatters/tty_truecolour.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/iterator.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/caddyfile.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/cl.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/dns.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/emacs.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abap.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abnf.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript_3.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ada.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/agda.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/al.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/alloy.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/angular2.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/antlr.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apacheconf.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apl.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/applescript.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arangodb_aql.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arduino.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/armasm.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/atl.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autohotkey.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autoit.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/awk.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ballerina.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash_session.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/batchfile.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/beef.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bibtex.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bicep.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/blitzbasic.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bnf.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bqn.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/brainfuck.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c#.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cap_n_proto.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cassandra_cql.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ceylon.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfengine3.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfstatement.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chaiscript.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chapel.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cheetah.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/clojure.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cmake.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cobol.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coffeescript.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/common_lisp.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coq.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/crystal.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/css.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/csv.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cue.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cython.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/d.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dart.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dax.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/desktop_entry.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/diff.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/django_jinja.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dns.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/docker.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dtd.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dylan.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ebnf.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elixir.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elm.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/emacslisp.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erlang.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/factor.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fennel.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fish.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/forth.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortran.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortranfixed.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fsharp.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gas.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript3.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gherkin.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gleam.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/glsl.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gnuplot.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/go_template.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/graphql.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groff.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groovy.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/handlebars.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hare.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/haskell.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hcl.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hexdump.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlb.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlsl.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/holyc.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/html.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hy.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/idris.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/igor.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ini.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/io.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/iscdhcpd.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/j.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/janet.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/java.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/javascript.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/json.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonata.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonnet.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/julia.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jungle.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kotlin.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lean.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lighttpd_configuration_file.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/llvm.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lua.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/makefile.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mako.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mason.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/materialize_sql_dialect.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mathematica.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/matlab.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mcfunction.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/meson.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/minizinc.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mlir.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modula-2.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mojo.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/monkeyc.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/morrowindscript.xml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/alecthomas/chroma/v2/lexers/embedded/myghty.xml is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (6)
  • .gitignore
  • Makefile
  • cmd/cluster-baremetal-tests-ext/main.go
  • go.mod
  • test/e2e/baremetal/deployment_sanity.go
  • test/e2e/baremetal/utils.go

Comment thread go.mod Outdated
Comment thread Makefile
Comment thread test/e2e/baremetal/deployment_sanity.go Outdated
Comment thread test/e2e/baremetal/utils.go Outdated
Comment thread test/e2e/baremetal/utils.go Outdated
Comment thread test/e2e/baremetal/utils.go Outdated
Comment thread test/e2e/baremetal/utils.go Outdated
Comment thread test/e2e/baremetal/utils.go Outdated
@jadhaj
Copy link
Copy Markdown
Contributor Author

jadhaj commented May 20, 2026

/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

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 20, 2026

@jadhaj: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-openshift-tests-private-release-4.22-amd64-nightly-metal-ipi-ovn-vmedia-disk-encryption-f7

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/43fe9340-5420-11f1-970d-8a7ad95989b8-0

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 20, 2026

@jadhaj: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-openshift-tests-private-release-4.22-amd64-nightly-metal-ipi-ovn-vmedia-disk-encryption-f7

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/82618880-5421-11f1-9478-129ee9157c6d-0

@jadhaj jadhaj force-pushed the add-ote-baremetal-tests branch from bc1ce19 to 85fd696 Compare May 20, 2026 08:45
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
test/e2e/baremetal/deployment_sanity.go (1)

117-145: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Keep 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 replicasNum and 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) + 1

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 - 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

📥 Commits

Reviewing files that changed from the base of the PR and between 551cb4a and 85fd696.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (4)
  • Makefile
  • go.mod
  • test/e2e/baremetal/deployment_sanity.go
  • test/e2e/baremetal/utils.go

Comment thread go.mod Outdated
@jadhaj jadhaj force-pushed the add-ote-baremetal-tests branch 2 times, most recently from c68844f to c94a735 Compare May 20, 2026 09:42
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label May 20, 2026
@jadhaj jadhaj force-pushed the add-ote-baremetal-tests branch 2 times, most recently from 53855aa to a0b915c Compare May 20, 2026 09:50
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label May 20, 2026
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

♻️ Duplicate comments (1)
test/e2e/baremetal/deployment_sanity.go (1)

117-170: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Topology handling is still incomplete and keeps a worker-only assumption.

Line 142–Line 145 fall back to defaults for DualReplica, HighlyAvailableArbiter, and External, 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

📥 Commits

Reviewing files that changed from the base of the PR and between 85fd696 and a0b915c.

⛔ Files ignored due to path filters (1)
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing (5)
  • Makefile
  • cmd/cluster-baremetal-tests-ext/main.go
  • go.mod
  • test/e2e/baremetal/deployment_sanity.go
  • test/e2e/baremetal/utils.go

Comment thread cmd/cluster-baremetal-tests-ext/main.go Outdated
Comment thread test/e2e/baremetal/deployment_sanity.go Outdated
Comment thread test/e2e/baremetal/utils.go
Comment thread test/e2e/baremetal/utils.go Outdated
Comment thread test/e2e/baremetal/utils.go Outdated
@jadhaj jadhaj force-pushed the add-ote-baremetal-tests branch from a0b915c to 0b9b766 Compare May 20, 2026 10:12
Comment thread test/e2e/baremetal/deployment_sanity.go Outdated
Comment thread test/e2e/baremetal/deployment_sanity.go
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

♻️ Duplicate comments (4)
test/e2e/baremetal/utils.go (2)

143-147: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Handle oc command failure in uptime query.

Line 143 discards the error from the oc get clusterversion command. If the command fails, completionTime may 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 win

Guard split result before indexing operator condition fields.

strings.Split(line, ":") can return fewer than 3 parts if a line is malformed or partial. Indexing parts[1] and parts[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 win

Fix format verb mismatch in memory log line.

minRequiredMemoryInBytes is an int, 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 win

Replace 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 value

Consider escaping date strings in Python script.

Date strings from openssl are interpolated directly into the Python script. While openssl output is predictable, using %q formatting 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 value

Replace deprecated ioutil with os package.

io/ioutil has been deprecated since Go 1.16. Use os.ReadFile instead.

♻️ 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 value

Consider 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

📥 Commits

Reviewing files that changed from the base of the PR and between a0b915c and 99ff910.

⛔ Files ignored due to path filters (295)
  • go.sum is excluded by !**/*.sum
  • vendor/cel.dev/expr/.bazelversion is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/.gitattributes is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/BUILD.bazel is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/CONTRIBUTING.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/GOVERNANCE.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/MAINTAINERS.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/MODULE.bazel is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/WORKSPACE is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/WORKSPACE.bzlmod is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/checked.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/cloudbuild.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/eval.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/explain.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/regen_go_proto.sh is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/regen_go_proto_canonical_protos.sh is excluded by !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/syntax.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cel.dev/expr/value.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/CHANGES.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/auth.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/compute.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/detect.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/filetypes.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/aws_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/executable_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/externalaccount.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/file_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/info.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/programmatic_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/url_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccount/x509_provider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/externalaccountuser/externalaccountuser.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/gdch/gdch.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/impersonate/idtoken.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/impersonate/impersonate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/internal/stsexchange/sts_exchange.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/credentials/selfsignedjwt.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/grpctransport/dial_socketopt.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/grpctransport/directpath.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/grpctransport/pool.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/httptransport/httptransport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/httptransport/transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/compute/compute.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/compute/manufacturer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/compute/manufacturer_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/compute/manufacturer_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/credsfile/credsfile.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/credsfile/filetype.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/credsfile/parse.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/internal.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/jwt/jwt.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/transport/cba.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/transport/cert/default_cert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/transport/cert/enterprise_cert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/transport/cert/workload_cert.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/transport/s2a.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/internal/transport/transport.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/oauth2adapt/CHANGES.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/oauth2adapt/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/oauth2adapt/oauth2adapt.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/auth/threelegged.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/CHANGES.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/log.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/metadata.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/retry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/retry_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/compute/metadata/syscheck_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/iam/CHANGES.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/iam/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/iam/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/iam/apiv1/iampb/iam_policy.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/iam/apiv1/iampb/options.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/iam/apiv1/iampb/policy.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/iam/apiv1/iampb/resource_policy_member.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/iam/iam.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/.repo-metadata-full.json is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/annotate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/gen_info.sh is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/optional/optional.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/retry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/trace/trace.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/version/update_version.sh is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/internal/version/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/alert_policy_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/auxiliary.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/auxiliary_go123.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/gapic_metadata.json is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/group_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/helpers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/metric_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/alert.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/alert_service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/common.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/dropped_labels.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/group.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/group_service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/metric.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/metric_service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/mutation_record.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/notification.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/notification_service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/query_service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/service_service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/snooze.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/snooze_service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/span_context.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/uptime.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/monitoringpb/uptime_service.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/notification_channel_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/query_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/service_monitoring_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/snooze_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/uptime_check_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/apiv3/v2/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/monitoring/internal/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/CHANGES.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/TESTING.md is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/acl.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/bucket.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/copy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/dynamic_delay.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/emulator_test.sh is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/experimental/experimental.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/grpc_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/grpc_dp.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/grpc_metrics.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/grpc_reader.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/grpc_reader_multi_range.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/grpc_writer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/hmac.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/http_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/iam.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/apiv2/auxiliary.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/apiv2/auxiliary_go123.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/apiv2/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/apiv2/gapic_metadata.json is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/apiv2/helpers.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/apiv2/storage_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.go is excluded by !**/*.pb.go, !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/apiv2/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/experimental.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/internal/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/invoke.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/notifications.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/option.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/post_policy_v4.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/reader.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/storage.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/storage.replay is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/trace.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cloud.google.com/go/storage/writer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/COPYING is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/handle_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/internal/fdutils/fd_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/internal/libpathrs/error_unix.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/internal/libpathrs/libpathrs_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/procfs/procfs_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/root_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/cyphar.com/go-pathrs/utils_linux.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/core.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_syslog.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/defaultlog_windows.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/error.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/progress.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/request.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/response.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-pipeline-go/pipeline/version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/LICENSE.txt is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/NOTICE.txt is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/profiles/latest/containerregistry/mgmt/containerregistry/models.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_identifier.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_type.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy/policy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/resource_identifier.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/resource_type.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/pipeline.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_bearer_token.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_register_rp.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_trace_namespace.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/runtime.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/to/to.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/BREAKING_CHANGES.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/CHANGELOG.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/LICENSE.txt is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/MIGRATION.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TOKEN_CACHING.MD is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/TROUBLESHOOTING.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/assets.json is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/authentication_record.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azidentity.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_cli_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_developer_cli_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_pipelines_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/chained_token_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/ci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_assertion_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_certificate_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/client_secret_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/confidential_client.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/default_azure_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/developer_credential_util.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/device_code_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/environment_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/go.work is excluded by !**/*.work, !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/interactive_browser_credential.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/internal/cache.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/logging.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/managed-identity-matrix.json is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (5)
  • Makefile
  • cmd/cluster-baremetal-tests-ext/main.go
  • go.mod
  • test/e2e/baremetal/deployment_sanity.go
  • test/e2e/baremetal/utils.go

Comment thread go.mod Outdated
Comment thread test/e2e/baremetal/deployment_sanity.go
Comment thread test/e2e/baremetal/utils.go
Comment thread test/e2e/baremetal/utils.go
Comment thread test/e2e/baremetal/utils.go
@jadhaj jadhaj force-pushed the add-ote-baremetal-tests branch from 730495a to 66f13cb Compare May 20, 2026 14:32
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 21, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: jadhaj
Once this PR has been reviewed and has the lgtm label, please assign elfosardo for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@jadhaj
Copy link
Copy Markdown
Contributor Author

jadhaj commented May 22, 2026

/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

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 22, 2026

@jadhaj: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-openshift-tests-private-release-4.22-amd64-nightly-metal-ipi-ovn-vmedia-disk-encryption-f7

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/4173d420-55a9-11f1-80d3-3c322e744e25-0

@jadhaj
Copy link
Copy Markdown
Contributor Author

jadhaj commented May 22, 2026

/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

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 22, 2026

@jadhaj: trigger 0 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

@jadhaj
Copy link
Copy Markdown
Contributor Author

jadhaj commented May 22, 2026

/payload-job-with-prs periodic-ci-openshift-openshift-tests-private-release-4.22-multi-nightly-metal-ipi-ovn-ipv4-amd-f7 openshift/origin#31197

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 22, 2026

@jadhaj: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

  • periodic-ci-openshift-openshift-tests-private-release-4.22-multi-nightly-metal-ipi-ovn-ipv4-amd-f7

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>
@jadhaj jadhaj force-pushed the add-ote-baremetal-tests branch from 38267e4 to 40c3876 Compare May 22, 2026 17:19
@jadhaj jadhaj changed the title Add OpenShift Tests Extension (OTE) for baremetal E2E tests NO-ISSUE: Add OpenShift Tests Extension (OTE) for baremetal E2E tests May 26, 2026
@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label May 26, 2026
@openshift-ci-robot
Copy link
Copy Markdown
Contributor

@jadhaj: This pull request explicitly references no jira issue.

Details

In response to this:

Implements OTE framework to migrate baremetal E2E tests from openshift-tests-private to cluster-baremetal-operator repository.

Changes:

  • Add cmd/cluster-baremetal-tests-ext/main.go: OTE binary entry point that registers as openshift:payload:cluster-baremetal extension
  • Add test/e2e/baremetal/deployment_sanity.go: 6 migrated baremetal tests
  • Cluster operators running check (OCP-29146)
  • Nodes running check (OCP-29147)
  • Deployment availability check (OCP-29148)
  • Worker node validation (OCP-29149)
  • CPU usage check (OCP-29150)
  • Memory check (OCP-29151)
  • Add test/e2e/baremetal/utils.go: Helper functions using compat_otp
  • Update go.mod: Add OTE dependencies and OpenShift kubernetes replaces
  • Update Makefile: Add build-tests target with -mod=mod approach
  • Remove vendor/: Use Go module cache instead of vendoring (10k+ files)

Tests use platform=="baremetal" selector and run under origin CI. Binary: cluster-baremetal-tests-ext (payload test extension)

Summary by CodeRabbit

  • New Features

  • Added an end-to-end baremetal test suite validating cluster operator health, node readiness, deployment scheduling, and node resource usage.

  • Added a CLI to build and run a baremetal test extension and expose test subcommands.

  • Added extensive e2e test utilities and helpers for provisioning, metrics, and environment handling.

  • Chores

  • Updated dependency set and module replacements across the project.

  • Improved build and lint tooling behavior and added a test-build target.

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") {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

nit: let's change it to iaasPlatform != "baremetal" at some point

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

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
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Wow, I hope these won't become a nightmare to update

Comment thread cmd/cluster-baremetal-tests-ext/main.go
Comment thread Makefile Outdated
Comment thread Makefile Outdated
Comment thread Makefile Outdated
jadhaj and others added 6 commits May 26, 2026 15:45
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>
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented May 27, 2026

@jadhaj: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-metal-ipi-serial-ipv4 6ae8a48 link true /test e2e-metal-ipi-serial-ipv4
ci/prow/e2e-hypershift 6ae8a48 link true /test e2e-hypershift
ci/prow/e2e-metal-ipi-bm 6ae8a48 link true /test e2e-metal-ipi-bm

Full PR test history. Your PR dashboard.

Details

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 kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants