Spaces:
Running
Running
File size: 4,929 Bytes
b9b07ad d80253f b9b07ad d80253f 5c5d1c5 d80253f b9b07ad d80253f 8ee0a79 b9b07ad d80253f b9b07ad 5c5d1c5 b9b07ad d80253f b9b07ad d80253f 5c5d1c5 ddab483 5c5d1c5 d80253f 194d6e2 b9b07ad d80253f 194d6e2 b9b07ad 194d6e2 b9b07ad 194d6e2 b9b07ad 194d6e2 b9b07ad 194d6e2 b9b07ad 194d6e2 d80253f b9b07ad 5c5d1c5 d80253f 5c5d1c5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
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, branch, date)
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_treshold 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 = """
## How to use the interface?
⚠️ Most errors are due to:
- A wrong `tag` -> the tag must exist on the repository!
- A wrong `branch` -> The branch must exist on the repository!
- A wrong `token` -> Obtaining a token is detailed below.
### token
This is a personal access token generated by GitHub. You can obtain one with the following guide:
https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token.
### Repository
The repository for which to create the release notes. Should be in the format `organization/repository`.
### Tag
The tag from which all commits were made. The app will fetch the date at which this tag was created, and will
return all commits of the branch defined below that have a timestamp following that date.
### Branch
The branch on which all commits lie. Usually `master` or `main`.
### Threshold
This threshold allows highlighting specific community contributors according to the size of their contributions.
It currently adds all their additions/deletions across all PRs included in this release. It is then compared
to the defined threshold: if above, that user will get a special note mentioning what they have worked on!
"""
demo = gr.Interface(
title='Automatic release notes 🤗',
article=article,
description="**See instructions below the form.**",
fn=get_release_notes,
inputs=[
gr.components.Textbox(lines=1, placeholder="Your GitHub token"),
gr.components.Textbox(
lines=1, placeholder="Repository", value="huggingface/transformers"
),
gr.components.Textbox(lines=1, 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="main",
),
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",
examples=[
['ghp_XXX', 'huggingface/datasets', '2.1.0', 'master', 60, True, True],
['ghp_XXX', 'huggingface/accelerate', 'v0.7.1', 'main', 500, True, True],
['ghp_XXX', 'huggingface/transformers', 'v4.18.0', 'main', 500, True, True],
['ghp_XXX', 'gradio-app/gradio', 'v2.9.0', 'main', 500, True, True],
],
)
if __name__ == "__main__":
demo.launch(show_error=True)
|