Rate limit auto-merge action (#15802)

Co-authored-by: UltralyticsAssistant <web@ultralytics.com>
action-recog
Glenn Jocher 3 months ago committed by fcakyon
parent 9ede22cf98
commit 657ed2bf31
  1. 21
      .github/workflows/merge-main-into-prs.yml

@ -31,6 +31,7 @@ jobs:
run: | run: |
from github import Github from github import Github
import os import os
import time
g = Github(os.getenv('GITHUB_TOKEN')) g = Github(os.getenv('GITHUB_TOKEN'))
repo = g.get_repo(os.getenv('GITHUB_REPOSITORY')) repo = g.get_repo(os.getenv('GITHUB_REPOSITORY'))
@ -39,6 +40,11 @@ jobs:
default_branch_name = repo.default_branch default_branch_name = repo.default_branch
default_branch = repo.get_branch(default_branch_name) default_branch = repo.get_branch(default_branch_name)
# Initialize counters
updated_branches = 0
up_to_date_branches = 0
errors = 0
for pr in repo.get_pulls(state='open', sort='created'): for pr in repo.get_pulls(state='open', sort='created'):
try: try:
# Get full names for repositories and branches # Get full names for repositories and branches
@ -49,7 +55,6 @@ jobs:
# Check if PR is behind the default branch # Check if PR is behind the default branch
comparison = repo.compare(default_branch.commit.sha, pr.head.sha) comparison = repo.compare(default_branch.commit.sha, pr.head.sha)
if comparison.behind_by > 0: if comparison.behind_by > 0:
print(f"⚠ PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}) is behind {default_branch_name} by {comparison.behind_by} commit(s).") print(f"⚠ PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}) is behind {default_branch_name} by {comparison.behind_by} commit(s).")
@ -58,13 +63,23 @@ jobs:
success = pr.update_branch() success = pr.update_branch()
assert success, "Branch update failed" assert success, "Branch update failed"
print(f"✅ Successfully merged '{default_branch_name}' into PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}).") print(f"✅ Successfully merged '{default_branch_name}' into PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}).")
updated_branches += 1
time.sleep(10) # rate limit merges
except Exception as update_error: except Exception as update_error:
print(f"❌ Could not update PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}): {update_error}") print(f"❌ Could not update PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}): {update_error}")
print(" This might be due to branch protection rules or insufficient permissions.") errors += 1
else: else:
print(f"✅ PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}) is up to date with {default_branch_name}.") print(f"✅ PR #{pr.number} ({head_repo_name}:{head_branch_name} -> {base_repo_name}:{base_branch_name}) is already up to date with {default_branch_name}, no merge required.")
up_to_date_branches += 1
except Exception as e: except Exception as e:
print(f"❌ Could not process PR #{pr.number}: {e}") print(f"❌ Could not process PR #{pr.number}: {e}")
errors += 1
# Print summary
print("\n\nSummary:")
print(f"Branches updated: {updated_branches}")
print(f"Branches already up-to-date: {up_to_date_branches}")
print(f"Total errors: {errors}")
env: env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}

Loading…
Cancel
Save