Merge branch 'main' into quan

mct-2.1.1
Ultralytics Assistant 3 months ago committed by GitHub
commit 7438697e17
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 73
      .github/workflows/merge-main-into-prs.yml
  2. 8
      docs/overrides/main.html

@ -8,7 +8,7 @@ on:
workflow_dispatch: workflow_dispatch:
# push: # push:
# branches: # branches:
# - main # - ${{ github.event.repository.default_branch }}
jobs: jobs:
Merge: Merge:
@ -19,40 +19,73 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
fetch-depth: 0 fetch-depth: 0
ref: main
- uses: actions/setup-python@v5 - uses: actions/setup-python@v5
with: with:
python-version: "3.11" python-version: "3.x"
cache: "pip" # caching pip dependencies cache: "pip"
- name: Install requirements - name: Install requirements
run: | run: |
pip install pygithub pip install pygithub
- name: Merge main into PRs - name: Merge default branch into PRs
shell: python shell: python
run: | run: |
from github import Github from github import Github
import os import os
import time
# Authenticate with the GitHub Token
g = Github(os.getenv('GITHUB_TOKEN')) g = Github(os.getenv('GITHUB_TOKEN'))
# Get the repository dynamically
repo = g.get_repo(os.getenv('GITHUB_REPOSITORY')) repo = g.get_repo(os.getenv('GITHUB_REPOSITORY'))
# Fetch the default branch name
default_branch_name = repo.default_branch
default_branch = repo.get_branch(default_branch_name)
# List all open pull requests # Initialize counters
open_pulls = repo.get_pulls(state='open', sort='created') updated_branches = 0
up_to_date_branches = 0
for pr in open_pulls: errors = 0
for pr in repo.get_pulls(state='open', sort='created'):
try: try:
# Compare PR head with main to see if it's behind # Label PRs as popular for positive reactions
comparison = repo.compare(pr.base.ref, pr.head.ref) # ensure correct order of base and head reactions = pr.as_issue().get_reactions()
if sum([(1 if r.content not in {"-1", "confused"} else 0) for r in reactions]) > 5:
pr.set_labels(*("popular",) + tuple(l.name for l in pr.get_labels()))
# Get full names for repositories and branches
base_repo_name = repo.full_name
head_repo_name = pr.head.repo.full_name
base_branch_name = pr.base.ref
head_branch_name = pr.head.ref
# Check if PR is behind the default branch
comparison = repo.compare(default_branch.commit.sha, pr.head.sha)
if comparison.behind_by > 0: if comparison.behind_by > 0:
# Merge main into the PR branch 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).")
success = pr.update_branch()
assert success, "Branch update failed" # Attempt to update the branch
print(f"Merged 'main' into PR #{pr.number} ({pr.head.ref}) successfully.") try:
success = pr.update_branch()
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}).")
updated_branches += 1
time.sleep(10) # rate limit merges
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}")
errors += 1
else:
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 merge 'main' into PR #{pr.number} ({pr.head.ref}): {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 }} GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN || secrets.GITHUB_TOKEN }}
GITHUB_REPOSITORY: ${{ github.repository }} GITHUB_REPOSITORY: ${{ github.repository }}

@ -9,19 +9,19 @@
class="banner-wrapper" class="banner-wrapper"
> >
<img <img
src="https://assets-global.website-files.com/646dd1f1a3703e451ba81ecc/6627a6e4d47ce284268ea3b9_yolov82_release.svg" src="https://assets-global.website-files.com/646dd1f1a3703e451ba81ecc/66cb78d08408c438e54a6f2f_yolov82_release.webp"
loading="lazy" loading="lazy"
alt="Ultralytics YOLOv8.2 Release" alt="Ultralytics YOLOv8.2 Release"
class="banner-content desktop" class="banner-content desktop"
/> />
<img <img
src="https://assets-global.website-files.com/646dd1f1a3703e451ba81ecc/6627a163dd84c20540c5ea7a_yolov82_effects.svg" src="https://assets-global.website-files.com/646dd1f1a3703e451ba81ecc/66cb7a122db51139d6c0b4a8_yolov82_release_mobile.webp"
loading="lazy" loading="lazy"
alt="Ultralytics YOLOv8.2 Release" alt="Ultralytics YOLOv8.2 Release Mobile"
class="banner-content mobile" class="banner-content mobile"
/> />
<img <img
src="https://assets-global.website-files.com/646dd1f1a3703e451ba81ecc/6627a163ab932e33983215d4_arrow_effects.svg" src="https://assets-global.website-files.com/646dd1f1a3703e451ba81ecc/66cb779fc2ff285f3efceea1_arrow_effects.webp"
loading="lazy" loading="lazy"
alt="Ultralytics YOLOv8.2 Release Arrow" alt="Ultralytics YOLOv8.2 Release Arrow"
class="banner-arrow" class="banner-arrow"

Loading…
Cancel
Save