Skip to content

ci(release_bundles): build lfx wheel locally for smoke test#13207

Merged
erichare merged 1 commit into
mainfrom
ci/release-bundles-build-lfx
May 19, 2026
Merged

ci(release_bundles): build lfx wheel locally for smoke test#13207
erichare merged 1 commit into
mainfrom
ci/release-bundles-build-lfx

Conversation

@erichare
Copy link
Copy Markdown
Collaborator

@erichare erichare commented May 19, 2026

Summary

The bundle smoke test in release_bundles.yml installs the freshly built bundle wheels into a clean venv, which makes uv resolve their lfx>=X.Y,<Z pin against PyPI. When bundles are released ahead of a matching lfx (the typical case — bundles ship more often than lfx bumps land on PyPI), the resolve fails:

× No solution found when resolving dependencies:
╰─▶ Because only lfx<=0.4.3 is available and lfx-arxiv==0.1.0 depends on
    lfx>=0.5.0,<0.6.0, we can conclude that lfx-arxiv==0.1.0 cannot be used.

Hit this trying to publish the first stable lfx-arxiv / lfx-duckduckgo off release-1.10.0, which already has lfx at 0.5.0 locally but lfx 0.5.0 isn't on PyPI yet.

What changed

release_bundles.yml:

  • Build the lfx wheel from the current ref in the build-bundles job and upload it as a separate dist-lfx-smoketest artifact.
  • In test-install, download the lfx artifact and pass the lfx wheel + bundle wheels together to uv pip install. The local lfx wheel satisfies the bundle pin, and remaining transitive deps resolve normally from PyPI.
  • publish-bundles is unchanged — it still only downloads the dist-bundles artifact, so only bundle wheels get pushed to PyPI.

Once this lands on main, cherry-pick to release-1.10.0 to use the workflow from that branch (or trigger from main with release_tag=release-1.10.0).

Summary by CodeRabbit

  • Chores
    • Enhanced release workflow to build and test the locally constructed wheel component alongside bundle wheels. Improved installation testing to validate both components together in a fresh environment, strengthening the release quality assurance process.

Review Change Stack

The release_bundles.yml smoke test installs bundle wheels into a fresh
venv, which makes uv resolve their `lfx>=X.Y,<Z` pin against PyPI. When
bundles are released ahead of a matching lfx (typical case — bundles
ship more often than lfx bumps land on PyPI), the resolve fails:

  Because only lfx<=0.4.3 is available and lfx-arxiv==0.1.0 depends on
  lfx>=0.5.0,<0.6.0, we can conclude that lfx-arxiv==0.1.0 cannot be
  used.

Build the lfx wheel from the current ref in the build-bundles job and
install it alongside the bundle wheels in the smoke test. The lfx
wheel ships as a separate `dist-lfx-smoketest` artifact and is NOT
included in the publish-bundles step — only the `dist-bundles`
artifact gets pushed to PyPI.
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 19, 2026

Walkthrough

The release workflow now builds an lfx wheel from src/lfx during the build-bundles job, uploads it as a separate artifact, and updates the test-install job to download and install both the lfx wheel and bundle wheels together in the smoke test environment.

Changes

LFX wheel in release workflow

Layer / File(s) Summary
Build and upload lfx wheel in build-bundles
.github/workflows/release_bundles.yml
Adds a conditional step to build an lfx wheel from src/lfx when bundles are found, uploads it as dist-lfx-smoketest artifact, with inline comments describing the pin-resolution intent.
Test installation with lfx and bundle wheels
.github/workflows/release_bundles.yml
Updates test-install to download the dist-lfx-smoketest artifact and install both the lfx wheel(s) and bundle wheel(s) (Unix and Windows variants) into the freshly created test virtual environment.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Suggested labels

bug

🚥 Pre-merge checks | ✅ 9
✅ Passed checks (9 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly and clearly describes the primary change: building the lfx wheel locally for the smoke test in the CI release bundles workflow.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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.
Test Coverage For New Implementations ✅ Passed PR modifies only GitHub Actions workflow file. No new backend/frontend code requiring unit/integration tests. Check targets application code, not CI workflows.
Test Quality And Coverage ✅ Passed Custom check for test quality is not applicable. PR modifies CI/CD workflow only, no new test implementations are introduced.
Test File Naming And Structure ✅ Passed Custom check requires verification of test file naming/structure. PR only modifies .github/workflows/release_bundles.yml with no test files added/modified. Check not applicable.
Excessive Mock Usage Warning ✅ Passed PR modifies only a GitHub Actions workflow file (.github/workflows/release_bundles.yml). No test files or mocks are involved. Check is not applicable to workflow configuration.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/release-bundles-build-lfx

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.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 19, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 53.02%. Comparing base (5620ce1) to head (65bc9e6).
⚠️ Report is 6 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main   #13207      +/-   ##
==========================================
- Coverage   53.12%   53.02%   -0.10%     
==========================================
  Files        2033     2033              
  Lines      184171   184171              
  Branches    26195    27710    +1515     
==========================================
- Hits        97843    97662     -181     
- Misses      85219    85400     +181     
  Partials     1109     1109              
Flag Coverage Δ
backend 56.16% <ø> (-0.06%) ⬇️
frontend 53.00% <ø> (-0.14%) ⬇️
lfx 50.07% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 150 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Copy Markdown
Contributor

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

🧹 Nitpick comments (1)
.github/workflows/release_bundles.yml (1)

89-89: ⚡ Quick win

Consider pinning GitHub Actions to commit SHAs for better supply-chain security.

Version tags on GitHub Actions (e.g., @v6, @v7) can be reassigned and represent a supply-chain risk. Pinning to full commit SHAs is a stronger security practice. Note that this workflow has multiple pre-existing unpinned actions; if enforcing this as a policy, consider addressing all of them consistently rather than only new additions.

🤖 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 @.github/workflows/release_bundles.yml at line 89, Replace the unpinned
action reference "uses: actions/upload-artifact@v6" with a pinned full commit
SHA to mitigate supply-chain risk: locate the "uses: actions/upload-artifact@v6"
entry in the workflow, find the corresponding commit SHA for the same release on
the actions/upload-artifact repository (e.g., via GitHub's tag commit or release
page), and update the line to "uses: actions/upload-artifact@<FULL_COMMIT_SHA>"
so the workflow references an immutable commit; apply the same pinning approach
to any other unpinned "uses:" entries if you plan to enforce this policy
consistently.
🤖 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.

Nitpick comments:
In @.github/workflows/release_bundles.yml:
- Line 89: Replace the unpinned action reference "uses:
actions/upload-artifact@v6" with a pinned full commit SHA to mitigate
supply-chain risk: locate the "uses: actions/upload-artifact@v6" entry in the
workflow, find the corresponding commit SHA for the same release on the
actions/upload-artifact repository (e.g., via GitHub's tag commit or release
page), and update the line to "uses: actions/upload-artifact@<FULL_COMMIT_SHA>"
so the workflow references an immutable commit; apply the same pinning approach
to any other unpinned "uses:" entries if you plan to enforce this policy
consistently.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cf1eb2b9-9905-489e-ab0f-cfbfbe00717a

📥 Commits

Reviewing files that changed from the base of the PR and between baceda7 and 65bc9e6.

📒 Files selected for processing (1)
  • .github/workflows/release_bundles.yml

@github-actions
Copy link
Copy Markdown
Contributor

Frontend Unit Test Coverage Report

Coverage Summary

Lines Statements Branches Functions
Coverage: 35%
35.47% (40695/114715) 68.12% (5605/8227) 35.95% (943/2623)

Unit Test Results

Tests Skipped Failures Errors Time
4018 0 💤 0 ❌ 0 🔥 7m 57s ⏱️

@erichare erichare merged commit d5e5e46 into main May 19, 2026
111 of 113 checks passed
@erichare erichare deleted the ci/release-bundles-build-lfx branch May 19, 2026 16:54
erichare added a commit that referenced this pull request May 19, 2026
… (#13210)

* ci: stop publishing -nightly bundle variants; release bundles on demand (#13206)

Bundles (lfx-arxiv, lfx-duckduckgo) change infrequently enough that a
nightly cadence is overkill. Drop the rename-to-`-nightly` and bundle
publish lanes from the nightly pipeline and add a dedicated
workflow_dispatch-only release_bundles.yml for purposeful releases.

- nightly_build.yml: drop update_bundle_versions.py invocation and the
  src/bundles/*/pyproject.toml git-add guard.
- release_nightly.yml: remove build-nightly-bundles and
  publish-nightly-bundles jobs; untether test-cross-platform and
  publish-nightly-main from them.
- release_bundles.yml (new): build all src/bundles/* wheels, run a
  cross-OS install smoke test, then publish to PyPI under their stable
  names. Tolerates already-published versions so re-runs without a
  version bump are no-ops.

release.yml still owns bundle publishing as part of main releases.

Manual follow-up (PyPI admin): delete the lfx-arxiv-nightly and
lfx-duckduckgo-nightly projects from PyPI.

* ci(release_bundles): build lfx wheel locally for smoke test (#13207)

The release_bundles.yml smoke test installs bundle wheels into a fresh
venv, which makes uv resolve their `lfx>=X.Y,<Z` pin against PyPI. When
bundles are released ahead of a matching lfx (typical case — bundles
ship more often than lfx bumps land on PyPI), the resolve fails:

  Because only lfx<=0.4.3 is available and lfx-arxiv==0.1.0 depends on
  lfx>=0.5.0,<0.6.0, we can conclude that lfx-arxiv==0.1.0 cannot be
  used.

Build the lfx wheel from the current ref in the build-bundles job and
install it alongside the bundle wheels in the smoke test. The lfx
wheel ships as a separate `dist-lfx-smoketest` artifact and is NOT
included in the publish-bundles step — only the `dist-bundles`
artifact gets pushed to PyPI.

* ci(nightly): re-pin bundle lfx deps to lfx-nightly during nightly build (#13208)

The nightly pipeline renames the workspace `lfx` package to `lfx-nightly`
in `src/lfx/pyproject.toml` and the root workspace dep, but leaves each
`src/bundles/*/pyproject.toml`'s `"lfx>=X.Y,<Z"` pin unchanged. With the
workspace `lfx` gone and PyPI still on lfx 0.4.3, the create-nightly-tag
job's `uv lock` fails:

  × No solution found when resolving dependencies for split [...]
  ╰─▶ Because only lfx<=0.4.3 is available and lfx-arxiv depends on
      lfx>=0.5.0,<0.6.0, we can conclude that lfx-arxiv's requirements
      are unsatisfiable.

`update_lfx_version.py` now also rewrites the `lfx` (or already-rewritten
`lfx-nightly`) specifier in every `src/bundles/*/pyproject.toml` to
`lfx-nightly==<dev version>`, mirroring how `update_lf_base_dependency`
re-pins the lfx dep inside `langflow-base`. The lookahead in the regex
prevents matching sibling packages like `lfx-arxiv` / `lfx-duckduckgo`.

No-op when no bundle pyprojects exist (e.g. on main today), so this is
safe to merge ahead of the bundle extraction landing on main. Restored
the guarded `git add src/bundles/*/pyproject.toml` step so the modified
bundle pyprojects ride the same commit/tag as the rest of the nightly
version bumps.

Cherry-pick to release-1.10.0 to unblock nightlies cut from that branch.
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