CNTRLPLANE-3548: Add v2 e2e test framework documentation#8641
Conversation
|
Pipeline controller notification For optional jobs, comment This repository is configured in: LGTM mode |
|
@bryan-cox: This pull request explicitly references no jira issue. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
Skipping CI for Draft Pull Request. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a new V2 E2E testing documentation section and mkdocs navigation: an index/overview, a writing-tests guide, CI pipeline and step-registry documentation, a debugging guide for CI failures, and a migration guide from V1 to V2. Pages document v2 binaries (create-guests, run-tests, dump-guests, destroy-guests), step execution order, TestContext usage and labeling, CI job/platform wiring, local run instructions, and CI regeneration steps. Suggested reviewers
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error)
✅ Passed checks (10 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: bryan-cox The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/content/how-to/ci/v2-testing/index.md (1)
1-100:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRun docs spell-check before merge.
Please run
make verify-codespellfor these markdown additions and fix any flagged typos before landing.As per coding guidelines,
**/*.md: For markdown files, usemake verify-codespellto catch spelling errors.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/content/how-to/ci/v2-testing/index.md` around lines 1 - 100, Run the repository spell-check target and fix any markdown typos flagged in this new documentation: run make verify-codespell (or the project’s verify-codespell target) and correct all issues reported for docs/content/how-to/ci/v2-testing/index.md (and any other **/*.md files flagged), then re-run the check until it passes and commit the corrected file(s); ensure the final commit contains the typo fixes referenced by the spell-checker.
🤖 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 `@docs/content/how-to/ci/v2-testing/ci-pipeline.md`:
- Around line 218-223: The PlatformConfig interface in the docs is incorrect:
update the example to match the real v2 lifecycle contract by using the correct
method signatures and types; replace the current methods ClusterSpecs(),
TestMatrix(), and PostCreate(ctx context.Context, cluster ClusterSpec) error
with the actual v2 signatures (use the real parameter and return types used in
the implementation—e.g., correct context usage, cluster parameter type/name, and
return values for PostCreate) and ensure referenced types ClusterSpec and
TestGroup align with their true definitions so readers implement the correct
shape for PlatformConfig.
In `@docs/content/how-to/ci/v2-testing/debugging.md`:
- Around line 30-33: The three fenced code blocks that contain console/test
output (e.g., the blocks showing "Running public tests against
public-a1b2c3d4e5..." / "[RUNNING] Control Plane Workloads..." / "[SKIP]
informing test failure...") are missing language identifiers and trigger MD040;
update each triple-backtick fence to include a language tag such as ```text for
those output blocks, and repeat the same fix for the other occurrences noted
(around the other snippets at 43-45 and 102-104); after updating the fences, run
the markdown checks and make verify-codespell as per the repo guidelines to
ensure linting and spelling pass.
In `@docs/content/how-to/ci/v2-testing/index.md`:
- Around line 80-88: The fenced directory-structure block in docs content lacks
a language hint; update the code fence that surrounds the tree (the block
starting with ``` and ending with ```) to include a language identifier (e.g.,
change ``` to ```text) so the markdown linter MD040 is satisfied and the snippet
is treated as plain text.
In `@docs/content/how-to/ci/v2-testing/migration.md`:
- Around line 26-30: Replace the legacy call to framework.NewTestContext(ctx,
cancel) with the v2 TestContext initialization pattern: construct and assign the
v2 TestContext (type TestContext) using the v2 constructor/initializer defined
in the v2 test contract and update the ValidateHostedCluster invocation to call
the v2-compatible API (pass the v2 TestContext or call the v2 helper) instead of
framework.ValidateHostedCluster; ensure the local variable testCtx is the v2
TestContext instance and matches the signatures used throughout the v2 tests
(e.g., the constructors and methods declared in the v2 TestContext type).
- Around line 132-139: The example register function is outdated; update the
documented signature to match current v2 suites by changing the zero-arg example
to accept the shared context getter (e.g. use RegisterMyFeatureTests(getTestCtx
internal.TestContextGetter)) and mention wiring shared context via the provided
getTestCtx inside the Describe block; reference the symbol TestContextGetter and
the RegisterMyFeatureTests function so readers adopt the correct pattern.
- Line 130: Replace invalid Go build constraint occurrences of the literal
string "//go:build e2ev2,backuprestore" with a proper boolean expression, e.g.
"//go:build e2ev2 && backuprestore" (or use "||" if an OR is intended); update
every instance (the ones noted in the docs and the similar occurrence in
writing-tests) so the build tag becomes a valid boolean expression.
---
Outside diff comments:
In `@docs/content/how-to/ci/v2-testing/index.md`:
- Around line 1-100: Run the repository spell-check target and fix any markdown
typos flagged in this new documentation: run make verify-codespell (or the
project’s verify-codespell target) and correct all issues reported for
docs/content/how-to/ci/v2-testing/index.md (and any other **/*.md files
flagged), then re-run the check until it passes and commit the corrected
file(s); ensure the final commit contains the typo fixes referenced by the
spell-checker.
🪄 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 YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 8fc89443-c94e-4d95-8fef-385828726770
📒 Files selected for processing (6)
docs/content/how-to/ci/v2-testing/ci-pipeline.mddocs/content/how-to/ci/v2-testing/debugging.mddocs/content/how-to/ci/v2-testing/index.mddocs/content/how-to/ci/v2-testing/migration.mddocs/content/how-to/ci/v2-testing/writing-tests.mddocs/mkdocs.yml
|
/retest |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 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 `@docs/content/how-to/ci/v2-testing/writing-tests.md`:
- Around line 278-284: Guard against a nil Replicas pointer before dereferencing
in the BeforeEach block: in the BeforeEach that calls getNodePool(), check
nodePool.Spec.Replicas for nil and only dereference it if non-nil (e.g., set
originalReplicas = *nodePool.Spec.Replicas), otherwise assign a safe default
(e.g., 0) so the test example using getNodePool, nodePool and originalReplicas
does not panic.
🪄 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 YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 5b6c8e55-c8de-44ad-a3e5-bfe8746180bc
⛔ Files ignored due to path filters (1)
docs/content/reference/aggregated-docs.mdis excluded by!docs/content/reference/aggregated-docs.md
📒 Files selected for processing (6)
docs/content/how-to/ci/v2-testing/ci-pipeline.mddocs/content/how-to/ci/v2-testing/debugging.mddocs/content/how-to/ci/v2-testing/index.mddocs/content/how-to/ci/v2-testing/migration.mddocs/content/how-to/ci/v2-testing/writing-tests.mddocs/mkdocs.yml
✅ Files skipped from review due to trivial changes (3)
- docs/mkdocs.yml
- docs/content/how-to/ci/v2-testing/ci-pipeline.md
- docs/content/how-to/ci/v2-testing/migration.md
🚧 Files skipped from review as they are similar to previous changes (1)
- docs/content/how-to/ci/v2-testing/debugging.md
There was a problem hiding this comment.
♻️ Duplicate comments (1)
docs/content/how-to/ci/v2-testing/writing-tests.md (1)
280-284:⚠️ Potential issue | 🟠 Major | ⚡ Quick winAdd a nil guard before dereferencing
nodePool.Spec.Replicas.The example still does
originalReplicas = *nodePool.Spec.Replicasdirectly. IfReplicasis nil, this panics and propagates a crash-prone pattern in docs.Proposed fix
var _ = Describe("NodePool Lifecycle", Label("lifecycle", "nodepool-lifecycle"), func() { var originalReplicas int32 BeforeEach(func() { // Capture original state nodePool := getNodePool() + if nodePool.Spec.Replicas == nil { + Skip("nodepool replicas is nil") + } originalReplicas = *nodePool.Spec.Replicas })🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/content/how-to/ci/v2-testing/writing-tests.md` around lines 280 - 284, The test's BeforeEach currently dereferences nodePool.Spec.Replicas without a nil check which can panic; update the BeforeEach that calls getNodePool() to guard before dereferencing: verify nodePool and nodePool.Spec and nodePool.Spec.Replicas are non-nil, and only then set originalReplicas = *nodePool.Spec.Replicas, otherwise set originalReplicas to a safe default (e.g., 0) or handle the nil case explicitly so no dereference occurs.
🤖 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.
Duplicate comments:
In `@docs/content/how-to/ci/v2-testing/writing-tests.md`:
- Around line 280-284: The test's BeforeEach currently dereferences
nodePool.Spec.Replicas without a nil check which can panic; update the
BeforeEach that calls getNodePool() to guard before dereferencing: verify
nodePool and nodePool.Spec and nodePool.Spec.Replicas are non-nil, and only then
set originalReplicas = *nodePool.Spec.Replicas, otherwise set originalReplicas
to a safe default (e.g., 0) or handle the nil case explicitly so no dereference
occurs.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 627e7890-a2e2-408e-841b-5da25ce6cc7c
⛔ Files ignored due to path filters (1)
docs/content/reference/aggregated-docs.mdis excluded by!docs/content/reference/aggregated-docs.md
📒 Files selected for processing (6)
docs/content/how-to/ci/v2-testing/ci-pipeline.mddocs/content/how-to/ci/v2-testing/debugging.mddocs/content/how-to/ci/v2-testing/index.mddocs/content/how-to/ci/v2-testing/migration.mddocs/content/how-to/ci/v2-testing/writing-tests.mddocs/mkdocs.yml
✅ Files skipped from review due to trivial changes (4)
- docs/content/how-to/ci/v2-testing/debugging.md
- docs/content/how-to/ci/v2-testing/migration.md
- docs/mkdocs.yml
- docs/content/how-to/ci/v2-testing/ci-pipeline.md
There was a problem hiding this comment.
♻️ Duplicate comments (1)
docs/content/how-to/ci/v2-testing/writing-tests.md (1)
280-284:⚠️ Potential issue | 🟠 Major | ⚡ Quick winGuard
nodePool.Spec.Replicasbefore dereferencing in the lifecycle example.This sample still dereferences
*nodePool.Spec.Replicaswithout a nil guard, which can panic when copied into tests.Proposed fix
BeforeEach(func() { // Capture original state nodePool := getNodePool() + if nodePool.Spec.Replicas == nil { + Skip("nodepool replicas is nil") + } originalReplicas = *nodePool.Spec.Replicas })🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/content/how-to/ci/v2-testing/writing-tests.md` around lines 280 - 284, The BeforeEach block dereferences nodePool.Spec.Replicas without a nil check which can panic; update the BeforeEach that calls getNodePool() so it guards nodePool.Spec.Replicas before dereferencing: check if nodePool.Spec != nil and nodePool.Spec.Replicas != nil, and if so set originalReplicas = *nodePool.Spec.Replicas, otherwise set originalReplicas to a safe default (e.g., 0) or handle the nil case appropriately to avoid a panic.
🤖 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.
Duplicate comments:
In `@docs/content/how-to/ci/v2-testing/writing-tests.md`:
- Around line 280-284: The BeforeEach block dereferences nodePool.Spec.Replicas
without a nil check which can panic; update the BeforeEach that calls
getNodePool() so it guards nodePool.Spec.Replicas before dereferencing: check if
nodePool.Spec != nil and nodePool.Spec.Replicas != nil, and if so set
originalReplicas = *nodePool.Spec.Replicas, otherwise set originalReplicas to a
safe default (e.g., 0) or handle the nil case appropriately to avoid a panic.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 351a2bd3-f1eb-48b9-abf5-b86e452e1782
⛔ Files ignored due to path filters (1)
docs/content/reference/aggregated-docs.mdis excluded by!docs/content/reference/aggregated-docs.md
📒 Files selected for processing (6)
docs/content/how-to/ci/v2-testing/ci-pipeline.mddocs/content/how-to/ci/v2-testing/debugging.mddocs/content/how-to/ci/v2-testing/index.mddocs/content/how-to/ci/v2-testing/migration.mddocs/content/how-to/ci/v2-testing/writing-tests.mddocs/mkdocs.yml
✅ Files skipped from review due to trivial changes (4)
- docs/mkdocs.yml
- docs/content/how-to/ci/v2-testing/debugging.md
- docs/content/how-to/ci/v2-testing/migration.md
- docs/content/how-to/ci/v2-testing/ci-pipeline.md
cblecker
left a comment
There was a problem hiding this comment.
Good set of docs — the architecture overview, the label taxonomy, and the migration guide are all things that would have saved me time when ramping up on the framework. A few things to address before this lands:
Broken links (will silently fail in MkDocs):
writing-tests.md#labelsin ci-pipeline.md → should be#labels-two-layer-model#add-registertests-export-functionin migration.md → anchors only work on headings, not list items; the existingcanonical-test-patternlink already covers this
Factual errors:
- PR #8527 reference says "AWS" but it's the Azure self-managed implementation
- The
NewPlatformConfigdiff shows a "before" state that doesn't match the actual code (the""case is already there)
Code example issue:
- The lifecycle
BeforeEachdereferences*nodePool.Spec.Replicaswithout a nil check — since this is a copy-paste teaching example, it should model the safe pattern (Convention #11)
A few smaller things inline — missing table entries for HostedClusterConfigured and GetHostedClusterRESTConfig(), a note on --ginkgo.focus for local debugging, and a suggestion to link the duplicated convention examples back to AGENTS.md rather than maintaining them in two places.
| BeforeEach(func() { | ||
| // Capture original state | ||
| nodePool := getNodePool() | ||
| originalReplicas = *nodePool.Spec.Replicas |
There was a problem hiding this comment.
nodePool.Spec.Replicas is *int32 and can be nil — dereferencing it here without a nil check will panic if the field isn't set. Since this is a teaching example that contributors will copy, it should model the correct pattern. AGENTS.md Convention #11 applies even in documentation.
BeforeEach(func() {
nodePool := getNodePool()
Expect(nodePool.Spec.Replicas).NotTo(BeNil(),
"nodePool %s/%s should have replicas set", nodePool.Namespace, nodePool.Name)
originalReplicas = *nodePool.Spec.Replicas
})There was a problem hiding this comment.
Done. Added Expect(nodePool.Spec.Replicas).NotTo(BeNil()) guard before dereference — teaching examples should model Convention #11.
AI-assisted response via Claude Code
|
|
||
| Regenerate CI config with `make jobs WHAT=openshift/hypershift` from the release repo root. | ||
|
|
||
| For a complete example, see the AWS v2 implementation in [openshift/hypershift#8527](https://github.com/openshift/hypershift/pull/8527). |
There was a problem hiding this comment.
PR #8527 is the Azure self-managed lifecycle test port, not an AWS implementation. Should be "the Azure self-managed v2 implementation".
There was a problem hiding this comment.
Done. Fixed to "Azure self-managed v2 implementation".
AI-assisted response via Claude Code
|
|
||
| **`Sequential`** groups run their `Steps` one after another on the same cluster. If any step fails, remaining steps in that group are skipped. Use sequential groups for ordered workflows like upgrade → validate → downgrade. | ||
|
|
||
| See [Labels](writing-tests.md#labels) for how to control which tests run in each group. |
There was a problem hiding this comment.
Broken anchor — the header in writing-tests.md is ## Labels (two-layer model), which MkDocs renders as #labels-two-layer-model. migration.md step 6 already uses the correct anchor. Should be [Labels](writing-tests.md#labels-two-layer-model).
There was a problem hiding this comment.
Done. Fixed anchor to #labels-two-layer-model to match the actual MkDocs heading ID.
AI-assisted response via Claude Code
| ``` | ||
|
|
||
| !!! note "Simplified example" | ||
| This example omits the `RegisterXxxTests` + `TestContextGetter` pattern used by real tests. See [Step 8](#add-registertests-export-function) and the [canonical test pattern](writing-tests.md#canonical-test-pattern) for the full structure. |
There was a problem hiding this comment.
MkDocs only generates anchor IDs for headings, not numbered list items, so #add-registertests-export-function won't resolve. Since the sentence already links to writing-tests.md#canonical-test-pattern (which is the right landing point), the [Step 8] internal anchor link can just be dropped — "See the canonical test pattern for the full structure" covers it.
There was a problem hiding this comment.
Done. Removed the dead anchor link — the canonical test pattern link already covers it.
AI-assisted response via Claude Code
| ```diff | ||
| func NewPlatformConfig(platform, sharedDir string) (PlatformConfig, error) { | ||
| switch platform { | ||
| - case "azure": |
There was a problem hiding this comment.
The "before" state shown here (case "azure":) doesn't match what's actually in the code — lifecycle/platform.go already has case "azure", "":. The diff makes it look like adding "" is part of onboarding a new platform, which would confuse someone trying to follow these steps. The starting side should show the current actual state:
func NewPlatformConfig(platform, sharedDir string) (PlatformConfig, error) {
switch platform {
case "azure", "":
return NewAzurePlatformConfig(sharedDir), nil
+ case "my-platform":
+ return NewMyPlatformConfig(sharedDir), nil
default:
return nil, fmt.Errorf("unsupported platform %q (supported: azure)", platform)
}
}There was a problem hiding this comment.
Done. Updated diff to show the correct current state (case "azure", "" already present) and used a generic my-platform example.
AI-assisted response via Claude Code
| | `ArtifactDir` | Directory for test artifacts, from the `ARTIFACT_DIR` environment variable | | ||
| | `ValidateHostedCluster()` | Skips if no cluster configured; panics if fetch fails | | ||
| | `ValidateHostedClusterClient()` | Calls `ValidateHostedCluster()`, then panics if the hosted cluster client is nil (e.g., kubeconfig not ready) | | ||
| | `Context` | Embedded `context.Context` — use for all API calls | |
There was a problem hiding this comment.
Two exported members are missing from this table:
HostedClusterConfigured(bool) — set totruewhen bothClusterNameandClusterNamespaceare populated. This is whatValidateHostedCluster()checks internally to decide between skip and fetch.GetHostedClusterRESTConfig()— returns the raw*rest.Configfor the hosted cluster, lazy-loaded viasync.Once. Useful when a test needs akubernetes.Interfaceclient or a custom REST client beyond whatGetHostedClusterClient()provides.
There was a problem hiding this comment.
Done. Added HostedClusterConfigured and GetHostedClusterRESTConfig() to the TestContext table.
AI-assisted response via Claude Code
| E2E_SHOW_ENV_HELP=1 bin/test-e2e-v2 | ||
| ``` | ||
|
|
||
| ## Assertions and gotchas |
There was a problem hiding this comment.
Several subsections here duplicate AGENTS.md nearly verbatim, which creates a maintenance split — if a convention changes, it has to be updated in two places and they'll drift:
- "Nil-check with diagnostics": identical code example to Convention Rename OpenShiftCluster to HostedCluster #11
- "Vacuous pass prevention": simplified copy of Convention Replace Kustomize with a new hypershift CLI #16 (the AGENTS.md version is more informative)
- "IPv6-safe URLs": same concept as Convention Fetch nodePool by clusterName #15
- "Non-lifecycle tests" WRONG/RIGHT block (further down): verbatim copy of Convention Add support for hostedCluster to delete all nodePools #13
The tutorial value here comes from things like the Eventually timeout guidance and the lifecycle worked example, which genuinely extend what AGENTS.md covers. For the straight duplicates, linking out would be cleaner:
For pointer safety, vacuous pass prevention, IPv6 URL construction, and the non-lifecycle vs. lifecycle mutation rule, see AGENTS.md conventions #11, #13, #15, #16.
This keeps AGENTS.md as the authoritative source for coding conventions and writing-tests.md as the tutorial for framework concepts and patterns.
There was a problem hiding this comment.
| export E2E_HOSTED_CLUSTER_NAMESPACE=clusters | ||
|
|
||
| make e2ev2 | ||
| bin/test-e2e-v2 --ginkgo.label-filter="hosted-cluster-health" --ginkgo.v |
There was a problem hiding this comment.
Worth adding --ginkgo.focus here — it's probably the first thing someone reaches for when a single test is failing and they want to iterate quickly:
# Run a single test by name (regex match against the full description path)
bin/test-e2e-v2 --ginkgo.focus="should not indicate rapid rollouts" --ginkgo.vThere was a problem hiding this comment.
Done. Added --ginkgo.focus example for single-test debugging.
AI-assisted response via Claude Code
|
I now have the complete root cause. Here is the analysis: Test Failure Analysis CompleteJob Information
Test Failure AnalysisErrorSummaryThe Verify job failed at the "dirty tree" check ( Root CauseThe The CI workflow (
This is a stale generated file problem, not a code bug. The PR's branch simply needs to be rebased on current Recommendations
Evidence
|
Add a 5-page documentation section under how-to/ci/v2-testing/ explaining the v2 Ginkgo-based E2E test framework: - index.md: Architecture overview, two-repo model, test execution flow - writing-tests.md: Framework patterns, labels, TestContext, assertions - ci-pipeline.md: Release repo config, CI binaries, adding tests/platforms - debugging.md: JUnit artifacts, failure tracing, Informing test skips - migration.md: V1 to V2 porting guide, helper refactoring, pitfalls Azure self-managed is the reference implementation. The framework is platform-agnostic via the PlatformConfig interface. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
@bryan-cox: This pull request references CNTRLPLANE-3548 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 task to target the "5.0.0" version, but no target version was set. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
| ### Step Execution Order | ||
|
|
||
| ```mermaid | ||
| flowchart LR |
There was a problem hiding this comment.
The mermaid diagrams using ["..."] node syntax aren't rendering text labels correctly with the current mermaid2 plugin + mermaid@11.2.0 setup — node shapes appear but text is empty. This affects both diagrams in this file and the one in index.md.
Consider switching to unquoted or parenthesis syntax, e.g.:
| flowchart LR | |
| flowchart LR | |
| A(create-selfmanaged-guests) --> B(run-e2e-v2-selfmanaged) | |
| B --> C(dump-selfmanaged-guests) | |
| C --> D(destroy-selfmanaged-guests) |
You'll want to test all three diagrams (this one, the decision tree at line 164, and the architecture diagram in index.md) with mkdocs serve after fixing.
There was a problem hiding this comment.
Thanks Cesar! The mermaid diagrams use the same mermaid2 plugin configuration as all other docs pages (e.g., agentic-sdlc.md, ci-infrastructure.md). The CI "Build Docs" step passes with mkdocs build --strict and the plugin correctly detects all diagrams. The rendering issue in the screenshots looks like a client-side JS loading issue on the Cloudflare Pages preview — the mermaid JS is loaded from unpkg.com and can sometimes fail to execute on first load. A page refresh usually resolves it. If you're seeing it persistently, it may be worth opening a separate issue to investigate the mermaid2 plugin + Cloudflare Pages interaction.
AI-assisted response via Claude Code
There was a problem hiding this comment.
Thank you @bryan-cox !
Indeed, the issue was with my browser. I switched to a different browser and cleared the cache and the diagrams render just fine.
|
/lgtm |
|
Pipeline controller notification No second-stage tests were triggered for this PR. This can happen when:
Use |
|
/verified by GHA deployment |
|
@bryan-cox: This PR has been marked as verified by DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
@bryan-cox: all tests passed! Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |


Summary
how-to/ci/v2-testing/explaining the v2 Ginkgo-based E2E test frameworkPlatformConfiginterfacePages
index.mdwriting-tests.mdci-pipeline.mddebugging.mdmigration.mdReference PRs
Test plan
cd docs && mkdocs serve🤖 Generated with Claude Code
Summary by CodeRabbit