Commit
·
3bbc731
1
Parent(s):
d00fa12
First version
Browse files- app.py +37 -0
- graphql_calls.py +90 -0
app.py
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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()
|
graphql_calls.py
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from dataclasses import dataclass
|
| 2 |
+
|
| 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):
|
| 13 |
+
url = 'https://api.github.com/graphql'
|
| 14 |
+
r = requests.post(url, json={'query': query}, headers={'Authorization': f'Bearer {token}'})
|
| 15 |
+
return r.json()
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
def get_tag_commit_date(token, repository, tag):
|
| 19 |
+
owner, name = repository.split('/')
|
| 20 |
+
query = f"""
|
| 21 |
+
query GetTagCommit {{
|
| 22 |
+
repository(owner: "{owner}", name: "{name}"){{
|
| 23 |
+
object(expression: "{tag}") {{
|
| 24 |
+
... on Commit {{
|
| 25 |
+
oid
|
| 26 |
+
message
|
| 27 |
+
committedDate
|
| 28 |
+
author {{
|
| 29 |
+
user {{
|
| 30 |
+
login
|
| 31 |
+
}}
|
| 32 |
+
}}
|
| 33 |
+
}}
|
| 34 |
+
}}
|
| 35 |
+
}}
|
| 36 |
+
}}
|
| 37 |
+
"""
|
| 38 |
+
return call_with_query(query, token)['data']['repository']['object']['committedDate']
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
def get_commits(token, repository, since):
|
| 42 |
+
owner, name = repository.split('/')
|
| 43 |
+
|
| 44 |
+
def get_page_result(next_page=''):
|
| 45 |
+
query = f"""
|
| 46 |
+
query GetCommits {{
|
| 47 |
+
repository(owner: "{owner}", name: "{name}"){{
|
| 48 |
+
nameWithOwner
|
| 49 |
+
object(expression: "main") {{
|
| 50 |
+
... on Commit {{
|
| 51 |
+
oid
|
| 52 |
+
history(first: 100, since: "{since}"{next_page}) {{
|
| 53 |
+
nodes {{
|
| 54 |
+
message
|
| 55 |
+
author {{
|
| 56 |
+
user {{
|
| 57 |
+
login
|
| 58 |
+
}}
|
| 59 |
+
}}
|
| 60 |
+
}}
|
| 61 |
+
pageInfo {{
|
| 62 |
+
endCursor
|
| 63 |
+
hasNextPage
|
| 64 |
+
}}
|
| 65 |
+
}}
|
| 66 |
+
}}
|
| 67 |
+
}}
|
| 68 |
+
}}
|
| 69 |
+
}}
|
| 70 |
+
"""
|
| 71 |
+
result = call_with_query(query, token)
|
| 72 |
+
nodes = result['data']['repository']['object']['history']['nodes']
|
| 73 |
+
cursor = result['data']['repository']['object']['history']['pageInfo']['endCursor']
|
| 74 |
+
return nodes, cursor
|
| 75 |
+
|
| 76 |
+
nodes, cursor = get_page_result()
|
| 77 |
+
|
| 78 |
+
while cursor is not None:
|
| 79 |
+
_nodes, cursor = get_page_result(f' after:"{cursor}"')
|
| 80 |
+
nodes.extend(_nodes)
|
| 81 |
+
|
| 82 |
+
|
| 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
|