diff --git a/.github/workflows/merge-main-into-prs.yml b/.github/workflows/merge-main-into-prs.yml new file mode 100644 index 00000000..dc71d730 --- /dev/null +++ b/.github/workflows/merge-main-into-prs.yml @@ -0,0 +1,54 @@ +# Ultralytics YOLO 🚀, AGPL-3.0 license +# Automatically merges repository 'main' branch into all open PRs to keep them up-to-date +# Action runs on updates to main branch so when one PR merges to main all others update + +name: Merge main into PRs + +on: + workflow_dispatch: + # push: + # branches: + # - main + +jobs: + Merge: + if: github.repository == 'ultralytics/ultralytics' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-python@v5 + with: + python-version: "3.11" + cache: "pip" # caching pip dependencies + - name: Install requirements + run: | + pip install pygithub + - name: Merge main into PRs + shell: python + run: | + from github import Github + import os + + # Authenticate with the GitHub Token + g = Github(os.getenv('GITHUB_TOKEN')) + + # Get the repository dynamically + repo = g.get_repo(os.getenv('GITHUB_REPOSITORY')) + + # List all open pull requests + open_pulls = repo.get_pulls(state='open', sort='created') + + for pr in open_pulls: + try: + # Attempt to merge main into the PR branch + message = f"Merge 'main' into PR #{pr.number} by https://ultralytics.com/actions" + merge_commit = repo.merge(pr.head.ref, 'main', commit_message=message) + print(f"Merged 'main' into PR #{pr.number} ({pr.head.ref}) successfully.") + except Exception as e: + print(f"Could not merge 'main' into PR #{pr.number} ({pr.head.ref}): {e}") + env: + GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + GITHUB_REPOSITORY: ${{ github.repository }}