diff --git a/README.md b/README.md index 48a6b3e..bb51a61 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ This action was created to help facilitate a GitHub Actions "ChatOps" solution i - Created by [create-or-update-comment][1] [1]: https://github.com/peter-evans/create-or-update-comment - reaction-type: '+1' + reactions: '+1' ``` ### Update a comment @@ -32,17 +32,17 @@ This action was created to help facilitate a GitHub Actions "ChatOps" solution i comment-id: 557858210 body: | **Edit:** Some additional info - reaction-type: eyes + reactions: eyes ``` -### Add a comment reaction +### Add comment reactions ```yml - - name: Add reaction + - name: Add reactions uses: peter-evans/create-or-update-comment@v1 with: comment-id: 557858210 - reaction-type: heart + reactions: heart, hooray, laugh ``` ### Action inputs @@ -55,7 +55,7 @@ This action was created to help facilitate a GitHub Actions "ChatOps" solution i | `comment-id` | The id of the comment to update. | | | `body` | The comment body. | | | `edit-mode` | The mode when updating a comment, `replace` or `append`. | `append` | -| `reaction-type` | The reaction to add to the comment. (`+1`, `-1`, `laugh`, `confused`, `heart`, `hooray`, `rocket`, `eyes`) | | +| `reactions` | A comma separated list of reactions to add to the comment. (`+1`, `-1`, `laugh`, `confused`, `heart`, `hooray`, `rocket`, `eyes`) | | #### Outputs @@ -92,7 +92,7 @@ jobs: uses: peter-evans/create-or-update-comment@v1 with: comment-id: ${{ github.event.comment.id }} - reaction-type: eyes + reactions: eyes ``` ### Accessing issues and comments in other repositories diff --git a/action.yml b/action.yml index de89442..d73960e 100644 --- a/action.yml +++ b/action.yml @@ -15,7 +15,9 @@ inputs: edit-mode: description: 'The mode when updating a comment, "replace" or "append".' reaction-type: - description: 'The reaction to add to the comment.' + description: 'Deprecated in favour of `reactions`' + reactions: + description: 'A comma separated list of reactions to add to the comment.' outputs: comment-id: description: 'The id of the created comment' diff --git a/dist/index.js b/dist/index.js index f724fb7..7e8bece 100644 --- a/dist/index.js +++ b/dist/index.js @@ -506,22 +506,57 @@ const REACTION_TYPES = [ "heart", "hooray", "rocket", - "eyes" + "eyes", ]; -async function addReaction(octokit, repo, comment_id, reactionType) { - if (REACTION_TYPES.includes(reactionType)) { - await octokit.reactions.createForIssueComment({ - owner: repo[0], - repo: repo[1], - comment_id: comment_id, - content: reactionType - }); - core.info(`Set '${reactionType}' reaction on comment.`); - } else { - core.setFailed("Invalid 'reaction-type'."); - return; +async function addReactions(octokit, repo, comment_id, reactions) { + let ReactionsSet = [ + ...new Set( + reactions + .replace(/\s/g, "") + .split(",") + .filter((item) => { + if (!REACTION_TYPES.includes(item)) { + core.info(`Skipping invalid reaction '${item}'.`); + return false; + } + return true; + }) + ), + ]; + + if (!ReactionsSet) { + core.setFailed( + `No valid reactions are contained in '${reactions}'.` + ); + return false; } + + let results = await Promise.allSettled( + ReactionsSet.map(async (item) => { + await octokit.reactions.createForIssueComment({ + owner: repo[0], + repo: repo[1], + comment_id: comment_id, + content: item, + }); + core.info(`Setting '${item}' reaction on comment.`); + }) + ); + + for (let i = 0, l = results.length; i < l; i++) { + if (results[i].status === "fulfilled") { + core.info( + `Added reaction '${ReactionsSet[i]}' to comment id '${comment_id}'.` + ); + } else if (results[i].status === "rejected") { + core.info( + `Adding reaction '${ReactionsSet[i]}' to comment id '${comment_id}' failed with ${results[i].reason}.` + ); + } + } + ReactionsSet = undefined; + results = undefined; } async function run() { @@ -533,7 +568,9 @@ async function run() { commentId: core.getInput("comment-id"), body: core.getInput("body"), editMode: core.getInput("edit-mode"), - reactionType: core.getInput("reaction-type") + reactions: core.getInput("reactions") + ? core.getInput("reactions") + : core.getInput("reaction-type"), }; core.debug(`Inputs: ${inspect(inputs)}`); @@ -551,11 +588,11 @@ async function run() { } const octokit = new github.GitHub(inputs.token); - + if (inputs.commentId) { // Edit a comment - if (!inputs.body && !inputs.reactionType) { - core.setFailed("Missing either comment 'body' or 'reaction-type'."); + if (!inputs.body && !inputs.reactions) { + core.setFailed("Missing either comment 'body' or 'reactions'."); return; } @@ -566,7 +603,7 @@ async function run() { const { data: comment } = await octokit.issues.getComment({ owner: repo[0], repo: repo[1], - comment_id: inputs.commentId + comment_id: inputs.commentId, }); commentBody = comment.body + "\n"; } @@ -577,16 +614,15 @@ async function run() { owner: repo[0], repo: repo[1], comment_id: inputs.commentId, - body: commentBody + body: commentBody, }); core.info(`Updated comment id '${inputs.commentId}'.`); - core.setOutput('comment-id', inputs.commentId); + core.setOutput("comment-id", inputs.commentId); } - // Set a comment reaction - if (inputs.reactionType) { - await addReaction(octokit, repo, inputs.commentId, inputs.reactionType); - core.info(`Added reaction '${inputs.reactionType}' to comment id '${inputs.commentId}'.`); + // Set comment reactions + if (inputs.reactions) { + await addReactions(octokit, repo, inputs.commentId, inputs.reactions); } } else if (inputs.issueNumber) { // Create a comment @@ -598,15 +634,16 @@ async function run() { owner: repo[0], repo: repo[1], issue_number: inputs.issueNumber, - body: inputs.body + body: inputs.body, }); - core.info(`Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.`); - core.setOutput('comment-id', comment.id); + core.info( + `Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.` + ); + core.setOutput("comment-id", comment.id); - // Set a comment reaction - if (inputs.reactionType) { - await addReaction(octokit, repo, comment.id, inputs.reactionType); - core.info(`Added reaction '${inputs.reactionType}' to comment id '${comment.id}'.`); + // Set comment reactions + if (inputs.reactions) { + await addReactions(octokit, repo, comment.id, inputs.reactions); } } else { core.setFailed("Missing either 'issue-number' or 'comment-id'."); diff --git a/index.js b/index.js index 6d8a7a3..327921e 100644 --- a/index.js +++ b/index.js @@ -10,44 +10,57 @@ const REACTION_TYPES = [ "heart", "hooray", "rocket", - "eyes" + "eyes", ]; -async function addReaction(octokit, repo, comment_id, reactionType) { - let ReactionsSet = [...new Set(reactionType.split(', ') - .filter(item => { - if(!REACTION_TYPES.includes(item)){ - core.info(`Skipping invalid 'reaction-type' '${item}'.`); - return false; - } - return true; - }))]; +async function addReactions(octokit, repo, comment_id, reactions) { + let ReactionsSet = [ + ...new Set( + reactions + .replace(/\s/g, "") + .split(",") + .filter((item) => { + if (!REACTION_TYPES.includes(item)) { + core.info(`Skipping invalid reaction '${item}'.`); + return false; + } + return true; + }) + ), + ]; - if(!ReactionsSet){ - core.setFailed(`Can't find any valid 'reaction-type' in provided value: ${reactionType}.`); - return false; - } + if (!ReactionsSet) { + core.setFailed( + `No valid reactions are contained in '${reactions}'.` + ); + return false; + } - let results = await Promise.allSettled(ReactionsSet.map(async (item) => { - await octokit.reactions.createForIssueComment({ - owner: repo[0], - repo: repo[1], - comment_id: comment_id, - content: item - }); - core.info(`Setting '${item}' reaction on comment.`); - })); + let results = await Promise.allSettled( + ReactionsSet.map(async (item) => { + await octokit.reactions.createForIssueComment({ + owner: repo[0], + repo: repo[1], + comment_id: comment_id, + content: item, + }); + core.info(`Setting '${item}' reaction on comment.`); + }) + ); - for(let i = 0, l = results.length; i