bluenevus's picture
Update app.py
4edffb9 verified
raw
history blame
3.41 kB
import gradio as gr
from datetime import datetime, timedelta
import google.generativeai as genai
from github import Github, GithubException
from urllib.parse import urlparse
def generate_release_notes(github_url, github_token, gemini_api_key, start_date, end_date):
try:
# Initialize GitHub client with the token
g = Github(github_token)
# Parse the full GitHub URL
parsed_url = urlparse(github_url)
path_parts = parsed_url.path.strip('/').split('/')
owner = path_parts[0]
repo_name = '/'.join(path_parts[1:]).rstrip('.git')
# Get the repository
repo = g.get_repo(f"{owner}/{repo_name}")
# Get commits between start_date and end_date
start_date = datetime.strptime(start_date, "%Y-%m-%d")
end_date = datetime.strptime(end_date, "%Y-%m-%d")
commits = list(repo.get_commits(since=start_date, until=end_date))
# Prepare commit messages
commit_messages = [commit.commit.message for commit in commits]
commit_text = "\n".join(commit_messages)
if not commit_text:
return "No commits found in the specified date range."
# Use Gemini AI to generate release notes
genai.configure(api_key=gemini_api_key)
model = genai.GenerativeModel('gemini-pro')
prompt = f"""Based on the following commit messages, generate comprehensive release notes:
{commit_text}
Please organize the release notes into sections such as:
1. New Features
2. Bug Fixes
3. Improvements
4. Breaking Changes (if any)
Provide a concise summary for each item."""
response = model.generate_content(prompt)
return response.text
except GithubException as e:
if e.status == 401:
return "Error: Invalid GitHub token or insufficient permissions."
elif e.status == 404:
return f"Error: Repository not found. Please check the GitHub URL. Attempted to access: {owner}/{repo_name}"
else:
return f"GitHub API error: {str(e)}"
except Exception as e:
return f"An error occurred: {str(e)}"
# Set default dates
default_end_date = datetime.now()
default_start_date = default_end_date - timedelta(days=7) # One week ago
# Create Gradio interface
iface = gr.Interface(
fn=generate_release_notes,
inputs=[
gr.Textbox(label="GitHub Repository URL", placeholder="https://github.com/username/repo.git"),
gr.Textbox(label="GitHub Personal Access Token", type="password"),
gr.Textbox(label="Gemini API Key", type="password"),
gr.Textbox(
label="Start Date",
placeholder="YYYY-MM-DD",
value=default_start_date.strftime("%Y-%m-%d"),
),
gr.Textbox(
label="End Date",
placeholder="YYYY-MM-DD",
value=default_end_date.strftime("%Y-%m-%d"),
)
],
outputs=gr.Textbox(label="Generated Release Notes"),
title="Automated Release Notes Generator",
description="Generate release notes based on GitHub commits using Gemini AI. Enter start and end dates (YYYY-MM-DD) to define the time range for commits.",
allow_flagging="never",
theme="default",
analytics_enabled=False,
)
# Launch the app
iface.launch()