Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: manage delete modes in a better way + consistent input naming #391

Merged
merged 2 commits into from
Oct 10, 2024

Conversation

thollander
Copy link
Owner

@thollander thollander commented Oct 9, 2024

BREAKING CHANGE: delete now deletes a comment immediately. To delete the comment at the end of the job, use delete-on-completion

Credits to @mlahargou (#371)

Closes #386
Closes #361

BREAKING CHANGE: delete now deletes a comment immediately.
To delete the comment at the end of the job, use `delete-on-completion`

Co-authored-by: mlahargou <michaellahargou@gmail.com>
Copy link

Current branch is v3.
(execution 11281275714 / attempt 1)

Copy link

Comment Pull Request - GitHub Actions

What is it ?

A GitHub 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.

Usage

Classic usage

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: thollander/actions-comment-pull-request@v3
        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.)

- name: PR comment with file
  uses: thollander/actions-comment-pull-request@v3
  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)

- name: PR comment with reactions
  uses: thollander/actions-comment-pull-request@v3
  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).

...
- name: Comment PR
  uses: thollander/actions-comment-pull-request@v3
  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.

...
- name: Comment PR with execution number
  uses: thollander/actions-comment-pull-request@v3
  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)

Delete a comment

Deleting a comment with a specific comment_tag is possible with the mode: delete. If a comment with the comment_tag exists, it will be deleted when ran.

...
- name: Delete a comment
  uses: thollander/actions-comment-pull-request@v3
  with:
    comment_tag: to_delete
    mode: delete

Delete a comment on job completion

Deleting an existing comment on job completion is also possible thanks to the comment_tag input combined with mode: delete-on-completion.

This will delete the comment at the end of the job.

...
- name: Write a comment that will be deleted at the end of the job
  uses: thollander/actions-comment-pull-request@v3
  with:
    message: |
      The PR is being built...
    comment_tag: to_delete_on_completion
    mode: delete-on-completion

Inputs

Action inputs

Name Description Required Default
github-token Token that is used to create comments. Defaults to ${{ github.token }}
message Comment body
file-path 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
mode Mode that will be used to update comment (upsert/recreate/delete/delete-on-completion) upsert
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

- name: Comment PR
  uses: thollander/actions-comment-pull-request@v3
  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 :

permissions: 
   pull-requests: write 

Add this in case you get Resource not accessible by integration error.
See jobs.<job_id>.permissions 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 lib/index.js which is used in a NodeJS environment.
It is handled by vercel/ncc compiler.

$ npm run build

Copy link

Content of file referenced with absolute path

@thollander thollander merged commit e2c37e5 into main Oct 10, 2024
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Consistent input naming convention On delete mode new comment always will be created
1 participant