Skip to content

ci(bundles): cross-bundle test matrix (lfx contract axis)#13566

Draft
erichare wants to merge 5 commits into
bundles/foundation-discoveryfrom
bundles/ci-matrix
Draft

ci(bundles): cross-bundle test matrix (lfx contract axis)#13566
erichare wants to merge 5 commits into
bundles/foundation-discoveryfrom
bundles/ci-matrix

Conversation

@erichare

@erichare erichare commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Bundle Separation Phase A — PR 4: cross-bundle CI matrix

Part of Bundle Separation Phase A — metapackage split (1.11). Stacked on the foundation PR (bundles/foundation-discovery); independent of the metapackage track, so it can land early. Overdue — 1.10 already left 4 independently-versioned bundles depending on lfx.

What this does

.github/workflows/cross-bundle-test.yml tests every extracted bundle against the lfx contract surface it depends on.

  • Discovers bundles via the same src/bundles/*/pyproject.toml glob release.yml uses, so each new extraction self-registers.
  • Per (bundle × Python 3.10/3.13): installs the in-repo lfx + the bundle, imports the declared entry-point package, asserts lfx.bundles discovery is error-free (for the metapackage), runs lfx extension validate for manifest bundles, and runs the bundle's own tests/.
  • Triggers: pull_request (paths src/bundles/**, src/lfx/**), workflow_dispatch, a weekly schedule, and workflow_call.

lfx-minor axis (the primary axis)

lfx is the primary axis because the BUNDLE_API contract lives in lfx. It currently seeds with the in-repo lfx (the 1.10 line isn't on PyPI yet). When minors publish, add the version dimension — oldest+latest get the full tests, every supported minor gets contract-smoke — and wire langflow RCs as the secondary axis via workflow_call from the release pipeline.

Test plan

  • Workflow YAML parses; jobs discover + bundle
  • Contract-smoke logic imports a real bundle (lfx_arxiv) cleanly

Stack

Base bundles/foundation-discovery (PR 1) so this PR's diff is only the workflow; GitHub auto-retargets to the integration branch feat/bundle-metapackage-split once PR 1 merges. Draft until QA signs off.

Tests every extracted bundle (the lfx-bundles metapackage + each graduated
lfx-<provider>) against the lfx contract surface it depends on -- overdue
since 1.10 left 4 independently-versioned bundles depending on lfx.

- .github/workflows/cross-bundle-test.yml: discovers bundles via the same
  src/bundles/*/pyproject.toml glob release.yml uses, then per
  (bundle x python 3.10/3.13): installs the in-repo lfx + the bundle, imports
  the declared entry-point package, asserts lfx.bundles discovery is
  error-free (for the metapackage), runs `lfx extension validate` for
  manifest bundles, and runs the bundle's own tests/.
- Triggers: pull_request (src/bundles, src/lfx), workflow_dispatch, a weekly
  schedule, and workflow_call.

The lfx-minor axis seeds with the in-repo lfx (the 1.10 line is unpublished);
when minors publish, add the version dimension (oldest+latest get full tests,
every supported minor gets contract-smoke) per the epic's cost-control shape.

Verified: the workflow YAML parses and the contract-smoke logic imports a
real bundle (lfx_arxiv) cleanly.
@coderabbitai

coderabbitai Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5e003477-e587-42bb-8a67-cb141049b785

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch bundles/ci-matrix

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 and usage tips.

Review findings on the cross-bundle matrix:

- CRITICAL: the contract smoke asserted zero discovery errors, but the CI
  venv installs lfx-bundles WITHOUT per-provider extras, so providers whose
  modules import their SDK at top level degrade with module-import-failed --
  the expected graceful-degradation contract. The smoke now fails only on
  structural codes and reports the degraded-module count. (Graduated partner
  bundles carry their deps directly, not as extras, so their steps are
  unaffected.)
- the scheduled run now actually delivers the exhaustive grid the header
  promised (all supported Pythons on schedule; oldest+latest on PRs)
- concurrency group with cancel-in-progress on PRs so stacked bundle PRs
  don't queue N-bundles x N-pythons jobs per push
erichare added 3 commits June 9, 2026 16:50
tomllib is stdlib only from Python 3.11, so the contract-smoke heredoc
failed with ModuleNotFoundError on every py3.10 matrix leg. Install the
tomli backport into the smoke venv and import it as a fallback.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant