forked from CopilotKit/CopilotKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmigrate-demos.sh
More file actions
executable file
·219 lines (188 loc) · 8.25 KB
/
Copy pathmigrate-demos.sh
File metadata and controls
executable file
·219 lines (188 loc) · 8.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
#!/usr/bin/env bash
set -euo pipefail
# Migration script: shallow clone demo repos → copy into examples/
# Usage: ./scripts/migrate-demos.sh [--group A|B|C|D|all] [--dry-run]
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
CLONE_DIR="$(mktemp -d)"
trap 'rm -rf "$CLONE_DIR"' EXIT
GROUP="${1:---group}"
GROUP_FILTER="${2:-all}"
DRY_RUN=0
while [[ $# -gt 0 ]]; do
case "$1" in
--group) GROUP_FILTER="$2"; shift 2 ;;
--dry-run) DRY_RUN=1; shift ;;
*) shift ;;
esac
done
# Track warnings for post-run summary
WARNINGS=()
MIGRATED=0
FAILED=0
warn() { WARNINGS+=("$1"); echo " WARNING: $1"; }
migrate_repo() {
local repo="$1"
local target_path="$2"
local branch="${3:-}"
local full_target="$REPO_ROOT/$target_path"
echo "==> Migrating $repo → $target_path"
if [[ -d "$full_target" ]]; then
echo " SKIP: $full_target already exists"
return 0
fi
# Step 1: Shallow clone
local clone_dest="$CLONE_DIR/$repo"
rm -rf "$clone_dest"
local clone_args=(--depth 1)
if [[ -n "$branch" ]]; then
clone_args+=(--branch "$branch")
fi
if ! git clone "${clone_args[@]}" "https://github.com/CopilotKit/${repo}.git" "$clone_dest" 2>/dev/null; then
echo " FAILED: Could not clone $repo"
((FAILED++))
return 1
fi
# Step 2: Cleanup
rm -rf "$clone_dest/.git"
rm -rf "$clone_dest/.github"
rm -f "$clone_dest/renovate.json"
rm -f "$clone_dest/netlify.toml"
rm -f "$clone_dest/_redirects"
rm -f "$clone_dest/_headers"
find "$clone_dest" -type d -name "node_modules" -exec rm -rf {} + 2>/dev/null || true
# Remove .env files but keep .env.example
find "$clone_dest" -name ".env" -not -name ".env.example" -delete 2>/dev/null || true
# Also remove .env.local, .env.development.local, etc. but not .env.example
find "$clone_dest" -name ".env.*" -not -name ".env.example" -not -name ".env.*.example" -delete 2>/dev/null || true
# Step 3: Scan for large files not covered by LFS
while IFS= read -r -d '' f; do
local ext="${f##*.}"
local ext_lower
ext_lower=$(echo "$ext" | tr '[:upper:]' '[:lower:]')
case "$ext_lower" in
gif|jpg|jpeg|png|pdf|mp4|webm|svg) ;; # Covered by .gitattributes
*) warn "$target_path: Large file not LFS-tracked: ${f#$clone_dest/} ($(du -h "$f" | cut -f1))" ;;
esac
done < <(find "$clone_dest" -type f -size +1M -print0 2>/dev/null)
if [[ $DRY_RUN -eq 1 ]]; then
echo " DRY RUN: Would copy to $full_target"
((MIGRATED++))
rm -rf "$clone_dest"
return 0
fi
# Step 4: Copy to target
mkdir -p "$(dirname "$full_target")"
cp -a "$clone_dest" "$full_target"
# Step 5: Clean up clone
rm -rf "$clone_dest"
((MIGRATED++))
echo " OK: $target_path"
}
# ============================================================
# MANIFEST: All 47 repos organized by group
# Format: migrate_repo <github-repo-name> <target-path> [branch]
# ============================================================
migrate_group_a() {
echo ""
echo "========== GROUP A: Demo Team Repos (22) =========="
echo ""
migrate_repo with-langgraph-python examples/integrations/langgraph-python
migrate_repo with-langgraph-js examples/integrations/langgraph-js
migrate_repo with-langgraph-fastapi examples/integrations/langgraph-fastapi
migrate_repo with-mastra examples/integrations/mastra
migrate_repo with-crewai-flows examples/integrations/crewai-flows
migrate_repo with-llamaindex examples/integrations/llamaindex
migrate_repo with-pydantic-ai examples/integrations/pydantic-ai
migrate_repo with-microsoft-agent-framework-python examples/integrations/ms-agent-framework-python
migrate_repo with-microsoft-agent-framework-dotnet examples/integrations/ms-agent-framework-dotnet
migrate_repo with-strands-python examples/integrations/strands-python
migrate_repo with-mcp-apps examples/integrations/mcp-apps
migrate_repo with-adk examples/integrations/adk
migrate_repo with-agent-spec examples/integrations/agent-spec
migrate_repo with-a2a-a2ui examples/integrations/a2a-a2ui
migrate_repo demo-banking examples/showcases/banking
migrate_repo demo-presentation examples/showcases/presentation
migrate_repo deep-agents-demo examples/showcases/deep-agents
migrate_repo deep-agents-job-search-assistant examples/showcases/deep-agents-job-search
migrate_repo generative-ui examples/showcases/generative-ui
migrate_repo generative-ui-playground examples/showcases/generative-ui-playground
migrate_repo mcp-apps-demo examples/showcases/mcp-apps
migrate_repo open-research-ANA examples/showcases/research-canvas
}
migrate_group_b() {
echo ""
echo "========== GROUP B: Additional Repos (21) =========="
echo ""
# Integration starters
migrate_repo with-agno examples/integrations/agno
migrate_repo with-crewai-crews examples/integrations/crewai-crews
migrate_repo with-a2a-middleware examples/integrations/a2a-middleware
# Canvas demos
migrate_repo canvas-with-langgraph-python examples/canvas/langgraph-python
migrate_repo canvas-with-llamaindex examples/canvas/llamaindex
migrate_repo canvas-with-llamaindex-composio examples/canvas/llamaindex-composio
migrate_repo canvas-with-pydantic-ai examples/canvas/pydantic-ai
migrate_repo canvas-with-mastra examples/canvas/mastra
# Feature demos
migrate_repo copilotkit-mcp-demo examples/showcases/mcp-demo
migrate_repo strands-file-analyzer-demo examples/showcases/strands-file-analyzer
migrate_repo microsoft-kanban-demo examples/showcases/microsoft-kanban
migrate_repo multi-page-demo examples/showcases/multi-page
migrate_repo orca-CopilotKit-demo examples/showcases/orca
# Showcases
migrate_repo pydantic-ai-todos examples/showcases/pydantic-ai-todos
migrate_repo scene-creator-copilot examples/showcases/scene-creator
migrate_repo open-gemini-canvas examples/canvas/gemini
migrate_repo adk-generative-dashboard examples/showcases/adk-dashboard
migrate_repo mastra-pm-canvas examples/canvas/mastra-pm
migrate_repo langgraph-js-support-agents examples/showcases/langgraph-js-support-agents
migrate_repo open-multi-agent-canvas examples/showcases/multi-agent-canvas
migrate_repo open-chatkit-studio examples/showcases/chatkit-studio
}
migrate_group_c() {
echo ""
echo "========== GROUP C: Remaining Repos (2) =========="
echo ""
migrate_repo enterprise-brex-demo examples/showcases/enterprise-brex
migrate_repo a2a-travel examples/showcases/a2a-travel
}
migrate_group_d() {
echo ""
echo "========== GROUP D: Markus Ecker Forks (2) =========="
echo ""
migrate_repo demo-spreadsheet examples/showcases/spreadsheet
migrate_repo demo-todo examples/showcases/todo
}
# ============================================================
# Main
# ============================================================
echo "Migration script starting..."
echo "Repo root: $REPO_ROOT"
echo "Temp dir: $CLONE_DIR"
echo "Group filter: $GROUP_FILTER"
echo "Dry run: $DRY_RUN"
echo ""
case "$GROUP_FILTER" in
A|a) migrate_group_a ;;
B|b) migrate_group_b ;;
C|c) migrate_group_c ;;
D|d) migrate_group_d ;;
all)
migrate_group_a
migrate_group_b
migrate_group_c
migrate_group_d
;;
*) echo "Unknown group: $GROUP_FILTER"; exit 1 ;;
esac
echo ""
echo "========== SUMMARY =========="
echo "Migrated: $MIGRATED"
echo "Failed: $FAILED"
if [[ ${#WARNINGS[@]} -gt 0 ]]; then
echo ""
echo "WARNINGS (${#WARNINGS[@]}):"
for w in "${WARNINGS[@]}"; do
echo " - $w"
done
fi