File size: 3,067 Bytes
b0fe809
 
3b899cf
b0fe809
3b899cf
b0fe809
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6b56fd3
 
b0fe809
 
6b56fd3
 
 
 
 
b0fe809
3b899cf
 
 
 
 
6b56fd3
3b899cf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6b56fd3
 
 
 
 
 
 
 
 
b0fe809
 
 
 
 
6b56fd3
b0fe809
6b56fd3
b0fe809
 
 
 
47e94f8
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
import gradio as gr
import requests
import matplotlib.pyplot as plt

# Function to fetch repository details from GitHub and generate a visualization
def analyze_github_repo(repo_url):
    # Extract the username and repo name from the GitHub URL
    if "github.com" not in repo_url:
        return "Please provide a valid GitHub repository URL."

    parts = repo_url.split('/')
    if len(parts) < 5:
        return "URL should be in the format: https://github.com/username/repository"

    user, repo = parts[3], parts[4]

    # GitHub API endpoint to get repository details
    api_url = f"https://api.github.com/repos/{user}/{repo}"
    response = requests.get(api_url)

    # Check if repository exists
    if response.status_code == 404:
        return "Repository not found."
    
    # Parse the response
    data = response.json()
    
    # Extract relevant information
    stars = data.get('stargazers_count', 'N/A')
    forks = data.get('forks_count', 'N/A')
    issues = data.get('open_issues_count', 'N/A')
    contributors_url = data.get('contributors_url', None)

    # Get number of contributors and their contributions (commit count)
    contributors = []
    if contributors_url:
        contributors_data = requests.get(contributors_url).json()
        for contributor in contributors_data:
            contributors.append({
                'login': contributor['login'],
                'contributions': contributor['contributions']
            })

    # Data to plot
    metrics = {
        'Stars': stars,
        'Forks': forks,
        'Open Issues': issues,
        'Contributors': len(contributors)
    }

    # Create the bar plot
    fig, ax = plt.subplots()
    ax.bar(metrics.keys(), metrics.values(), color=['blue', 'green', 'red', 'orange'])

    ax.set_xlabel('Metrics')
    ax.set_ylabel('Count')
    ax.set_title(f"GitHub Repository Analysis: {repo_url}")

    # Save the plot as an image
    plt.tight_layout()
    plt.savefig("/mnt/data/github_analysis.png")
    plt.close()

    # Prepare contributor data for display
    contributor_info = "Contributors and Their Commit Contributions:\n"
    for contributor in contributors:
        contributor_info += f"{contributor['login']}: {contributor['contributions']} contributions\n"
    
    # Combine the visualization link and contributor data
    result = f"Repository: {repo_url}\n\n{contributor_info}\nImage of Repository Analysis:\n/mnt/data/github_analysis.png"
    
    return result, "/mnt/data/github_analysis.png"

# Gradio interface for the tool
iface = gr.Interface(
    fn=analyze_github_repo,
    inputs=gr.Textbox(label="Enter GitHub Repository URL", placeholder="https://github.com/username/repository"),
    outputs=[gr.Textbox(label="Repository Analysis"), gr.Image(label="Repository Analysis Visualization")],
    title="GitHub Repository Analysis Tool",
    description="Enter a GitHub repository URL to get basic analytics including stars, forks, issues, and contributors, along with a visual chart and contributor details."
)

# Launch the app
iface.launch()