github-release / app.py
LysandreJik's picture
Configurable
b9b07ad
raw
history blame
No virus
3.16 kB
from dataclasses import dataclass
import gradio as gr
from graphql_calls import get_tag_commit_date, get_commits
@dataclass
class Contributions:
additions: int
deletions: int
descriptions: list[str]
def get_release_notes(
token: str,
repo: str,
tag: str,
branch: str,
contributor_treshold: int,
ignore_dependabot: bool,
ignore_direct: bool,
):
date = get_tag_commit_date(token, repo, tag)
commits = get_commits(token, repo, date)
result = ""
contributors = {}
for commit in commits:
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_treshold
}
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
demo = gr.Interface(
fn=get_release_notes,
inputs=[
gr.inputs.Textbox(lines=1, placeholder="Your GitHub token"),
gr.inputs.Textbox(
lines=1, placeholder="Repository", default="huggingface/transformers"
),
gr.inputs.Textbox(lines=1, placeholder="The tag from which to get commit"),
gr.inputs.Textbox(
lines=1,
placeholder="The linear branch on which the new version tag will be added",
default="main",
),
gr.inputs.Slider(
minimum=0,
maximum=2000,
default=500,
label="Threshold for significant contributors",
),
gr.inputs.Checkbox(label="Ignore dependabot commits"),
gr.inputs.Checkbox(label="Ignore direct commits"),
],
outputs="text",
)
if __name__ == "__main__":
demo.launch()