feat: Add smoke tests workflow for PR validation (#9125)

* feat: Add smoke tests workflow for PR validation

- Adds smoke-test label trigger for running tests without API keys
- Runs backend tests excluding api_key_required markers
- Runs full frontend test suite with mocked APIs
- Provides fast feedback (~10-15 min) before lgtm label
- Enables external contributors to validate changes without API costs
- Comments results back to PR automatically

Usage: Add 'smoke-test' label to any PR to trigger

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: Fix YAML indentation in smoke-tests workflow script block

* refactor: Focus smoke tests on critical functionality only

- Run only 10 essential backend test files (version, schema, serialization, etc.)
- Run only frontend unit tests (skip integration/e2e)
- Reduce timeout from 15 to 8 minutes
- Target critical functionality without external dependencies
- Avoid problematic database/API-dependent tests

* fix: Use correct Jest CLI option --testPathPatterns

* add frontend tests

* add tests

* change to essential tests

* fix: Create superuser in test_load_bundles_from_urls test

The test_load_bundles_from_urls test was failing because the load_bundles_from_urls
function expects a superuser to exist in the database, but the test client fixture
sets LANGFLOW_AUTO_LOGIN=false by default, which doesn't create a superuser.

This fix creates a superuser in the test database before calling the function,
resolving the 'Superuser not found in the database' error.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* add on conditions

* fix: Check PR labels correctly for smoke test trigger

Change condition from github.event.label.name to
github.event.pull_request.labels.*.name to work with all trigger
events (synchronize, opened, etc), not just labeled events.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* add workdispatch

* remove initial test

* adding timeout minutes

* edit env var

---------

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Yuqi Tang 2025-07-28 11:27:05 -07:00 • committed by GitHub
commit b7513e5c6f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 113 additions and 0 deletions

View file

@ -18,6 +18,7 @@ from langflow.initial_setup.setup import (
update_projects_components_with_latest_component_versions,
)
from langflow.interface.components import aget_all_types_dict
from langflow.services.auth.utils import create_super_user
from langflow.services.database.models import Flow
from langflow.services.database.models.folder.model import Folder
from langflow.services.deps import get_settings_service, session_scope
@ -238,6 +239,14 @@ async def test_load_bundles_from_urls():
]
settings_service.auth_settings.AUTO_LOGIN = True
# Create a superuser in the test database since load_bundles_from_urls requires one
async with session_scope() as session:
await create_super_user(
username=settings_service.auth_settings.SUPERUSER,
password=settings_service.auth_settings.SUPERUSER_PASSWORD,
db=session,
)
temp_dirs, components_paths = await load_bundles_from_urls()
try: