create-pull-request/README.md

275 lines
13 KiB
Markdown
Raw Normal View History

2019-11-03 07:46:11 +01:00
# <img width="24" height="24" src="assets/logo.svg"> Create Pull Request
2019-07-16 12:58:27 +02:00
[![GitHub Marketplace](https://img.shields.io/badge/Marketplace-Create%20Pull%20Request-blue.svg?colorA=24292e&colorB=0366d6&style=flat&longCache=true&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAM6wAADOsB5dZE0gAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAERSURBVCiRhZG/SsMxFEZPfsVJ61jbxaF0cRQRcRJ9hlYn30IHN/+9iquDCOIsblIrOjqKgy5aKoJQj4O3EEtbPwhJbr6Te28CmdSKeqzeqr0YbfVIrTBKakvtOl5dtTkK+v4HfA9PEyBFCY9AGVgCBLaBp1jPAyfAJ/AAdIEG0dNAiyP7+K1qIfMdonZic6+WJoBJvQlvuwDqcXadUuqPA1NKAlexbRTAIMvMOCjTbMwl1LtI/6KWJ5Q6rT6Ht1MA58AX8Apcqqt5r2qhrgAXQC3CZ6i1+KMd9TRu3MvA3aH/fFPnBodb6oe6HM8+lYHrGdRXW8M9bMZtPXUji69lmf5Cmamq7quNLFZXD9Rq7v0Bpc1o/tp0fisAAAAASUVORK5CYII=)](https://github.com/marketplace/actions/create-pull-request)
2019-07-16 12:53:24 +02:00
A GitHub action to create a pull request for changes to your repository in the actions workspace.
2019-07-16 12:58:27 +02:00
2019-09-25 16:58:47 +02:00
Changes to a repository in the Actions workspace persist between steps in a workflow.
This action is designed to be used in conjunction with other steps that modify or add files to your repository.
2019-07-16 12:58:27 +02:00
The changes will be automatically committed to a new branch and a pull request created.
Create Pull Request action will:
2019-09-25 16:58:47 +02:00
1. Check for repository changes in the Actions workspace. This includes untracked (new) files as well as modified files.
2019-10-06 07:59:45 +02:00
2. Commit all changes to a new branch, or update an existing pull request branch.
2019-07-16 12:58:27 +02:00
3. Create a pull request to merge the new branch into the currently active branch executing the workflow.
## Usage
2019-09-25 02:42:45 +02:00
Linux
2019-08-13 11:14:43 +02:00
```yml
2019-09-30 11:58:24 +02:00
- name: Create Pull Request
2019-10-30 08:10:02 +01:00
uses: peter-evans/create-pull-request@v1.6.0
2019-09-30 11:58:24 +02:00
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2019-07-16 12:58:27 +02:00
```
2019-09-25 02:42:45 +02:00
Multi platform - Linux, MacOS, Windows (beta)
```yml
2019-09-30 11:58:24 +02:00
- name: Create Pull Request
2019-10-30 08:10:02 +01:00
uses: peter-evans/create-pull-request@v1.6.0-multi
2019-09-30 11:58:24 +02:00
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2019-09-25 02:42:45 +02:00
```
2019-10-30 08:10:02 +01:00
**Note**: If you want pull requests created by this action to trigger an `on: pull_request` workflow then you must use a [Personal Access Token](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line) instead of the default `GITHUB_TOKEN`.
2019-10-02 15:38:58 +02:00
See [this issue](https://github.com/peter-evans/create-pull-request/issues/48) for further details.
### Environment variables
2019-07-16 12:58:27 +02:00
2019-10-06 07:59:45 +02:00
These variables are *all optional*. If not set, sensible default values will be used.
| Name | Description | Default |
| --- | --- | --- |
| `COMMIT_MESSAGE` | The message to use when committing changes. | `Auto-committed changes by create-pull-request action` |
2019-10-06 08:06:49 +02:00
| `COMMIT_AUTHOR_EMAIL` | The email address of the commit author. | For `push` events, the HEAD commit author. Otherwise, <GITHUB_ACTOR>@users.noreply.github.com, where `GITHUB_ACTOR` is the GitHub user that initiated the event. |
| `COMMIT_AUTHOR_NAME` | The name of the commit author. | For `push` events, the HEAD commit author. Otherwise, <GITHUB_ACTOR>, the GitHub user that initiated the event. |
2019-10-06 07:59:45 +02:00
| `PULL_REQUEST_TITLE` | The title of the pull request. | `Auto-generated by create-pull-request action` |
| `PULL_REQUEST_BODY` | The body of the pull request. | `Auto-generated pull request by [create-pull-request](https://github.com/peter-evans/create-pull-request) GitHub Action` |
2019-10-06 08:13:32 +02:00
| `PULL_REQUEST_LABELS` | A comma separated list of labels. | none |
| `PULL_REQUEST_ASSIGNEES` | A comma separated list of assignees (GitHub usernames). | none |
| `PULL_REQUEST_REVIEWERS` | A comma separated list of reviewers (GitHub usernames) to request a review from. | none |
| `PULL_REQUEST_TEAM_REVIEWERS` | A comma separated list of GitHub teams to request a review from. | none |
| `PULL_REQUEST_MILESTONE` | The number of the milestone to associate this pull request with. | none |
2019-10-06 07:59:45 +02:00
| `PULL_REQUEST_BRANCH` | The branch name. See **Branch naming** below for details. | `create-pull-request/patch` |
2019-10-21 13:17:31 +02:00
| `PULL_REQUEST_BASE` | Overrides the base branch. **Use with caution!** | Defaults to the currently checked out branch. |
2019-10-06 07:59:45 +02:00
| `BRANCH_SUFFIX` | The branch suffix type. Valid values are `short-commit-hash`, `timestamp`, `random` and `none`. See **Branch naming** below for details. | `short-commit-hash` |
2019-09-30 11:58:24 +02:00
2019-10-06 08:06:49 +02:00
**Output environment variables**
2019-09-30 11:58:24 +02:00
- `PULL_REQUEST_NUMBER` - The number of the pull request created.
2019-09-24 13:00:49 +02:00
2019-10-06 08:06:49 +02:00
**Debug environment variables**
2019-10-30 08:10:02 +01:00
The following parameter is available for debugging and troubleshooting.
2019-09-24 13:00:49 +02:00
- `DEBUG_EVENT` - If present, outputs the event data that triggered the workflow.
2019-07-16 12:58:27 +02:00
### Branch naming
2019-07-16 12:58:27 +02:00
For branch naming there are two strategies. Always create a new branch each time there are changes to be committed, OR, create a fixed-name pull request branch that will be updated with any new commits until it is merged or closed.
2019-07-16 12:58:27 +02:00
#### Strategy A - Always create a new pull request branch (default)
2019-07-16 12:58:27 +02:00
2019-09-30 11:58:24 +02:00
For this strategy there are three options to suffix the branch name.
The branch name is defined by the variable `PULL_REQUEST_BRANCH` and defaults to `create-pull-request/patch`. The following options are values for `BRANCH_SUFFIX`.
2019-09-24 13:00:49 +02:00
- `short-commit-hash` (default) - Commits will be made to a branch suffixed with the short SHA1 commit hash. e.g. `create-pull-request/patch-fcdfb59`, `create-pull-request/patch-394710b`
2019-09-30 11:58:24 +02:00
- `timestamp` - Commits will be made to a branch suffixed by a timestamp. e.g. `create-pull-request/patch-1569322532`, `create-pull-request/patch-1569322552`
2019-09-30 11:58:24 +02:00
- `random` - Commits will be made to a branch suffixed with a random alpha-numeric string. This option should be used if multiple pull requests will be created during the execution of a workflow. e.g. `create-pull-request/patch-6qj97jr`, `create-pull-request/patch-5jrjhvd`
2019-09-30 11:58:24 +02:00
#### Strategy B - Create and update a pull request branch
2019-09-30 11:58:24 +02:00
To use this strategy, set `BRANCH_SUFFIX` to the value `none`. The variable `PULL_REQUEST_BRANCH` defaults to `create-pull-request/patch`. Commits will be made to this branch and a pull request created. Any subsequent changes will be committed to the *same* branch and reflected in the existing pull request.
2019-09-30 11:58:24 +02:00
### Ignoring files
2019-07-16 12:58:27 +02:00
If there are files or directories you want to ignore you can simply add them to a `.gitignore` file at the root of your repository. The action will respect this file.
2019-10-05 02:22:43 +02:00
## Examples
2019-07-16 12:58:27 +02:00
2019-10-30 08:10:02 +01:00
This first example workflow is a reference example that sets all the main environment variables.
See further examples below for more realistic use cases.
2019-07-16 12:58:27 +02:00
2019-08-13 11:14:43 +02:00
```yml
2019-10-30 08:10:02 +01:00
name: Create Pull Request
on: push
2019-09-26 11:07:43 +02:00
jobs:
createPullRequest:
runs-on: ubuntu-latest
steps:
2019-09-30 11:58:24 +02:00
- uses: actions/checkout@v1
- name: Create report file
run: date +%s > report.txt
- name: Create Pull Request
2019-10-30 08:10:02 +01:00
uses: peter-evans/create-pull-request@v1.6.0
2019-09-30 11:58:24 +02:00
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_MESSAGE: Add report file
2019-10-06 08:06:49 +02:00
COMMIT_AUTHOR_EMAIL: peter-evans@users.noreply.github.com
COMMIT_AUTHOR_NAME: Peter Evans
2019-10-05 02:22:43 +02:00
PULL_REQUEST_TITLE: '[Example] Add report file'
2019-10-21 11:42:39 +02:00
PULL_REQUEST_BODY: |
New report
- Contains *today's* date
- Auto-generated by [create-pull-request][1]
[1]: https://github.com/peter-evans/create-pull-request
2019-09-30 11:58:24 +02:00
PULL_REQUEST_LABELS: report, automated pr
PULL_REQUEST_ASSIGNEES: peter-evans
PULL_REQUEST_REVIEWERS: peter-evans
PULL_REQUEST_MILESTONE: 1
PULL_REQUEST_BRANCH: example-patches
BRANCH_SUFFIX: short-commit-hash
- name: Check output environment variable
run: echo "Pull Request Number - $PULL_REQUEST_NUMBER"
2019-07-16 12:58:27 +02:00
```
2019-07-16 13:42:29 +02:00
This configuration will create pull requests that look like this:
2019-07-16 13:43:33 +02:00
2019-11-03 07:46:11 +01:00
![Pull Request Example](assets/pull-request-example.png)
2019-07-16 13:42:29 +02:00
2019-10-14 05:36:55 +02:00
2019-10-30 08:10:02 +01:00
### Use case: Create a pull request to update X periodically
2019-10-14 08:51:08 +02:00
2019-10-30 08:10:02 +01:00
This example workflow executes once a week and will create a pull request for any dependency updates.
This pattern will work well for updating any kind of static content from an external source.
2019-10-14 08:51:08 +02:00
```yml
name: Update Dependencies
on:
schedule:
- cron: '0 10 * * 1'
jobs:
update-deps:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: '10.x'
- name: Update dependencies
id: vars
run: |
npm install -g npm-check-updates
ncu -u
npm install
- name: Create Pull Request
2019-10-30 08:10:02 +01:00
uses: peter-evans/create-pull-request@v1.6.0
2019-10-14 08:51:08 +02:00
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_MESSAGE: update dependencies
COMMIT_AUTHOR_EMAIL: peter-evans@users.noreply.github.com
COMMIT_AUTHOR_NAME: Peter Evans
PULL_REQUEST_TITLE: Automated Dependency Updates
PULL_REQUEST_BODY: This is an auto-generated PR with dependency updates.
PULL_REQUEST_LABELS: dep-updates, automated pr
PULL_REQUEST_REVIEWERS: peter-evans
PULL_REQUEST_BRANCH: dep-updates
BRANCH_SUFFIX: none
```
2019-10-30 08:10:02 +01:00
### Use case: Create a pull request to modify/fix pull requests
2019-10-14 05:36:55 +02:00
2019-10-30 08:10:02 +01:00
The following is an example workflow for a use case where [autopep8 action](https://github.com/peter-evans/autopep8) runs as both a check on pull requests and raises a further pull request to apply code fixes. This is a pattern that would work well for any automated code linting and fixing.
2019-10-14 05:36:55 +02:00
How it works:
2019-10-14 08:59:21 +02:00
2019-10-14 05:36:55 +02:00
1. When a pull request is raised the workflow executes as a check
2. If autopep8 makes any fixes a pull request will be raised for those fixes to be merged into the current pull request branch. The workflow then deliberately causes the check to fail.
3. When the pull request containing the fixes is merged the workflow runs again. This time autopep8 makes no changes and the check passes.
4. The original pull request can now be merged.
```yml
name: autopep8
on: pull_request
jobs:
autopep8:
if: startsWith(github.head_ref, 'autopep8-patches') == false
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: autopep8
id: autopep8
uses: peter-evans/autopep8@v1.1.0
with:
args: --exit-code --recursive --in-place --aggressive --aggressive .
- name: Set autopep8 branch name
id: vars
run: echo ::set-output name=branch-name::"autopep8-patches/$GITHUB_HEAD_REF"
- name: Create Pull Request
if: steps.autopep8.outputs.exit-code == 2
2019-10-30 08:10:02 +01:00
uses: peter-evans/create-pull-request@v1.6.0
2019-10-14 05:36:55 +02:00
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COMMIT_MESSAGE: autopep8 action fixes
COMMIT_AUTHOR_EMAIL: peter-evans@users.noreply.github.com
COMMIT_AUTHOR_NAME: Peter Evans
PULL_REQUEST_TITLE: Fixes by autopep8 action
PULL_REQUEST_BODY: This is an auto-generated PR with fixes by autopep8.
PULL_REQUEST_LABELS: autopep8, automated pr
PULL_REQUEST_REVIEWERS: peter-evans
PULL_REQUEST_BRANCH: ${{ steps.vars.outputs.branch-name }}
BRANCH_SUFFIX: none
- name: Fail if autopep8 made changes
if: steps.autopep8.outputs.exit-code == 2
run: exit 1
```
2019-10-30 08:10:02 +01:00
### Filtering push events
For workflows using `on: push` you may want to ignore push events for tags and remotes.
These can be filtered out with the following `if` condition.
```yml
name: Create Pull Request
on: push
jobs:
createPullRequest:
if: startsWith(github.ref, 'refs/heads/')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
...
```
2019-10-05 02:22:43 +02:00
### Dynamic configuration using variables
The following examples show how configuration for the action can be dynamically defined in a previous workflow step.
The recommended method is to use `set-output`. Note that the step where output variables are defined must have an id.
```yml
- name: Set output variables
id: vars
run: |
echo ::set-output name=pr_title::"[Test] Add report file $(date +%d-%m-%Y)"
echo ::set-output name=pr_body::"This PR was auto-generated on $(date +%d-%m-%Y) \
by [create-pull-request](https://github.com/peter-evans/create-pull-request)."
- name: Create Pull Request
2019-10-30 08:10:02 +01:00
uses: peter-evans/create-pull-request@v1.6.0
2019-10-05 02:22:43 +02:00
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PULL_REQUEST_TITLE: ${{ steps.vars.outputs.pr_title }}
PULL_REQUEST_BODY: ${{ steps.vars.outputs.pr_body }}
```
Since the action reads environment variables from the system, it's technically not necessary to explicitly pass them as long as they exist in the environment. So the following method using `set-env` *also* works, but explicitly passing the configuration parameters using the previous method is perferred for its clarity.
```yml
- name: Set environment variables
run: |
echo ::set-env name=PULL_REQUEST_TITLE::"[Test] Add report file $(date +%d-%m-%Y)"
echo ::set-env name=PULL_REQUEST_BODY::"This PR was auto-generated on $(date +%d-%m-%Y) \
by [create-pull-request](https://github.com/peter-evans/create-pull-request)."
- name: Create Pull Request
2019-10-30 08:10:02 +01:00
uses: peter-evans/create-pull-request@v1.6.0
2019-10-05 02:22:43 +02:00
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
2019-07-16 12:58:27 +02:00
## License
2019-09-30 11:58:24 +02:00
[MIT](LICENSE)