A GitHub Action to create or update a pull request based on local changes
Minimal workflow example
name: Nightly update
on:
schedule:
- 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: step-security/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: step-security/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 <lorem@example.com>"
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: step-security/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 <lorem@example.com>"
path: "cache/"
commit-message: "build: cache"
- uses: step-security/create-or-update-pull-request-action@v1
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 uncommitted 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 checked out locally, rebased with-XTheirs
and pushed with--force
to 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
,updated
orunchanged
based 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.
Inspired by the Create Pull Request action by @peter-evans