Skip to content

CONSOLE-5426: remove GraphQL proxy endpoint#16769

Merged
openshift-merge-bot[bot] merged 3 commits into
openshift:mainfrom
logonoff:CONSOLE-5426-graphql
Jul 17, 2026
Merged

CONSOLE-5426: remove GraphQL proxy endpoint#16769
openshift-merge-bot[bot] merged 3 commits into
openshift:mainfrom
logonoff:CONSOLE-5426-graphql

Conversation

@logonoff

@logonoff logonoff commented Jul 16, 2026

Copy link
Copy Markdown
Member

Analysis / Root cause:

The graphQL proxy adds unnecessary complexity, maintenance burden, and may even be slower than regular HTTP/2.

Solution description:

  • Remove GraphQL proxy in backend
  • Replace GraphQL-based API discovery proxy with a dedicated backend endpoint

Test cases:

  • Impersonation still works
  • Loading times are the same or faster

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

Summary by CodeRabbit

  • New Features
    • Added an authenticated /api/api-discovery endpoint to streamline resource loading and API discovery.
  • Improvements
    • Switched feature detection and related permission checks from GraphQL to Kubernetes REST APIs.
    • Console startup no longer waits for GraphQL readiness; app initialization runs immediately.
    • Helm chart repository detection now relies on Kubernetes resource listing.
    • Impersonation and feature refresh now update feature flags directly.
    • Added missing English labels for SelfSubject* Kubernetes resources.
  • Maintenance
    • Removed GraphQL client/server, schema artifacts, and GraphQL build/test tooling; updated container builds accordingly.
    • Updated affected tests to match the new resource-listing behavior.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jul 16, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

@logonoff: This pull request references CONSOLE-5139 which is a valid jira issue.

Details

In response to this:

Analysis / Root cause:

The graphQL proxy adds unnecessary complexity, maintenance burden, and may even be slower than regular HTTP/2.

Solution description:

  • Remove GraphQL proxy in backend
  • Replace GraphQL-based API discovery proxy with a dedicated backend endpoint

Test cases:

  • Impersonation still works
  • Loading times are the same or faster

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

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.

@logonoff logonoff changed the title CONSOLE-5139: remove GraphQL proxy endpoint CONSOLE-5426: remove GraphQL proxy endpoint Jul 16, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

@logonoff: This pull request references CONSOLE-5426 which is a valid jira issue.

Details

In response to this:

Analysis / Root cause:

The graphQL proxy adds unnecessary complexity, maintenance burden, and may even be slower than regular HTTP/2.

Solution description:

  • Remove GraphQL proxy in backend
  • Replace GraphQL-based API discovery proxy with a dedicated backend endpoint

Test cases:

  • Impersonation still works
  • Loading times are the same or faster

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

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.

@openshift-ci
openshift-ci Bot requested review from jhadvig and rhamilto July 16, 2026 15:16
@openshift-ci openshift-ci Bot added component/backend Related to backend component/core Related to console core functionality labels Jul 16, 2026
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 15ec0833-c182-402d-bbf7-1422bec1c2d5

📥 Commits

Reviewing files that changed from the base of the PR and between 64b7429 and 2036574.

⛔ Files ignored due to path filters (62)
  • frontend/yarn.lock is excluded by !**/yarn.lock, !**/*.lock
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/graph-gophers/graphql-go/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/CHANGELOG.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/CONTRIBUTING.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/SECURITY.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/argument.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/directive.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/enum.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/extension.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/field.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/fragment.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/input.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/interface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/object.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/query.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/scalar.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/union.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/value.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/variable.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/decode/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/errors/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/errors/panic_handler.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/graphql.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/id.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/blockstring.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/directive.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/literals.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/values.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/exec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/packer/packer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/meta.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/resolvable.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/selected/selected.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/subscribe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/validate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/query/query.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/schema/meta.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/schema/schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/validation/suggestion.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/validation/validation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/introspection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/introspection/introspection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/log/log.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/nullable_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/relay/relay.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/subscriptions.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/time.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/trace/noop/trace.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/trace/tracer/tracer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/rawagner/graphql-transport-ws/graphqlws/http.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/rawagner/graphql-transport-ws/graphqlws/internal/connection/connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (37)
  • Dockerfile
  • Dockerfile.dev
  • Dockerfile.plugins.demo
  • frontend/.eslintrc.js
  • frontend/@types/console/index.d.ts
  • frontend/@types/console/window.d.ts
  • frontend/__mocks__/websocket.js
  • frontend/graphql-codegen.yml
  • frontend/package.json
  • frontend/packages/console-dynamic-plugin-sdk/package.json
  • frontend/packages/eslint-plugin-console/package.json
  • frontend/packages/helm-plugin/src/providers/__tests__/helm-detection-provider.spec.ts
  • frontend/packages/helm-plugin/src/providers/helm-detection-provider.ts
  • frontend/public/actions/features.gql
  • frontend/public/actions/features.ts
  • frontend/public/actions/flags.ts
  • frontend/public/actions/ui.ts
  • frontend/public/components/app.tsx
  • frontend/public/components/useImpersonateRefreshFeatures.ts
  • frontend/public/graphql/client.gql
  • frontend/public/graphql/client.ts
  • frontend/public/locales/en/public.json
  • frontend/public/models/index.ts
  • frontend/public/module/k8s/get-resources.ts
  • frontend/scripts/jest-transform-graphql.js
  • frontend/webpack.config.ts
  • go.mod
  • pkg/graphql/README.md
  • pkg/graphql/httphandler.go
  • pkg/graphql/resolver/k8s.go
  • pkg/graphql/resolver/root.go
  • pkg/graphql/resolver/utils.go
  • pkg/graphql/schema.graphql
  • pkg/server/api_discovery.go
  • pkg/server/api_discovery_test.go
  • pkg/server/server.go
  • test-frontend.sh
💤 Files with no reviewable changes (18)
  • frontend/public/actions/features.gql
  • frontend/packages/eslint-plugin-console/package.json
  • Dockerfile
  • frontend/graphql-codegen.yml
  • frontend/scripts/jest-transform-graphql.js
  • pkg/graphql/README.md
  • frontend/public/graphql/client.gql
  • Dockerfile.dev
  • frontend/mocks/websocket.js
  • pkg/graphql/resolver/k8s.go
  • frontend/@types/console/index.d.ts
  • pkg/graphql/resolver/root.go
  • pkg/graphql/resolver/utils.go
  • frontend/public/graphql/client.ts
  • pkg/graphql/schema.graphql
  • go.mod
  • pkg/graphql/httphandler.go
  • frontend/@types/console/window.d.ts
🚧 Files skipped from review as they are similar to previous changes (16)
  • Dockerfile.plugins.demo
  • frontend/public/models/index.ts
  • frontend/public/locales/en/public.json
  • frontend/public/actions/flags.ts
  • frontend/public/components/useImpersonateRefreshFeatures.ts
  • frontend/public/actions/ui.ts
  • frontend/.eslintrc.js
  • frontend/packages/console-dynamic-plugin-sdk/package.json
  • frontend/packages/helm-plugin/src/providers/helm-detection-provider.ts
  • frontend/webpack.config.ts
  • frontend/public/components/app.tsx
  • frontend/public/actions/features.ts
  • pkg/server/api_discovery_test.go
  • pkg/server/api_discovery.go
  • frontend/package.json
  • pkg/server/server.go

Walkthrough

The change removes GraphQL server and frontend integrations, adds authenticated Kubernetes API discovery, migrates feature and resource detection to REST APIs, updates Helm repository detection, and adjusts frontend build tooling and container images.

Changes

Kubernetes REST migration

Layer / File(s) Summary
API discovery endpoint and server wiring
pkg/server/api_discovery.go, pkg/server/api_discovery_test.go, pkg/server/server.go
Adds authenticated /api/api-discovery, forwards impersonation headers, aggregates Kubernetes resource lists concurrently, handles partial failures, and removes GraphQL route registration.
Frontend REST detection and discovery
frontend/public/actions/*, frontend/public/module/k8s/get-resources.ts, frontend/public/components/*, frontend/public/models/index.ts, frontend/public/locales/en/public.json
Replaces GraphQL feature checks and discovery requests with REST calls, adds self-subject review models, and starts application rendering without GraphQL readiness.
Helm repository REST access
frontend/packages/helm-plugin/src/providers/*
Uses k8sListResource for Helm repository detection and updates tests for resource results, errors, and polling.
GraphQL tooling and runtime cleanup
frontend/package.json, frontend/webpack.config.ts, frontend/.eslintrc.js, Dockerfile*, go.mod, frontend/@types/*, test-frontend.sh
Removes GraphQL tooling, dependencies, schema packaging, and type references while updating build commands and SDK task sequencing.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Frontend
  participant ConsoleServer
  participant KubernetesAPI
  Frontend->>ConsoleServer: GET /api/api-discovery
  ConsoleServer->>KubernetesAPI: Fetch API groups and resource lists
  KubernetesAPI-->>ConsoleServer: Discovery data
  ConsoleServer-->>Frontend: Combined resource discovery response
Loading

Suggested reviewers: jhadvig, rhamilto, vojtechszocs

🚥 Pre-merge checks | ✅ 14 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 9.09% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (14 passed)
Check name Status Explanation
Title check ✅ Passed The title matches the main change: removing the GraphQL proxy endpoint.
Description check ✅ Passed The description covers root cause, solution, test cases, and browser conformance, though screenshots, test setup, additional info, and reviewers are missing.
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 The changed tests use static, hardcoded names only; no Ginkgo-style titles include dynamic values or run-time data.
Test Structure And Quality ✅ Passed PR changes only standard Go tests; no Ginkgo specs or Eventually/Consistently waits are present, so the check is not applicable.
Microshift Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the touched tests are plain Go/Jest unit tests, so the MicroShift API restrictions do not apply.
Single Node Openshift (Sno) Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the changed tests are unit tests in pkg/server/api_discovery_test.go and contain no SNO/topology assumptions.
Topology-Aware Scheduling Compatibility ✅ Passed Only backend proxy/route code changed; no manifests, replicas, affinity, nodeSelectors, or topology-aware scheduling logic were added.
Ote Binary Stdout Contract ✅ Passed No touched main/init/TestMain/suite setup code writes to stdout; only request-time logging and handlers changed.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed No new Ginkgo e2e tests were added; the only new tests are local httptest unit tests with no IPv4 assumptions or external connectivity.
No-Weak-Crypto ✅ Passed No weak-crypto algorithms or timing-unsafe secret compares appear in touched files; only SHA-256 prefix handling is present.
Container-Privileges ✅ Passed No changed K8s manifests add privileged settings; touched Dockerfiles keep final USER 1001 and contain no privileged/hostNetwork/allowPrivilegeEscalation flags.
No-Sensitive-Data-In-Logs ✅ Passed No new logs expose secrets/PII; the new API-discovery logging only reports internal paths/statuses and redacts hostnames.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 Trivy (0.72.0)

Trivy execution failed: 2026-07-17T13:15:12Z FATAL Fatal error run error: fs scan error: scan error: scan failed: failed analysis: post analysis error: post analysis error: cloudformation scan error: fs filter error: fs filter error: walk error range error: stat .golangci.yml: no such file or directory: range error: stat .golangci.yml: no such file or directory


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

@openshift-ci openshift-ci Bot added component/helm Related to helm-plugin component/sdk Related to console-plugin-sdk labels Jul 16, 2026
@logonoff
logonoff force-pushed the CONSOLE-5426-graphql branch from 1dda7cb to f3cc85c Compare July 16, 2026 15:16
@openshift-ci openshift-ci Bot added the kind/i18n Indicates issue or PR relates to internationalization or has content that needs to be translated label Jul 16, 2026
@logonoff

Copy link
Copy Markdown
Member Author

/label px-approved
/label docs-approved

@openshift-ci openshift-ci Bot added px-approved Signifies that Product Support has signed off on this PR docs-approved Signifies that Docs has signed off on this PR labels Jul 16, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 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 `@pkg/server/api_discovery.go`:
- Around line 133-142: Update the header-forwarding logic in the discovery
request handler to parse X-Console-Impersonate-Groups using the existing proxy
semantics, convert its comma-separated values into Impersonate-Group headers,
and include system:authenticated as required. Adjust the related test to provide
the browser-visible header instead of repeated Impersonate-Group headers.
- Line 57: Update k8sFetch and its request flow to accept and propagate
context.Context from the caller, deriving an overall timeout context that covers
connection, response-header, and response-body waits. Create the HTTP request
with that context instead of a detached request, ensure the context is canceled,
and pass it through all discovery goroutines so browser disconnects and timeout
expiry allow wg.Wait() to complete.
- Around line 107-117: Initialize resourceLists as an empty non-nil slice before
filtering results in the discovery response construction, so all failed fetches
serialize as [] rather than null. Update the relevant API discovery handler and
add a regression test covering the case where every resource-list request fails,
asserting the response contains an empty resourceLists array.
- Around line 45-55: Update the transport construction in the API discovery
setup to honor proxy.Config.UseProxyFromEnvironment: use
http.ProxyFromEnvironment only when the setting is enabled, and disable proxy
selection otherwise. Preserve the existing TLS, dialing, timeout, and HTTP/2
configuration.

In `@pkg/server/server.go`:
- Line 361: Update the discovery request flow in api_discovery.go to create
outbound requests with http.NewRequestWithContext using the incoming request
context, preserving cancellation when the caller disconnects. Configure the HTTP
client used by k8sFetch with a bounded Timeout so stalled discovery requests
cannot run indefinitely.
🪄 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: 0becf735-ca61-44a5-8468-911c32f14171

📥 Commits

Reviewing files that changed from the base of the PR and between 41d3938 and f3cc85c.

⛔ Files ignored due to path filters (62)
  • frontend/yarn.lock is excluded by !**/yarn.lock, !**/*.lock
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/graph-gophers/graphql-go/.gitignore is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/.golangci.yml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/CHANGELOG.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/CODE_OF_CONDUCT.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/CONTRIBUTING.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/LICENSE is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/README.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/SECURITY.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/argument.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/directive.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/doc.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/enum.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/extension.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/field.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/fragment.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/input.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/interface.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/object.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/query.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/scalar.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/union.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/value.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/ast/variable.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/decode/decode.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/errors/errors.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/errors/panic_handler.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/graphql.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/id.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/blockstring.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/directive.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/lexer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/literals.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/common/values.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/exec.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/packer/packer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/meta.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/resolvable/resolvable.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/selected/selected.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/subscribe.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/exec/validate.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/query/query.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/schema/meta.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/schema/schema.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/validation/suggestion.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/internal/validation/validation.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/introspection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/introspection/introspection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/log/log.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/nullable_types.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/relay/relay.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/subscriptions.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/time.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/trace/noop/trace.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/graph-gophers/graphql-go/trace/tracer/tracer.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/rawagner/graphql-transport-ws/graphqlws/http.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/rawagner/graphql-transport-ws/graphqlws/internal/connection/connection.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (36)
  • Dockerfile
  • Dockerfile.dev
  • Dockerfile.plugins.demo
  • frontend/.eslintrc.js
  • frontend/@types/console/index.d.ts
  • frontend/@types/console/window.d.ts
  • frontend/graphql-codegen.yml
  • frontend/package.json
  • frontend/packages/console-dynamic-plugin-sdk/package.json
  • frontend/packages/eslint-plugin-console/package.json
  • frontend/packages/helm-plugin/src/providers/__tests__/helm-detection-provider.spec.ts
  • frontend/packages/helm-plugin/src/providers/helm-detection-provider.ts
  • frontend/public/actions/features.gql
  • frontend/public/actions/features.ts
  • frontend/public/actions/flags.ts
  • frontend/public/actions/ui.ts
  • frontend/public/components/app.tsx
  • frontend/public/components/useImpersonateRefreshFeatures.ts
  • frontend/public/graphql/client.gql
  • frontend/public/graphql/client.ts
  • frontend/public/locales/en/public.json
  • frontend/public/models/index.ts
  • frontend/public/module/k8s/get-resources.ts
  • frontend/scripts/jest-transform-graphql.js
  • frontend/webpack.config.ts
  • go.mod
  • pkg/graphql/README.md
  • pkg/graphql/httphandler.go
  • pkg/graphql/resolver/k8s.go
  • pkg/graphql/resolver/root.go
  • pkg/graphql/resolver/utils.go
  • pkg/graphql/schema.graphql
  • pkg/server/api_discovery.go
  • pkg/server/api_discovery_test.go
  • pkg/server/server.go
  • test-frontend.sh
💤 Files with no reviewable changes (17)
  • frontend/public/actions/features.gql
  • frontend/graphql-codegen.yml
  • frontend/public/graphql/client.gql
  • frontend/@types/console/index.d.ts
  • pkg/graphql/README.md
  • pkg/graphql/resolver/utils.go
  • frontend/@types/console/window.d.ts
  • pkg/graphql/schema.graphql
  • Dockerfile
  • frontend/scripts/jest-transform-graphql.js
  • frontend/packages/eslint-plugin-console/package.json
  • pkg/graphql/resolver/root.go
  • Dockerfile.dev
  • frontend/public/graphql/client.ts
  • pkg/graphql/httphandler.go
  • go.mod
  • pkg/graphql/resolver/k8s.go

Comment thread pkg/server/api_discovery.go Outdated
Comment thread pkg/server/api_discovery.go Outdated
Comment thread pkg/server/api_discovery.go Outdated
Comment thread pkg/server/api_discovery.go Outdated
Comment thread pkg/server/server.go Outdated
@logonoff
logonoff force-pushed the CONSOLE-5426-graphql branch from f3cc85c to 3aacef0 Compare July 16, 2026 15:37
@logonoff

logonoff commented Jul 16, 2026

Copy link
Copy Markdown
Member Author

Performance Benchmark: GraphQL Removal

Automated benchmark comparing before (GraphQL/WebSocket, main) vs after (direct k8s API calls, this PR).

Methodology: 60 page loads via Playwright CDP — 5 iterations × 3 CPU throttle rates × 2 cache modes. Metrics collected: Navigation Timing API, CDP Performance.getMetrics deltas, and crp-blame LoadingBox measures. Medians reported to reduce noise.

Loaded http://localhost:9000, no HTTP/2 nor SSL.

CPU 1x (no throttle) — Cold Cache

Metric Before After Change
First Contentful Paint 244 ms 244 ms 0.0%
DOM Content Loaded 195 ms 194 ms -0.5%
Script Duration (CDP) 496 ms 452 ms -8.9%
Task Duration (CDP) 1,002 ms 964 ms -3.8%

CPU 4x — Cold Cache

Metric Before After Change
First Contentful Paint 620 ms 640 ms +3.2%
DOM Content Loaded 546 ms 549 ms +0.5%
Network Idle 4,334 ms 4,138 ms -4.5%
Init Blame (render gate) 63 ms eliminated
Script Duration (CDP) 1,796 ms 1,598 ms -11.0%
Task Duration (CDP) 3,776 ms 3,570 ms -5.5%

CPU 8x — Cold Cache

Metric Before After Change
First Contentful Paint 1,424 ms 1,176 ms -17.4%
DOM Content Loaded 1,293 ms 1,030 ms -20.3%
Load Event 1,294 ms 1,030 ms -20.4%
Network Idle 9,057 ms 8,017 ms -11.5%
Init Blame (render gate) 126 ms eliminated
Script Duration (CDP) 3,173 ms 2,688 ms -15.3%
Task Duration (CDP) 8,671 ms 6,992 ms -19.4%

CPU 8x — Warm Cache

Metric Before After Change
First Contentful Paint 748 ms 232 ms -69.0%
DOM Interactive 473 ms 198 ms -58.1%
DOM Content Loaded 1,027 ms 788 ms -23.3%
Load Event 1,027 ms 789 ms -23.2%

Summary

The GraphQL removal is a net performance improvement that scales with CPU constraint:

  • 1x CPU: Negligible navigation timing change, but measurable Script Duration reduction (−8.9%) from removing Apollo/WebSocket overhead
  • 4x CPU: Script Duration −11%, Task Duration −5.5%, render-blocking Init gate (63ms) eliminated
  • 8x CPU: FCP −17%, DOM Content Loaded −20%, Task Duration −19%. With warm cache, FCP improves 69% (748→232ms)
  • LoadingBox:Init is gone entirely — the render-blocking graphQLReady.onReady() WebSocket gate no longer exists. The app renders immediately instead of waiting for WebSocket connection (or 5 failures to trigger HTTP fallback)

Note

Benchmark ran in headless Chromium via Playwright CDP with Emulation.setCPUThrottlingRate. Higher throttle rates amplify the improvement because the WebSocket connection/retry delay becomes proportionally more expensive when the CPU is constrained.


Automated performance benchmark by Claude Code

@logonoff
logonoff force-pushed the CONSOLE-5426-graphql branch from 3aacef0 to 560743f Compare July 16, 2026 16:12
@logonoff

Copy link
Copy Markdown
Member Author

/label acknowledge-critical-fixes-only

@openshift-ci openshift-ci Bot added the acknowledge-critical-fixes-only Indicates if the issuer of the label is OK with the policy. label Jul 16, 2026
@logonoff

logonoff commented Jul 16, 2026

Copy link
Copy Markdown
Member Author

QA Verification Evidence

Details
Branch CONSOLE-5426-graphql
Baseline main @ 41d3938c6a
Candidate CONSOLE-5426-graphql @ 64b74291ed
Verified 2026-07-16
Browser Playwright 1.61.1 / Chrome for Testing 149.0.7827.55 (playwright chromium v1228)
OS Darwin 25.5.0
Jira CONSOLE-5426

Verification Steps

# Route Action Status
1 /dashboards Navigate, wait for load pass
2 /k8s/cluster/projects Navigate, wait for load pass
3 /k8s/ns/default/pods Navigate, wait for load pass
4 /k8s/ns/default/deployments Navigate, wait for load pass
5 /catalog/ns/default Navigate, wait for load pass
6 /k8s/cluster/config.openshift.iov1ClusterVersion Navigate, wait for load pass
7 /dashboards Check network requests pass
8 /dashboards Hard refresh pass
9 User menu Impersonate user dialog pass
10 /k8s/cluster/projects Impersonate active with RBAC pass
Animated overview (click to expand)
Baseline Candidate
Step 1: Dashboard overview - app startup (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 2: Projects list - detectCanCreateProject (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 3: Pods list - API discovery (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 4: Deployments list - resource discovery (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 5: Developer catalog - Helm detection (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 6: ClusterVersion - detectClusterVersion (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 7: API discovery endpoint check (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 8: Caching behavior (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 9: Impersonation dialog (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)
Step 10: Impersonation with RBAC applied (pass)
Baseline (main) Candidate (CONSOLE-5426-graphql)

Warning

This verification was performed by an AI agent. Results may contain false positives or miss
regressions that require human judgment. Always review the screenshots manually before approving.

Automated QA verification by Claude Code

@logonoff

Copy link
Copy Markdown
Member Author

/verified by claude
/pipeline required

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-gcp-console
/test e2e-playwright

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Jul 16, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@logonoff: This PR has been marked as verified by claude.

Details

In response to this:

/verified by claude
/pipeline required

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.

@TheRealJon TheRealJon left a comment

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.

Just one comment

Comment thread pkg/server/api_discovery.go Outdated
}
}

func k8sFetch(ctx context.Context, client *http.Client, endpoint *url.URL, path string, originalReq *http.Request) ([]byte, error) {

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.

I think we need to review the necessity of this function. We should be able to reuse an existing k8s client from somewhere instead of writing a new fetch function.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Fair point.. claude found a k8s proxy that could be reused after questioning it a bit more

@openshift-ci-robot openshift-ci-robot removed the verified Signifies that the PR passed pre-merge verification criteria label Jul 16, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

@logonoff: This pull request references CONSOLE-5426 which is a valid jira issue.

Details

In response to this:

Analysis / Root cause:

The graphQL proxy adds unnecessary complexity, maintenance burden, and may even be slower than regular HTTP/2.

Solution description:

  • Remove GraphQL proxy in backend
  • Replace GraphQL-based API discovery proxy with a dedicated backend endpoint

Test cases:

  • Impersonation still works
  • Loading times are the same or faster

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

Summary by CodeRabbit

  • New Features

  • Added an authenticated /api/api-discovery endpoint to streamline resource loading and API discovery.

  • Improvements

  • Switched feature detection and related checks from GraphQL to Kubernetes REST APIs.

  • Console startup no longer waits for GraphQL readiness.

  • Helm chart repository detection now relies on Kubernetes resources.

  • Impersonation and feature refresh now refresh feature flags directly.

  • Added English UI labels for SelfSubject* resources.

  • Maintenance

  • Removed GraphQL client/codegen tooling and related build/test configuration.

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.

@logonoff

Copy link
Copy Markdown
Member Author

/verified by claude
/pipeline required
/test backend

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-gcp-console
/test e2e-playwright

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Jul 16, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@logonoff: This PR has been marked as verified by claude.

Details

In response to this:

/verified by claude
/pipeline required
/test backend

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.

logonoff and others added 3 commits July 17, 2026 09:14
After the GraphQL removal, API discovery moved from a single
server-side fan-out to ~150 individual browser requests. This
adds a /api/api-discovery endpoint that performs the fan-out
on the bridge server and returns all API group resource lists
in a single gzip-compressed response, reducing browser round-trips.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Route API discovery requests through the existing k8s reverse proxy
instead of constructing a separate http.Client with duplicated TLS,
transport, and impersonation logic. This eliminates ~50 lines of
hand-rolled infrastructure and inherits the proxy's header handling
(X-Console-Impersonate-Groups splitting, system:authenticated injection,
header blacklist) automatically.

Also fixes: null resourceLists serialization when all fetches fail,
and redacts internal hostnames from error messages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@logonoff
logonoff force-pushed the CONSOLE-5426-graphql branch from 64b7429 to 2036574 Compare July 17, 2026 13:14
@openshift-ci-robot openshift-ci-robot removed the verified Signifies that the PR passed pre-merge verification criteria label Jul 17, 2026
@logonoff

Copy link
Copy Markdown
Member Author

removed an extra unused dev dependency

/verified by claude
/pipeline required

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-gcp-console
/test e2e-playwright

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Jul 17, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@logonoff: This PR has been marked as verified by claude.

Details

In response to this:

removed an extra unused dev dependency

/verified by claude
/pipeline required

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.

@openshift-ci-robot

openshift-ci-robot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

@logonoff: This pull request references CONSOLE-5426 which is a valid jira issue.

Details

In response to this:

Analysis / Root cause:

The graphQL proxy adds unnecessary complexity, maintenance burden, and may even be slower than regular HTTP/2.

Solution description:

  • Remove GraphQL proxy in backend
  • Replace GraphQL-based API discovery proxy with a dedicated backend endpoint

Test cases:

  • Impersonation still works
  • Loading times are the same or faster

Browser conformance:

  • Chrome
  • Firefox
  • Safari (or Epiphany on Linux)

Summary by CodeRabbit

  • New Features
  • Added an authenticated /api/api-discovery endpoint to streamline resource loading and API discovery.
  • Improvements
  • Switched feature detection and related permission checks from GraphQL to Kubernetes REST APIs.
  • Console startup no longer waits for GraphQL readiness; app initialization runs immediately.
  • Helm chart repository detection now relies on Kubernetes resource listing.
  • Impersonation and feature refresh now update feature flags directly.
  • Added missing English labels for SelfSubject* Kubernetes resources.
  • Maintenance
  • Removed GraphQL client/server, schema artifacts, and GraphQL build/test tooling; updated container builds accordingly.
  • Updated affected tests to match the new resource-listing behavior.

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.

@TheRealJon TheRealJon left a comment

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.

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Jul 17, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Tests from second stage were triggered manually. Pipeline can be controlled only manually, until HEAD changes. Use command to trigger second stage.

@openshift-ci

openshift-ci Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: logonoff, TheRealJon

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

The pull request process is described 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

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jul 17, 2026
@logonoff

Copy link
Copy Markdown
Member Author

/retest

@openshift-ci

openshift-ci Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

@logonoff: all tests passed!

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.

@openshift-merge-bot
openshift-merge-bot Bot merged commit c11de39 into openshift:main Jul 17, 2026
11 checks passed
@logonoff
logonoff deleted the CONSOLE-5426-graphql branch July 17, 2026 17:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

acknowledge-critical-fixes-only Indicates if the issuer of the label is OK with the policy. approved Indicates a PR has been approved by an approver from all required OWNERS files. component/backend Related to backend component/core Related to console core functionality component/helm Related to helm-plugin component/sdk Related to console-plugin-sdk docs-approved Signifies that Docs has signed off on this PR jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. kind/i18n Indicates issue or PR relates to internationalization or has content that needs to be translated lgtm Indicates that a PR is ready to be merged. px-approved Signifies that Product Support has signed off on this PR verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants