bluenevus's picture
Update app.py
9d6e6cb verified
raw
history blame
3.14 kB
import gradio as gr
from datetime import datetime, timedelta
import google.generativeai as genai
from github import Github, GithubException
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)
# Get the repository directly using the full URL
repo = g.get_repo(github_url)
# 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: {github_url}"
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()