sayakpaul's picture
sayakpaul HF staff
fixes
eca9dc3
from dataclasses import dataclass
import os
import gradio as gr
from graphql_calls import get_tag_commit_date, get_commits
from github import fetch_github_info
@dataclass
class Contributions:
additions: int
deletions: int
descriptions: list[str]
def get_release_notes(
tag: str,
branch: str,
contributor_treshhold: int,
ignore_dependabot: bool,
ignore_direct: bool,
):
try:
token = os.getenv("GITHUB_TOKEN")
repo = "huggingface/diffusers"
date = get_tag_commit_date(token, repo, tag)
commits = get_commits(token, repo, branch, date)
except ValueError as e:
return str(e)
result = ""
contributors = {}
for commit in commits[::-1]:
if "Hugging Face" not in commit.user.organizations:
if commit.user.name not in contributors:
contributors[commit.user.name] = Contributions(
additions=commit.additions,
deletions=commit.deletions,
descriptions=[commit.message],
)
else:
contributors[commit.user.name].additions += commit.additions
contributors[commit.user.name].deletions += commit.deletions
contributors[commit.user.name].descriptions += [commit.message]
if "(#" in commit.message:
if ignore_dependabot and commit.user.name == "dependabot[bot]":
continue
split = commit.message.split("(#")
message = split[0]
number = split[1].strip(")")
result += f"* {message} by @{commit.user.name} in #{number}\n"
elif not ignore_direct:
result += f"* {commit.message} by @{commit.user.name} (direct commit on {branch})\n"
significant_contributors = {
k: v
for k, v in contributors.items()
if (v.additions + v.deletions) > contributor_treshhold and k != "<NOT FOUND>"
}
if len(significant_contributors):
result += (
"\n## Significant community contributions\n"
"\nThe following contributors have made significant "
"changes to the library over the last release:\n\n"
)
for significant_contributor, contributions in significant_contributors.items():
result += f"* @{significant_contributor}\n"
for description in contributions.descriptions:
result += f" * {description}\n"
return result
article = """
Mostly copied from [lysandre/github-release](https://huggingface.co/spaces/lysandre/github-release) but suited for
Diffusers.
"""
github_info = fetch_github_info("https://github.com/huggingface/diffusers")
demo = gr.Interface(
title="Automatic release notes for 🤗 Diffusers",
article=article,
description="**See instructions below the form.**",
fn=get_release_notes,
inputs=[
gr.components.Textbox(
lines=1,
value=github_info["second_last_tag"] if github_info else None,
placeholder="The tag from which to get commit",
),
gr.components.Textbox(
lines=1,
placeholder="The linear branch on which the new version tag will be added",
value=github_info["latest_release_branch"] if github_info else None,
),
gr.components.Slider(
minimum=0,
maximum=2000,
value=500,
label="Threshold for significant contributors",
),
gr.components.Checkbox(label="Ignore dependabot commits"),
gr.components.Checkbox(label="Ignore direct commits"),
],
outputs="text",
allow_flagging="never"
)
if __name__ == "__main__":
demo.launch(show_error=True)