fix(ci): resolve out-of-date branch warning in auto PR workflow

This commit is contained in:
BLACKBOX Agent 2025-11-06 17:02:18 +00:00
parent 0edc001d28
commit 38428ee53e
2 changed files with 82 additions and 6 deletions

View File

@ -2,7 +2,8 @@
- [Troubleshooting](#troubleshooting)
- [Create using an existing branch as the PR branch](#create-using-an-existing-branch-as-the-pr-branch)
- [Frequently requested features](#use-case-create-a-pull-request-to-update-x-on-release)
- [Pull request shows "This branch is out-of-date with the base branch"](#pull-request-shows-this-branch-is-out-of-date-with-the-base-branch)
- [Frequently requested features](#frequently-requested-features)
- [Disable force updates to existing PR branches](#disable-force-updates-to-existing-pr-branches)
- [Add a no-verify option to bypass git hooks](#add-a-no-verify-option-to-bypass-git-hooks)
@ -16,6 +17,82 @@ If you have an existing branch that you just want to create a PR for, then I rec
Alternatively, if you are trying to keep a branch up to date with another branch, then you can follow [this example](https://github.com/peter-evans/create-pull-request/blob/main/docs/examples.md#keep-a-branch-up-to-date-with-another).
### Pull request shows "This branch is out-of-date with the base branch"
When creating pull requests to promote changes from one branch to another (e.g., `dev``prod`), you may see a warning from GitHub stating "This branch is out-of-date with the base branch" even though the pull request should contain all the latest changes.
#### Root Cause
This issue occurs when the workflow checks out the **target** branch (e.g., `prod`), resets it locally to match the **source** branch (e.g., `dev`), and then creates a pull request. The problem is:
1. The local target branch is reset to match the source
2. The pull request branch is created from the locally reset target
3. However, the **remote** target branch remains unchanged
4. GitHub compares the pull request branch against the remote target branch
5. Since the remote target is behind, GitHub shows the "out-of-date" warning
#### Incorrect Workflow Pattern
```yml
# ❌ This pattern causes the "out-of-date" warning
name: Auto PR from dev to prod
on:
push:
branches:
- dev
jobs:
check-and-create-pr:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: prod # ❌ Checking out target branch
- name: Reset promotion branch
run: |
git fetch origin dev:dev
git reset --hard dev
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
branch: prod-promotion
title: "Auto PR: Merge changes from dev to prod"
```
#### Correct Solution
Check out the **source** branch and specify the **target** branch using the `base` input:
```yml
# ✅ Correct pattern - no "out-of-date" warning
name: Auto PR from dev to prod
on:
push:
branches:
- dev
jobs:
check-and-create-pr:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: dev # ✅ Check out source branch
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
branch: prod-promotion
base: prod # ✅ Specify target branch as base
title: "Auto PR: Merge changes from dev to prod"
body: "This pull request has been automatically created to merge changes from the dev branch into the prod branch."
```
This approach ensures that:
- The pull request branch is created from the source branch (`dev`)
- The pull request targets the correct base branch (`prod`)
- GitHub correctly shows the diff between source and target
- No "out-of-date" warning appears
For more examples of branch promotion workflows, see [Keep a branch up-to-date with another](https://github.com/peter-evans/create-pull-request/blob/main/docs/examples.md#keep-a-branch-up-to-date-with-another).
## Frequently requested features
### Disable force updates to existing PR branches

View File

@ -73,17 +73,16 @@ jobs:
productionPromotion:
runs-on: ubuntu-latest
steps:
# Checkout the source branch (main) that contains the changes
- uses: actions/checkout@v4
with:
ref: production
- name: Reset promotion branch
run: |
git fetch origin main:main
git reset --hard main
ref: main
# Create a pull request to merge main into production
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
branch: production-promotion
base: production
```
## Use case: Create a pull request to update X on release