mirror of
https://github.com/langflow-ai/langflow.git
synced 2026-07-24 20:28:43 +08:00
187 lines
6.4 KiB
YAML
187 lines
6.4 KiB
YAML
name: Smoke Tests
|
|
|
|
on:
|
|
pull_request:
|
|
types: [opened, labeled, synchronize, reopened]
|
|
release:
|
|
types: [published]
|
|
workflow_dispatch:
|
|
inputs:
|
|
ref:
|
|
description: 'Git ref to checkout (branch, tag, or commit SHA)'
|
|
required: false
|
|
default: ''
|
|
type: string
|
|
|
|
jobs:
|
|
backend-smoke-tests:
|
|
if: contains(github.event.pull_request.labels.*.name, 'smoke-test') || github.event_name == 'release' || github.event_name == 'workflow_dispatch'
|
|
name: "Backend Smoke Tests"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 15
|
|
|
|
steps:
|
|
- name: Checkout PR
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
ref: ${{ github.event.inputs.ref || github.ref }}
|
|
|
|
- name: Set up Python 3.12
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Install uv
|
|
uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "latest"
|
|
|
|
- name: Install backend dependencies
|
|
run: |
|
|
uv sync --dev
|
|
|
|
- name: Run backend smoke tests (critical tests only)
|
|
run: |
|
|
uv run pytest \
|
|
src/backend/tests/unit/test_database.py \
|
|
src/backend/tests/unit/test_login.py \
|
|
src/backend/tests/unit/api/v1/test_validate.py \
|
|
src/backend/tests/unit/test_endpoints.py \
|
|
src/backend/tests/unit/api/v1/test_flows.py \
|
|
src/backend/tests/unit/test_chat_endpoint.py \
|
|
src/backend/tests/unit/api/v1/test_api_key.py \
|
|
src/backend/tests/unit/api/v1/test_endpoints.py \
|
|
src/backend/tests/unit/components/languagemodels/test_openai_model.py \
|
|
src/backend/tests/unit/components/agents/test_agent_component.py \
|
|
src/backend/tests/unit/services/tracing/test_tracing_service.py \
|
|
-m 'not api_key_required' \
|
|
--tb=short \
|
|
-v
|
|
env:
|
|
LANGFLOW_SUPERUSER: admin
|
|
LANGFLOW_SUPERUSER_PASSWORD: 123456
|
|
|
|
lfx-smoke-tests:
|
|
# created a separate label for this since it's a different test suite for LFX components
|
|
if: contains(github.event.pull_request.labels.*.name, 'smoke-test') || github.event_name == 'release' || github.event_name == 'workflow_dispatch'
|
|
name: "LFX Smoke Tests"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
|
|
steps:
|
|
- name: Checkout PR
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
ref: ${{ github.event.inputs.ref || github.ref }}
|
|
|
|
- name: Set up Python 3.12
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: "3.12"
|
|
|
|
- name: Install uv
|
|
uses: astral-sh/setup-uv@v6
|
|
with:
|
|
version: "latest"
|
|
|
|
- name: Install lfx dependencies (isolated)
|
|
run: |
|
|
cd src/lfx
|
|
uv sync --dev
|
|
|
|
- name: Run lfx smoke tests (critical tests only)
|
|
run: |
|
|
cd src/lfx
|
|
uv run pytest \
|
|
tests/unit/graph/test_graph.py \
|
|
tests/unit/custom/component/test_component_instance_attributes.py \
|
|
tests/unit/schema/test_schema_message.py \
|
|
-m 'not api_key_required' \
|
|
--tb=short \
|
|
--maxfail=5 \
|
|
-v
|
|
env:
|
|
LANGFLOW_SUPERUSER: admin
|
|
LANGFLOW_SUPERUSER_PASSWORD: 123456
|
|
|
|
frontend-smoke-tests:
|
|
if: contains(github.event.pull_request.labels.*.name, 'smoke-test') || github.event_name == 'release' || github.event_name == 'workflow_dispatch'
|
|
name: "Frontend Smoke Tests"
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
|
|
steps:
|
|
- name: Checkout PR
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
ref: ${{ github.event.inputs.ref || github.ref }}
|
|
|
|
- name: Setup Node.js
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: "22"
|
|
cache: "npm"
|
|
cache-dependency-path: src/frontend/package-lock.json
|
|
|
|
- name: Install frontend dependencies
|
|
run: |
|
|
cd src/frontend
|
|
npm ci
|
|
|
|
- name: Run frontend smoke tests (unit tests only)
|
|
run: |
|
|
cd src/frontend
|
|
CI=true npx jest --ci --watchAll=false --passWithNoTests
|
|
env:
|
|
NODE_ENV: test
|
|
|
|
comment-results:
|
|
if: always() && (contains(github.event.pull_request.labels.*.name, 'smoke-test') || github.event_name == 'release' || github.event_name == 'workflow_dispatch')
|
|
name: "Comment Results"
|
|
needs: [backend-smoke-tests, lfx-smoke-tests, frontend-smoke-tests]
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Comment on PR with results
|
|
uses: actions/github-script@v8
|
|
with:
|
|
script: |
|
|
const backendStatus = '${{ needs.backend-smoke-tests.result }}';
|
|
const lfxStatus = '${{ needs.lfx-smoke-tests.result }}';
|
|
const frontendStatus = '${{ needs.frontend-smoke-tests.result }}';
|
|
|
|
const overallSuccess = backendStatus === 'success' && lfxStatus === 'success' && frontendStatus === 'success';
|
|
const emoji = overallSuccess ? '✅' : '❌';
|
|
const status = overallSuccess ? 'passed' : 'failed';
|
|
|
|
const backendEmoji = backendStatus === 'success' ? '✅' : '❌';
|
|
const lfxEmoji = lfxStatus === 'success' ? '✅' : '❌';
|
|
const frontendEmoji = frontendStatus === 'success' ? '✅' : '❌';
|
|
|
|
const comment = `${emoji} **Smoke tests ${status}**
|
|
|
|
Critical functionality validated:
|
|
|
|
- ${backendEmoji} **Backend**: 11 essential test files (database, auth, API endpoints, flows, components)
|
|
- ${lfxEmoji} **LFX**: Graph tests (langflow execution) - runs in isolation
|
|
- ${frontendEmoji} **Frontend**: Unit tests only (components, utilities)
|
|
|
|
**Coverage**: Core functionality without external dependencies
|
|
|
|
View details in the [Actions tab](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}).`;
|
|
|
|
// Only comment on PRs, not on releases or manual runs
|
|
if (context.payload.pull_request) {
|
|
await github.rest.issues.createComment({
|
|
issue_number: context.payload.pull_request.number,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
body: comment
|
|
});
|
|
} else {
|
|
console.log('Smoke test results:', comment);
|
|
}
|