name: Smoke on: push: branches: main pull_request: branches: main schedule: - cron: "0 0 * * *" # Run daily at midnight UTC jobs: smoke: name: ${{ matrix.os }} / Node ${{ matrix.node }} / Python ${{ matrix.python }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] node: [20, 22] python: [3.12, 3.13] steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - name: Setup Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} - name: Install uv uses: astral-sh/setup-uv@v4 with: enable-cache: true - name: Configure uv to use matrix Python version run: echo "UV_PYTHON=python${{ matrix.python }}" >> $GITHUB_ENV - name: Install Node.js dependencies (root) run: npm install - name: Install Node.js dependencies (agent) run: | cd agent npm install - name: Build frontend run: npm run build - name: Test frontend startup (Linux/macOS) if: runner.os != 'Windows' run: | # Start the Next.js frontend in background npm start & FRONTEND_PID=$! # Wait for frontend to start (max 30 seconds) timeout=30 elapsed=0 started=false while [ $elapsed -lt $timeout ] && [ "$started" = false ]; do if curl -s http://localhost:3000 > /dev/null 2>&1; then started=true echo "✅ Frontend started successfully" else sleep 1 elapsed=$((elapsed + 1)) fi done # Clean up background process kill $FRONTEND_PID 2>/dev/null || true if [ "$started" = false ]; then echo "❌ Frontend failed to start within 30 seconds" exit 1 fi shell: bash - name: Test frontend startup (Windows) if: runner.os == 'Windows' run: | # Start the Next.js frontend in background npm start & # Wait for frontend to start (max 30 seconds) $timeout = 30 $elapsed = 0 $started = $false while ($elapsed -lt $timeout -and -not $started) { try { $response = Invoke-WebRequest -Uri "http://localhost:3000" -TimeoutSec 1 -ErrorAction SilentlyContinue if ($response.StatusCode -eq 200) { $started = $true Write-Host "✅ Frontend started successfully" } } catch { Start-Sleep -Seconds 1 $elapsed++ } } if (-not $started) { Write-Host "❌ Frontend failed to start within 30 seconds" exit 1 } shell: pwsh - name: Run linting run: npm run lint notify-slack: name: Notify Slack on Failure runs-on: ubuntu-latest needs: smoke if: | failure() && github.event_name == 'schedule' steps: - name: Notify Slack uses: slackapi/slack-github-action@v2.1.0 with: webhook: ${{ secrets.SLACK_WEBHOOK_URL }} webhook-type: incoming-webhook payload: | { "text": ":warning: *Smoke test failed for `with-langgraph-python` :warning:.*", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": ":warning: *Smoke test failed for :warning:*\n\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View run details>" } } ] }