LysandreJik commited on
Commit
b9b07ad
1 Parent(s): d80253f

Configurable

Browse files
Files changed (2) hide show
  1. app.py +76 -13
  2. graphql_calls.py +28 -3
app.py CHANGED
@@ -1,37 +1,100 @@
 
 
1
  import gradio as gr
2
  from graphql_calls import get_tag_commit_date, get_commits
3
 
4
 
5
- def get_all_commits(token, repo, tag, branch):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  date = get_tag_commit_date(token, repo, tag)
7
  commits = get_commits(token, repo, date)
8
 
9
- result = ''
 
10
 
11
  for commit in commits:
12
- if '(#' in commit.message:
13
- split = commit.message.split('(#')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  message = split[0]
15
- number = split[1].strip(')')
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
- result += f"* {message} by @{commit.user} in #{number}\n"
18
- else:
19
- result += f"* {commit.message} by @{commit.user} (direct commit on {branch})\n"
 
20
 
21
  return result
22
 
23
 
24
  demo = gr.Interface(
25
- fn=get_all_commits,
26
  inputs=[
27
  gr.inputs.Textbox(lines=1, placeholder="Your GitHub token"),
28
- gr.inputs.Textbox(lines=1, placeholder="Repository", default='huggingface/transformers'),
 
 
29
  gr.inputs.Textbox(lines=1, placeholder="The tag from which to get commit"),
30
- gr.inputs.Textbox(lines=1, placeholder="The linear branch on which the new version tag will be added", default='main'),
 
 
 
 
 
 
 
 
 
 
 
 
31
  ],
32
- outputs='text',
33
  )
34
 
35
 
36
  if __name__ == "__main__":
37
- demo.launch()
1
+ from dataclasses import dataclass
2
+
3
  import gradio as gr
4
  from graphql_calls import get_tag_commit_date, get_commits
5
 
6
 
7
+ @dataclass
8
+ class Contributions:
9
+ additions: int
10
+ deletions: int
11
+ descriptions: list[str]
12
+
13
+
14
+ def get_release_notes(
15
+ token: str,
16
+ repo: str,
17
+ tag: str,
18
+ branch: str,
19
+ contributor_treshold: int,
20
+ ignore_dependabot: bool,
21
+ ignore_direct: bool,
22
+ ):
23
  date = get_tag_commit_date(token, repo, tag)
24
  commits = get_commits(token, repo, date)
25
 
26
+ result = ""
27
+ contributors = {}
28
 
29
  for commit in commits:
30
+ if "Hugging Face" not in commit.user.organizations:
31
+ if commit.user.name not in contributors:
32
+ contributors[commit.user.name] = Contributions(
33
+ additions=commit.additions,
34
+ deletions=commit.deletions,
35
+ descriptions=[commit.message],
36
+ )
37
+ else:
38
+ contributors[commit.user.name].additions += commit.additions
39
+ contributors[commit.user.name].deletions += commit.deletions
40
+ contributors[commit.user.name].descriptions += [commit.message]
41
+
42
+ if "(#" in commit.message:
43
+ if ignore_dependabot and commit.user.name == 'dependabot[bot]':
44
+ continue
45
+
46
+ split = commit.message.split("(#")
47
  message = split[0]
48
+ number = split[1].strip(")")
49
+
50
+ result += f"* {message} by @{commit.user.name} in #{number}\n"
51
+ elif not ignore_direct:
52
+ result += f"* {commit.message} by @{commit.user.name} (direct commit on {branch})\n"
53
+
54
+ significant_contributors = {
55
+ k: v for k, v in contributors.items() if (v.additions + v.deletions) > contributor_treshold
56
+ }
57
+
58
+ if len(significant_contributors):
59
+ result += (
60
+ "\n## Significant community contributions\n"
61
+ "\nThe following contributors have made significant "
62
+ "changes to the library over the last release:\n\n"
63
+ )
64
 
65
+ for significant_contributor, contributions in significant_contributors.items():
66
+ result += f"* @{significant_contributor}\n"
67
+ for description in contributions.descriptions:
68
+ result += f" * {description}\n"
69
 
70
  return result
71
 
72
 
73
  demo = gr.Interface(
74
+ fn=get_release_notes,
75
  inputs=[
76
  gr.inputs.Textbox(lines=1, placeholder="Your GitHub token"),
77
+ gr.inputs.Textbox(
78
+ lines=1, placeholder="Repository", default="huggingface/transformers"
79
+ ),
80
  gr.inputs.Textbox(lines=1, placeholder="The tag from which to get commit"),
81
+ gr.inputs.Textbox(
82
+ lines=1,
83
+ placeholder="The linear branch on which the new version tag will be added",
84
+ default="main",
85
+ ),
86
+ gr.inputs.Slider(
87
+ minimum=0,
88
+ maximum=2000,
89
+ default=500,
90
+ label="Threshold for significant contributors",
91
+ ),
92
+ gr.inputs.Checkbox(label="Ignore dependabot commits"),
93
+ gr.inputs.Checkbox(label="Ignore direct commits"),
94
  ],
95
+ outputs="text",
96
  )
97
 
98
 
99
  if __name__ == "__main__":
100
+ demo.launch()
graphql_calls.py CHANGED
@@ -3,10 +3,18 @@ from dataclasses import dataclass
3
  import requests
4
 
5
 
 
 
 
 
 
 
6
  @dataclass
7
  class Commit:
8
  message: str
9
- user: str
 
 
10
 
11
 
12
  def call_with_query(query, token):
@@ -52,9 +60,16 @@ def get_commits(token, repository, since):
52
  history(first: 100, since: "{since}"{next_page}) {{
53
  nodes {{
54
  message
 
 
55
  author {{
56
  user {{
57
  login
 
 
 
 
 
58
  }}
59
  }}
60
  }}
@@ -83,8 +98,18 @@ def get_commits(token, repository, since):
83
  commits = []
84
  for node in nodes:
85
  if node['author']['user'] is None:
86
- commits.append(Commit(message=node['message'].split('\n')[0], user='<NOT FOUND>'))
 
 
 
 
 
87
  else:
88
- commits.append(Commit(message=node['message'].split('\n')[0], user=node['author']['user']['login']))
 
 
 
 
 
89
 
90
  return commits
3
  import requests
4
 
5
 
6
+ @dataclass
7
+ class User:
8
+ name: str
9
+ organizations: list[str]
10
+
11
+
12
  @dataclass
13
  class Commit:
14
  message: str
15
+ user: User
16
+ additions: int
17
+ deletions: int
18
 
19
 
20
  def call_with_query(query, token):
60
  history(first: 100, since: "{since}"{next_page}) {{
61
  nodes {{
62
  message
63
+ deletions
64
+ additions
65
  author {{
66
  user {{
67
  login
68
+ organizations(first: 100) {{
69
+ nodes {{
70
+ name
71
+ }}
72
+ }}
73
  }}
74
  }}
75
  }}
98
  commits = []
99
  for node in nodes:
100
  if node['author']['user'] is None:
101
+ commits.append(Commit(
102
+ message=node['message'].split('\n')[0],
103
+ user=User(name='<NOT FOUND>', organizations=[]),
104
+ additions=node.get('additions'),
105
+ deletions=node.get('deletions')
106
+ ))
107
  else:
108
+ commits.append(Commit(
109
+ message=node['message'].split('\n')[0],
110
+ user=User(name=node['author']['user']['login'], organizations=[n['name'] for n in node['author']['user']['organizations']['nodes']]),
111
+ additions=node.get('additions'),
112
+ deletions=node.get('deletions')
113
+ ))
114
 
115
  return commits