Skip to content

Conversation

@wangke19
Copy link
Contributor

This PR refactors the openshift-apiserver extended tests to use the modern OpenShift Tests Extension (OTE) framework, following the pattern established in the service-ca-operator repository.

Key Changes:

  • Migrated from test/extended/ to test/tests-extension/ directory structure
  • Implemented OTE framework integration in cmd/main.go
  • Added comprehensive test coverage for openshift-apiserver components
  • Created proper Go module (go.mod/go.sum) for tests-extension
  • Added Makefile with build, test, and metadata management targets
  • Updated main Makefile to include tests-extension targets
  • Added .gitignore and comprehensive README.md documentation

Test Suites Available:

  • openshift/openshift-apiserver/all
  • openshift/openshift-apiserver/conformance/parallel
  • openshift/openshift-apiserver/conformance/serial
  • openshift/openshift-apiserver/optional/slow

This refactoring modernizes the test infrastructure while maintaining backward compatibility and adding enhanced test coverage for the openshift-apiserver component.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Oct 23, 2025

[APPROVALNOTIFIER] This PR is NOT APPROVED

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

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

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

@coderabbitai
Copy link

coderabbitai bot commented Oct 23, 2025

Walkthrough

Adds a new tests-extension module under test/tests-extension with build, run, and metadata Makefile targets; updates root Makefile to delegate tests-extension targets; adds a Ginkgo test suite validating openshift-apiserver resources; introduces module files, metadata JSON and .gitignore; removes a legacy test file.

Changes

Cohort / File(s) Summary
Root Make integration
Makefile
Updated TESTS_EXT_PACKAGE to ./test/tests-extension/cmd; added public targets tests-ext-verify, tests-ext-clean, tests-ext-run-suite, tests-ext-list, tests-ext-build-update that delegate into test/tests-extension; wired tests-ext-build into all, clean, and verify flows.
Tests extension Make & repo metadata
test/tests-extension/Makefile, test/tests-extension/.gitignore, .openshift-tests-extension/openshift_payload_openshift-apiserver.json
Added a comprehensive Makefile for building, running suites, metadata generation/sanitization, and dev checks; added .gitignore for build/test artifacts; added empty metadata JSON file.
Tests extension module & docs
test/tests-extension/go.mod, test/tests-extension/README.md
Introduced a new Go module for tests-extension with dependencies and replace directives; updated README to use new Makefile-driven workflows and paths.
Tests extension code
test/tests-extension/cmd/main.go, test/tests-extension/test/oas.go
Updated test registration import path in cmd/main.go; added test/oas.go implementing Ginkgo/Gomega tests that probe openshift-apiserver Deployment, Pods, Service, Endpoints, ConfigMaps, and Secrets with client-go polling/assertions.
Removed legacy test
test/extended/main.go
Deleted legacy Ginkgo/Gomega sanity test file.
Repository module deps
go.mod
Reorganized requires: moved ginkgo/gomega to indirect entries and removed a direct dependency on the tests-extension package; adjusted indirect dependency entries.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The pull request title "[WIP]Refactor test/extended to use OpenShift Tests Extension (OTE) framework" directly describes the primary objective of the changeset. The changes throughout the pull request—including the removal of test/extended/main.go, creation of test/tests-extension/ directory structure, integration of OTE framework, addition of Makefile targets, and updates to go.mod—all align with this refactoring effort. The title is specific, clear, and avoids vague terminology, providing immediate understanding of the main change.
Description Check ✅ Passed The pull request description is clearly related to the changeset and provides relevant context for the refactoring. It accurately describes the key changes including the migration from test/extended/ to test/tests-extension/, OTE framework integration, addition of Go modules, Makefile targets, test coverage, and documentation. The description is specific and detailed enough to convey meaningful information about the changes without being vague or generic, and it includes context about the test suites available after the refactoring.
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

@wangke19 wangke19 changed the title Refactor test/extended to use OpenShift Tests Extension (OTE) framework [WIP]Refactor test/extended to use OpenShift Tests Extension (OTE) framework Oct 23, 2025
@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Oct 23, 2025
Copy link

@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

🧹 Nitpick comments (3)
test/tests-extension/Makefile (2)

17-17: Consider using $(CURDIR) for better portability.

Using $(shell pwd) can have issues in certain build environments. $(CURDIR) is a built-in Make variable that's more reliable.

Apply this diff:

-METADATA := $(shell pwd)/.openshift-tests-extension/openshift_payload_openshift-apiserver.json
+METADATA := $(CURDIR)/.openshift-tests-extension/openshift_payload_openshift-apiserver.json

43-43: Timestamp in filename may complicate artifact management.

The JUnit filename includes a timestamp which creates unique files on each run. This could make it harder to track or overwrite results in CI systems that expect consistent filenames.

Consider using a fixed filename or making the timestamp optional:

-	$(TOOLS_BIN_DIR)/openshift-apiserver-tests-ext run-suite $(SUITE) -j $(ARTIFACT_DIR)/junit_$(shell date +%Y%m%d-%H%M%S).xml
+	$(TOOLS_BIN_DIR)/openshift-apiserver-tests-ext run-suite $(SUITE) -j $(ARTIFACT_DIR)/junit.xml
test/tests-extension/README.md (1)

