action-pull-request
GitHub Action that will create a pull request from the current branch
1M+
GitHub Action that will create a pull request from the currently selected branch.
source_branch to a target_branchtitle and bodyassignee, reviewer, one or more label, a milestone or mark it as a draftold_string inside a pull request template with a new_string. Or put commits' subjects in place of old_stringget_diff is true will add list of commits in place of <!-- Diff commits --> and list of modified files in place of <!-- Diff files --> in a pull request templateallow_no_diff is set to true will continue execution and create pull request even if both branches have no differences, e.g. having only a merge commitamd64 and arm64 architecturesUseful in combination with my other action devops-infra/action-commit-push.
This action supports three tag levels for flexible versioning:
vX: latest patch of the major version (e.g., v1).vX.Y: latest patch of the minor version (e.g., v1.2).vX.Y.Z: fixed to a specific release (e.g., v1.2.3). - name: Run the Action
uses: devops-infra/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
source_branch: development
target_branch: master
title: My pull request
template: .github/PULL_REQUEST_TEMPLATE.md
body: "**Automated pull request**"
reviewer: octocat
assignee: octocat
label: enhancement
milestone: My milestone
draft: true
old_string: "<!-- Add your description here -->"
new_string: "** Automatic pull request**"
get_diff: true
ignore_users: "dependabot"
allow_no_diff: false
| Input Variable | Required | Default | Description |
|---|---|---|---|
github_token | Yes | "" | GitHub token ${{ secrets.GITHUB_TOKEN }} |
source_branch | No | current branch | Name of the source branch |
target_branch | No | master | Name of the target branch. Change it if you use main |
title | No | subject of the first commit | Pull request title |
template | No | "" | Template file location |
body | No | list of commits | Pull request body |
reviewer | No | "" | Reviewer's username |
assignee | No | "" | Assignee's usernames |
label | No | "" | Labels to apply, comma separated |
milestone | No | "" | Milestone |
draft | No | false | Whether to mark it as a draft |
old_string | No | "" | Old string for the replacement in the template |
new_string | No | "" | New string for the replacement in the template. If not specified, but old_string was, it will gather commits subjects |
get_diff | No | false | Whether to replace predefined comments with differences between branches - see details below |
ignore_users | No | "dependabot" | List of users to ignore, comma separated |
allow_no_diff | No | false | Allows to continue on merge commits with no diffs |
| Output | Description |
|---|---|
url | Pull request URL |
pr_number | Number of GitHub pull request |
In previous versions occurrences of following strings in a template result with replacing them with list of commits and list of modified files (<!-- Diff commits --> and <!-- Diff files -->).
Now this action will expect to have three types of comment blocks. Meaning anything between START and END comment will get replaced. This is especially important when updating pull request with new commits.
<!-- Diff summary - START --> and <!-- Diff summary - END --> - show first lines of each commit in the pull request<!-- Diff commits - START --> and <!-- Diff commits - END --> - show graph of commits in the pull request, with authors' info and time<!-- Diff files - START --> and <!-- Diff files - END --> - show list of modified filesIf your template uses old comment strings it will try to adjust them in the pull request body to a new standard when pull request is created. It will not modify the template.
CAUTION: Remember to not use default fetch-depth for actions/checkout action. Rather set it to 0 - see example below.
Red areas show fields that can be dynamically expanded based on commits to the current branch. Blue areas show fields that can be set in action configuration.

Create pull request for non-master branches:
name: Run the Action
on:
push:
branches-ignore: master
jobs:
action-pull-request:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Create pull request
uses: devops-infra/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
title: Automatic pull request
Use first commit as a title and part of body, add a label based on a branch name, add git differences in the template:
name: Run the Action
on:
push:
branches-ignore: master
jobs:
action-pull-request:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Run the Action
if: startsWith(github.ref, 'refs/heads/feature')
uses: devops-infra/[email protected]
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
title: ${{ github.event.commits[0].message }}
assignee: ${{ github.actor }}
label: automatic,feature
template: .github/PULL_REQUEST_TEMPLATE/FEATURE.md
old_string: "**Write your description here**"
new_string: ${{ github.event.commits[0].message }}
get_diff: true
Run the Action with a specific version tag.
name: Run the Action
on:
push:
branches-ignore: master
jobs:
action-pull-request:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: devops-infra/[email protected]
id: Pin patch version
- uses: devops-infra/[email protected]
id: Pin minor version
- uses: devops-infra/action-pull-request@v1
id: Pin major version
Contributions are welcome! See CONTRIBUTING. This project is licensed under the MIT License - see the LICENSE file for details.
This project is licensed under the MIT License - see the LICENSE file for details.
If you have any questions or need help, please:
Content type
Image
Digest
sha256:7d512d9b2…
Size
109.1 MB
Last updated
about 22 hours ago
Requires Docker Desktop 4.37.1 or later.
Pulls:
6,529
Feb 23 to Mar 1