create-or-update-pull-request-action
create-or-update-pull-request-action copied to clipboard
A GitHub Action to create or update a pull request based on local changes
Create or Update Pull Request action
A GitHub Action to create or update a pull request based on local changes
Usage
Minimal workflow example
name: Nightly update
on:
schedule:
# https://crontab.guru/every-night-at-midnight
- cron: "0 0 * * *"
jobs:
update_routes:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
persist-credentials: false
- run: "date > datetime.txt" # create or update a test.txt file
- uses: gr2m/create-or-update-pull-request-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
persist-credentials: false is crucial otherwise Git push is performed with github.token and not the token you configure using the env: GITHUB_TOKEN.
Customizations
uses: gr2m/create-or-update-pull-request-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
title: "My pull request title"
body: "My pull request body"
branch: "my-pull-request-base-branch"
path: "lib/"
commit-message: "My commit message for uncommitted changes in lib/ folder"
author: "Lorem J. Ipsum <[email protected]>"
labels: label1, label2
assignees: user1, user2
reviewers: user1, user2
team_reviewers: team1, team2
auto-merge: squash
update-pull-request-title-and-body: false
Note: auto-merge is optional. It can be set to merge, squash, or rebase. If auto-merging is disabled in the repository, a warning will be logged, but the action will not fail.
To create multiple commits for different paths, use the action multiple times
- uses: gr2m/create-or-update-pull-request-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
title: "My pull request title"
body: "My pull request body"
branch: "my-pull-request-base-branch"
author: "Lorem J. Ipsum <[email protected]>"
path: "cache/"
commit-message: "build: cache"
- uses: gr2m/create-or-update-pull-request-action@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
branch: "my-pull-request-base-branch"
author: "Lorem J. Ipsum <[email protected]>"
path: "data/"
commit-message: "feat: data updated"
Debugging
To see additional debug logs, create a secret with the name: ACTIONS_STEP_DEBUG and value true. There is no need to pass it as env to steps, it will work globally.
How it works
The actions checks for local changes which can be
- Uncommitted changes such as created, updated or deleted files as shown by
git status - Local commits
If there are none, the action concludes with the "neutral" status
If there are changes, it does the following
- Sets
user.nameanduser.emailwithgit config --globalbased on theauthorinput, unless it has been already set before. - Looks for local changes with
git status. - Adds a new commit using the
commit-messageinput if there are uncommitted changes. - Pushes the local changes to remote using the branch configured in the
branchinput. - Creates a pull request using the
titleandbodyinputs. If a pull request exists for the branch, it's checked out locally, rebased with-XTheirsand pushed with--forceto update the pull request with the new changes.
The actions outputs following properties:
pull-request-number- number of created/updated PR. Not set if result isunchanged.result-created,updatedorunchangedbased if the PR was created, updated or if there were no local changes.
The action is written in JavaScript. Learn how to create your own.
Who is using it
- @octokit/routes
- @octokit/rest.js
- @sinchang/cn-starbucks-stores-data
ergebnis/composer-normalize- nodejs/node
- dreua/flatpak-module-qpdf-pikepdf: Flatpak modules for qpdf and pikepdf
Please send a pull request to add yours :)
Credit
Inspired by the Create Pull Request action by @peter-evans
License
MIT