64-65: Minor: Markdown list indentation.

The static analysis tool flagged inconsistent indentation in the unordered list (4 spaces instead of 2). While this doesn't affect functionality, fixing it would improve markdown consistency.

Apply this diff:

 - Before committing your changes:
-    - Run `make build-update`
-    - Run `make verify` to check formatting, linting, and validation
+  - Run `make build-update`
+  - Run `make verify` to check formatting, linting, and validation
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 42d570e and d7ab9e0.

⛔ Files ignored due to path filters (1)
  • test/tests-extension/go.sum is excluded by !**/*.sum
📒 Files selected for processing (9)
  • .openshift-tests-extension/openshift_payload_openshift-apiserver.json (1 hunks)
  • Makefile (2 hunks)
  • test/extended/main.go (0 hunks)
  • test/tests-extension/.gitignore (1 hunks)
  • test/tests-extension/Makefile (1 hunks)
  • test/tests-extension/README.md (7 hunks)
  • test/tests-extension/cmd/main.go (1 hunks)
  • test/tests-extension/go.mod (1 hunks)
  • test/tests-extension/test/openshift_apiserver.go (1 hunks)
💤 Files with no reviewable changes (1)
  • test/extended/main.go
🧰 Additional context used
🪛 checkmake (0.2.2)
Makefile

[warning] 106-106: Missing required phony target "test"

(minphony)

test/tests-extension/Makefile

[warning] 135-135: Missing required phony target "all"

(minphony)


[warning] 135-135: Missing required phony target "test"

(minphony)

🪛 markdownlint-cli2 (0.18.1)
test/tests-extension/README.md

64-64: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


65-65: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

🔇 Additional comments (19)
.openshift-tests-extension/openshift_payload_openshift-apiserver.json (1)

1-1: LGTM! Empty metadata payload is expected.

The empty JSON array serves as the initial state before running metadata generation via make build-update. This will be populated with test metadata when the build process runs.

test/tests-extension/Makefile (2)

19-22: Well-structured help system.

The help target with AWK-based extraction from inline comments is a clean pattern that makes the Makefile self-documenting.


83-112: Excellent documentation for test management.

The inline comments explaining TestID uniqueness, test renaming workflow, and test deletion procedures are comprehensive and will help maintainers understand the metadata management system.

test/tests-extension/.gitignore (1)

1-38: LGTM! Comprehensive gitignore patterns.

The ignore patterns appropriately cover build artifacts, IDE files, and OS-specific files for the test extension project.

Makefile (3)

17-17: LGTM! Package path updated correctly.

The TESTS_EXT_PACKAGE path has been updated to match the new test extension structure under test/tests-extension/cmd.


74-96: Clean delegation pattern to test extension Makefile.

The new targets properly delegate to the test extension's Makefile while maintaining a consistent interface at the root level.


99-106: Proper integration with main build lifecycle.

The integration of test extension targets into the main all, clean, and verify targets ensures the test extension is built and verified as part of the standard workflow.

test/tests-extension/go.mod (2)

68-68: Replace directive for Ginkgo fork is appropriate.

The replace directive pointing to the OpenShift fork of Ginkgo is a standard pattern in OpenShift projects for maintaining compatibility with OCP-specific test infrastructure.


3-3: Go 1.24.0 is available and supported.

Go 1.24.0 was released before the current latest stable version (Go 1.25.3, released October 13, 2025), confirming it is a valid, available, and supported version for your build environment. No action required.

test/tests-extension/cmd/main.go (5)

26-60: Well-structured test suite hierarchy.

The extension and suite definitions are clean and follow a logical structure:

  • Parallel conformance suite for fast, concurrent tests
  • Serial conformance suite for order-dependent tests
  • Optional slow suite for long-running tests
  • All suite as a catch-all

The use of qualifiers with name-based filtering is appropriate for this test organization.


68-76: Good practice: Ensuring disruptive tests are serial.

Automatically labeling [Disruptive] tests as [Serial] prevents concurrent execution of tests that could interfere with each other, improving test reliability.


79-88: Correct implementation of test name preservation.

The logic to restore OriginalName from labels prefixed with original-name: correctly handles test renaming while maintaining TestID stability, which is crucial for CI/CD tracking.


91-93: Empty placeholder is acceptable for initial implementation.

The IgnoreObsoleteTests function is currently empty with a comment placeholder. This is fine for the initial implementation and can be populated as tests are deprecated.


96-98: Empty BeforeAll hook is acceptable.

The empty BeforeAll hook with a "do stuff" comment serves as a placeholder for future initialization logic. This is acceptable for the initial scaffold.

test/tests-extension/README.md (2)

1-26: Comprehensive documentation for local testing.

The README provides clear instructions for building, listing, and running tests locally with practical examples. The command table is especially helpful for quick reference.


67-102: Excellent guidance for test maintenance.

The documentation for renaming and deleting tests is thorough, including:

  • Step-by-step workflows
  • Code examples
  • Important warnings about Sippy integration
  • References to related tracking issues

This will help maintainers avoid breaking test tracking systems.

test/tests-extension/test/openshift_apiserver.go (3)

23-44: Well-designed configuration fallback logic.

The helper functions properly prioritize KUBECONFIG environment variable while falling back to in-cluster configuration. This supports both local development and CI environments.


49-65: Good use of Eventually for async readiness checks.

The deployment test properly uses Eventually with 2-minute timeout and 10-second polling to wait for resources to become available. The subsequent synchronous checks verify the final state.


46-134: Comprehensive test coverage for API Server components.

The test suite covers all critical API Server resources:

  • Deployment availability and readiness
  • Pod health and count
  • Service configuration
  • Endpoint availability
  • ConfigMap presence
  • Secret existence

All tests are appropriately tagged for parallel execution, which will help with CI performance.

@wangke19 wangke19 marked this pull request as draft October 23, 2025 15:12
This commit refactors the openshift-apiserver extended tests to use the modern
OpenShift Tests Extension (OTE) framework, following the pattern established
in the service-ca-operator repository.

Changes:
- Migrate from test/extended/ to test/tests-extension/ directory structure
- Implement OTE framework integration in cmd/main.go
- Add comprehensive test coverage for openshift-apiserver components:
  * Deployment status and health checks
  * Pod running state validation
  * Service and endpoints verification
  * ConfigMap and Secret validation
- Create proper Go module (go.mod/go.sum) for tests-extension
- Add Makefile with build, test, and metadata management targets
- Update main Makefile to include tests-extension targets
- Add .gitignore and comprehensive README.md documentation
- Generate test metadata for CI/CD pipeline integration

Test suites available:
- openshift/openshift-apiserver/all
- openshift/openshift-apiserver/conformance/parallel
- openshift/openshift-apiserver/conformance/serial
- openshift/openshift-apiserver/optional/slow

This refactoring modernizes the test infrastructure while maintaining
backward compatibility and adding enhanced test coverage for the
openshift-apiserver component.

Resolves: Refactor test/extended to OTE framework
@wangke19 wangke19 force-pushed the separate-ote-scaffold branch from 4378780 to daabf23 Compare October 24, 2025 04:08
@wangke19 wangke19 marked this pull request as ready for review October 24, 2025 04:36
@openshift-ci openshift-ci bot requested review from benluddy and deads2k October 24, 2025 04:37
Copy link

@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/tests-extension/test/openshift_apiserver.go (1)

62-65: Guard against nil Spec.Replicas before dereferencing.

Spec.Replicas is a pointer; dereferencing without a check risks a panic if defaulting didn’t set it.

Apply this diff:

- o.Expect(apiserverDeployment.Status.UpdatedReplicas).To(o.Equal(*apiserverDeployment.Spec.Replicas))
+ desired := int32(1) // Deployment defaults to 1 replica if nil
+ if apiserverDeployment.Spec.Replicas != nil {
+     desired = *apiserverDeployment.Spec.Replicas
+ }
+ o.Expect(apiserverDeployment.Status.UpdatedReplicas).To(o.Equal(desired))
🧹 Nitpick comments (15)
test/tests-extension/test/openshift_apiserver.go (5)

82-85: Avoid flakiness: wait until all pods are Running.

The prior Eventually only guarantees pods exist, not that they’re Running. Add an Eventually that waits for all pods to reach Running.

- for _, pod := range pods.Items {
-     o.Expect(pod.Status.Phase).To(o.Equal(corev1.PodRunning))
- }
+ o.Eventually(func() bool {
+     // Re-list to avoid stale state
+     cur, err := client.CoreV1().Pods(operatorNamespace).List(context.Background(), metav1.ListOptions{
+         LabelSelector: "app=openshift-apiserver",
+     })
+     if err != nil || len(cur.Items) == 0 {
+         return false
+     }
+     for _, p := range cur.Items {
+         if p.Status.Phase != corev1.PodRunning {
+             return false
+         }
+     }
+     return true
+ }).WithTimeout(2 * time.Minute).WithPolling(10 * time.Second).Should(o.BeTrue())

105-110: Don’t assume Subsets[0]; assert at least one address across all subsets.

Indexing the first subset can be brittle. Sum addresses across subsets instead.

- gomega.Expect(len(endpoints.Subsets)).To(o.BeNumerically(">", 0))
- gomega.Expect(len(endpoints.Subsets[0].Addresses)).To(o.BeNumerically(">", 0))
+ gomega.Expect(len(endpoints.Subsets)).To(o.BeNumerically(">", 0))
+ total := 0
+ for _, ss := range endpoints.Subsets {
+     total += len(ss.Addresses)
+ }
+ gomega.Expect(total).To(o.BeNumerically(">", 0))

33-44: Fail fast when KUBECONFIG is set but invalid.

Silently falling back to in-cluster config hides misconfiguration. If KUBECONFIG is provided, return its error; only fall back when it’s not set.

 func getKubeConfig() (*rest.Config, error) {
   // First try to use kubeconfig file
   if kubeconfig := os.Getenv("KUBECONFIG"); kubeconfig != "" {
-    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
-    if err == nil {
-      return config, nil
-    }
+    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
+    if err != nil {
+      return nil, fmt.Errorf("failed to build rest.Config from KUBECONFIG=%q: %w", kubeconfig, err)
+    }
+    return config, nil
   }
 
   // Fall back to in-cluster config
   return rest.InClusterConfig()
 }

Add the missing import:

import (
    "fmt"
    // existing imports…
)

47-47: Remove unnecessary GinkgoRecover.

GinkgoRecover is only needed inside goroutines. It does nothing here and can be dropped.


128-133: Be flexible on Secret type or assert on expected keys instead.

The “openshift-apiserver” Secret type may change (often TLS). Asserting exact type risks brittle failures. Prefer checking for required data keys or allow a set of expected types.

If you want, I can adjust the assertion to validate expected keys (e.g., serving cert/key) based on current cluster conventions.

test/tests-extension/README.md (5)

56-56: Clarify the tests directory path.

Specify the full path to avoid ambiguity:

-You can write tests in the `test/` directory.
+You can write tests in the `test/tests-extension/test/` directory.

64-65: Fix Markdown list indentation (MD007).

Adjust list indentation under “Before committing your changes:” to two spaces.

-    - Run `make build-update`
-    - Run `make verify` to check formatting, linting, and validation
+  - Run `make build-update`
+  - Run `make verify` to check formatting, linting, and validation

8-16: Deduplicate “How to Run the Tests Locally”.

The section appears twice. Keep one and merge examples to reduce drift.

Also applies to: 18-26, 49-52


138-144: Mirror root-level targets nomenclature (optional).

If developers run from repo root, mention the pass-through targets: make tests-ext-run-suite, make tests-ext-list, make tests-ext-build-update.


168-171: Tighten rationale for build-update (nice-to-have).

Consider linking to TRT-2186 note about stripping codeLocations here too to explain deterministic metadata.

Makefile (3)

80-96: Prefer ‘$(MAKE) -C …’ over ‘cd … && make’.

This preserves make’s jobserver flags and is more robust.

-tests-ext-verify:
-	cd test/tests-extension && make verify
+tests-ext-verify:
+	$(MAKE) -C test/tests-extension verify
@@
-tests-ext-clean:
-	cd test/tests-extension && make clean
+tests-ext-clean:
+	$(MAKE) -C test/tests-extension clean
@@
-tests-ext-run-suite:
-	cd test/tests-extension && make run-suite SUITE=$(SUITE) ARTIFACT_DIR=$(ARTIFACT_DIR)
+tests-ext-run-suite:
+	$(MAKE) -C test/tests-extension run-suite SUITE="$(SUITE)" ARTIFACT_DIR="$(ARTIFACT_DIR)"
@@
-tests-ext-list:
-	cd test/tests-extension && make list-test-names
+tests-ext-list:
+	$(MAKE) -C test/tests-extension list-test-names
@@
-tests-ext-build-update:
-	cd test/tests-extension && make build-update
+tests-ext-build-update:
+	$(MAKE) -C test/tests-extension build-update

68-74: Consolidate metadata update flows.

You have both tests-ext-update and tests-ext-build-update. Consider removing the former or delegating it to the latter to avoid drift.

Example:

-.PHONY: tests-ext-update
-tests-ext-update: tests-ext-build
-	./$(TESTS_EXT_BINARY) update
-	for f in .openshift-tests-extension/*.json; do \
-		jq 'map(del(.codeLocations))' "$f" > tmpp && mv tmpp "$f"; \
-	done
+.PHONY: tests-ext-update
+tests-ext-update: tests-ext-build-update

71-73: Handle missing jq gracefully (optional).

Add a quick check so CI fails fast with a clear message if jq isn’t installed.

 	for f in .openshift-tests-extension/*.json; do \
+		command -v jq >/dev/null 2>&1 || { echo "jq is required"; exit 127; }; \
 		jq 'map(del(.codeLocations))' "$f" > tmpp && mv tmpp "$f"; \
 	done
test/tests-extension/Makefile (2)

73-76: Make build reproducible across envs (optional).

Explicitly set GOOS/GOARCH via pass-through variables to avoid surprising cross-compiles.

-	GO_COMPLIANCE_POLICY="exempt_all" go build -ldflags "$(LDFLAGS)" -o $(TOOLS_BIN_DIR)/openshift-apiserver-tests-ext ./cmd/...
+	GO_COMPLIANCE_POLICY="exempt_all" GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags "$(LDFLAGS)" -o $(TOOLS_BIN_DIR)/openshift-apiserver-tests-ext ./cmd/...

135-140: Avoid mutating worktree in verify by default (optional).

verify-metadata currently regenerates metadata. Consider a pure check mode that exits non‑zero if regeneration would change files, without rewriting first.

I can wire a “check-metadata” target that runs the tool to a tmp path and diffs against $(METADATA).

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between d7ab9e0 and 6d73626.

⛔ Files ignored due to path filters (290)
  • go.sum is excluded by !**/*.sum
  • test/tests-extension/go.sum is excluded by !**/*.sum
  • test/tests-extension/vendor/cel.dev/expr/.bazelversion is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/.gitattributes is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/.gitignore is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/BUILD.bazel is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/CODE_OF_CONDUCT.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/CONTRIBUTING.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/GOVERNANCE.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/MAINTAINERS.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/MODULE.bazel is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/WORKSPACE is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/WORKSPACE.bzlmod is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/checked.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/cloudbuild.yaml is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/eval.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/explain.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/regen_go_proto.sh is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/regen_go_proto_canonical_protos.sh is excluded by !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/syntax.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • test/tests-extension/vendor/cel.dev/expr/value.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/.gitignore is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/antlrdoc.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_config.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_config_set.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_deserialization_options.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_deserializer.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_simulator.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_state.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/atn_type.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/char_stream.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/common_token_factory.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/common_token_stream.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/comparators.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/configuration.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/dfa.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/dfa_serializer.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/dfa_state.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/diagnostic_error_listener.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/error_listener.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/error_strategy.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/errors.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/file_stream.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/input_stream.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/int_stream.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/interval_set.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/jcollect.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/lexer.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/lexer_action.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/lexer_action_executor.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/lexer_atn_simulator.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/ll1_analyzer.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/mutex.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/mutex_nomutex.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/nostatistics.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/parser.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/parser_atn_simulator.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/parser_rule_context.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/prediction_context.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/prediction_context_cache.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/prediction_mode.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/recognizer.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/rule_context.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/semantic_context.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/statistics.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/stats_data.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/token.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/token_source.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/token_stream.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/tokenstream_rewriter.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/trace_listener.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/transition.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/tree.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/trees.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/antlr4-go/antlr/v4/utils.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/spew/bypass.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/spew/common.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/spew/config.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/spew/doc.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/spew/dump.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/spew/format.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/davecgh/go-spew/spew/spew.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/.gitignore is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/.goconvey is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/.travis.yml is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/CHANGES.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/Makefile is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/SECURITY.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/Srcfile is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/bench_test.sh is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/compress.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/compressor_cache.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/compressor_pools.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/compressors.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/constants.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/container.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/cors_filter.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/coverage.sh is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/curly.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/curly_route.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/custom_verb.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/doc.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/entity_accessors.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/extensions.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/filter.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/filter_adapter.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/jsr311.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/log/log.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/logger.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/mime.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/options_filter.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/parameter.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/path_expression.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/path_processor.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/request.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/response.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/route.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/route_builder.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/route_reader.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/router.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/service_error.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/web_service.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/emicklei/go-restful/v3/web_service_container.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/.gitignore is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/.golangci.yml is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/CODE_OF_CONDUCT.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/CONTRIBUTING.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/SECURITY.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/bytestring.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/cache.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/common.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/decode.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/diagnose.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/doc.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/encode.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/encode_map.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/omitzero_go124.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/omitzero_pre_go124.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/simplevalue.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/stream.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/structfields.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/tag.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/fxamacker/cbor/v2/valid.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/.golangci.yaml is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/CHANGELOG.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/CONTRIBUTING.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/SECURITY.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/context.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/context_noslog.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/context_slog.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/discard.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/funcr/funcr.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/funcr/slogsink.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/logr.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/sloghandler.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/slogr.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-logr/logr/slogsink.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonpointer/.editorconfig is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonpointer/.gitignore is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonpointer/.golangci.yml is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonpointer/CODE_OF_CONDUCT.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonpointer/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonpointer/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonpointer/pointer.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonreference/.gitignore is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonreference/.golangci.yml is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonreference/CODE_OF_CONDUCT.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonreference/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonreference/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonreference/internal/normalize_url.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/jsonreference/reference.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/.editorconfig is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/.gitattributes is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/.gitignore is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/.golangci.yml is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/BENCHMARK.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/CODE_OF_CONDUCT.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/convert.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/convert_types.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/doc.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/file.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/initialism_index.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/json.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/loading.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/name_lexem.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/net.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/path.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/split.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/string_bytes.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/util.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-openapi/swag/yaml.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/.editorconfig is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/.gitattributes is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/.gitignore is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/CHANGELOG.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/LICENSE.txt is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/README.md is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/Taskfile.yml is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/crypto.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/date.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/defaults.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/dict.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/doc.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/functions.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/list.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/network.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/numeric.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/reflect.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/regex.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/strings.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/go-task/slim-sprig/v3/url.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/AUTHORS is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/CONTRIBUTORS is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/Makefile is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/clone.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/custom_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/decode.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/deprecated.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/discard.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/duration.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/duration_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/encode.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/encode_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/equal.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/extensions.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/lib.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/lib_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/message_set.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/pointer_reflect.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/pointer_reflect_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/pointer_unsafe.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/pointer_unsafe_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/properties.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/properties_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/skip_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_marshal.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_marshal_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_merge.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/table_unmarshal_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/text.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/text_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/text_parser.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/timestamp.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/timestamp_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/wrappers.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/proto/wrappers_gogo.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/LICENSE is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/BUILD.bazel is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/cel.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/decls.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/env.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/folding.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/inlining.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/io.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/library.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/macro.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/optimizer.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/options.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/program.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/prompt.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/templates/authoring.tmpl is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/cel/validator.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/BUILD.bazel is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/checker.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/cost.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/decls/BUILD.bazel is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/decls/decls.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/env.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/errors.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/format.go is excluded by !**/vendor/**
  • test/tests-extension/vendor/github.com/google/cel-go/checker/mapping.go is excluded by !**/vendor/**
📒 Files selected for processing (10)
  • .openshift-tests-extension/openshift_payload_openshift-apiserver.json (1 hunks)
  • Makefile (2 hunks)
  • go.mod (1 hunks)
  • test/extended/main.go (0 hunks)
  • test/tests-extension/.gitignore (1 hunks)
  • test/tests-extension/Makefile (1 hunks)
  • test/tests-extension/README.md (7 hunks)
  • test/tests-extension/cmd/main.go (2 hunks)
  • test/tests-extension/go.mod (1 hunks)
  • test/tests-extension/test/openshift_apiserver.go (1 hunks)
💤 Files with no reviewable changes (1)
  • test/extended/main.go
✅ Files skipped from review due to trivial changes (1)
  • test/tests-extension/.gitignore
🚧 Files skipped from review as they are similar to previous changes (3)
  • .openshift-tests-extension/openshift_payload_openshift-apiserver.json
  • test/tests-extension/cmd/main.go
  • test/tests-extension/go.mod
🧰 Additional context used
🪛 checkmake (0.2.2)
test/tests-extension/Makefile

[warning] 135-135: Missing required phony target "all"

(minphony)


[warning] 135-135: Missing required phony target "test"

(minphony)

Makefile

[warning] 106-106: Missing required phony target "test"

(minphony)

🪛 markdownlint-cli2 (0.18.1)
test/tests-extension/README.md

64-64: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)


65-65: Unordered list indentation
Expected: 2; Actual: 4

(MD007, ul-indent)

🔇 Additional comments (1)
go.mod (1)

115-116: The review comment is incorrect; these dependencies are required and preserved by go mod tidy.

The verification shows that go mod tidy ran successfully without removing the ginkgo/gomega indirect dependencies at lines 115–116. If these were truly unused, go mod tidy would have removed them. Their presence after tidy indicates they are transitively required by actual root-level dependencies, not test-only artifacts that can be safely dropped. The grep search confirms they are not directly referenced in root packages, but that does not mean they are unused—they are dependencies of your root dependencies.

The optional suggestion to remove the replace directive should also not be applied, as the replace is actively being used (the OpenShift fork was downloaded during the tidy operation).

Likely an incorrect or invalid review comment.

The test/tests-extension directory is a separate Go module with its own go.mod file.
The build command was trying to build it from the root directory, causing Go to
fail finding the package. This fix changes the build to run from within the
test/tests-extension directory where the separate module is located.

Fixes CI build error: main module does not contain package
github.com/openshift/openshift-apiserver/test/tests-extension/cmd
Copy link

@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

🧹 Nitpick comments (1)
Makefile (1)

79-97: Review delegation pattern consistency.

The new targets (lines 79-97) delegate to the test/tests-extension subdirectory Makefile. One inconsistency: tests-ext-run-suite (line 89) passes environment variables (SUITE, ARTIFACT_DIR), but the other delegation targets do not. Consider whether targets like tests-ext-verify, tests-ext-clean, etc., should also accept and forward environment variables for consistency and flexibility.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 6d73626 and 471e01c.

📒 Files selected for processing (1)
  • Makefile (3 hunks)
🧰 Additional context used
🪛 checkmake (0.2.2)
Makefile

[warning] 107-107: Missing required phony target "test"

(minphony)

🔇 Additional comments (3)
Makefile (3)

76-107: Verify intention of merged target definitions.

The main targets (all, clean, verify) are redefined with new prerequisites alongside their original definitions. In GNU Make, this results in target rules being merged:

  • all: build (line 1) + all: tests-ext-build (line 100) → all now requires both
  • clean (lines 37-39) and clean: tests-ext-clean (line 103-104) → both commands execute
  • verify (lines 50-55) and verify: tests-ext-verify (line 106) → both commands execute

This is a significant behavioral change. Confirm this merged behavior is intentional (e.g., to always build and verify tests-extension alongside core targets) rather than an unintended side-effect that could cause issues with duplicate work or conflicting cleanup.


17-17: Confirm package path relocation.

TESTS_EXT_PACKAGE updated to ./test/tests-extension/cmd, reflecting the migration from ./cmd/openshift-apiserver-tests-ext. Verify that all downstream references and build steps correctly resolve this new path, especially in CI/CD pipelines that may cache or hardcode paths.


62-64: Verify relative path in subdirectory build command.

The build command now changes to test/tests-extension and outputs to ../../$(TESTS_EXT_BINARY). Confirm that:

  1. The relative path ../../ correctly points to the repository root when executed from the subdirectory.
  2. The binary location matches expectations in deployment/CI workflows.

Rename the test file from openshift_apiserver.go to oas.go for brevity.
Also update references in the Makefile comments to reflect the new filename.
Run gofmt to fix indentation in the IgnoreObsoleteTests comment block.
Copy link

@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 (2)
test/tests-extension/test/oas.go (1)

49-65: Add nil check before dereferencing Spec.Replicas.

Line 64 dereferences apiserverDeployment.Spec.Replicas without verifying it's non-nil. While typically set in production, defensive coding requires a nil check.

Apply this diff:

 	g.By("verifying the deployment is ready")
 	o.Expect(apiserverDeployment.Status.ReadyReplicas).To(o.BeNumerically(">", 0))
-	o.Expect(apiserverDeployment.Status.UpdatedReplicas).To(o.Equal(*apiserverDeployment.Spec.Replicas))
+	if apiserverDeployment.Spec.Replicas != nil {
+		o.Expect(apiserverDeployment.Status.UpdatedReplicas).To(o.Equal(*apiserverDeployment.Spec.Replicas))
+	}
test/tests-extension/Makefile (1)

17-18: Fix METADATA path to point to repository root.

Using $(shell pwd) resolves to the current working directory, which varies depending on where make is invoked. The metadata file belongs at the repository root.

Apply this diff:

-METADATA := $(shell pwd)/.openshift-tests-extension/openshift_payload_openshift-apiserver.json
+REPO_ROOT := $(shell git rev-parse --show-toplevel)
+METADATA := $(REPO_ROOT)/.openshift-tests-extension/openshift_payload_openshift-apiserver.json
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 471e01c and 61bb4bf.

📒 Files selected for processing (2)
  • test/tests-extension/Makefile (1 hunks)
  • test/tests-extension/test/oas.go (1 hunks)
🧰 Additional context used
🪛 checkmake (0.2.2)
test/tests-extension/Makefile

[warning] 135-135: Missing required phony target "all"

(minphony)


[warning] 135-135: Missing required phony target "test"

(minphony)

🔇 Additional comments (13)
test/tests-extension/test/oas.go (6)

1-21: LGTM! Clean test setup.

The package structure, imports, and namespace definition are well-organized and follow standard Ginkgo/Gomega patterns for Kubernetes testing.


23-44: LGTM! Standard client configuration pattern.

The helper functions follow the standard approach: prefer explicit KUBECONFIG, fall back to in-cluster credentials. Error handling is appropriate.


67-86: LGTM! Robust pod verification.

The test properly uses Eventually for timing-dependent checks and validates both pod existence and running state.


88-98: LGTM! Service validation is straightforward.

The synchronous check is appropriate here—services are typically created before pods start.


100-111: LGTM! Endpoints check uses proper timing.

Eventually is correct here since endpoints populate after pods become ready. The array access on line 109 is safe because line 108 verifies the array is non-empty.


113-133: LGTM! ConfigMap and Secret validation is appropriate.

Both tests verify critical resource properties. The synchronous checks are reasonable since these resources are typically created during API server deployment.

test/tests-extension/Makefile (7)

1-2: LGTM! Standard Makefile directory resolution.

Using realpath and lastword to locate the Makefile directory is a robust, portable pattern.


4-14: LGTM! Standard build metadata setup.

The version information embedding via LDFLAGS is a standard Go practice for tracking build provenance.


19-21: LGTM! Standard help target implementation.

The awk-based help extraction is a widely used Makefile pattern for generating usage documentation.


45-67: LGTM! Standard development workflow targets.

The verify/tidy/fmt/vet targets follow Go conventions. Skipping linting for test code (lines 63, 67) is a reasonable pragmatic choice.


69-75: LGTM! Build target with appropriate compliance exemption.

The GO_COMPLIANCE_POLICY="exempt_all" setting is correctly scoped to test binaries only, with clear documentation about its limited use.


77-133: LGTM! Comprehensive metadata workflow.

The metadata targets are well-structured. Removing codeLocations (lines 132-133) to avoid machine-specific paths is good practice. The extensive comments (lines 83-112) provide valuable guidance for test maintenance.


135-140: LGTM! Standard metadata verification for CI.

The git diff check ensures metadata stays in sync with code changes. Note: The static analysis warnings about missing all and test phony targets are conventional but not required for this specialized test Makefile.

Use shell parameter expansion to properly set ARTIFACT_DIR_FINAL with
a default value of CURDIR when ARTIFACT_DIR is not set. This fixes the
issue where the assignment within a subshell didn't persist to subsequent
lines in the Makefile target.
Copy link

@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: 0

♻️ Duplicate comments (3)
test/tests-extension/test/oas.go (1)

64-66: Good defensive nil-check on Spec.Replicas.

This resolves the prior potential NPE on dereferencing Replicas. Thanks for addressing it.

test/tests-extension/Makefile (2)

16-18: METADATA path now anchored to repo root.

This addresses the earlier misplaced path under test/tests-extension. LGTM.


38-41: ARTIFACT_DIR defaulting logic fixed.

Runtime fallback to $(CURDIR) is clear and works cross‑shell. Good improvement.

🧹 Nitpick comments (6)
test/tests-extension/test/oas.go (4)

33-44: Broaden kubeconfig loading before falling back in-cluster.

Support default kubeconfig loading (e.g., ~/.kube/config) when KUBECONFIG is unset, then fall back to in‑cluster. Reduces surprises for local runs.

Apply this diff:

 func getKubeConfig() (*rest.Config, error) {
   // First try to use kubeconfig file
   if kubeconfig := os.Getenv("KUBECONFIG"); kubeconfig != "" {
     config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
     if err == nil {
       return config, nil
     }
   }
 
-  // Fall back to in-cluster config
-  return rest.InClusterConfig()
+  // Try default kubeconfig chain (e.g., ~/.kube/config)
+  rules := clientcmd.NewDefaultClientConfigLoadingRules()
+  defaultCfg, err := clientcmd.
+    NewNonInteractiveDeferredLoadingClientConfig(rules, &clientcmd.ConfigOverrides{}).
+    ClientConfig()
+  if err == nil {
+    return defaultCfg, nil
+  }
+
+  // Fall back to in-cluster config
+  return rest.InClusterConfig()
 }

47-47: Remove unnecessary GinkgoRecover.

Not needed in Ginkgo v2 unless starting goroutines yourself. Safe to drop.

- defer g.GinkgoRecover()

75-87: Reduce flakiness: wait for pods to be Running and containers Ready inside Eventually.

Currently we only wait for “pods exist,” then assert Running immediately. Race risk remains. Fold readiness checks into Eventually.

Apply this diff:

-  var pods *corev1.PodList
-  o.Eventually(func(gomega o.Gomega) {
-    var err error
-    pods, err = client.CoreV1().Pods(operatorNamespace).List(context.Background(), metav1.ListOptions{
-      LabelSelector: "app=openshift-apiserver",
-    })
-    gomega.Expect(err).NotTo(o.HaveOccurred())
-    gomega.Expect(len(pods.Items)).To(o.BeNumerically(">", 0))
-  }).WithTimeout(2 * time.Minute).WithPolling(10 * time.Second).Should(o.Succeed())
-
-  g.By("verifying all pods are running")
-  for _, pod := range pods.Items {
-    o.Expect(pod.Status.Phase).To(o.Equal(corev1.PodRunning))
-  }
+  o.Eventually(func(gomega o.Gomega) {
+    pods, err := client.CoreV1().Pods(operatorNamespace).List(context.Background(), metav1.ListOptions{
+      LabelSelector: "app=openshift-apiserver",
+    })
+    gomega.Expect(err).NotTo(o.HaveOccurred())
+    gomega.Expect(len(pods.Items)).To(o.BeNumerically(">", 0))
+    for _, pod := range pods.Items {
+      gomega.Expect(pod.Status.Phase).To(o.Equal(corev1.PodRunning))
+      for _, cs := range pod.Status.ContainerStatuses {
+        gomega.Expect(cs.Ready).To(o.BeTrue())
+      }
+    }
+  }).WithTimeout(2 * time.Minute).WithPolling(10 * time.Second).Should(o.Succeed())

133-135: Avoid asserting Secret type to Opaque unless guaranteed by contract.

Secret type may vary (e.g., kubernetes.io/tls). Asserting existence and expected keys is more robust.

Apply this diff:

-  o.Expect(secret.Type).To(o.Equal(corev1.SecretTypeOpaque))
+  // Optionally assert on required keys instead of type, e.g.:
+  // o.Expect(secret.Data).To(o.HaveKey("config.yaml"))
test/tests-extension/Makefile (2)

129-132: Guard jq dependency for metadata sanitation.

Fail fast with a clear message if jq is missing.

Apply this diff:

 clean-metadata: #HELP Remove 'codeLocations' from metadata JSON
 	@echo "Cleaning metadata (removing codeLocations)..."
-	@jq 'map(del(.codeLocations))' $(METADATA) > $(METADATA).tmp && mv $(METADATA).tmp $(METADATA)
+	@command -v jq >/dev/null 2>&1 || { echo "ERROR: 'jq' is required for clean-metadata"; exit 1; }
+	@jq 'map(del(.codeLocations))' $(METADATA) > $(METADATA).tmp && mv $(METADATA).tmp $(METADATA)

133-138: Add minimal “all” and “test” targets to satisfy common tooling.

Keeps checkers happy without changing workflow.

Apply this diff:

 verify-metadata: update-metadata
 	@if ! git diff --exit-code $(METADATA); then \
 		echo "ERROR: Metadata is out of date. Please run 'make build-update' and commit the result."; \
 		exit 1; \
 	fi
+
+.PHONY: all test
+all: build
+test:
+	@echo "Use: make run-suite SUITE=openshift/openshift-apiserver/all [ARTIFACT_DIR=/tmp/artifacts]"
+	@exit 2
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to Reviews -> Disable Knowledge Base setting

📥 Commits

Reviewing files that changed from the base of the PR and between 7cc0c61 and 5d4266b.

📒 Files selected for processing (2)
  • test/tests-extension/Makefile (1 hunks)
  • test/tests-extension/test/oas.go (1 hunks)
🧰 Additional context used
🪛 checkmake (0.2.2)
test/tests-extension/Makefile

[warning] 133-133: Missing required phony target "all"

(minphony)


[warning] 133-133: Missing required phony target "test"

(minphony)

@wangke19
Copy link
Contributor Author

This PR will merged into #563

@wangke19
Copy link
Contributor Author

/hold

@openshift-ci openshift-ci bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Oct 24, 2025
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Oct 24, 2025

@wangke19: 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/okd-scos-e2e-aws-ovn 5d4266b link false /test okd-scos-e2e-aws-ovn
ci/prow/e2e-tests-extension 5d4266b link true /test e2e-tests-extension
ci/prow/e2e-aws-ovn 5d4266b link true /test e2e-aws-ovn

Full PR test history. Your PR dashboard.

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

do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant