An open API service indexing awesome lists of open source software.

https://github.com/niki-on-github/comment-pull-request

Mirror of https://code.thetadev.de/actions/comment-pull-request
https://github.com/niki-on-github/comment-pull-request

Last synced: 5 months ago
JSON representation

Mirror of https://code.thetadev.de/actions/comment-pull-request

Awesome Lists containing this project

README

          

# Comment Pull Request - GitHub Actions

## What is it ?

A GitHub/Forgejo action that comments with a given message the pull request linked to
the pushed branch. You can even put dynamic data thanks to
[Contexts and expression syntax](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/contexts-and-expression-syntax-for-github-actions).

The action is also available as a JS library for integration into other actions.

This project is a fork of https://github.com/thollander/actions-comment-pull-request by
Térence Hollander.

## Usage

### Classic usage

```yml
on: pull_request

jobs:
example_comment_pr:
runs-on: ubuntu-latest
name: An example job to comment a PR
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Comment PR
uses: https://code.thetadev.de/actions/comment-pull-request@v1
with:
message: |
Hello world ! :wave:
```

### Comment a file content

Thanks to the `filePath` input, a file content can be commented. You can either pass an
absolute filePath or a relative one that will be by default retrieved from
`GITHUB_WORKSPACE`. (Note that if both a `message` and `filePath` are provided,
`message` will take precedence.)

```yml
- name: PR comment with file
uses: https://code.thetadev.de/actions/comment-pull-request@v1
with:
filePath: /path/to/file.txt
```

### Setting reactions

You can also set some reactions on your comments through the `reactions` input. It takes
only valid reactions and adds it to the comment you've just created. (See
https://docs.github.com/en/rest/reactions#reaction-types)

```yml
- name: PR comment with reactions
uses: https://code.thetadev.de/actions/comment-pull-request@v1
with:
message: |
Hello world ! :wave:
reactions: eyes, rocket
```

### Specifying which pull request to comment on

You can explicitly input which pull request should be commented on by passing the
`pr_number` input. That is particularly useful for manual workflow for instance
(`workflow_run`).

```yml

---
- name: Comment PR
uses: https://code.thetadev.de/actions/comment-pull-request@v1
with:
message: |
Hello world ! :wave:
pr_number: 123 # This will comment on pull request #123
```

### Update a comment

Editing an existing comment is also possible thanks to the `comment_tag` input.

Thanks to this parameter, it will be possible to identify your comment and then to
upsert on it. If the comment is not found at first, it will create a new comment.

_That is particularly interesting while committing multiple times in a PR and that you
just want to have the last execution report printed. It avoids flooding the PR._

```yml

---
- name: Comment PR with execution number
uses: https://code.thetadev.de/actions/comment-pull-request@v1
with:
message: |
_(execution **${{ github.run_id }}** / attempt **${{ github.run_attempt }}**)_
comment_tag: execution
```

Note: the input `mode` can be used to either `upsert` (by default) or `recreate` the
comment (= delete and create)

## Inputs

### Action inputs

| Name | Description | Required | Default |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------------------- |
| `GITHUB_TOKEN` | Token that is used to create comments. Defaults to ${{ github.token }} | ✅ | |
| `message` | Comment body | | |
| `filePath` | Path of the file that should be commented | | |
| `reactions` | List of reactions for the comment (comma separated). See https://docs.github.com/en/rest/reactions#reaction-types | | |
| `pr_number` | The number of the pull request where to create the comment | | current pull-request/issue number (deduced from context) |
| `comment_tag` | A tag on your comment that will be used to identify a comment in case of replacement | | |
| `recreate` | Delete and recreate the comment instead of updating it | | false |
| `create_if_not_exists` | Whether a comment should be created even if `comment_tag` is not found | | true |

## Outputs

### Action outputs

You can get some outputs from this actions :

| Name | Description |
| ---------- | -------------------------------------- |
| `id` | Comment id that was created or updated |
| `body` | Comment body |
| `html_url` | URL of the comment created or updated |

### Example output

```yaml
- name: Comment PR
uses: https://code.thetadev.de/actions/comment-pull-request@v1
id: hello
with:
message: |
Hello world ! :wave:
- name: Check outputs
run: |
echo "id : ${{ steps.hello.outputs.id }}"
echo "body : ${{ steps.hello.outputs.body }}"
echo "html_url : ${{ steps.hello.outputs.html_url }}"
```

## Permissions

Depending on the permissions granted to your token, you may lack some rights. To run
successfully, this actions needs at least :

```yaml
permissions:   pull-requests: write
```

Add this in case you get `Resource not accessible by integration` error. See
[jobs..permissions](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idpermissions)
for more information.

> Note that, if the PR comes from a fork, it will have only read permission despite the
> permissions given in the action for the `pull_request` event. In this case, you may
> use the `pull_request_target` event. With this event, permissions can be given without
> issue (the difference is that it will execute the action from the target branch and
> not from the origin PR).

## Contributing

### Build

The build steps transpiles the `src/main.ts` to `act/index.js` which is used in a NodeJS
environment. It is handled by `vercel/ncc` compiler.

```sh
$ npm run build
```