Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Dependencies
node_modules
.pnp
.pnp.js

# Python
__pycache__
*.py[cod]
*$py.class
.Python
env/
venv/
.venv
pip-log.txt
pip-delete-this-directory.txt
.pytest_cache

# Testing
coverage
*.lcov
.nyc_output

# Build outputs
.next/
out/
dist/
build/
*.tsbuildinfo

# Environment
.env
.env*.local
.env.production

# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# OS
.DS_Store
*.pem
Thumbs.db

# IDE
.vscode
.idea
*.swp
*.swo
*~

# Git
.git
.gitignore
.gitattributes

# Documentation
*.md
!README.md

# Turbo
.turbo

# Misc
.cache
tmp
temp
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
OPENAI_API_KEY=
174 changes: 174 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
name: CI

on:
push:
branches: main
pull_request:
branches: main
schedule:
- cron: "0 0 * * *" # Run daily at midnight UTC

jobs:
smoke:
name: Smoke / ${{ matrix.os }} / Node ${{ matrix.node }} / Python ${{ matrix.python }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest]
node: [22, 24]
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 pnpm
uses: pnpm/action-setup@v4

- 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 dependencies (monorepo)
run: pnpm install

- name: Build all apps
run: pnpm build

- name: Create empty .env file
run: touch .env

- name: Test frontend startup (Linux/macOS)
if: runner.os != 'Windows'
run: |
# Start the Next.js frontend in background
pnpm --filter app 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
pnpm --filter app 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

lint:
name: Lint
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.12

- name: Install pnpm
uses: pnpm/action-setup@v4

- name: Install uv
uses: astral-sh/setup-uv@v4
with:
enable-cache: true

- name: Install dependencies
run: pnpm install

- name: Run linting
run: pnpm lint

notify-slack:
name: Notify Slack on Failure
runs-on: ubuntu-latest
needs: [smoke, lint]
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 <https://github.com/copilotkit/with-langgraph-python|with-langgraph-python> :warning:*\n\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View run details>"
}
}
]
}
31 changes: 18 additions & 13 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
node_modules
.pnp
.pnp.*
.yarn/*
!.yarn/patches
Expand All @@ -11,14 +11,14 @@
!.yarn/versions

# testing
/coverage
coverage

# next.js
/.next/
/out/
.next/
out/

# production
/build
build

# misc
.DS_Store
Expand All @@ -32,6 +32,7 @@ yarn-error.log*

# env files (can opt-in for committing if needed)
.env*
!.env.example

# vercel
.vercel
Expand All @@ -40,15 +41,19 @@ yarn-error.log*
*.tsbuildinfo
next-env.d.ts

.mastra/

# lock files
package-lock.json
yarn.lock
pnpm-lock.yaml
bun.lockb

# python
agent/venv/
__pycache__/
.venv/
# LangGraph API
.langgraph_api

# Git worktrees
.worktrees

# Turbo
.turbo

# Tools
.claude
Loading
Loading