Skip to content

Latest commit

 

History

History
109 lines (89 loc) · 3.2 KB

File metadata and controls

109 lines (89 loc) · 3.2 KB

Add PR Body

This folder contains a webhook interceptor that enriches the payload of an incoming request with the JSON representation of a pull request as returned by the GitHub API.

See also an implementaiton of this using the cluster interceptor interface in tekton/ci/cluster-interceptors/add-pr-body.

Add PR Body Webhook Interceptor

This implementation uses the Webhook Interceptor interface. As such, it directly modifes the event body with the PR payload under the extensions.add-pr-body.pull-request-body field.

Webhook Interceptor Interface

add-pr-body expects the URL to the PR representation to be included in the incoming JSON as follows:

{
  "add-pr-body":
  {
    "pull-request-url": "https://api.github.com/repos/tektoncd/plumbing/pulls/225"
  },
  "other-keys": "other=values"
}

It returns the original JSON payload untouched, with the addition of the PR:

{
  "add-pr-body":
  {
    "pull-request-url": "https://api.github.com/repos/tektoncd/plumbing/pulls/225",
    "pull-request-body":
    {
      "url": "https://api.github.com/repos/tektoncd/plumbing/pulls/225",
      "id": 372779052,
      "node_id": "MDExOlB1bGxSZXF1ZXN0MzcyNzc5MDUy",
      "html_url": "https://github.com/tektoncd/plumbing/pull/225",
      "diff_url": "https://github.com/tektoncd/plumbing/pull/225.diff",
      "patch_url": "https://github.com/tektoncd/plumbing/pull/225.patch",
      "issue_url": "https://api.github.com/repos/tektoncd/plumbing/issues/225",
      "number": 225,
      "state": "open",
      "locked": false,
      "etc": "...",
    },
  },
  "other-keys": "other=values"
}

HTTP Headers are left untouched.

Example usage

A trigger in an event listener:

- name: comment-trigger
  interceptors:
    - github:
        secretRef:
          secretName: ci-webhook
          secretKey: secret
        eventTypes:
          - issue_comment
    - cel:
        filter: >-
          body.action == 'created' &&
          in('pull_request', body.issue) &&
          && body.issue.state == 'open' &&
          body.comment.body.matches('^/test($| [^ ]*$)')
        overlays:
        - key: add-pr-body.pull-request-url
          expression: "body.issue.pull_request.url"
// TODO: Complete this example

Webhook Interceptor Installation

The interceptor is installed via ko:

export KO_DOCKER_REPO=gcr.io/tekton-releases/dogfooding
ko apply -P -f tekton/ci/interceptors/add-pr-body/config/

Eventually it should be included in nightly releases and installed from there.

GitHub Enterprise

The interceptor needs authentication if you are using GitHub Enterprise. In order to authenticate to GitHub Enterprise API, you need to set GITHUB_OAUTH_SECRET environment variable.

Add GitHub OAuth secret to the deployment in config/add-pr-body.yaml like below.

    spec:
      serviceAccountName: add-pr-body-bot
      containers:
        - name: add-pr-body-interceptor
          image: github.com/tektoncd/plumbing/tekton/ci/interceptors/add-pr-body/cmd/add-pr-body
          env:
            - name: GITHUB_OAUTH_SECRET
              valueFrom:
                secretKeyRef:
                  name: github-secret
                  key: oauth