mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-18 17:14:20 +01:00
scripts/merge-pr.py: Manually map Github username to email address
You can get pretty much any old email address out of Github API, so let's just map the emails manually.
This commit is contained in:
6
.github.json
Normal file
6
.github.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"penberg": {
|
||||||
|
"name": "Pekka Enberg",
|
||||||
|
"email": "penberg@ki.fi"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,7 +16,7 @@ import os
|
|||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
import textwrap
|
import textwrap
|
||||||
|
import json
|
||||||
|
|
||||||
def run_command(command):
|
def run_command(command):
|
||||||
process = subprocess.Popen(
|
process = subprocess.Popen(
|
||||||
@@ -24,25 +24,35 @@ def run_command(command):
|
|||||||
output, error = process.communicate()
|
output, error = process.communicate()
|
||||||
return output.decode('utf-8').strip(), error.decode('utf-8').strip(), process.returncode
|
return output.decode('utf-8').strip(), error.decode('utf-8').strip(), process.returncode
|
||||||
|
|
||||||
|
def load_user_mapping(file_path='.github.json'):
|
||||||
|
if os.path.exists(file_path):
|
||||||
|
with open(file_path, 'r') as f:
|
||||||
|
return json.load(f)
|
||||||
|
return {}
|
||||||
|
|
||||||
|
user_mapping = load_user_mapping()
|
||||||
|
|
||||||
def get_user_email(g, username):
|
def get_user_email(g, username):
|
||||||
|
if username in user_mapping:
|
||||||
|
return f"{user_mapping[username]['name']} <{user_mapping[username]['email']}>"
|
||||||
|
|
||||||
try:
|
try:
|
||||||
user = g.get_user(username)
|
user = g.get_user(username)
|
||||||
|
name = user.name if user.name else username
|
||||||
if user.email:
|
if user.email:
|
||||||
return user.email
|
return f"{name} <{user.email}>"
|
||||||
# If public email is not available, try to get from events
|
# If public email is not available, try to get from events
|
||||||
events = user.get_events()
|
events = user.get_events()
|
||||||
for event in events:
|
for event in events:
|
||||||
if event.type == "PushEvent" and event.payload.get("commits"):
|
if event.type == "PushEvent" and event.payload.get("commits"):
|
||||||
for commit in event.payload["commits"]:
|
for commit in event.payload["commits"]:
|
||||||
if commit.get("author") and commit["author"].get("email"):
|
if commit.get("author") and commit["author"].get("email"):
|
||||||
return commit["author"]["email"]
|
return f"{name} <{commit['author']['email']}>"
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error fetching email for user {username}: {str(e)}")
|
print(f"Error fetching email for user {username}: {str(e)}")
|
||||||
|
|
||||||
# If we couldn't find an email, return a noreply address
|
# If we couldn't find an email, return a noreply address
|
||||||
return f"{username}@users.noreply.github.com"
|
return f"{username} <{username}@users.noreply.github.com>"
|
||||||
|
|
||||||
|
|
||||||
def get_pr_info(g, repo, pr_number):
|
def get_pr_info(g, repo, pr_number):
|
||||||
pr = repo.get_pull(int(pr_number))
|
pr = repo.get_pull(int(pr_number))
|
||||||
@@ -55,9 +65,7 @@ def get_pr_info(g, repo, pr_number):
|
|||||||
for review in reviews:
|
for review in reviews:
|
||||||
if review.state == 'APPROVED':
|
if review.state == 'APPROVED':
|
||||||
reviewer = review.user
|
reviewer = review.user
|
||||||
reviewer_name = reviewer.name if reviewer.name else reviewer.login
|
reviewed_by.append(get_user_email(g, reviewer.login))
|
||||||
reviewer_email = get_user_email(g, reviewer.login)
|
|
||||||
reviewed_by.append(f"{reviewer_name} <{reviewer_email}>")
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'number': pr.number,
|
'number': pr.number,
|
||||||
@@ -68,7 +76,6 @@ def get_pr_info(g, repo, pr_number):
|
|||||||
'reviewed_by': reviewed_by
|
'reviewed_by': reviewed_by
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def wrap_text(text, width=72):
|
def wrap_text(text, width=72):
|
||||||
lines = text.split('\n')
|
lines = text.split('\n')
|
||||||
wrapped_lines = []
|
wrapped_lines = []
|
||||||
@@ -83,7 +90,6 @@ def wrap_text(text, width=72):
|
|||||||
wrapped_lines.extend(textwrap.wrap(line, width=width))
|
wrapped_lines.extend(textwrap.wrap(line, width=width))
|
||||||
return '\n'.join(wrapped_lines)
|
return '\n'.join(wrapped_lines)
|
||||||
|
|
||||||
|
|
||||||
def merge_pr(pr_number):
|
def merge_pr(pr_number):
|
||||||
# GitHub authentication
|
# GitHub authentication
|
||||||
token = os.getenv('GITHUB_TOKEN')
|
token = os.getenv('GITHUB_TOKEN')
|
||||||
@@ -147,7 +153,6 @@ def merge_pr(pr_number):
|
|||||||
print("Pull request merged successfully!")
|
print("Pull request merged successfully!")
|
||||||
print(f"Merge commit message:\n{commit_message}")
|
print(f"Merge commit message:\n{commit_message}")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
print("Usage: python merge_pr.py <pr_number>")
|
print("Usage: python merge_pr.py <pr_number>")
|
||||||
|
|||||||
Reference in New Issue
Block a user