A GitHub Action to create or update a pull request based on local changes
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@master
- run: "date > datetime.txt" # create or update a test.txt file
- uses: gr2m/create-or-update-pull-request-action@v1.x
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Customizations
uses: gr2m/create-or-update-pull-request-action@v1.x
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 uncommited changes in lib/ folder"
author: "Lorem J. Ipsum <lorem@example.com>"
To create multiple commits for different paths, use the action multiple times
- uses: gr2m/create-or-update-pull-request-action@v1.x
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 <lorem@example.com>"
path: "cache/"
commit-message: "build: cache"
- uses: gr2m/create-or-update-pull-request-action@v1.x
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
branch: "my-pull-request-base-branch"
author: "Lorem J. Ipsum <lorem@example.com>"
path: "data/"
commit-message: "feat: data updated"
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.
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.name
anduser.email
withgit config --global
based on theauthor
input, unless it has been already set before. - Looks for local changes with
git status
. - Adds a new commit using the
commit-message
input if there are uncommited changes. - Pushes the local changes to remote using the branch configured in the
branch
input. - Creates a pull request using the
title
andbody
inputs. If a pull request exists for the branch, it's checkoud out locally, rebased with-XTheirs
and pushed with--force
to update the pull request with the new changes.
The action is written in JavaScript. Learn how to create your own.
Please send a pull request to add yours :)
Inspired by the Create Pull Request action by @peter-evans