Skip to content

Commit

Permalink
fix gen velocity script (#24634)
Browse files Browse the repository at this point in the history
some errors existed with prior script- tested this and it works fully
  • Loading branch information
eleanorjboyd authored Dec 17, 2024
1 parent a76e7ef commit 25ecab8
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ jobs:
pip install requests
- name: Run summary script
run: python scripts/generate_summary.py
run: python scripts/issue_velocity_summary_script.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
46 changes: 0 additions & 46 deletions scripts/generate_summary.py

This file was deleted.

110 changes: 110 additions & 0 deletions scripts/issue_velocity_summary_script.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
"""
This script fetches open issues from the microsoft/vscode-python repository,
calculates the thumbs-up per day for each issue, and generates a markdown
summary of the issues sorted by highest thumbs-up per day. Issues with zero
thumbs-up are excluded from the summary.
"""

import requests
import os
from datetime import datetime, timezone


GITHUB_API_URL = "https://api.github.com"
REPO = "microsoft/vscode-python"
TOKEN = os.getenv("GITHUB_TOKEN")


def fetch_issues():
"""
Fetches all open issues from the specified GitHub repository.
Returns:
list: A list of dictionaries representing the issues.
"""
headers = {"Authorization": f"token {TOKEN}"}
issues = []
page = 1
while True:
query = (
f"{GITHUB_API_URL}/repos/{REPO}/issues?state=open&per_page=25&page={page}"
)
response = requests.get(query, headers=headers)
if response.status_code == 403:
raise Exception(
"Access forbidden: Check your GitHub token and permissions."
)
response.raise_for_status()
page_issues = response.json()
if not page_issues:
break
issues.extend(page_issues)
page += 1
return issues


def calculate_thumbs_up_per_day(issue):
"""
Calculates the thumbs-up per day for a given issue.
Args:
issue (dict): A dictionary representing the issue.
Returns:
float: The thumbs-up per day for the issue.
"""
created_at = datetime.strptime(issue["created_at"], "%Y-%m-%dT%H:%M:%SZ").replace(
tzinfo=timezone.utc
)
now = datetime.now(timezone.utc)
days_open = (now - created_at).days or 1
thumbs_up = issue["reactions"].get("+1", 0)
return thumbs_up / days_open


def generate_markdown_summary(issues):
"""
Generates a markdown summary of the issues.
Args:
issues (list): A list of dictionaries representing the issues.
Returns:
str: A markdown-formatted string summarizing the issues.
"""
summary = "| URL | Title | 👍 | Days Open | 👍/day |\n| --- | ----- | --- | --------- | ------ |\n"
issues_with_thumbs_up = []
for issue in issues:
created_at = datetime.strptime(
issue["created_at"], "%Y-%m-%dT%H:%M:%SZ"
).replace(tzinfo=timezone.utc)
now = datetime.now(timezone.utc)
days_open = (now - created_at).days or 1
thumbs_up = issue["reactions"].get("+1", 0)
if thumbs_up > 0:
thumbs_up_per_day = thumbs_up / days_open
issues_with_thumbs_up.append(
(issue, thumbs_up, days_open, thumbs_up_per_day)
)

# Sort issues by thumbs_up_per_day in descending order
issues_with_thumbs_up.sort(key=lambda x: x[3], reverse=True)

for issue, thumbs_up, days_open, thumbs_up_per_day in issues_with_thumbs_up:
summary += f"| {issue['html_url']} | {issue['title']} | {thumbs_up} | {days_open} | {thumbs_up_per_day:.2f} |\n"

return summary


def main():
"""
Main function to fetch issues, generate the markdown summary, and write it to a file.
"""
issues = fetch_issues()
summary = generate_markdown_summary(issues)
with open("endorsement_velocity_summary.md", "w") as f:
f.write(summary)


if __name__ == "__main__":
main()

0 comments on commit 25ecab8

Please sign in to comment.