Skip to content

Conversation

@krishagarwal278
Copy link
Member

Summary

The OpenShift Console currently renders the Guided Tour feature unconditionally. This has caused flakiness in Console E2E (Cypress) tests running in CI, as the guided tour can interfere with UI interactions and timing.

To address this and to give cluster administrators explicit control, the Console API should expose a Guided Tour capability flag that allows the feature to be enabled or disabled at the cluster level.

Motivation

Reduce Console CI flakiness caused by Guided Tour overlays
Allow cluster admins to opt in/out of Guided Tours
Provide a consistent capability-based mechanism aligned with other Console features
Enable test environments to explicitly disable Guided Tours

Scope

Introduce a new GuidedTourFeature capability in the Console API
Ensure the capability is configurable and surfaced to the Console
Vendor the API changes into console-operator

@openshift-ci-robot
Copy link

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 Jan 12, 2026
@openshift-ci-robot
Copy link

openshift-ci-robot commented Jan 12, 2026

@krishagarwal278: This pull request references CONSOLE-4986 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Summary

The OpenShift Console currently renders the Guided Tour feature unconditionally. This has caused flakiness in Console E2E (Cypress) tests running in CI, as the guided tour can interfere with UI interactions and timing.

To address this and to give cluster administrators explicit control, the Console API should expose a Guided Tour capability flag that allows the feature to be enabled or disabled at the cluster level.

Motivation

Reduce Console CI flakiness caused by Guided Tour overlays
Allow cluster admins to opt in/out of Guided Tours
Provide a consistent capability-based mechanism aligned with other Console features
Enable test environments to explicitly disable Guided Tours

Scope

Introduce a new GuidedTourFeature capability in the Console API
Ensure the capability is configurable and surfaced to the Console
Vendor the API changes into console-operator

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
Copy link
Contributor

openshift-ci bot commented Jan 12, 2026

Hello @krishagarwal278! Some important instructions when contributing to openshift/api:
API design plays an important part in the user experience of OpenShift and as such API PRs are subject to a high level of scrutiny to ensure they follow our best practices. If you haven't already done so, please review the OpenShift API Conventions and ensure that your proposed changes are compliant. Following these conventions will help expedite the api review process for your PR.

@coderabbitai
Copy link

coderabbitai bot commented Jan 12, 2026

📝 Walkthrough

Walkthrough

A new console UI capability GuidedTour was added as a ConsoleCapabilityName constant and included in the Capability.Name CRD validation enum; ConsoleCustomization.Capabilities max items increased from 2 to 3. Generated OpenAPI/Swagger descriptions were updated to list GuidedTour alongside LightspeedButton and GettingStartedBanner. The Swagger docs for ConsoleCustomization were extended with new fields: customLogoFile, developerCatalog, projectAccess, quickStarts, addPage, and perspectives.

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title accurately and specifically describes the main change: adding a GuidedTour capability flag to the Console API and vendoring it into console-operator, which aligns perfectly with the changeset.
Description check ✅ Passed The PR description is directly related to the changeset, providing clear context about the motivation (reducing CI flakiness) and scope (adding GuidedTourFeature capability) that matches the code changes.

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

✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 9b4cb2e and 3f61198.

⛔ Files ignored due to path filters (2)
  • operator/v1/zz_generated.crd-manifests/0000_50_console_01_consoles.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • operator/v1/zz_generated.featuregated-crd-manifests/consoles.operator.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
📒 Files selected for processing (3)
  • openapi/generated_openapi/zz_generated.openapi.go
  • operator/v1/types_console.go
  • operator/v1/zz_generated.swagger_doc_generated.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • operator/v1/types_console.go
  • operator/v1/zz_generated.swagger_doc_generated.go
🔇 Additional comments (2)
openapi/generated_openapi/zz_generated.openapi.go (2)

49953-49959: LGTM!

The description correctly reflects the addition of the GuidedTour capability. Since this is a generated file (zz_generated), please ensure it was regenerated using the appropriate codegen tooling (e.g., make update) rather than manually edited.


