name: Smoke Tests on: pull_request: types: [opened, labeled, synchronize, reopened] workflow_dispatch: jobs: smoke-tests: if: contains(github.event.pull_request.labels.*.name, 'smoke-test') name: "Smoke Tests (No API Keys)" runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: Checkout PR uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python 3.12 uses: actions/setup-python@v5 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/graph/test_graph.py \ src/backend/tests/unit/services/flow/test_flow_runner.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 \ src/backend/tests/unit/custom/component/test_component_instance_attributes.py \ src/backend/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 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "21" 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 - name: Comment on PR with results if: always() uses: actions/github-script@v7 with: script: | const conclusion = '${{ job.status }}'; const emoji = conclusion === 'success' ? '✅' : '❌'; const status = conclusion === 'success' ? 'passed' : 'failed'; const comment = `${emoji} **Smoke tests ${status}** Critical functionality validated (~5-8 minutes): - **Backend**: 10 essential test files (imports, schema, serialization, core utils) - **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 }}).`; await github.rest.issues.createComment({ issue_number: context.payload.pull_request.number, owner: context.repo.owner, repo: context.repo.repo, body: comment });