Skip to content

🌱 Enable parallel e2e test execution for faster local dev feedback - #2785

Merged
openshift-merge-bot[bot] merged 1 commit into
operator-framework:mainfrom
pedjak:parallel-e2e
Jun 29, 2026
Merged

🌱 Enable parallel e2e test execution for faster local dev feedback#2785
openshift-merge-bot[bot] merged 1 commit into
operator-framework:mainfrom
pedjak:parallel-e2e

Conversation

@pedjak

@pedjakpedjak commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Description

Enable running standard and experimental e2e tests simultaneously on separate KIND clusters via make -j2 test-e2e test-experimental-e2e, cutting local e2e wall-clock time by ~40%. This is especially valuable when working with AI coding agents that benefit from faster feedback loops.

Benchmark

ModeWall clockSpeedup
Sequential (make test-e2e && make test-experimental-e2e)25m 25s
Parallel (make -j2 test-e2e test-experimental-e2e)15m 54s~40% faster

Measured on a dev workstation (Fedora, 16 cores, 64GB RAM).

Linux prerequisite

Running multiple KIND clusters simultaneously requires sufficient inotify instances:

sudo sysctl fs.inotify.max_user_instances=512

Reviewer Checklist

  • API Go Documentation
  • Tests: Unit Tests (and E2E Tests, if appropriate)
  • Comprehensive Commit Messages
  • Links to related GitHub Issue(s)

CopilotAI review requested due to automatic review settings June 25, 2026 15:59
@openshift-ciopenshift-ciBot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 25, 2026
@netlify

netlifyBot commented Jun 25, 2026

Copy link
Copy Markdown

Deploy Preview for olmv1 ready!

NameLink
🔨 Latest commita93e1e0
🔍 Latest deploy loghttps://app.netlify.com/projects/olmv1/deploys/6a426a638d1bd60008a62b1a
😎 Deploy Previewhttps://deploy-preview-2785--olmv1.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changesRun an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

CopilotAI 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.

Pull request overview

Enables running standard and experimental e2e suites concurrently by generating per-variant Makefile target chains (separate KIND clusters, kubeconfigs, and Prometheus host ports) and wiring the summary reporter to use a per-run PROMETHEUS_URL.

Changes:

  • Refactors test-e2e / test-experimental-e2e into an e2e-target macro that emits uniquely named per-variant targets and uses per-cluster kubeconfig files.
  • Updates the e2e summary generator to read Prometheus address from PROMETHEUS_URL and skip summary generation when it’s unset.
  • Separates experimental Prometheus NodePort host mapping (30901) and documents/ignores the new .kubeconfig/ directory.

Reviewed changes

Copilot reviewed 4 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
FileDescription
test/internal/summary/summary.goSwitches summary Prometheus endpoint to PROMETHEUS_URL and skips when unset.
MakefileGenerates per-variant e2e target chains, isolates kubeconfig, sets PROMETHEUS_URL, and adds parallel-run guidance.
kind-config/kind-config-2node.yamlChanges experimental Prometheus hostPort mapping to 30901.
AGENTS.mdDocuments make -j2 test-e2e test-experimental-e2e parallel workflow and Linux inotify prerequisite.
.gitignoreIgnores .kubeconfig/ per-cluster kubeconfig outputs.
Comments suppressed due to low confidence (1)

test/internal/summary/summary.go:187

  • defaultPromUrl is read from the environment at package init time, so setting PROMETHEUS_URL later (e.g., in TestMain before calling PrintSummary, or from another caller) will not be observed and summary generation will be skipped unexpectedly. Read the env var inside PrintSummary instead.
	if defaultPromUrl == "" {
fmt.Printf("PROMETHEUS_URL not set; skipping summary generation")
return nil
}
client, err := api.NewClient(api.Config{
Address: defaultPromUrl,
})

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment threadMakefile Outdated
@codecov

codecovBot commented Jun 25, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 70.46%. Comparing base (c66f3af) to head (a93e1e0).
⚠️ Report is 8 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #2785 +/- ##
==========================================
+ Coverage 70.40% 70.46% +0.05% 
==========================================
Files 143 143 Lines 10617 10625 +8 ==========================================
+ Hits 7475 7487 +12 + Misses 2580 2578 -2 + Partials 562 560 -2 
FlagCoverage Δ
e2e35.05% <ø> (-0.12%)⬇️
experimental-e2e52.56% <ø> (+0.14%)⬆️
unit59.51% <ø> (+0.01%)⬆️

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

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

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

@pedjak
pedjak marked this pull request as ready for review June 25, 2026 20:44
CopilotAI review requested due to automatic review settings June 25, 2026 20:44
@openshift-ciopenshift-ciBot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jun 25, 2026
@pedjak
pedjak requested review from dtfranz and perdasilva and removed request for OchiengEdJune 25, 2026 20:45

CopilotAI 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.

Pull request overview

Copilot reviewed 4 out of 5 changed files in this pull request and generated 2 comments.

Comment threadMakefile Outdated
Comment threadtest/internal/summary/summary.go Outdated
CopilotAI review requested due to automatic review settings June 26, 2026 11:04

CopilotAI 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.

Pull request overview

Copilot reviewed 5 out of 6 changed files in this pull request and generated 1 comment.

Comment threadMakefile
Comment threadtest/e2e/README.md
Both suites can run simultaneously on separate KIND clusters:

```bash
make -j2 test-e2e test-experimental-e2e

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.

This might be a bit redundant, as test-experimental-e2e should also be running the same tests as test-e2e (basically running the test-e2e with new features)

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.

Ah... but they're run on separate clusters, and it's not combined?

@pedjakpedjakJun 26, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Ah... but they are run on separate clusters, and it is not combined?

They are on different clusters with differently deployed OLM (different feature gates). Therefore we need two clusters.

Comment threadMakefile Outdated
Comment threadMakefile
Comment threadMakefile
Comment on lines +355 to +358
.PHONY: kind-load-%
kind-load-%: kind-cluster-%
$(KIND) load docker-image $(OPCON_IMG) --name operator-controller-$*
$(KIND) load docker-image $(CATD_IMG) --name operator-controller-$*

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.

Could the existing kind-load be updated to reference kind-load-%, so we can eliminate drift?
Same with other targets.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

Could the existing kind-load be updated to reference kind-load-%, so we can eliminate drift? Same with other targets.

They could and should, but I would leave that for follow up PR, to avoid widening the scope.

CopilotAI review requested due to automatic review settings June 26, 2026 15:46

CopilotAI 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.

Pull request overview

Copilot reviewed 5 out of 6 changed files in this pull request and generated 1 comment.

Comment threadMakefile Outdated

@rashmigottipatirashmigottipati 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.

Changes look good to me overall. Will add the labels once the other review has been addressed

@pedjak

Copy link
Copy Markdown
ContributorAuthor

Changes look good to me overall. Will add the labels once the other review has been addressed

ptal

Comment threadMakefile Outdated
CopilotAI review requested due to automatic review settings June 29, 2026 12:10

CopilotAI 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.

Pull request overview

Copilot reviewed 5 out of 6 changed files in this pull request and generated 3 comments.

Comment threadMakefile Outdated
Comment threadMakefile Outdated
Comment threadtest/internal/summary/summary.go Outdated
Run standard and experimental e2e tests simultaneously on separate KIND
clusters via `make -j2 test-e2e test-experimental-e2e`, cutting local
e2e wall-clock time by ~37% (25m → 16m). This is especially valuable
when working with AI coding agents that benefit from faster feedback
loops.
Key changes:
- Use Make pattern rules (kind-cluster-%, kind-load-%, etc.) with the
stem identifying the variant. Cluster names, kubeconfig paths, and
coverage names are derived by convention from the stem. Only
variant-specific deviations need explicit overrides.
- Remove .NOTPARALLEL directive (no longer needed with unique targets)
- Isolate per-cluster kubeconfig files under .kubeconfig/
- Use separate KIND cluster names and prometheus host ports (30900 vs
30901) to avoid resource conflicts
- Make PROMETHEUS_URL configurable via env var in summary reporter;
skip summary generation when unset
- Conditionally serialize kind-deploy when both targets run together
to avoid races on shared files
Linux prerequisite for parallel runs:
sudo sysctl fs.inotify.max_user_instances=512
Co-Authored-By: Claude <noreply@anthropic.com>
@perdasilva

Copy link
Copy Markdown
Contributor

/approve

@openshift-ciopenshift-ciBot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jun 29, 2026
@openshift-ciopenshift-ciBot added the lgtm Indicates that a PR is ready to be merged. label Jun 29, 2026
@openshift-ci

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: perdasilva, rashmigottipati

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-merge-bot
openshift-merge-botBot merged commit c3caa22 into operator-framework:mainJun 29, 2026
25 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approvedIndicates a PR has been approved by an approver from all required OWNERS files.lgtmIndicates that a PR is ready to be merged.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@pedjak@perdasilva@rashmigottipati@tmshort