51053-51059: LGTM!

The capabilities array description is updated consistently to include GuidedTour. The documentation correctly maintains the uniqueness constraint note.

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.

🔧 golangci-lint (2.5.0)

Error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented
The command is terminated due to an error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented


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

@openshift-ci openshift-ci bot added the size/S Denotes a PR that changes 10-29 lines, ignoring generated files. label Jan 12, 2026
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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
operator/v1/types_console.go (1)

287-294: Update MaxItems and comment to reflect three capabilities.

The Capabilities field has MaxItems=2 (Line 290), but there are now three available capabilities. Users won't be able to configure all three simultaneously. Additionally, the comment on Line 287 still references only LightspeedButton and GettingStartedBanner.

Consider updating:

  1. MaxItems=2MaxItems=3
  2. Comment to include GuidedTourFeature
Suggested fix
 	// capabilities defines an array of capabilities that can be interacted with in the console UI.
 	// Each capability defines a visual state that can be interacted with the console to render in the UI.
-	// Available capabilities are LightspeedButton and GettingStartedBanner.
+	// Available capabilities are LightspeedButton, GettingStartedBanner and GuidedTourFeature.
 	// Each of the available capabilities may appear only once in the list.
 	// +kubebuilder:validation:MinItems=1
-	// +kubebuilder:validation:MaxItems=2
+	// +kubebuilder:validation:MaxItems=3
 	// +listType=map
 	// +listMapKey=name
 	// +optional
 	Capabilities []Capability `json:"capabilities,omitempty"`
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 900e7e5 and 8e32173.

⛔ Files ignored due to path filters (2)
  • operator/v1/zz_generated.crd-manifests/0000_50_console_01_consoles.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • operator/v1/zz_generated.featuregated-crd-manifests/consoles.operator.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
📒 Files selected for processing (3)
  • openapi/generated_openapi/zz_generated.openapi.go
  • operator/v1/types_console.go
  • operator/v1/zz_generated.swagger_doc_generated.go
🔇 Additional comments (4)
operator/v1/types_console.go (2)

110-112: LGTM!

The new GuidedTourFeature constant follows the established pattern and naming convention used by the existing capabilities (LightspeedButton, GettingStartedBanner).


140-141: LGTM!

The documentation comment and kubebuilder validation enum are correctly updated to include GuidedTourFeature.

operator/v1/zz_generated.swagger_doc_generated.go (1)

211-215: LGTM! The swagger documentation correctly includes GuidedTourFeature in the available capabilities list, consistent with the source definition in types_console.go.

openapi/generated_openapi/zz_generated.openapi.go (1)

49953-49959: LGTM!

The description correctly includes the new GuidedTourFeature capability alongside the existing LightspeedButton and GettingStartedBanner capabilities. This aligns with the PR objective.

Since this is a generated file, please confirm it was regenerated using the project's code generation tooling (e.g., make update or equivalent) rather than manually edited.

GettingStartedBanner ConsoleCapabilityName = "GettingStartedBanner"

// guidedTourFeature is the name of the 'Guided Tour' feature in console UI.
GuidedTourFeature ConsoleCapabilityName = "GuidedTourFeature"
Copy link
Contributor

Choose a reason for hiding this comment

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

Why Feature in the name here? CC @jhadvig

Copy link
Member

@jhadvig jhadvig Jan 12, 2026

Choose a reason for hiding this comment

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

@JoelSpeed cause its not a single element but rather a walkthrough the console, in which we are highlighting UI elements. I understand what the nameig could be better but I wasnt really sure which name would be abstract enough to capture the nature of the feature, other then Feature.
That said I can imagine we keep it as simple as GuidedTour

Copy link
Contributor

Choose a reason for hiding this comment

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

Yeah I was wondering why not to keep it simple as GuidedTour, unless we think there's going to be a clash with that name being that simple in the future?

Copy link
Member

Choose a reason for hiding this comment

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

+1 for shorten it to GuidedTour
@krishagarwal278 please update the PR

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes definitely @jhadvig @JoelSpeed!

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
operator/v1/types_console.go (1)

285-294: Update the comment and MaxItems validation for the new capability.

The capabilities field has two inconsistencies with the new GuidedTour capability:

  1. Line 287: The comment still says "Available capabilities are LightspeedButton and GettingStartedBanner" but should include GuidedTour.
  2. Line 290: MaxItems=2 should be updated to MaxItems=3 since there are now three available capabilities.
Proposed fix
 	// capabilities defines an array of capabilities that can be interacted with in the console UI.
 	// Each capability defines a visual state that can be interacted with the console to render in the UI.
-	// Available capabilities are LightspeedButton and GettingStartedBanner.
+	// Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour.
 	// Each of the available capabilities may appear only once in the list.
 	// +kubebuilder:validation:MinItems=1
-	// +kubebuilder:validation:MaxItems=2
+	// +kubebuilder:validation:MaxItems=3
 	// +listType=map
 	// +listMapKey=name
 	// +optional
 	Capabilities []Capability `json:"capabilities,omitempty"`
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 8e32173 and c672286.

⛔ Files ignored due to path filters (2)
  • operator/v1/zz_generated.crd-manifests/0000_50_console_01_consoles.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • operator/v1/zz_generated.featuregated-crd-manifests/consoles.operator.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
📒 Files selected for processing (3)
  • openapi/generated_openapi/zz_generated.openapi.go
  • operator/v1/types_console.go
  • operator/v1/zz_generated.swagger_doc_generated.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • operator/v1/zz_generated.swagger_doc_generated.go
🔇 Additional comments (3)
openapi/generated_openapi/zz_generated.openapi.go (1)

49953-49959: Verified: all generated artifacts are consistent and generator-driven.

GuidedTour is correctly defined in the source enum (operator/v1/types_console.go:112) with kubebuilder validation, and appears consistently across all generated artifacts including swagger docs, CRD manifests, and OpenAPI definitions. No manual drift detected.

operator/v1/types_console.go (2)

110-112: LGTM!

The new GuidedTour constant follows the existing naming pattern and documentation style for console capabilities.


140-141: LGTM!

The Capability.Name field comment and kubebuilder validation enum are correctly updated to include the new GuidedTour capability.

Copy link
Member

@jhadvig jhadvig left a comment

Choose a reason for hiding this comment

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

We forgot this change


// capabilities defines an array of capabilities that can be interacted with in the console UI.
// Each capability defines a visual state that can be interacted with the console to render in the UI.
// Available capabilities are LightspeedButton and GettingStartedBanner.
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
// Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour.

Copy link
Member Author

Choose a reason for hiding this comment

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

yikes 😬
just added 👍🏻

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
operator/v1/types_console.go (1)

287-294: MaxItems constraint needs to be updated to 3.

With the addition of GuidedTour, there are now 3 available capabilities, but MaxItems=2 will prevent users from configuring all of them simultaneously. This validation constraint should be updated to match the number of available capabilities.

🐛 Proposed fix
 	// capabilities defines an array of capabilities that can be interacted with in the console UI.
 	// Each capability defines a visual state that can be interacted with the console to render in the UI.
 	// Available capabilities are LightspeedButton, GettingStartedBanner, and GuidedTour.
 	// Each of the available capabilities may appear only once in the list.
 	// +kubebuilder:validation:MinItems=1
-	// +kubebuilder:validation:MaxItems=2
+	// +kubebuilder:validation:MaxItems=3
 	// +listType=map
 	// +listMapKey=name
 	// +optional
 	Capabilities []Capability `json:"capabilities,omitempty"`
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between c672286 and d219d15.

📒 Files selected for processing (1)
  • operator/v1/types_console.go
🔇 Additional comments (2)
operator/v1/types_console.go (2)

110-112: LGTM!

The new GuidedTour capability constant follows the established naming pattern and comment style of the existing capability constants.


