Skip to content

Commit 254d287

Browse files
committed
clone daedalus repos
1 parent ad47185 commit 254d287

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

sysadmin/clone_daedalus_repos.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#!/usr/bin/env python3
2+
import subprocess
3+
import json
4+
import os
5+
import sys
6+
7+
8+
def get_non_forked_repos(username, max_pages=5):
9+
repos = []
10+
for page in range(1, max_pages + 1):
11+
result = subprocess.run(
12+
[
13+
"curl",
14+
"-s",
15+
f"https://api.github.com/users/{username}/repos?per_page=100&page={page}",
16+
],
17+
capture_output=True,
18+
text=True,
19+
)
20+
try:
21+
data = json.loads(result.stdout)
22+
if not data:
23+
break
24+
repos.extend([r["full_name"] for r in data if not r.get("fork", False)])
25+
except json.JSONDecodeError:
26+
print(f"Warning: Failed to parse page {page}", file=sys.stderr)
27+
return sorted(set(repos))
28+
29+
30+
def clone_repos(repos, target_dir):
31+
os.makedirs(target_dir, exist_ok=True)
32+
original_dir = os.getcwd()
33+
34+
try:
35+
os.chdir(target_dir)
36+
success = 0
37+
failed = 0
38+
39+
for repo in repos:
40+
print(f"Cloning {repo}...")
41+
result = subprocess.run(
42+
["git", "clone", f"https://github.com/{repo}.git"], capture_output=True
43+
)
44+
if result.returncode == 0:
45+
success += 1
46+
else:
47+
failed += 1
48+
print(f" Failed: {repo}", file=sys.stderr)
49+
50+
return success, failed
51+
finally:
52+
os.chdir(original_dir)
53+
54+
55+
def main():
56+
username = "daedalus"
57+
target_dir = "daedalus-repos"
58+
59+
print(f"Fetching non-forked repositories for {username}...")
60+
repos = get_non_forked_repos(username)
61+
62+
if not repos:
63+
print("No repositories found!", file=sys.stderr)
64+
sys.exit(1)
65+
66+
print(f"Found {len(repos)} non-forked repositories")
67+
print(f"Cloning to {target_dir}...")
68+
69+
success, failed = clone_repos(repos, target_dir)
70+
print(f"Done! Cloned {success} repos, {failed} failed.")
71+
72+
if failed > 0:
73+
sys.exit(1)
74+
75+
76+
if __name__ == "__main__":
77+
main()

0 commit comments

Comments
 (0)