57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
import os
|
|
import json
|
|
import subprocess
|
|
import sys
|
|
|
|
def run_gh_command(args):
|
|
try:
|
|
result = subprocess.run(['gh'] + args, capture_output=True, text=True, check=True)
|
|
return result.stdout
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Error running gh command: {e.stderr}", file=sys.stderr)
|
|
return None
|
|
|
|
def hunt():
|
|
print("🎯 Hunting for high-impact OSS issues...")
|
|
|
|
# 1. Find trending repos (stars > 1000 created/updated recently)
|
|
repos_json = run_gh_command(['api', 'search/repositories?q=stars:>1000+pushed:>2026-02-01&sort=stars&order=desc', '--jq', '.items[] | {full_name: .full_name, stars: .stargazers_count, description: .description}'])
|
|
|
|
if not repos_json:
|
|
print("No trending repositories found.")
|
|
return
|
|
|
|
repos = [json.loads(line) for line in repos_json.strip().split('\n')[:10]]
|
|
|
|
dossier = []
|
|
|
|
for repo in repos:
|
|
name = repo['full_name']
|
|
print(f"Checking {name}...")
|
|
|
|
# 2. Search for help-wanted issues
|
|
issues_json = run_gh_command(['issue', 'list', '--repo', name, '--label', 'help wanted', '--json', 'number,title,url', '--limit', '3'])
|
|
|
|
if issues_json:
|
|
try:
|
|
issues = json.loads(issues_json)
|
|
for issue in issues:
|
|
dossier.append({
|
|
'repo': name,
|
|
'stars': repo['stars'],
|
|
'number': issue['number'],
|
|
'title': issue['title'],
|
|
'url': issue['url']
|
|
})
|
|
except json.JSONDecodeError:
|
|
pass
|
|
|
|
print("\n--- 📂 OSS CONTRIBUTION DOSSIER ---")
|
|
for item in dossier:
|
|
print(f"\n[{item['repo']} ★{item['stars']}]")
|
|
print(f"Issue #{item['number']}: {item['title']}")
|
|
print(f"Link: {item['url']}")
|
|
|
|
if __name__ == "__main__":
|
|
hunt()
|