A GitHub action to create a pull request for changes to your repository in the actions workspace.
Go to file
Peter Evans 90843d3c39 Update README 2019-10-05 09:22:43 +09:00
.github Update workflows 2019-10-05 09:22:35 +09:00
.gitignore Update README 2019-09-26 18:07:43 +09:00
Dockerfile Update Docker Image to include support for git-lfs 2019-09-26 12:34:25 +09:00
LICENSE Initial commit 2019-07-16 19:53:24 +09:00
README.md Update README 2019-10-05 09:22:43 +09:00
action.yml Update action to use pre-built container 2019-10-04 14:35:22 +09:00
create-pull-request.py Replace fixed-name branch rebase with stash merge 2019-10-02 19:05:46 +09:00
logo.svg Update README 2019-09-30 23:24:16 +09:00
pull-request-example.png Update image 2019-09-26 19:06:44 +09:00
renovate.json Add renovate.json 2019-07-18 09:44:25 +00:00
requirements.txt Update dependency GitPython to v3.0.3 2019-10-02 19:31:01 +00:00

README.md

Create Pull Request

GitHub Marketplace

A GitHub action to create a pull request for changes to your repository in the actions workspace.

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. The changes will be automatically committed to a new branch and a pull request created.

Create Pull Request action will:

  1. Check for repository changes in the Actions workspace. This includes untracked (new) files as well as modified files.
  2. Commit all changes to a new branch, or update an existing pull request branch. The commit will be made using the name and email of the HEAD commit author.
  3. Create a pull request to merge the new branch into the currently active branch executing the workflow.

Usage

Linux

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v1.5.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Multi platform - Linux, MacOS, Windows (beta)

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v1.5.0-multi
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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 instead of the default GITHUB_TOKEN. See this issue for further details.

Environment variables

These variables are all optional. If not set, a default value will be used.

  • COMMIT_MESSAGE - The message to use when committing changes.
  • PULL_REQUEST_TITLE - The title of the pull request.
  • PULL_REQUEST_BODY - The body of the pull request.
  • PULL_REQUEST_LABELS - A comma separated list of labels.
  • PULL_REQUEST_ASSIGNEES - A comma separated list of assignees (GitHub usernames).
  • PULL_REQUEST_REVIEWERS - A comma separated list of reviewers (GitHub usernames) to request a review from.
  • PULL_REQUEST_TEAM_REVIEWERS - A comma separated list of GitHub teams to request a review from.
  • PULL_REQUEST_MILESTONE - The number of the milestone to associate this pull request with.
  • PULL_REQUEST_BRANCH - The branch name. See Branch naming below for details.
  • BRANCH_SUFFIX - The branch suffix type. Valid values are short-commit-hash (default), timestamp, random and none. See Branch naming below for details.

Output environment variables

  • PULL_REQUEST_NUMBER - The number of the pull request created.

The following parameters are available for debugging and troubleshooting.

  • DEBUG_EVENT - If present, outputs the event data that triggered the workflow.
  • SKIP_IGNORE - If present, the ignore_event function will be skipped.

Branch naming

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.

Strategy A - Always create a new pull request branch (default)

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.

  • 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

  • timestamp - Commits will be made to a branch suffixed by a timestamp. e.g. create-pull-request/patch-1569322532, create-pull-request/patch-1569322552

  • 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

Strategy B - Create and update a pull request branch

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.

Ignoring files

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.

Examples

Here is an example that sets all the main environment variables.

on:
  repository_dispatch:
    types: [create-pull-request]
name: create-pull-request workflow
jobs:
  createPullRequest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Create report file
        run: date +%s > report.txt
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v1.5.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          COMMIT_MESSAGE: Add report file
          PULL_REQUEST_TITLE: '[Example] Add report file'
          PULL_REQUEST_BODY: >
            This PR is auto-generated by 
            [create-pull-request](https://github.com/peter-evans/create-pull-request).            
          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"

This configuration will create pull requests that look like this:

Pull Request Example

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.

      - 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
        uses: peter-evans/create-pull-request@v1.5.0
        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.

      - 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
        uses: peter-evans/create-pull-request@v1.5.0
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

License

MIT