From 77aa0e61afebadf574f22b4473b0e283c546d7d9 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Sun, 14 Apr 2024 06:14:49 -0700 Subject: [PATCH] Create merge-main-into-prs.yml (#12918) * Create merge-main-into-prs.yml Signed-off-by: Glenn Jocher * Update merge-main-into-prs.yml Signed-off-by: Glenn Jocher --------- Signed-off-by: Glenn Jocher --- .github/workflows/merge-main-into-prs.yml | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .github/workflows/merge-main-into-prs.yml diff --git a/.github/workflows/merge-main-into-prs.yml b/.github/workflows/merge-main-into-prs.yml new file mode 100644 index 000000000000..7ac983be10ae --- /dev/null +++ b/.github/workflows/merge-main-into-prs.yml @@ -0,0 +1,58 @@ +# 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/yolov5' + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: main + - 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: + # Compare PR head with main to see if it's behind + comparison = repo.compare(pr.base.ref, pr.head.ref) # Ensure correct order of base and head + if comparison.behind_by > 0: + try: + # Merge main into the PR branch + success = pr.update_branch() + assert success, "Branch update failed" + 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 }}