Skip to content

CNTRLPLANE-3863: emit lifecycle-aware JUnit for informing e2e tests - #9168

Open
ironcladlou wants to merge 1 commit into
openshift:mainfrom
ironcladlou:ws/junit-informing
Open

CNTRLPLANE-3863: emit lifecycle-aware JUnit for informing e2e tests#9168
ironcladlou wants to merge 1 commit into
openshift:mainfrom
ironcladlou:ws/junit-informing

Conversation

@ironcladlou

@ironcladlou ironcladlou commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

InformingAwareFailHandler converts informing test failures to Ginkgo skips so the job exits 0, but Sippy/CR drops skipped tests entirely, making informing failures invisible to regression tracking.

Add a ReportAfterSuite that writes a supplemental JUnit file (junit_lifecycle_informing.xml) containing only informing tests with lifecycle="informing" on each testcase. ci-to-bigquery reads this attribute and populates the lifecycle column in BigQuery, matching the contract established by origin (TRT-2350) and ci-tools.

This is a stopgap; the long-term fix is porting the test framework to OTE, which handles lifecycle JUnit emission natively.

A temporary synthetic informing test that intentionally fails to validate the output in CI was used to verify.

Summary by CodeRabbit

  • New Features
    • Added lifecycle-focused JUnit XML reporting for informing-only failure-skips.
    • Generated output includes per-case duration and lifecycle metadata, plus failure message and location, as an additional artifact when applicable.
    • Non-informing tests and other skips are excluded from the artifact.
  • Bug Fixes
    • Improved detection and formatting of failures that are skipped specifically due to informing behavior.
  • Tests
    • Added coverage for report construction and XML round-tripping.
  • Documentation
    • Clarified guidance on where to add v2 e2e tests.

@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 29, 2026
@openshift-ci-robot

openshift-ci-robot commented Jul 29, 2026

Copy link
Copy Markdown

@ironcladlou: This pull request references CNTRLPLANE-3863 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 epic to target the "5.0.0" version, but no target version was set.

Details

In response to this:

InformingAwareFailHandler converts informing test failures to Ginkgo skips so the job exits 0, but Sippy/CR drops skipped tests entirely, making informing failures invisible to regression tracking.

Add a ReportAfterSuite that writes a supplemental JUnit file (junit_lifecycle_informing.xml) containing only informing tests with lifecycle="informing" on each . ci-to-bigquery reads this attribute and populates the lifecycle column in BigQuery, matching the contract established by origin (TRT-2350) and ci-tools.

This is a stopgap; the long-term fix is porting the test framework to OTE, which handles lifecycle JUnit emission natively.

Includes a temporary synthetic test (lifecycle_validation_test.go) that intentionally fails with Label("Informing") to validate the output in CI. To be removed after validation.

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 added do-not-merge/needs-area area/testing Indicates the PR includes changes for e2e testing labels Jul 29, 2026
@coderabbitai

coderabbitai Bot commented Jul 29, 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
📝 Walkthrough

Walkthrough

Adds informing-failure detection and message extraction to the e2e v2 fail handler. Introduces JUnit XML models and BuildLifecycleReport, which emits informing failure skips as lifecycle-marked failures. Adds unit tests for filtering and XML round trips. Registers an after-suite hook that writes junit_lifecycle_informing.xml when matching cases exist, and updates internal testing guidance.

Sequence Diagram(s)

sequenceDiagram
  participant GinkgoSuite
  participant BuildLifecycleReport
  participant XMLMarshaler
  participant ArtifactDirectory
  GinkgoSuite->>BuildLifecycleReport: provide suite and spec reports
  BuildLifecycleReport-->>GinkgoSuite: return informing JUnit report
  GinkgoSuite->>XMLMarshaler: marshal report
  XMLMarshaler-->>GinkgoSuite: return XML
  GinkgoSuite->>ArtifactDirectory: write lifecycle artifact
Loading

Suggested reviewers: cblecker, jparrill

