Public | Automated Build

Last pushed: a year ago
Short Description
Concourse resource for github pull requests.
Full Description

Github Pull Request Resource

Tracks pull requests made to a particular github repo. In the spirit of Travis
, a status of pending, success, or failure will be
set on the pull request, which must be explicitly defined in your pipeline.

Deploying to Concourse

You can use the docker image by defining the resource type in your pipeline YAML.

For example:

- name: pull-request
  type: docker-image
    repository: jtarchie/pr

Source Configuration

  • repo: Required. The repo name on github.
    Example: jtarchie/pullrequest-resource

  • access_token: Required. An access token with repo:status access is
    required for public repos. An access tocken with repo access is required for
    private repos.

  • uri: Optional. The URI to the github repo. By default, it assumes`repo`.

  • base: Optional. When set, will only pull PRs made against a specific branch. The
    default behaviour is any branch.

  • base_url: Optional The base URL for the Concourse deployment, used for
    linking to builds. On newer versions of Concourse ( >= v0.71.0) , the resource will
    automatically sets the URL.

  • private_key: Optional. Private key to use when pulling/pushing.

      private_key: |
        -----BEGIN RSA PRIVATE KEY-----
        <Lots more text>
        -----END RSA PRIVATE KEY-----
  • api_endpoint: Optional. If the repository is located on a GitHub Enterprise
    instance you need to specify the base api endpoint (e.g. "https://\<hostname>/api/v3/").

  • every: Optional If set to true, it will override the check step so every pull request can be iterated
    through, without relying on a status being on it. This feature should only be used in
    concourse version 1.2.x and higher and the version: every.

  • disable_forks: Optional. If set to true, it will filter out pull requests that
    were created via users that forked from your repo.

  • username: Optional. Username for HTTP(S) auth when pulling/pushing.
    This is needed when only HTTP/HTTPS protocol for git is available (which does not support private key auth)
    and auth is required.

  • password: Optional. Password for HTTP(S) auth when pulling/pushing.

  • paths: Optional. If specified (as a list of glob patterns), only changes
    to the specified files will yield new versions from check.

  • ignore_paths: Optional. The inverse of paths; changes to the specified
    files are ignored.

  • skip_ssl_verification: Optional. Skips git ssl verification by exporting

  • git_config: Optional. If specified as (list of pairs name and value)
    it will configure git global options, setting each name with each value.

    This can be useful to set options like credential.helper or similar.

    See the git-config(1) manual page
    for more information and documentation of existing git options.


check: Check for new pull requests

Concourse resources always iterate over the latest version. This maps well to
semver and git, but not with pull requests. To find the latests pull
requests, check queries for all PRs, selects only PRs without concourse-ci
status messages, and then only returns the oldest one from list.

To ensure that check can iterate over all PRs, you must explicitly define an
out for the PR.

in: Clone the repository, at the given pull request ref

Clones the repository to the destination, and locks it down to a given ref.

Submodules are initialized and updated recursively, there is no option to to disable that, currently.

There is git config information set on the repo about the PR, which can be consumed within your tasks.

For example:

git config --get pullrequest.url        # returns the URL to the pull request
git config --get pullrequest.branch     # returns the branch name used for the pull request
git config --get         # returns the ID number of the PR
git config --get pullrequest.basebranch # returns the base branch used for the pull request


  • fetch_merge: Optional. If set to true, it will fetch what the result of PR
    would be otherwise it will fetch the origin branch.
    Defaults to false.

out: Update the status of a pull request

Set the status message for concourse-ci context on specified pull request.


  • path: Required. The path of the repository to reference the pull request.

  • status: Required. The status of success, failure, error, or pending.

    • on_success and on_falure triggers may be useful for you when you wanted to reflect build result to the PR (see the example below).
  • context: Optional. The context on the specified pull request
    (defaults to status). Any context will be prepended with concourse-ci, so
    a context of unit-tests will appear as concourse-ci/unit-tests on Github.

  • comment: Optional. The file path of the comment message. Comment owner is same with the owner of access_token.


These are experimental features according to Github documentation.

  • merge.method: Optional. Use this to merge the PR into the target branch of the PR. There are three available merge methods -- merge, squash, or rebase. Please this doc for more information.

  • merge.commit_msg: Optional. Used with merge to set the commit message for the merge. Specify a file path to the merge commit message.

Example pipeline

This is what I am currently using to test this resource on Concourse.

- name: pull-request
  type: docker-image
    repository: jtarchie/pr
- name: repo
  type: pull-request
    access_token: access_token
    private_key: |
      -----BEGIN RSA PRIVATE KEY-----
      My private key.
      -----END RSA PRIVATE KEY-----
    repo: jtarchie/pullrequest-resource
- name: test pull request
  - get: repo
    trigger: true
  - put: repo
      path: repo
      status: pending
  - task: do something with git
      platform: linux
      image: docker:///concourse/git-resource
        path: sh
        - -c
        - cd repo && git --no-pager show
      - name: repo
        path: ""
      put: repo
        path: repo
        status: success
      put: repo
        path: repo
        status: failure


Requires ruby to be installed.

  gem install bundler
  bundle install
  bundle exec rspec
Docker Pull Command