5.4 KiB
5.4 KiB
Cross-Platform Install Tests
Unified workflow for testing langflow installation across multiple platforms, supporting both manual and programmatic execution.
Manual Testing
1. Test from PyPI
Tests published langflow packages from PyPI across all platforms.
Via GitHub UI:
- Go to Actions → Cross-Platform Installation Test
- Check "Test from PyPI instead of building from source"
- Optionally specify a version (leave empty for latest)
- Click "Run workflow"
Via CLI:
# Test latest version
gh workflow run cross-platform-test.yml -f test-from-pypi=true
# Test specific version
gh workflow run cross-platform-test.yml \
-f test-from-pypi=true \
-f langflow-version="1.0.18"
2. Test from Source
Builds and tests langflow from current branch source code.
Via GitHub UI:
- Go to Actions → Cross-Platform Installation Test
- Leave "Test from PyPI instead of building from source" unchecked
- Click "Run workflow"
Via CLI:
# Test current branch
gh workflow run cross-platform-test.yml -f test-from-pypi=false
Programmatic Testing
For CI, releases, and other automated workflows that test wheel installation:
jobs:
test-cross-platform:
uses: ./.github/workflows/cross-platform-test.yml
with:
base-artifact-name: "dist-base"
main-artifact-name: "dist-main"
test-timeout: 120 # optional, defaults to 5
Platforms Tested
- Linux: AMD64
- macOS: Intel (AMD64), Apple Silicon (ARM64)
- Windows: AMD64
- Python versions:
- Linux & macOS: 3.10 and 3.13
- Windows: 3.10 and 3.12 (3.12 used instead of 3.13 for better stability)
What Gets Tested
- Package Installation:
uv pip install langflow(PyPI) or local wheel installation - Dependencies: Additional packages like
openaifor full functionality - CLI Help:
langflow --help - Server Startup:
langflow run --backend-onlywith/health_checkendpoint validation - Python Import:
import langflow
Common Options
# Extended timeout (10 minutes instead of default 5)
gh workflow run cross-platform-test.yml \
-f test-timeout=10
# Test specific PyPI version
gh workflow run cross-platform-test.yml \
-f test-from-pypi=true \
-f langflow-version="1.0.18"
Use Cases
- Before releases: Verify current branch works on all platforms
- After PyPI publish: Confirm published packages install correctly
- Debugging issues: Test specific versions when users report problems
- Development: Quick cross-platform validation during feature work
Technical Details
Installation Methods
- PyPI testing: Uses
uv pip installwith official PyPI packages - Source testing: Builds wheels from source, then installs locally
- Dependencies: Automatically installs additional packages (
openai) for full functionality
Health Checking
- Endpoint: Uses
/health_checkfor reliable server readiness validation - Validation: Checks database connectivity and chat service functionality
- Timeout: Configurable timeout with proper cross-platform handling
Platform-Specific Optimizations
- Windows: Uses Python 3.12 for better package ecosystem stability
- Unix: Uses Python 3.13 for latest language features where stable
- Virtual Environments: Uses
uv venv --seedfor consistent pip availability
Workflow Architecture
Unified Single-File Design:
cross-platform-test.yml
├── workflow_dispatch (Manual UI)
│ ├── PyPI Testing (test-from-pypi=true)
│ └── Source Testing (test-from-pypi=false)
└── workflow_call (Programmatic API)
└── Wheel Testing (always uses wheel method)
Key Benefits:
- Single File: No complex workflow chains or parameter passing issues
- Unified Logic: Same test matrix for all use cases
- Smart Routing: Automatically determines install method based on trigger type
- Context-Aware: Summary messages adapt to manual vs programmatic usage
Trigger Types
Manual (workflow_dispatch):
- Simple boolean toggle: "Test from PyPI" vs "Test from Source"
- User-friendly parameter names
- Context-specific success/failure messages
Programmatic (workflow_call):
- Full parameter control for CI/releases
- Backward compatible with existing workflows
- Always uses wheel installation method (tests built artifacts)
Implementation Details
The workflow uses dynamic job conditions to route execution:
# Build only runs for source testing or when no artifacts provided
build-if-needed:
if: |
(github.event_name == 'workflow_dispatch' && inputs.test-from-pypi == false) ||
(github.event_name == 'workflow_call' && (inputs.base-artifact-name == '' || inputs.main-artifact-name == ''))
# Test matrix adapts install method based on trigger
test-installation:
steps:
- name: Determine install method
# workflow_dispatch: maps boolean to install method
# workflow_call: always uses wheel method
- name: Install from PyPI
if: steps.install-method.outputs.method == 'pypi'
- name: Install from wheels
if: steps.install-method.outputs.method == 'wheel'
Results
- ✅ Success: All platforms pass installation and basic functionality
- ❌ Failure: One or more platforms fail (check logs for details)
- Each platform/Python combination runs independently
- Parallel execution: All platforms tested simultaneously for faster feedback