-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathgenerate_with_stats.py
More file actions
160 lines (137 loc) · 5.25 KB
/
generate_with_stats.py
File metadata and controls
160 lines (137 loc) · 5.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
import gifos
from datetime import datetime
import os
import requests
# ============================================
# Terminal GIF with GitHub Stats
# ============================================
#
# REQUIREMENTS:
# 1. Create a .env file in the project folder
# 2. Add: GITHUB_TOKEN=your_token_here
#
# To create the token:
# - Go to: https://github.com/settings/tokens
# - Click "Generate new token (classic)"
# - Select only: read:user
# - Copy the token and add it to .env
# ============================================
# Auto-detected from GitHub Actions context; falls back to env var or default.
USERNAME = (
os.environ.get("GITHUB_REPOSITORY_OWNER")
or os.environ.get("GIT_USERNAME")
or "dbuzatto"
)
# Function to fetch real number of repos
def get_total_repos(username):
try:
response = requests.get(f"https://api.github.com/users/{username}")
if response.status_code == 200:
return response.json().get("public_repos", 0)
except:
pass
return None
# Try to fetch GitHub statistics
try:
github_stats = gifos.utils.fetch_github_stats(user_name=USERNAME)
has_stats = github_stats is not None
if not has_stats:
print("Warning: Could not fetch GitHub stats")
print("Configure GITHUB_TOKEN in .env file")
except Exception as e:
print(f"Warning: Error fetching GitHub stats: {e}")
print("Using example data...")
has_stats = False
github_stats = None
# Fetch real number of repos
total_repos = get_total_repos(USERNAME)
# Terminal settings
t = gifos.Terminal(width=700, height=450, xpad=10, ypad=10)
# -- Initial prompt --
t.set_prompt(f"\x1b[91m{USERNAME}\x1b[0m@\x1b[93mgithub\x1b[0m ~> ")
# -- Boot sequence --
t.gen_text("Initializing terminal...", row_num=1)
t.clone_frame(5)
t.gen_text("\x1b[32m[OK]\x1b[0m System ready", row_num=2)
t.clone_frame(10)
# -- Command to view stats --
t.gen_prompt(row_num=3)
t.gen_typing_text("github-stats --user " + USERNAME, row_num=3, contin=True, speed=1)
t.clone_frame(5)
# -- Display statistics --
t.gen_text("", row_num=4)
t.gen_text(f"\x1b[96m=== GitHub Stats for {USERNAME} ===\x1b[0m", row_num=5)
t.clone_frame(3)
if has_stats:
repos_count = total_repos if total_repos else github_stats.total_repo_contributions
stats_lines = [
f"\x1b[93mName:\x1b[0m {github_stats.account_name or USERNAME}",
f"\x1b[93mFollowers:\x1b[0m {github_stats.total_followers}",
f"\x1b[93mStars:\x1b[0m {github_stats.total_stargazers}",
f"\x1b[93mCommits:\x1b[0m {github_stats.total_commits_last_year} (last year)",
f"\x1b[93mPRs:\x1b[0m {github_stats.total_pull_requests_made}",
f"\x1b[93mIssues:\x1b[0m {github_stats.total_issues}",
f"\x1b[93mRepos:\x1b[0m {repos_count}",
f"\x1b[93mRank:\x1b[0m {github_stats.user_rank.level} ({github_stats.user_rank.percentile:.1f}%)",
]
# Top languages
if github_stats.languages_sorted:
top_langs = github_stats.languages_sorted[:3]
langs_str = ", ".join([f"{lang[0]} ({lang[1]}%)" for lang in top_langs])
stats_lines.append(f"\x1b[93mTop Langs:\x1b[0m {langs_str}")
else:
# Example data
stats_lines = [
f"\x1b[93mName:\x1b[0m {USERNAME}",
"\x1b[93mFollowers:\x1b[0m --",
"\x1b[93mStars:\x1b[0m --",
"\x1b[93mCommits:\x1b[0m -- (configure GITHUB_TOKEN)",
"\x1b[93mPRs:\x1b[0m --",
"\x1b[93mIssues:\x1b[0m --",
"\x1b[93mRepos:\x1b[0m --",
"\x1b[93mRank:\x1b[0m --",
]
for i, line in enumerate(stats_lines):
t.gen_text(line, row_num=6+i)
t.clone_frame(3)
t.clone_frame(10)
t.gen_text("\x1b[96m================================\x1b[0m", row_num=6+len(stats_lines))
t.clone_frame(15)
# -- Clear and Skills --
t.gen_prompt(row_num=7+len(stats_lines))
t.gen_typing_text("clear", row_num=7+len(stats_lines), contin=True, speed=1)
t.clone_frame(5)
t.clear_frame()
t.gen_prompt(row_num=1)
t.gen_typing_text("cat skills.txt", row_num=1, contin=True, speed=1)
t.clone_frame(5)
t.gen_text("", row_num=2)
t.gen_text("\x1b[96m=== Tech Stack ===\x1b[0m", row_num=3)
t.clone_frame(3)
skills = [
("\x1b[94mCloud:\x1b[0m ", "AWS, GCP, OCI, Cloudflare"),
("\x1b[94mDevOps:\x1b[0m ", "Terraform, Kubernetes, Docker, Git"),
("\x1b[94mCI/CD:\x1b[0m ", "GitLab, GitHub Actions"),
("\x1b[94mMonitoring:\x1b[0m ", "Grafana, Prometheus, Jaeger, Loki"),
("\x1b[94mTools:\x1b[0m ", "Postman, RabbitMQ, MongoDB"),
("\x1b[94mOS:\x1b[0m ", "macOS, Debian"),
("\x1b[94mLanguages:\x1b[0m ", "Java, Python"),
]
for i, (label, value) in enumerate(skills):
t.gen_text(f"{label}{value}", row_num=4+i)
t.clone_frame(2)
t.clone_frame(10)
t.gen_text("\x1b[96m==================\x1b[0m", row_num=4+len(skills))
t.clone_frame(5)
# -- Final message --
final_row = 5 + len(skills)
t.gen_prompt(row_num=final_row)
t.gen_typing_text("echo 'Thanks for visiting my profile!'", row_num=final_row, contin=True, speed=1)
t.clone_frame(5)
t.gen_text("\x1b[92mThanks for visiting my profile!\x1b[0m", row_num=final_row+1)
t.clone_frame(40)
# Generate the GIF
t.gen_gif()
print("\n GIF generated: output.gif")
print("\nTo use in your README.md:")
print('')