🚥 Pre-merge checks | ✅ 11
✅ Passed checks (11 passed)
Check name Status Explanation
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 Added Ginkgo titles are static (
Test Structure And Quality ✅ Passed New tests are unit-style/table-driven with clear diagnostics; no cluster ops or waits were added, and suite hooks follow existing repo patterns.
Topology-Aware Scheduling Compatibility ✅ Passed Only e2e JUnit/reporting and test helpers changed; no manifests, controllers, affinities, nodeSelectors, or PDBs were added.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The PR adds JUnit/reporting helpers and an AfterSuite writer only; no new Ginkgo specs, IPv4-only literals, or external network calls were introduced.
No-Weak-Crypto ✅ Passed Changed files add JUnit/XML reporting and label checks only; no weak crypto, custom crypto, or secret comparisons were introduced.
Container-Privileges ✅ Passed No container/K8s manifest changes were present, and the modified files contain none of the flagged privilege settings.
No-Sensitive-Data-In-Logs ✅ Passed New report writer and fail handler only emit artifact-path/error messages; no passwords, tokens, PII, or hostnames were added in touched files.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: emitting lifecycle-aware JUnit for informing e2e tests.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

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

🧹 Nitpick comments (1)
test/e2e/v2/tests/lifecycle_validation_test.go (1)

15-20: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Register this feature through the v2 test entry point.

Export RegisterLifecycleValidationTests(getTestCtx TestContextGetter) and wire it from test/e2e/v2/tests/suite_test.go instead of registering the Describe through a package-level variable. As per coding guidelines, “Each test file must be feature-scoped and export a RegisterXxxTests(getTestCtx TestContextGetter) function that registers Ginkgo blocks.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/v2/tests/lifecycle_validation_test.go` around lines 15 - 20, Replace
the package-level `Describe` registration in the lifecycle validation test with
an exported `RegisterLifecycleValidationTests(getTestCtx TestContextGetter)`
function that registers the same Ginkgo block, using the provided test context
as required by the feature-scoped test pattern. Update `suite_test.go` to invoke
this registration function through the v2 test entry point.

Source: Coding guidelines

🤖 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 `@test/e2e/v2/internal/junit_test.go`:
- Around line 28-179: Rename each affected table-test name in the test cases
around the existing specs to follow the required “When ... it should ...”
format, preserving the described behavior and all assertions. Update only the
name descriptions, including cases for informing failures, passes, skips,
excluded nodes, panics, mixed specs, and empty spec lists.

In `@test/e2e/v2/tests/suite_test.go`:
- Around line 72-80: Update the lifecycle artifact handling in the
ReportAfterSuite hook to fail the Ginkgo suite after logging either XML marshal
or file-write errors. Use the hook’s Ginkgo-supported failure mechanism after
the existing diagnostics, while preserving successful artifact generation and
the current error context.

---

Nitpick comments:
In `@test/e2e/v2/tests/lifecycle_validation_test.go`:
- Around line 15-20: Replace the package-level `Describe` registration in the
lifecycle validation test with an exported
`RegisterLifecycleValidationTests(getTestCtx TestContextGetter)` function that
registers the same Ginkgo block, using the provided test context as required by
the feature-scoped test pattern. Update `suite_test.go` to invoke this
registration function through the v2 test entry point.
🪄 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: Pro Plus

Run ID: 628241f6-b0fe-4a51-8f1e-63fb8bde8be6

📥 Commits

Reviewing files that changed from the base of the PR and between f0235c7 and 31fdcdf.

📒 Files selected for processing (4)
  • test/e2e/v2/internal/junit.go
  • test/e2e/v2/internal/junit_test.go
  • test/e2e/v2/tests/lifecycle_validation_test.go
  • test/e2e/v2/tests/suite_test.go

Comment thread test/e2e/v2/internal/junit_test.go Outdated
Comment thread test/e2e/v2/tests/suite_test.go
@ironcladlou

Copy link
Copy Markdown
Contributor Author

/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-aks-4-22
/test e2e-aws-4-22
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-azure-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke
/test unit
/test verify

@ironcladlou
ironcladlou force-pushed the ws/junit-informing branch 2 times, most recently from 35f7988 to 40187c3 Compare July 30, 2026 09:27

@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

♻️ Duplicate comments (1)
test/e2e/v2/tests/suite_test.go (1)

72-80: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Marshal/write failures still don't fail the suite.

This still logs to stderr and returns silently on xml.MarshalIndent/os.WriteFile failure, so CI can pass green while junit_lifecycle_informing.xml is never produced and downstream lifecycle ingestion silently loses data. This matches a prior review comment on this same range that does not appear to have been addressed.

As per path instructions (test/e2e/v2/AGENTS.md), "Fail-loud philosophy: framework code generally panics on unrecoverable errors rather than silently continuing—if ReportAfterSuite can't produce output (missing/empty inputs), ensure it fails loudly enough or clearly logs and returns (avoid silent success)."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/v2/tests/suite_test.go` around lines 72 - 80, Update the lifecycle
JUnit output handling in ReportAfterSuite so xml.MarshalIndent and os.WriteFile
failures fail loudly instead of logging to stderr and returning successfully.
Replace the silent error paths with the suite’s established unrecoverable-error
behavior, while preserving the existing output path and successful write flow.

Source: Path instructions

🤖 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 `@test/e2e/v2/internal/junit_test.go`:
- Around line 1-13: Move the plain testing-based coverage for
BuildLifecycleReport out of the internal package into the sanctioned tests/
location, preserving the existing e2ev2 build constraint and test behavior; only
retain it under internal/ if the exception is explicitly justified according to
the test/e2e/v2 convention.
- Around line 254-256: Update the validation around parsed.Suites before the
t.Fatalf call so the diagnostic never indexes parsed.Suites[0] unless at least
one suite exists. Preserve reporting of both suite and test-case counts when a
suite is present, while using a safe count or separate failure path when no
suites were parsed.

In `@test/e2e/v2/internal/junit.go`:
- Around line 84-103: Update the failure-state branch in the lifecycle spec
classification switch to use the Ginkgo report’s Failed() result, or otherwise
include SpecStateTimedout, SpecStateAborted, and SpecStateInterrupted alongside
SpecStateFailed and SpecStatePanicked. Preserve the existing JUnitFailureOutput
construction and suite.NumFailed increment so every failed lifecycle spec emits
a failure rather than falling through as a pass.

In `@test/e2e/v2/tests/lifecycle_validation_test.go`:
- Around line 15-20: Replace the package-level `var _ = Describe(...)`
registration with an exported `RegisterXxxTests(getTestCtx TestContextGetter)`
function in this lifecycle validation test file. Move the existing lifecycle
`Describe` and `It` blocks into that function, preserving their labels and
intentional failure behavior.

In `@test/e2e/v2/tests/suite_test.go`:
- Around line 64-67: Register ARTIFACT_DIR in the file’s environment-variable
catalog using RegisterEnvVar or RegisterEnvVarWithDefault alongside the existing
entries, then update the artifactDir lookup near the current os.Getenv call to
use internal.GetEnvVarValue. Preserve the existing empty-value early return and
ensure the registration occurs before ARTIFACT_DIR is read so PrintEnvVarHelp
includes it.

---

Duplicate comments:
In `@test/e2e/v2/tests/suite_test.go`:
- Around line 72-80: Update the lifecycle JUnit output handling in
ReportAfterSuite so xml.MarshalIndent and os.WriteFile failures fail loudly
instead of logging to stderr and returning successfully. Replace the silent
error paths with the suite’s established unrecoverable-error behavior, while
preserving the existing output path and successful write flow.
🪄 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: Pro Plus

Run ID: 1ddb52e8-b569-47d2-851e-fb76b7158383

📥 Commits

Reviewing files that changed from the base of the PR and between 31fdcdf and 35f7988.

📒 Files selected for processing (4)
  • test/e2e/v2/internal/junit.go
  • test/e2e/v2/internal/junit_test.go
  • test/e2e/v2/tests/lifecycle_validation_test.go
  • test/e2e/v2/tests/suite_test.go

Comment thread test/e2e/v2/internal/junit_test.go
Comment thread test/e2e/v2/internal/junit_test.go Outdated
Comment thread test/e2e/v2/tests/lifecycle_validation_test.go Outdated
Comment thread test/e2e/v2/tests/suite_test.go Outdated
@ironcladlou
ironcladlou force-pushed the ws/junit-informing branch 5 times, most recently from a9527bf to 2aeed36 Compare July 30, 2026 09:36

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

♻️ Duplicate comments (2)
test/e2e/v2/tests/lifecycle_validation_test.go (1)

15-20: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

Doesn't follow the required RegisterXxxTests(getTestCtx TestContextGetter) file pattern.

As per path instructions, test/e2e/v2/tests/*_test.go: "Each standard v2 test file must be feature-scoped, export a RegisterXxxTests(getTestCtx TestContextGetter) function, and define a top-level descriptive Describe with a filtering Label." This file instead registers via a package-level var _ = Describe(...).

♻️ Proposed refactor
+func RegisterLifecycleValidationTests(getTestCtx TestContextGetter) {
 	// TODO(CNTRLPLANE-3863): Remove this file after validating lifecycle JUnit
 	// output in CI. This is a temporary synthetic test that intentionally fails
 	// with Label("Informing") to verify that:
 	// 1. InformingAwareFailHandler converts the failure to a skip
 	// 2. The ReportAfterSuite re-emits it as a failure with lifecycle="informing"
 	// 3. The job still passes (exit 0)
-var _ = Describe("[sig-hypershift][Jira:Hypershift][Feature:InformingLifecycle] Lifecycle Validation",
-	Label("informing-lifecycle-validation"), func() {
-		It("should demonstrate informing lifecycle JUnit output", Label("Informing"), func() {
-			Fail("This intentional failure validates that informing tests emit lifecycle metadata in JUnit")
-		})
-	})
+	Describe("[sig-hypershift][Jira:Hypershift][Feature:InformingLifecycle] Lifecycle Validation",
+		Label("informing-lifecycle-validation"), func() {
+			It("should demonstrate informing lifecycle JUnit output", Label("Informing"), func() {
+				Fail("This intentional failure validates that informing tests emit lifecycle metadata in JUnit")
+			})
+		})
+}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/v2/tests/lifecycle_validation_test.go` around lines 15 - 20,
Refactor the package-level Describe registration into the required exported
RegisterXxxTests(getTestCtx TestContextGetter) function in the lifecycle
validation test. Keep the feature-scoped descriptive Describe and filtering
Label, and register the existing intentional failure through that function using
the provided test-context getter.

Source: Path instructions

test/e2e/v2/internal/junit_test.go (1)

276-288: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Unconditional index still risks a panic on the very failure path it's meant to diagnose.

This is the same issue raised previously (marked "Addressed" in an earlier commit), but the current code still evaluates parsed.Suites[0].TestCases unconditionally inside the t.Fatalf call. If len(parsed.Suites) != 1 is 0 suites, this indexes an empty slice and panics instead of producing the diagnostic message.

🐛 Proposed fix
-	if len(parsed.Suites) != 1 || len(parsed.Suites[0].TestCases) != 1 {
-		t.Fatalf("round-trip produced %d suites / %d cases", len(parsed.Suites), len(parsed.Suites[0].TestCases))
-	}
+	if len(parsed.Suites) != 1 {
+		t.Fatalf("round-trip produced %d suites, want 1", len(parsed.Suites))
+	}
+	if len(parsed.Suites[0].TestCases) != 1 {
+		t.Fatalf("round-trip produced %d cases, want 1", len(parsed.Suites[0].TestCases))
+	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/v2/internal/junit_test.go` around lines 276 - 288, Guard the
round-trip validation in the JUnit test before indexing parsed.Suites[0]: handle
an unexpected suite count and fail with a diagnostic that does not access any
suite, then validate the test-case count only after confirming a suite exists.
Preserve the existing lifecycle assertion for valid parsed data.
🧹 Nitpick comments (1)
test/e2e/v2/internal/junit.go (1)

71-71: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the "Informing" label into a shared constant.

The label string "Informing" is hardcoded in two places here and duplicated again in test files (e.g. lifecycle_validation_test.go's Label("Informing")). A shared exported constant would prevent silent drift/typos breaking the filter.

Also applies to: 120-120

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/e2e/v2/internal/junit.go` at line 71, Extract the repeated "Informing"
label into a shared exported constant near the relevant label definitions, then
update the checks in the JUnit logic and test usages such as
lifecycle_validation_test.go to reference that constant instead of hardcoded
strings. Preserve the existing label filtering behavior and use one canonical
identifier everywhere.
🤖 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 `@test/e2e/v2/internal/junit.go`:
- Around line 84-103: Update the lifecycle-result switch in BuildLifecycleReport
to add a types.SpecStatePending branch for informing specs, assigning the
appropriate skipped informative result (including its message) and incrementing
suite.NumSkipped. Keep existing failure and ordinary skipped-state handling
unchanged.

---

Duplicate comments:
In `@test/e2e/v2/internal/junit_test.go`:
- Around line 276-288: Guard the round-trip validation in the JUnit test before
indexing parsed.Suites[0]: handle an unexpected suite count and fail with a
diagnostic that does not access any suite, then validate the test-case count
only after confirming a suite exists. Preserve the existing lifecycle assertion
for valid parsed data.

In `@test/e2e/v2/tests/lifecycle_validation_test.go`:
- Around line 15-20: Refactor the package-level Describe registration into the
required exported RegisterXxxTests(getTestCtx TestContextGetter) function in the
lifecycle validation test. Keep the feature-scoped descriptive Describe and
filtering Label, and register the existing intentional failure through that
function using the provided test-context getter.

---

Nitpick comments:
In `@test/e2e/v2/internal/junit.go`:
- Line 71: Extract the repeated "Informing" label into a shared exported
constant near the relevant label definitions, then update the checks in the
JUnit logic and test usages such as lifecycle_validation_test.go to reference
that constant instead of hardcoded strings. Preserve the existing label
filtering behavior and use one canonical identifier everywhere.
🪄 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: Pro Plus

Run ID: 54283ad0-a09b-40c0-b6b0-848cd8ed9851

📥 Commits

Reviewing files that changed from the base of the PR and between 35f7988 and a9527bf.

📒 Files selected for processing (5)
  • test/e2e/v2/AGENTS.md
  • test/e2e/v2/internal/junit.go
  • test/e2e/v2/internal/junit_test.go
  • test/e2e/v2/tests/lifecycle_validation_test.go
  • test/e2e/v2/tests/suite_test.go

Comment thread test/e2e/v2/internal/junit.go Outdated
@ironcladlou
ironcladlou force-pushed the ws/junit-informing branch 4 times, most recently from 45d6bcd to 918e234 Compare July 30, 2026 10:00
@codecov

codecov Bot commented Jul 30, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 44.94%. Comparing base (deb9479) to head (fe4f240).
⚠️ Report is 15 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #9168   +/-   ##
=======================================
  Coverage   44.94%   44.94%           
=======================================
  Files         778      778           
  Lines       97427    97427           
=======================================
  Hits        43790    43790           
  Misses      50616    50616           
  Partials     3021     3021           
Flag Coverage Δ
cmd-support 38.62% <ø> (ø)
cpo-hostedcontrolplane 47.28% <ø> (ø)
cpo-other 45.67% <ø> (ø)
hypershift-operator 54.93% <ø> (ø)
other 34.32% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/retest
/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-aks-4-22
/test e2e-aws-4-22
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-azure-v2-self-managed
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-gke
/test unit
/test verify

@ironcladlou

Copy link
Copy Markdown
Contributor Author

rebased

@devguyio

Copy link
Copy Markdown
Contributor

/test unit

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/retest

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/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-aks-4-22
/test e2e-aws-4-22
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-azure-self-managed
/test e2e-v2-gke

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

Copy link
Copy Markdown

@ironcladlou: This PR has been marked as verified by e2e regression analysis and manual verification.

Details

In response to this:

/verified by e2e regression analysis and manual verification

Example successful v2 gke output: https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_hypershift/9168/pull-ci-openshift-hypershift-main-e2e-v2-gke/2082859653678501888

Passes and now shows 83 informing tests failed as expected, including the synthetic failure:

[sig-hypershift][Jira:Hypershift][Feature:InformingLifecycle] Lifecycle Validation should demonstrate informing lifecycle JUnit output 

The other 82 are existing informing failures that to date we have been skipping without appropriate metadata and thus are ignored in the downstream pipelines and invisible within component readiness and sippy test analysis (example with same failures prior to this patch).

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.

InformingAwareFailHandler converts informing test failures to Ginkgo
skips so the job exits 0, but Sippy/CR drops skipped tests entirely,
making informing failures invisible to regression tracking.

Add a ReportAfterSuite that writes a supplemental JUnit file
(junit_lifecycle_informing.xml) containing only informing tests with
lifecycle="informing" on each <testcase>. ci-to-bigquery reads this
attribute and populates the lifecycle column in BigQuery, matching the
contract established by origin (TRT-2350) and ci-tools.

This is a stopgap; the long-term fix is porting the test framework to
OTE, which handles lifecycle JUnit emission natively.
@openshift-ci-robot openshift-ci-robot removed the verified Signifies that the PR passed pre-merge verification criteria label Aug 3, 2026
@ironcladlou

Copy link
Copy Markdown
Contributor Author

/verified by e2e regression analysis and manual verification

Example successful v2 gke output: https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_hypershift/9168/pull-ci-openshift-hypershift-main-e2e-v2-gke/2082859653678501888

Passes and now shows 83 informing tests failed as expected, including the synthetic failure:

 [sig-hypershift][Jira:Hypershift][Feature:InformingLifecycle] Lifecycle Validation should demonstrate informing lifecycle JUnit output 

The other 82 are existing informing failures that to date we have been skipping without appropriate metadata and thus are ignored in the downstream pipelines and invisible within component readiness and sippy test analysis (example with same failures prior to this patch).

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

Copy link
Copy Markdown

@ironcladlou: This PR has been marked as verified by e2e regression analysis and manual verification.

Details

In response to this:

/verified by e2e regression analysis and manual verification

Example successful v2 gke output: https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_hypershift/9168/pull-ci-openshift-hypershift-main-e2e-v2-gke/2082859653678501888

Passes and now shows 83 informing tests failed as expected, including the synthetic failure:

[sig-hypershift][Jira:Hypershift][Feature:InformingLifecycle] Lifecycle Validation should demonstrate informing lifecycle JUnit output 

The other 82 are existing informing failures that to date we have been skipping without appropriate metadata and thus are ignored in the downstream pipelines and invisible within component readiness and sippy test analysis (example with same failures prior to this patch).

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.

@muraee

muraee commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Aug 3, 2026
@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-aks-4-22
/test e2e-aws-4-22
/test e2e-aks
/test e2e-aws
/test e2e-aws-upgrade-hypershift-operator
/test e2e-kubevirt-aws-ovn-reduced
/test e2e-v2-aws
/test e2e-v2-azure-self-managed
/test e2e-v2-gke

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/retest

1 similar comment
@ironcladlou

Copy link
Copy Markdown
Contributor Author

/retest

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-4-22

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/test e2e-kubevirt-aws-ovn-reduced

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-4-22

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-4-22
/test e2e-kubevirt-aws-ovn-reduced

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-4-22

@csrwng

csrwng commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

/override ci/prow/e2e-kubevirt-aws-ovn-reduced

@openshift-ci

openshift-ci Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@csrwng: Overrode contexts on behalf of csrwng: ci/prow/e2e-kubevirt-aws-ovn-reduced

Details

In response to this:

/override ci/prow/e2e-kubevirt-aws-ovn-reduced

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.

@ironcladlou

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-4-22

@cblecker

cblecker commented Aug 4, 2026

Copy link
Copy Markdown
Member

/uncc

@openshift-ci
openshift-ci Bot removed the request for review from cblecker August 4, 2026 18:12
@openshift-ci

openshift-ci Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

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

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. area/testing Indicates the PR includes changes for e2e testing 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. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants