Files
langflow/.github/workflows/release.yml
Adam-Aghili 5211855941 chore: merge 1.7.1 back into main (#11129)
* docs: update component links to individual pages (#10706)

* Revert "Revert "docs: update component documentation links to individual pages""

This reverts commit 0bc27d6eab.

* [autofix.ci] apply automated fixes

* llm-selector-renamed

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Apply suggestions from code review

* [autofix.ci] apply automated fixes

* Apply suggestions from code review

* [autofix.ci] apply automated fixes

* rebuild-component-index

* update-component-index

* [autofix.ci] apply automated fixes

* build-index

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: avoid updating Message if ChatOutput is connected to ChatInput (#10586)

* fix: resolved merge conflict

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix: create a new message to avoid mutating shared instances

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix: resolved merge conflict

* [autofix.ci] apply automated fixes

* fix: resolved merge conflict

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix: added a check for using exisiting message object

* fix: remove unwanted import

* fix: resolve merge conflict

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix: add None checks to prevent errors

* fix: resolve merge conflict

* [autofix.ci] apply automated fixes

* fix: backend unit test

* fix: resolve merge conflict

* [autofix.ci] apply automated fixes

* fix: ruff styling errors

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Feat: Runflow optimization and improved dropdown behavior (#10720)

* feat: optimize dropdown filtering and output resolution

misc: remove commented out code

feat: add refresh button and sort flows by updated_at date from most to least recent

ruff (flow.py imports)

improve fn contracts in runflow and improve flow id retrieval logic based on graph exec context

add dynamic outputs and optimize db lookups

add flow cache and db query for getting a single flow by id or name

cache run outputs and add refresh context to build config

misc

misc

use ids for flow retrieval

misc

fix missing flow_id bug

add unit and integration tests

add input field flag to persist hidden fields at runtime

move unit tests and change input and output display names

chore: update component index

fix: fix tool mode when flow has multiple inputs by dynamically creating resolvers

chore: update component index

ruff (run_flow and tests)

add resolvers to outputs map for non tool mode runtime

fix tests (current flow excluded in db fetch)

mypy (helpers/flow.py)

chore: update component index

remove unused code and clean up comments

fix: persist user messages in chat-based flows via session injection

chore: update component index

empty string fallback for sessionid in chat.py

chore: update component index

chore: update component index

cache invalidation with timestamps

misc

add cache invalidation

chore: update component index

chore: update comp idx

ruff (run_flow.py)

change session_id input type to MessageTextInput

chore: update component index

chore: update component index

chore: update component index

chore: update component index

sync starter projects with main

chore: update component index

chore: update component index

chore: update component index

remove dead code + impl coderabbit suggestions

chore: update component index

chore: update component index

clear options metadata before updating

chore: update component index

sync starter projects with main

sync starter projects with main

default param val (list flows)

* chore: update component index

* add integration tests

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

---------

Co-authored-by: Cristhian Zanforlin <criszl@192.168.15.88>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Add dynamic tool mode descriptions for agent integration (#10744)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Add profile picture management and API endpoints (#10763)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* deps: upgrade altk (#10804)

upgrade altk:

* fix: use running event loop to fix asyncio error when calling mcp tools (#10806)

* use existing event loop instead of recreating when calling mcp tools

* component index

* [autofix.ci] apply automated fixes

* starter projects

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Improve file processing robustness and error feedback (#10781)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: resolve merge conflict (#10831)

* fix: fixed warning on console for nested button (#10724) (#10832)

* removed unnecessary buttons on the flows page

* added the asChild prop and hid button so they are not accessible by tabbing

* added tab index to ensure that buttons as not selectable using the tab

* made sure that accessibility is possible one bulk selection is enabled

* made sure that accessibility is possible one bulk selection is enabled

* Fix: added testcases and refactor

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

---------

Co-authored-by: Olayinka Adelakun <olayinkaadelakun@Olayinkas-MacBook-Pro.local>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: fixed warning on console (#10745) (#10830)

* remove console warnings

* [autofix.ci] apply automated fixes

---------

Co-authored-by: Olayinka Adelakun <olayinkaadelakun@mac.war.can.ibm.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: mask value to hide null field being returned (#10778) (#10829)

* fix: mask value to hide null field being returned

* [autofix.ci] apply automated fixes

* fix: added testcase and updated functionality

---------

Co-authored-by: Olayinka Adelakun <olayinkaadelakun@mac.war.can.ibm.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Carlos Coelho <80289056+carlosrcoelho@users.noreply.github.com>
Co-authored-by: Olayinka Adelakun <olayinkaadelakun@Olayinkas-MacBook-Pro.local>

* Fix: Allow refresh list button to stay stagnant while zoom (Safari) (… (#10827)

Fix: Allow refresh list button to stay stagnant while zoom (Safari) (#10777)

* remove sticky as it was causing the refresh list to float on safari

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes

---------

Co-authored-by: Olayinka Adelakun <olayinkaadelakun@mac.war.can.ibm.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* feat: Add superuser support for running any user flow (#10808)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Revert "feat: Add superuser support for running any user flow (#10808)"

This reverts commit 423419e3d8.

* fix: Ollama models list in Agent component (#10814)

* fix: Ollama model list fails to load in Agent and Ollama components

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Fix: Ensure Default Tab is Credential (#10779) (#10826)

* fix: made sure the tab is visible

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Fix: added typing

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix: added testcases

* fix: added handleOnValue change function and created a helper file

---------

Co-authored-by: Olayinka Adelakun <olayinkaadelakun@mac.war.can.ibm.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Olayinka Adelakun <olayinkaadelakun@Olayinkas-MacBook-Pro.local>
Co-authored-by: Carlos Coelho <80289056+carlosrcoelho@users.noreply.github.com>

* chore: update cuga version (#10737) (#10738)

Co-authored-by: Sami Marreed <sami.marreed@ibm.com>

* chore: Remove DataFrameToToolsetComponent and related tests (#10845)

Remove DataFrameToToolsetComponent and related tests

Deleted the DataFrameToToolsetComponent implementation, its import/registration in the processing module, and all associated unit tests. This cleans up unused code and test files related to converting DataFrame rows into toolset actions.

* fix: Handle GCP JSON parsing credentials (#10859)

fix: Proper parsing of GCP credentials JSON (#10828)

* fix: Proper parsing of GCP credentials JSON

* Update save_file.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Update test_save_file_component.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Fix GCP issues

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* Update test_save_file_component.py

* Update save_file.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* Update save_file.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Update save_file.py

* Fix ruff errors

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: anthropic constants (#10862)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Add feature flag check to simplified_run_flow_session (#10863)

* fix: Improve the debugging messages on startup (#10864)

* fix: Suppress SIGSEGV errors on startup (#10849)

* fix: Suppress SIGSEGV errors

* Update test_cli.py

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Update News Aggregator.json

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Don't fail if doc column is missing (#10746) (#10872)

* fix: Don't fail if doc column is missing

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* Surface warning message to the UI

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* Update test_docling_utils.py

* [autofix.ci] apply automated fixes

* Update test_docling_utils.py

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* add x-api-key auth option

* fix(auth): Disallow refresh token access to API endpoints

* fix: Properly support the Batch Run component for watsonX models (#10877)

* fix: Support Batch Run with watsonX (#10848)

* fix: Support Batch Run with watsonX

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Update batch_run.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Image upload for Gemini/Anthropic (#10880)

* fix: Image upload for Gemini/Anthropic (#10867)

* Fix image upload for Gemini/Anthropic and ChatOutput session_id preservation

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix ruff erros

* [autofix.ci] apply automated fixes

* resolve conflicts

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* build component index

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

---------

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Himavarsha <40851462+HimavarshaVS@users.noreply.github.com>

* fix: Improve the default startup logging for readability (#10894)

fix: Clean up the default startup logging (#10842)

* fix: Clean up the default startup logging

* [autofix.ci] apply automated fixes

* Update manager.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* Update test_security_cors.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Himavarsha <40851462+HimavarshaVS@users.noreply.github.com>

* Fix: lfx serve aysncio event loop error (#10888)

fix lfx serve asyncio event loop bug

* fix: Update LangflowCounts component to format star and Discord counts (#10896)

* fixed counts

* fix: Update LangflowCounts component to format star and Discord counts

---------

Co-authored-by: Deon Sanchez <69873175+deon-sanchez@users.noreply.github.com>

* Fix: update lfx serve tests to mock the .serve() to prevent hanging  (#10905)

port lfx serve test fix from main

* Fix: lfx run agent _noopresult not iterable error (#10893)

* fix _noopresult not iterable and session.add never awaited error and warning, respectively

* just make the add stub sync

* Fix: lfx run agent _noopresult not iterable error  (#10911)

* fix _noopresult not iterable and session.add never awaited error and warning, respectively

* just make the add stub sync

* the real final solution v3

* real solution v4

* revert

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Add graceful subprocess cleanup during shutdown (#10906)

* add mcp cleanup function

* refactor(mcp_cleanup.py): simplify error handling using contextlib.suppress to improve code readability
test(mcp_cleanup.py): update tests to use context manager for patching to enhance clarity and maintainability

---------

Co-authored-by: Adam Aghili <Adam.Aghili@ibm.com>

* fix(workflows): include src/lfx/uv.lock in git add command to ensure all necessary files are tracked
fix(Makefile): add --no-sources flag to uv build command for langflow_base to optimize build process

* chore(nightly_build.yml): remove unnecessary directory change for lfx in nightly build workflow to streamline the process

* chore(release_nightly): update build command to include --no-sources flag for Langflow Base CLI to ensure proper build configuration
fix(Makefile): remove --no-sources from build_langflow_base to align with updated build command in release workflow

* chore(chat.py): remove unused future annotations import to clean up code

* fix(chat.py): add future annotations import for better type hinting support
fix(deps.py): move certain imports outside TYPE_CHECKING for FastAPI compatibility and update type hinting for get_cache_service function

* chore: print version

* chore: use release_tag as version

* fix: --prerelease=allow

* fix: correctly raise file not found errors in File GET endpoints (#10922)

fix: correctly raise file not found errors in File GET endpoints (#10908)

* Clean up the file GET endpoints

* Add test

* [autofix.ci] apply automated fixes

* ruff/mypy

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* Fix issues with async




* use uvlock from main

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Hare <ericrhare@gmail.com>
Co-authored-by: Himavarsha <40851462+HimavarshaVS@users.noreply.github.com>

* fix: image pathing to operate with s3 storage (#10919) (#10929)

* Fix image pathing to operate with s3 storage

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* add test

* [autofix.ci] apply automated fixes

* ruff

* Add abstract method annotation

* [autofix.ci] apply automated fixes

* fix: use parse_file_path in get_files for S3 storage compatibility

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: himavarshagoutham <himavarshajan17@gmail.com>

* Feat: migrate MCP transport from SSE to streamable http (#10934)

* port #10727

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* refactor(deps.py): reorganize imports for clarity and compliance with FastAPI requirements
fix(deps.py): update return type of get_cache_service function to use Union for better type hinting

* fix: update sidebar icon styles to maintain backward compatibility (#10948)

* fix: Add empty input check in ALTKAgent for Anthropic (#10926)

* fix: Add empty input check in ALTKAgent for Anthropic

Shamelessly copies agent.py's empty input check to prevent Anthropic API errors.

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

---------

Co-authored-by: Jason Tsay <jason.tsay@ibm.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: add condition to not make folder download fail when flow has Note component (#10953)

* fix: Enhance error handling for langchain-core version compatibility (#10768)

* fix: Restrict message and session access to flow owners (#10973)

* feat(monitor.py): add user flow filtering to message sessions and messages endpoints to enhance data access control
refactor(monitor.py): remove dependencies from route decorators and pass current_user as a parameter for better clarity and maintainability

* test: update message-related test fixtures to associate messages with user-specific flows

This change ensures that messages created in tests are linked to a flow
specific to the active user, allowing for better filtering and
organization of messages in the database. It enhances the test
environment by simulating real-world usage scenarios more accurately.

* chore(monitor.py): reorder import statements to follow consistent structure and improve readability

* Fix: lfx run with agent component throws '_NoopResult' object is not iterable' (#10914)

* fix _noopresult not iterable and session.add never awaited error and warning, respectively

* just make the add stub sync

* the real final solution v3

* real solution v4

* revert

* fix noopresult not iterable error and add was not awaited warning

* do await check in aupdate_messages

* [autofix.ci] apply automated fixes

---------

Co-authored-by: Himavarsha <40851462+HimavarshaVS@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Support tool mode for components that have no inputs (#10982)

fix: Support tool mode in components without inputs (#10959)

* fix: Support tool mode in components without inputs

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: (Cherry Pick) default Ollama base url (#10981)

* fix: Properly set a default Ollama base url (#10940)

* fix: Properly set a default Ollama base url

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Add authentication to various endpoints (#10977) (#10985)

* fix: Add authentication to various endpoints (#10977)

* fix: Add authentication to various endpoints

* [autofix.ci] apply automated fixes

* Couple more endpoints

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Update log_router.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Update mcp.py

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* Fix ruff errors

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Update test_endpoints.py

* Fix tests

* Update Nvidia Remix.json

* Update test_registration.py

* [autofix.ci] apply automated fixes

* Update test_files.py

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Address review comments

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Review updates

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Fix: ensure streamable-http session manager is entered and exited from the same task (#10991)

* cherry pick #10966

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Fix: cuga integration (#10976) (#10990)

* Fix: cuga integration (#10976)

* feat: upgrade cuga version

* chore: add component index

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix: cuga component

* chore: update index

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* fix: upgrade cuga

* fix: new component index

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* chore: add component index

* [autofix.ci] apply automated fixes

* chore: update package

* chore: update index

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix: cuga relatetive temp

* fix: update cuga

* chore: add component index

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* fix: remove space

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

---------

Co-authored-by: Sami Marreed <sami.marreed@ibm.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* test(webhook): add comprehensive tests for webhook endpoint functionality and error handling (#10995)

* fix: Improve image path extraction and validation (#10999)

* fix: make key generated on mcp json be shown, make placeholder show up if key not generated (#10997)

* changed api key to show placeholder when api key is empty

* changed useMcpServer to use generated api key if store api key is empty, add dependency to callback

* [autofix.ci] apply automated fixes

* Added tests

* [autofix.ci] apply automated fixes

* Update src/frontend/src/pages/MainPage/pages/homePage/hooks/useMcpServer.ts

Co-authored-by: Cristhian Zanforlin Lousa <cristhian.lousa@gmail.com>

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Cristhian Zanforlin Lousa <cristhian.lousa@gmail.com>

* Fix: disable mcp sse endpoints astra (#11004)

* disable mcp sse transport endpoints in astra cloud

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Himavarsha <40851462+HimavarshaVS@users.noreply.github.com>

* fix: mcp-proxy process leak (#11008)

* fix: mcp-proxy process leak (#10988)

* fix leak

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Move MCP client imports out of loop iteration in get_servers (#10993)

* Initial plan

* Move MCPStdioClient and MCPStreamableHttpClient imports to get_servers function

Co-authored-by: phact <1313220+phact@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: phact <1313220+phact@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Edwin Jose <edwin.jose@datastax.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: phact <1313220+phact@users.noreply.github.com>
Co-authored-by: Adam Aghili <Adam.Aghili@ibm.com>

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: Sebastián Estévez <estevezsebastian@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Edwin Jose <edwin.jose@datastax.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: phact <1313220+phact@users.noreply.github.com>

* feat: add build-nightly-ep to docker-nightly-build (#10942)

* feat: add build-nightly-ep to docker-nightly-build

add build-nightly-ep to docker-nightly-build

* chore: update where langflow-nightly-ep is used

update where langflow-nightly-ep is used to match update where langflow-nightly-all

* chore: add nightly-main-ep to release_nightly

add nightly-main-ep to call_docker_build_main_ep in release_nightly

* chore: run what is already here

* chore: revert .secrets.baseline and let it regen

* fix(message.py): simplify file presence check using kwargs.get() for better readability and maintainability

* fix: Disable Local storage option in Write File component for cloud environments (#11003) (#11022)

* fix: Disable Local storage option in Write File component for cloud environments (#11003)

* modify savefile component

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* component index

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Update src/lfx/src/lfx/components/files_and_knowledge/save_file.py

Co-authored-by: Hamza Rashid <74062092+HzaRashid@users.noreply.github.com>

* fix ruff errors

* fix conflicts

* resolve conflicts

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix indentation error

* [autofix.ci] apply automated fixes

* update options dynamically

* build component index

* [autofix.ci] apply automated fixes

* fix ruff errors

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Hamza Rashid <74062092+HzaRashid@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Hamza Rashid <74062092+HzaRashid@users.noreply.github.com>

* fix: cuga update (#11019) (#11026)

* fix: update cuga version

* chore: build index

Co-authored-by: Sami Marreed <sami.marreed@ibm.com>

* fix: langwatch traces all api endpoints  (#11014)

* create tracerprovider so langwatch doesnt pick up fastapi calls

* move opentel sdk imports to the top

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Fix: improve exception handling and status code for disabled endpoints (#11012)

* port #11011

* recover line from 1.7.0

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix(deps): Pin langchain-mcp-adapters to resolve langchain-core compatibility (#11037)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: Make sure the research translation loop template is properly operating (#11042)

* fix: Make sure loop inputs are properly handled in research (#11029)

* fix: Make sure loop inputs are properly handled in research

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* Update reactflowUtils.ts

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Update reactflowUtils.ts

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Revert "Update reactflowUtils.ts"

This reverts commit 9c8b1d1aa1.

* Revert "Update reactflowUtils.ts"

This reverts commit 6be7ab95a5.

* Fix template

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* Update Research Translation Loop.json

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Update reactflowUtils.ts

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

---------

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* Update Research Translation Loop.json

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* fix: disable knowledge components in astra (#11047)

* cherry-pick #11046

* update component index

* update component index again

* fix: Advanced mode in read file component (#11041) (#11056)

* fix: Advanced mode in read file component (#11041)

* add a proper file path

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Update file.py

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* build component index

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* build component index

* [autofix.ci] apply automated fixes

* Fix incorrect use of .tempdir

Co-Authored-By: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Hare <ericrhare@gmail.com>

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Hare <ericrhare@gmail.com>

* fix: validate flow file_save path is in a valid location (#11060)

fix: validate flow file_save path is in a valid location (#11039)

* Validate flow file save path is in a valid location

* clean up logic

* fix tests

* comments

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* fix backslash vuln

* [autofix.ci] apply automated fixes

* add storage service param to function in agentic utils

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Ruff errors



* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* Resolve path in setup



* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* [autofix.ci] apply automated fixes

* [autofix.ci] apply automated fixes (attempt 2/3)

* [autofix.ci] apply automated fixes (attempt 3/3)

* comp index update

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Eric Hare <ericrhare@gmail.com>

* refactor: Move fetch credentials to the customizations (#11049) (#11063)

move fetch credentials to the customizations

* fix: Fix async context handling in serve command and add integration tests (#10776)

* refactor(tests): rename test IDs from helpersCreate List and logicPass to processingCreate List and flow_controlsPass for consistency and clarity in decision flow tests

* refactor: Langflow cloud updates (#10910)

* refactor: Use customization to get api base urls (#10871)

* fixed counts

* use customization to get api base urls

---------

Co-authored-by: Deon Sanchez <69873175+deon-sanchez@users.noreply.github.com>

* refactor: add code sample customizations (#10884)

* add code sample customizations

* import cleanup

* embedded widget generator

---------

Co-authored-by: Deon Sanchez <69873175+deon-sanchez@users.noreply.github.com>

* fix: release workflow  (#11087)

* chore(release.yml): update release_lfx input description and make it optional to improve clarity
feat(release.yml): add ensure-lfx-published job to automate LFX version check and publishing process to PyPI

* chore: clean up release workflow

comment out unneeded cross platform test and move steps around to match the already existing pattern

---------

Co-authored-by: cristhianzl <cristhian.lousa@gmail.com>

* Revert "fix: release workflow " (#11088)

Revert "fix: release workflow  (#11087)"

This reverts commit b26d03228e.

* fix: release workflow (#11089)

* chore(release.yml): update release_lfx input description and make it optional to improve clarity
feat(release.yml): add ensure-lfx-published job to automate LFX version check and publishing process to PyPI

* chore: clean up release workflow

comment out unneeded cross platform test and move steps around to match the already existing pattern

* chore: remove test-lfx-cross-platform

remove test-lfx-cross-platform

* chore: address some of co-pilots comments

address some of co-pilots comments

---------

Co-authored-by: cristhianzl <cristhian.lousa@gmail.com>

* fix: use langflow package path for database location (#11107)

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

* chore: bump versions for langflow 1.7.1, langflow-base 0.7.1, and lfx 0.2.1 (#11108)

* chore: update version to 0.2.1 in pyproject.toml

* bump version to 1.7.1 in package.json

* chore: bump version to 0.7.1 and update lfx dependency to 0.2.1 in pyproject.toml

* chore: bump versions for langflow, langflow-base, and lfx in pyproject.toml and uv.lock

* regenarate lock based on release branch

* new package-lock fixed

* fix: regenerate package-lock.json with missing nested dependencies

Adds canvas@2.11.2 (for rehype-mathjax) and yaml@2.8.2 (for tailwindcss)
that were missing from the lock file causing npm ci to fail.

---------

Co-authored-by: cristhianzl <cristhian.lousa@gmail.com>

* test(regression): update test to use box selection for Combine Text nodes instead of Ctrl/Meta+click for better reliability in Playwright with ReactFlow

* test(fileUploadComponent.spec.ts): increase timeout duration for file rename tests to ensure stability
test(general-bugs-reset-flow-run.spec.ts): add wait time to improve reliability of component build checks

* Template update

* [autofix.ci] apply automated fixes

* Fix test failures

---------

Co-authored-by: Mendon Kissling <59585235+mendonk@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: keval shah <kevalvirat@gmail.com>
Co-authored-by: Hamza Rashid <74062092+HzaRashid@users.noreply.github.com>
Co-authored-by: Cristhian Zanforlin <criszl@192.168.15.88>
Co-authored-by: Cristhian Zanforlin Lousa <cristhian.lousa@gmail.com>
Co-authored-by: Jordan Frazier <122494242+jordanrfrazier@users.noreply.github.com>
Co-authored-by: olayinkaadelakun <olayinka.adelakun@ibm.com>
Co-authored-by: Olayinka Adelakun <olayinkaadelakun@Olayinkas-MacBook-Pro.local>
Co-authored-by: Olayinka Adelakun <olayinkaadelakun@mac.war.can.ibm.com>
Co-authored-by: Carlos Coelho <80289056+carlosrcoelho@users.noreply.github.com>
Co-authored-by: Himavarsha <40851462+HimavarshaVS@users.noreply.github.com>
Co-authored-by: Sami Marreed <sami.marreed@ibm.com>
Co-authored-by: Edwin Jose <edwin.jose@datastax.com>
Co-authored-by: Eric Hare <ericrhare@gmail.com>
Co-authored-by: Mike Pawlowski <mpawlow@ca.ibm.com>
Co-authored-by: Viktor Avelino <64113566+viktoravelino@users.noreply.github.com>
Co-authored-by: Deon Sanchez <69873175+deon-sanchez@users.noreply.github.com>
Co-authored-by: himavarshagoutham <himavarshajan17@gmail.com>
Co-authored-by: Jason Tsay <jason.tsay@ibm.com>
Co-authored-by: Lucas Oliveira <62335616+lucaseduoli@users.noreply.github.com>
Co-authored-by: Gabriel Luiz Freitas Almeida <gabriel@langflow.org>
Co-authored-by: Sebastián Estévez <estevezsebastian@gmail.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: phact <1313220+phact@users.noreply.github.com>
Co-authored-by: Mike Fortman <michael.fortman@datastax.com>
2025-12-22 23:44:51 +00:00

641 lines
22 KiB
YAML

name: Langflow Release
run-name: Langflow Release by @${{ github.actor }}
on:
workflow_dispatch:
inputs:
release_tag:
description: "Tag to release from. This is the tag that contains the source code for the release."
required: true
type: string
release_package_base:
description: "Release Langflow Base"
required: true
type: boolean
default: false
release_package_main:
description: "Release Langflow"
required: true
type: boolean
default: false
release_lfx:
description: "Release LFX package (manually triggered)"
required: false
type: boolean
default: false
build_docker_base:
description: "Build Docker Image for Langflow Base"
required: true
type: boolean
default: false
build_docker_main:
description: "Build Docker Image for Langflow"
required: true
type: boolean
default: false
pre_release:
description: "Pre-release"
required: false
type: boolean
default: false
create_release:
description: "Whether to create a gh release"
required: false
type: boolean
default: false
dry_run:
description: "Dry run mode - disables all pushes to external services (PyPI, Docker, GitHub releases)"
required: false
type: boolean
default: true
jobs:
echo-inputs:
name: Echo Workflow Inputs
runs-on: ubuntu-latest
steps:
- name: Echo workflow inputs
run: |
echo "release_tag: ${{ inputs.release_tag }}"
echo "release_package_base: ${{ inputs.release_package_base }}"
echo "release_package_main: ${{ inputs.release_package_main }}"
echo "release_lfx: ${{ inputs.release_lfx }}"
echo "build_docker_base: ${{ inputs.build_docker_base }}"
echo "build_docker_main: ${{ inputs.build_docker_main }}"
echo "pre_release: ${{ inputs.pre_release }}"
echo "create_release: ${{ inputs.create_release }}"
echo "dry_run: ${{ inputs.dry_run }}"
validate-tag:
name: Validate Tag Input
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0 # Fetch all history - required for tags (?)
- name: Validate that input is a tag, not a branch
run: |
# Check if the input exists as a tag
if ! git tag -l | grep -q "^${{ inputs.release_tag }}$"; then
echo "Error: '${{ inputs.release_tag }}' is not a valid tag."
echo "Available tags:"
git tag -l | head -20
exit 1
fi
# Check if the input also exists as a branch (warn if so, but don't fail)
if git branch -r | grep -q "origin/${{ inputs.release_tag }}$"; then
echo "Tag '${{ inputs.release_tag }}' also exists as a branch. Exiting out of caution."
exit 1
fi
echo "Validated: '${{ inputs.release_tag }}' is a valid tag."
validate-dependencies:
name: Validate Release Dependencies
runs-on: ubuntu-latest
if: ${{ inputs.release_package_base || inputs.release_package_main || inputs.release_lfx || inputs.build_docker_base || inputs.build_docker_main }}
needs: [validate-tag]
steps:
- name: Validate that build-base is enabled if build-main is enabled
run: |
if [ "${{ inputs.release_package_main }}" = "true" ] && [ "${{ inputs.release_package_base }}" = "false" ]; then
echo "Error: Cannot release Langflow Main without releasing Langflow Base."
echo "Please enable 'release_package_base' or disable 'release_package_main'."
exit 1
fi
echo "✅ Release dependencies validated successfully."
ci:
name: CI
needs: [validate-tag, validate-dependencies]
uses: ./.github/workflows/ci.yml
with:
ref: ${{ inputs.release_tag }}
python-versions: "['3.10', '3.11', '3.12', '3.13']"
frontend-tests-folder: "tests"
release: true
run-all-tests: true
runs-on: ubuntu-latest
secrets: inherit
# Automatically ensure lfx is published before building langflow-base
# This job checks if the required lfx version exists on PyPI and publishes it if not
ensure-lfx-published:
name: Ensure LFX Dependency is Published
needs: [ci]
if: ${{ inputs.release_package_base }}
runs-on: ubuntu-latest
outputs:
lfx-version: ${{ steps.check-lfx.outputs.lfx_version }}
lfx-published: ${{ steps.check-lfx.outputs.already_published }}
lfx-published-now: ${{ steps.publish-lfx.outputs.published }}
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
ref: ${{ inputs.release_tag }}
- name: Setup Environment
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
python-version: "3.13"
prune-cache: false
- name: Check LFX version requirement
id: check-lfx
run: |
# Get the lfx version required by langflow-base from pyproject.toml
cd src/backend/base
LFX_REQUIREMENT=$(grep -E "^\s*\"lfx" pyproject.toml | head -1 | sed 's/.*lfx[~>=<]*//' | sed 's/[",].*//')
echo "LFX requirement from langflow-base: $LFX_REQUIREMENT"
# Get the actual lfx version from source
cd ../../lfx
LFX_SOURCE_VERSION=$(grep -E "^version\s*=" pyproject.toml | head -1 | sed 's/.*"\(.*\)".*/\1/')
echo "LFX source version: $LFX_SOURCE_VERSION"
echo "lfx_version=$LFX_SOURCE_VERSION" >> $GITHUB_OUTPUT
# Check if this version exists on PyPI
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "https://pypi.org/pypi/lfx/$LFX_SOURCE_VERSION/json")
if [ "$HTTP_STATUS" = "200" ]; then
echo "✅ LFX version $LFX_SOURCE_VERSION already exists on PyPI"
echo "already_published=true" >> $GITHUB_OUTPUT
else
echo "⚠️ LFX version $LFX_SOURCE_VERSION NOT found on PyPI (HTTP: $HTTP_STATUS)"
echo "Will build and publish LFX first..."
echo "already_published=false" >> $GITHUB_OUTPUT
fi
- name: Install LFX dependencies
if: steps.check-lfx.outputs.already_published == 'false'
run: uv sync --dev --package lfx
- name: Build LFX
if: steps.check-lfx.outputs.already_published == 'false'
run: |
cd src/lfx
rm -rf dist/
uv build --wheel --out-dir dist
echo "Built LFX wheel:"
ls -la dist/
- name: Test LFX CLI
if: steps.check-lfx.outputs.already_published == 'false'
run: |
cd src/lfx
uv pip install dist/*.whl --force-reinstall
uv run lfx --help
echo "✅ LFX CLI test passed"
- name: Publish LFX to PyPI
id: publish-lfx
if: steps.check-lfx.outputs.already_published == 'false' && !inputs.dry_run
env:
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
run: |
cd src/lfx
echo "Publishing LFX ${{ steps.check-lfx.outputs.lfx_version }} to PyPI..."
uv publish dist/*.whl
echo "published=true" >> $GITHUB_OUTPUT
echo "✅ LFX published successfully"
- name: Wait for PyPI propagation
if: steps.publish-lfx.outputs.published == 'true'
run: |
echo "Waiting 60 seconds for PyPI propagation..."
sleep 60
# Verify the package is available
LFX_VERSION="${{ steps.check-lfx.outputs.lfx_version }}"
for i in {1..5}; do
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "https://pypi.org/pypi/lfx/$LFX_VERSION/json")
if [ "$HTTP_STATUS" = "200" ]; then
echo "✅ LFX $LFX_VERSION is now available on PyPI"
exit 0
fi
echo "Attempt $i: LFX not yet available (HTTP: $HTTP_STATUS), waiting 30s..."
sleep 30
done
echo "❌ LFX $LFX_VERSION still not available on PyPI after waiting"
exit 1
- name: Skip publishing (dry run)
if: steps.check-lfx.outputs.already_published == 'false' && inputs.dry_run
run: |
echo "⚠️ DRY RUN: Would have published LFX ${{ steps.check-lfx.outputs.lfx_version }} to PyPI"
echo "In actual release, this step will publish the package"
build-base:
name: Build Langflow Base
needs: [ci, ensure-lfx-published]
if: ${{ inputs.release_package_base }}
runs-on: ubuntu-latest
outputs:
version: ${{ steps.check-version.outputs.version }}
skipped: ${{ steps.check-version.outputs.skipped }}
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
ref: ${{ inputs.release_tag }}
- name: Setup Environment
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
python-version: "3.13"
prune-cache: false
- name: Install the project
run: uv sync
- name: Check for dependency incompatibility
run: uv pip check
- name: Check Version
id: check-version
run: |
version=$(uv tree | grep 'langflow-base' | awk '{print $3}' | sed 's/^v//' | head -n 2 | xargs)
last_released_version=$(curl -s "https://pypi.org/pypi/langflow-base/json" | jq -r '.releases | keys | .[]' | sort -V | tail -n 1)
if [ "$version" = "$last_released_version" ]; then
echo "Version $version is already released. Skipping release."
echo skipped=true >> $GITHUB_OUTPUT
exit 1
else
echo version=$version >> $GITHUB_OUTPUT
echo skipped=false >> $GITHUB_OUTPUT
fi
- name: Build project for distribution
if: steps.check-version.outputs.skipped == 'false'
run: make build base=true args="--wheel"
- name: Test CLI
if: steps.check-version.outputs.skipped == 'false'
run: |
# TODO: Unsure why the whl is not built in src/backend/base/dist
mkdir src/backend/base/dist
mv dist/*.whl src/backend/base/dist
uv pip install src/backend/base/dist/*.whl
uv run python -m langflow run --host localhost --port 7860 --backend-only &
SERVER_PID=$!
# Wait for the server to start
timeout 120 bash -c 'until curl -f http://localhost:7860/api/v1/auto_login; do sleep 2; done' || (echo "Server did not start in time" && kill $SERVER_PID && exit 1)
# Terminate the server
kill $SERVER_PID || (echo "Failed to terminate the server" && exit 1)
sleep 20 # give the server some time to terminate
# Check if the server is still running
if kill -0 $SERVER_PID 2>/dev/null; then
echo "Failed to terminate the server"
exit 0
else
echo "Server terminated successfully"
fi
# PyPI publishing moved to after cross-platform testing
- name: Upload Artifact
if: steps.check-version.outputs.skipped == 'false'
uses: actions/upload-artifact@v4
with:
name: dist-base
path: src/backend/base/dist
build-main:
name: Build Langflow Main
if: ${{ inputs.release_package_main }}
needs: [build-base]
runs-on: ubuntu-latest
outputs:
version: ${{ steps.check-version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
ref: ${{ inputs.release_tag }}
- name: Setup Environment
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
python-version: "3.13"
prune-cache: false
- name: Install the project
run: uv sync
- name: Check for dependency incompatibility
run: uv pip check
# If pre-release is true, we need to check if ["a", "b", "rc", "dev", "post"] is in the version string
# if the version string is incorrect, we need to exit the workflow
- name: Check if pre-release
if: inputs.pre_release
run: |
version="${{ inputs.release_tag }}"
echo "$version"
if [[ "${version}" =~ ^([0-9]+\.)?([0-9]+\.)?[0-9]+((a|b|rc|dev|post)([0-9]+))$ ]]; then
echo "Pre-release version detected. Continuing with the release."
else
echo "Invalid pre-release version detected. Exiting the workflow."
exit 1
fi
- name: Check Version
id: check-version
run: |
version=$(uv tree | grep 'langflow' | grep -v 'langflow-base' | awk '{print $2}' | sed 's/^v//')
last_released_version=$(curl -s "https://pypi.org/pypi/langflow/json" | jq -r '.releases | keys | .[]' | sort -V | tail -n 1)
if [ "$version" = "$last_released_version" ]; then
echo "Version $version is already released. Skipping release."
echo skipped=true >> $GITHUB_OUTPUT
exit 1
else
echo version=$version >> $GITHUB_OUTPUT
fi
- name: Wait for PyPI Propagation
if: needs.build-base.outputs.skipped == 'false'
run: sleep 300 # wait for 5 minutes to ensure PyPI propagation
- name: Build project for distribution
run: make build main=true args="--no-sources --wheel"
- name: Test CLI
run: |
uv pip install dist/*.whl
uv run python -m langflow run --host localhost --port 7860 --backend-only &
SERVER_PID=$!
# Wait for the server to start
timeout 120 bash -c 'until curl -f http://localhost:7860/health_check; do sleep 2; done' || (echo "Server did not start in time" && kill $SERVER_PID && exit 1)
# Terminate the server
kill $SERVER_PID || (echo "Failed to terminate the server" && exit 1)
sleep 20 # give the server some time to terminate
# Check if the server is still running
if kill -0 $SERVER_PID 2>/dev/null; then
echo "Failed to terminate the server"
exit 0
else
echo "Server terminated successfully"
fi
# PyPI publishing moved to after cross-platform testing
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: dist-main
path: dist
build-lfx:
name: Build LFX
needs: [build-base]
if: ${{ inputs.release_lfx }}
runs-on: ubuntu-latest
outputs:
version: ${{ steps.check-version.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
ref: ${{ inputs.release_tag }}
- name: Setup Environment
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
cache-dependency-glob: "uv.lock"
python-version: "3.13"
prune-cache: false
- name: Install LFX dependencies
run: uv sync --dev --package lfx
- name: Check Version
id: check-version
run: |
cd src/lfx
version=$(uv tree | grep 'lfx' | head -n 1 | awk '{print $2}' | sed 's/^v//')
last_released_version=$(curl -s "https://pypi.org/pypi/lfx/json" | jq -r '.releases | keys | .[]' | sort -V | tail -n 1)
if [ "$version" = "$last_released_version" ]; then
echo "Version $version is already released. Skipping release."
exit 1
else
echo version=$version >> $GITHUB_OUTPUT
fi
- name: Build project for distribution
run: |
cd src/lfx
rm -rf dist/
uv build --wheel --out-dir dist
- name: Test CLI
run: |
cd src/lfx
uv pip install dist/*.whl --force-reinstall
uv run lfx --help
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: dist-lfx
path: src/lfx/dist
test-cross-platform:
name: Test Cross-Platform Installation
needs: [build-base, build-main, build-lfx]
if: |
always() &&
!cancelled() &&
(needs.build-base.result == 'success' || needs.build-main.result == 'success')
uses: ./.github/workflows/cross-platform-test.yml
with:
base-artifact-name: "dist-base"
main-artifact-name: "dist-main"
lfx-artifact-name: "${{ inputs.release_lfx && 'dist-lfx' || '' }}"
publish-base:
name: Publish Langflow Base to PyPI
if: ${{ inputs.release_package_base }}
needs: [build-base, test-cross-platform]
runs-on: ubuntu-latest
steps:
- name: Download base artifact
uses: actions/download-artifact@v5
with:
name: dist-base
path: src/backend/base/dist
- name: Setup Environment
uses: astral-sh/setup-uv@v6
with:
enable-cache: false
python-version: "3.13"
- name: Publish base to PyPI
if: ${{ !inputs.dry_run }}
env:
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
run: |
cd src/backend/base && uv publish dist/*.whl
publish-main:
name: Publish Langflow Main to PyPI
if: ${{ inputs.release_package_main }}
needs: [build-main, test-cross-platform, publish-base]
runs-on: ubuntu-latest
steps:
- name: Download main artifact
uses: actions/download-artifact@v5
with:
name: dist-main
path: dist
- name: Setup Environment
uses: astral-sh/setup-uv@v6
with:
enable-cache: false
python-version: "3.13"
- name: Publish main to PyPI
if: ${{ !inputs.dry_run }}
env:
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
run: |
uv publish dist/*.whl
publish-lfx:
name: Publish LFX to PyPI
if: ${{ inputs.release_lfx }}
needs: [build-lfx, test-cross-platform]
runs-on: ubuntu-latest
steps:
- name: Download LFX artifact
uses: actions/download-artifact@v5
with:
name: dist-lfx
path: src/lfx/dist
- name: Setup Environment
uses: astral-sh/setup-uv@v6
with:
enable-cache: false
python-version: "3.13"
- name: Publish LFX to PyPI
if: ${{ !inputs.dry_run }}
env:
UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
run: |
cd src/lfx && uv publish dist/*.whl
# test-lfx-cross-platform:
# name: Test LFX Cross-Platform Installation
# if: ${{ inputs.release_lfx }}
# needs: [build-lfx]
# runs-on: ${{ matrix.os }}
# strategy:
# matrix:
# os: [ubuntu-latest, windows-latest, macos-latest]
# python-version: ["3.10", "3.11", "3.12", "3.13"]
# steps:
# - name: Download LFX artifact
# uses: actions/download-artifact@v5
# with:
# name: dist-lfx
# path: dist-lfx
# - name: Setup Environment
# uses: astral-sh/setup-uv@v6
# with:
# enable-cache: false
# python-version: ${{ matrix.python-version }}
# - name: Test LFX installation
# run: |
# uv pip install dist-lfx/*.whl
# uv run lfx --help
call_docker_build_base:
name: Call Docker Build Workflow for Langflow Base
if: ${{ inputs.build_docker_base }}
needs: [ci]
uses: ./.github/workflows/docker-build-v2.yml
with:
ref: ${{ inputs.release_tag }}
release_type: base
pre_release: ${{ inputs.pre_release }}
push_to_registry: ${{ !inputs.dry_run }}
secrets: inherit
call_docker_build_main:
name: Call Docker Build Workflow for Langflow
if: ${{ inputs.build_docker_main }}
needs: [ci]
uses: ./.github/workflows/docker-build-v2.yml
with:
ref: ${{ inputs.release_tag }}
release_type: main
pre_release: ${{ inputs.pre_release }}
push_to_registry: ${{ !inputs.dry_run }}
secrets: inherit
call_docker_build_main_backend:
name: Call Docker Build Workflow for Langflow Backend
if: ${{ inputs.build_docker_main && !inputs.dry_run }}
needs: [call_docker_build_main]
uses: ./.github/workflows/docker-build-v2.yml
with:
ref: ${{ inputs.release_tag }}
release_type: main-backend
pre_release: ${{ inputs.pre_release }}
push_to_registry: ${{ !inputs.dry_run }}
secrets: inherit
call_docker_build_main_frontend:
name: Call Docker Build Workflow for Langflow Frontend
if: ${{ inputs.build_docker_main && !inputs.dry_run }}
needs: [call_docker_build_main]
uses: ./.github/workflows/docker-build-v2.yml
with:
ref: ${{ inputs.release_tag }}
release_type: main-frontend
pre_release: ${{ inputs.pre_release }}
push_to_registry: ${{ !inputs.dry_run }}
secrets: inherit
call_docker_build_main_ep:
name: Call Docker Build Workflow for Langflow with Entrypoint
if: ${{ inputs.build_docker_main }}
needs: [ci]
uses: ./.github/workflows/docker-build-v2.yml
with:
ref: ${{ inputs.release_tag }}
release_type: main-ep
pre_release: ${{ inputs.pre_release }}
push_to_registry: ${{ !inputs.dry_run }}
secrets: inherit
call_docker_build_main_all:
name: Call Docker Build Workflow for langflow-all
if: ${{ inputs.build_docker_main }}
needs: [ci]
uses: ./.github/workflows/docker-build-v2.yml
with:
ref: ${{ inputs.release_tag }}
release_type: main-all
pre_release: ${{ inputs.pre_release }}
push_to_registry: ${{ !inputs.dry_run }}
secrets: inherit
create_release:
name: Create Release
runs-on: ubuntu-latest
needs: [build-main, publish-main]
if: |
always() &&
!cancelled() &&
!inputs.dry_run &&
inputs.create_release &&
needs.build-main.result == 'success' &&
needs.publish-main.result == 'success'
steps:
- uses: actions/download-artifact@v4
with:
name: dist-main
path: dist
- name: Create Release
uses: ncipollo/release-action@v1
with:
artifacts: dist/*
token: ${{ secrets.GITHUB_TOKEN }}
draft: false
generateReleaseNotes: true
prerelease: ${{ inputs.pre_release }}
tag: ${{ needs.build-main.outputs.version }}
allowUpdates: true
updateOnlyUnreleased: false