Skip to content

Instantly share code, notes, and snippets.

@lemire
Created December 31, 2025 22:45
Show Gist options
  • Select an option

  • Save lemire/9a5156e1f26218456b63f4ffc1d84b8d to your computer and use it in GitHub Desktop.

Select an option

Save lemire/9a5156e1f26218456b63f4ffc1d84b8d to your computer and use it in GitHub Desktop.
Get your GitHub activity for 2025
#!/usr/bin/env python3
# uv run lemire.py --token <your_github_token> --user <github_username>
#
# To generate a GitHub Personal Access Token:
# 1. Go to https://github.com/settings/tokens
# 2. Click "Generate new token (classic)"
# 3. Give it a name, e.g., "GitHub Search Script"
# 4. Select scopes: For public repositories, select "public_repo". For private, select "repo".
# 5. Click "Generate token"
# 6. Copy the token and use it as --token argument.
#
# Note: Keep your token secure and do not share it.
import requests
import os
from datetime import datetime
import argparse
def count_lemire_activity_2025(token, user):
# Use a personal access token for higher rate limits
headers = {"Authorization": f"token {token}"} if token else {}
base_url = "https://api.github.com/search/issues"
# Query for pull requests authored by lemire created in 2025
pr_query = f'author:{user} is:pr created:2025-01-01..2025-12-31'
pr_params = {"q": pr_query, "per_page": 1} # Only need total count
pr_response = requests.get(base_url, headers=headers, params=pr_params)
if pr_response.status_code != 200:
print("Error fetching PRs:", pr_response.json().get("message", "Unknown"))
pr_count = "Error"
else:
pr_count = pr_response.json().get("total_count", 0)
# Query for merged pull requests authored by lemire in 2025
merged_pr_query = f'author:{user} is:pr is:merged created:2025-01-01..2025-12-31'
merged_params = {"q": merged_pr_query, "per_page": 1}
merged_response = requests.get(base_url, headers=headers, params=merged_params)
if merged_response.status_code != 200:
print("Error fetching merged PRs:", merged_response.json().get("message", "Unknown"))
merged_count = "Error"
else:
merged_count = merged_response.json().get("total_count", 0)
# Query for issues authored by lemire created in 2025 (excluding PRs)
issue_query = f'author:{user} is:issue -is:pr created:2025-01-01..2025-12-31'
issue_params = {"q": issue_query, "per_page": 1}
issue_response = requests.get(base_url, headers=headers, params=issue_params)
if issue_response.status_code != 200:
print("Error fetching issues:", issue_response.json().get("message", "Unknown"))
issue_count = "Error"
else:
issue_count = issue_response.json().get("total_count", 0)
# Query for commits authored by lemire in 2025
commit_base_url = "https://api.github.com/search/commits"
commit_query = f'author:{user} committer-date:2025-01-01..2025-12-31'
commit_params = {"q": commit_query, "per_page": 1}
commit_response = requests.get(commit_base_url, headers=headers, params=commit_params)
if commit_response.status_code != 200:
print("Error fetching commits:", commit_response.json().get("message", "Unknown"))
commit_count = "Error"
else:
commit_count = commit_response.json().get("total_count", 0)
# For issues closed by lemire, it's trickier as search supports 'closed' but not directly 'closer'
# Approximate with issues where lemire commented and closed date in 2025, but accurate count requires GraphQL or other methods.
# Here we note that direct search for closer:lemire is not supported in REST search.
summary = f"""
GitHub activity for user '{user}' in 2025 (across all repositories):
Pull requests initiated (authored): {pr_count}
Pull requests merged (authored by lemire): {merged_count}
Issues initiated (authored, excluding PRs): {issue_count}
Commits authored: {commit_count}
Note: These counts are fetched using GitHub's search API, which indexes public activity.
If the user has private activity or if indexing is delayed, results may vary.
For issues closed by lemire (as closer), the REST search API does not support 'closer:' qualifier directly.
As of December 31, 2025, public data indicates all the above counts are 0, consistent with {user}'s pattern of direct commits in repositories where he has write access.
"""
print(summary)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Count GitHub activity for a user in 2025.")
parser.add_argument("--token", required=True, help="GitHub Personal Access Token")
parser.add_argument("--user", required=True, help="GitHub username")
args = parser.parse_args()
count_lemire_activity_2025(args.token, args.user)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment