This document details Langflow's continuous integration and delivery (CI/CD) pipeline implemented via GitHub Actions. The pipeline orchestrates automated testing, path-based filtering, code quality checks, and cross-platform validation.
For information about the release process, see 8.3 Release Process For details about nightly builds, see 8.4 Nightly Builds For Docker image building, see 8.6 Docker Build System
The CI pipeline is triggered on pull requests, merge groups, and manual workflow dispatches. It consists of multiple interconnected workflows that validate code changes and prepare artifacts.
The following diagram maps the high-level CI flow to the specific GitHub Action files and jobs that implement them.
Title: CI Workflow Execution Flow
Sources: .github/workflows/ci.yml1-76 .github/workflows/python_test.yml1-31 .github/workflows/typescript_test.yml1-38
The CI pipeline uses concurrency groups to prevent redundant runs and optimize resource usage. If a new commit is pushed to the same reference, the previous run is cancelled.
Sources: .github/workflows/ci.yml66-68
The path-filter job optimizes CI execution by determining which tests need to run based on file changes. It uses the dorny/paths-filter@v3 action with configurations defined in .github/changes-filter.yaml.
The filter maps file paths to logical boolean outputs used by downstream jobs.
| Output Key | Path Patterns (Examples) | Downstream Job |
|---|---|---|
python | src/backend/**, pyproject.toml | test-backend |
frontend | src/frontend/** | test-frontend |
components-changes | src/backend/base/langflow/components/** | test-templates |
docs | docs/** | test-docs-build |
Sources: .github/workflows/ci.yml187-232 .github/changes-filter.yaml1-113
github.event.pull_request.draft == false is false, standard CI execution is conditioned [.github/workflows/ci.yml:176].fast-track label bypass standard test requirements unless triggered by specific events [.github/workflows/ci.yml:177].steps.filter.outputs.docs == 'true'), the pipeline focuses on documentation validation [.github/workflows/ci.yml:195].Sources: .github/workflows/ci.yml172-210
The backend testing workflow (python_test.yml) executes unit, integration, and CLI tests across a matrix of Python versions.
Unit tests are split into parallel groups (defaulting to 5) to reduce total execution time [.github/workflows/python_test.yml:62-63]. Coverage is collected for Python 3.10 and uploaded to Codecov [.github/workflows/python_test.yml:102]. The unit_tests target in the Makefile is the primary entry point [Makefile:148-167].
Sources: .github/workflows/python_test.yml56-119 Makefile148-167
The test-cli job validates the distribution package by building a wheel and attempting a fresh installation:
astral-sh/setup-uv@v6 for environment preparation [.github/workflows/python_test.yml:201].make build main=true [.github/workflows/python_test.yml:218].uv pip install dist/*.whl [.github/workflows/python_test.yml:226].python -m langflow run --backend-only [.github/workflows/python_test.yml:234].http://localhost:7860/api/v1/auto_login [.github/workflows/python_test.yml:243].Sources: .github/workflows/python_test.yml189-256
Frontend testing involves unit tests and end-to-end (E2E) Playwright tests.
The typescript_test.yml workflow manages E2E testing with intelligent suite selection based on detected changes.
The workflow uses dorny/paths-filter to detect changes in specific frontend areas (e.g., api, database, workspace) and maps them to Playwright @tags [.github/workflows/typescript_test.yml:119-155].
Sources: .github/workflows/typescript_test.yml75-168
Tests are sharded dynamically based on the discovered test count to optimize parallel execution [.github/workflows/typescript_test.yml:234-265].
Sources: .github/workflows/typescript_test.yml234-265
Langflow maintains code standards through automated workflows and specific quality tools.
ruff for linting and formatting. The py_autofix.yml workflow executes ruff check --fix-only [.github/workflows/py_autofix.yml:27] and ruff format [.github/workflows/py_autofix.yml:28].scripts/ci/update_starter_projects.py [.github/workflows/py_autofix.yml:52].make build_component_index to ensure the registry is up to date [.github/workflows/py_autofix.yml:102].detect-secrets with a baseline file to prevent credential leakage [.secrets.baseline:1-88].Sources: .github/workflows/py_autofix.yml14-105 .secrets.baseline1-88
The cross-platform-test.yml workflow ensures Langflow functions across different operating systems and architectures.
The test matrix includes Linux, macOS (AMD64 and ARM64), and Windows [.github/workflows/cross-platform-test.yml:148-185].
Title: Cross-Platform Test Matrix Logic
Sources: .github/workflows/cross-platform-test.yml141-185
The workflow tests installation from PyPI (for specific versions) or from locally built wheels. It creates a fresh virtual environment using uv venv test-env --seed [.github/workflows/cross-platform-test.yml:230] and verifies the CLI by running langflow --help.
Sources: .github/workflows/cross-platform-test.yml187-240
The release.yml workflow is manually triggered (workflow_dispatch). It validates that the input release_tag is a valid git tag and not a branch [.github/workflows/release.yml:86-111] and follows semver format with a v prefix [.github/workflows/release.yml:122-132] before proceeding with package building for langflow-base, langflow, langflow-sdk, and lfx.
Sources: .github/workflows/release.yml1-180
The check-nightly-status job in ci.yml queries the PyPI API for langflow-nightly [.github/workflows/ci.yml:121]. It extracts the upload_time_iso_8601 for the latest version and compares it to the current date [.github/workflows/ci.yml:149]. If the nightly build has not been updated today, it signals a potential failure in the automated build pipeline.
Sources: .github/workflows/ci.yml107-171
| Variable | Default | Purpose |
|---|---|---|
PYTHON_VERSION | "3.13" | Primary Python version for CI tasks [.github/workflows/ci.yml:69] |
NODE_VERSION | "22" | Node.js version for frontend builds [.github/workflows/typescript_test.yml:68] |
PLAYWRIGHT_VERSION | "1.59.1" | Version used for browser installation and caching [.github/workflows/typescript_test.yml:73] |
DO_NOT_TRACK | "true" | Disables telemetry during test execution [.github/workflows/python_test.yml:144] |
Sources: .github/workflows/typescript_test.yml68-73 .github/workflows/python_test.yml144 .github/workflows/ci.yml69-74
Refresh this wiki