140-141: LGTM!

The kubebuilder validation enum and documentation comment are correctly updated to include GuidedTour.

@krishagarwal278
Copy link
Member Author

/retest

1 similar comment
@krishagarwal278
Copy link
Member Author

/retest

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

🤖 Fix all issues with AI agents
In @operator/v1/types_console.go:
- Around line 287-290: Update the kubebuilder validation for the capabilities
list so users can select all three capabilities; change the annotation
+kubebuilder:validation:MaxItems=2 to +kubebuilder:validation:MaxItems=3 for the
field that documents "Available capabilities are LightspeedButton,
GettingStartedBanner, and GuidedTour" (the slice definition near that comment)
so the list allows up to three items.
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between d219d15 and aabd2aa.

⛔ Files ignored due to path filters (2)
  • operator/v1/zz_generated.crd-manifests/0000_50_console_01_consoles.crd.yaml is excluded by !**/zz_generated.crd-manifests/*
  • operator/v1/zz_generated.featuregated-crd-manifests/consoles.operator.openshift.io/AAA_ungated.yaml is excluded by !**/zz_generated.featuregated-crd-manifests/**
📒 Files selected for processing (3)
  • openapi/generated_openapi/zz_generated.openapi.go
  • operator/v1/types_console.go
  • operator/v1/zz_generated.swagger_doc_generated.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • operator/v1/zz_generated.swagger_doc_generated.go
  • openapi/generated_openapi/zz_generated.openapi.go
🔇 Additional comments (2)
operator/v1/types_console.go (2)

110-112: LGTM!

The new GuidedTour constant follows the established pattern for ConsoleCapabilityName constants, with appropriate naming convention and comment documentation.


140-141: LGTM!

The kubebuilder validation enum and documentation comment are correctly updated to include GuidedTour alongside the existing capabilities.

@JoelSpeed
Copy link
Contributor

CodeRabbit has a point here, once that's fixed I think this is good to go

@JoelSpeed
Copy link
Contributor

@krishagarwal278 Please squash this down to a single commit and then I'll tag

@openshift-ci openshift-ci bot added the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Jan 13, 2026
@krishagarwal278
Copy link
Member Author

/label tide/merge-method-squash

@JoelSpeed
Copy link
Contributor

/remove-label tid/merge-method-squash

We don't support squash merges on this repo (in fact you're not supposed to use it on any openshift repo), please squash manually

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 13, 2026

@JoelSpeed: The label(s) `/remove-label tid/merge-method-squash

cannot be applied. These labels are supported:acknowledge-critical-fixes-only, platform/aws, platform/azure, platform/baremetal, platform/google, platform/libvirt, platform/openstack, ga, tide/merge-method-merge, tide/merge-method-rebase, tide/merge-method-squash, px-approved, docs-approved, qe-approved, ux-approved, no-qe, downstream-change-needed, rebase/manual, cluster-config-api-changed, run-integration-tests, approved, backport-risk-assessed, bugzilla/valid-bug, cherry-pick-approved, jira/valid-bug, ok-to-test, stability-fix-approved, staff-eng-approved. Is this label configured under labels -> additional_labelsorlabels -> restricted_labelsinplugin.yaml`?

Details

In response to this:

/remove-label tid/merge-method-squash

We don't support squash merges on this repo (in fact you're not supposed to use it on any openshift repo), please squash manually

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.

@JoelSpeed
Copy link
Contributor

/remove-label tide/merge-method-squash

@openshift-ci openshift-ci bot removed the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Jan 13, 2026
@JoelSpeed
Copy link
Contributor

/lgtm

@openshift-ci openshift-ci bot added the lgtm Indicates that a PR is ready to be merged. label Jan 13, 2026
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 13, 2026

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: JoelSpeed

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 Jan 13, 2026
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 13, 2026

@krishagarwal278: 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.

@krishagarwal278
Copy link
Member Author

QE verification:
/assign @yanpzhan

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

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. size/S Denotes a PR that changes 10-29 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants