Merge pull request #29 from peter-evans/dev

Deprecate reaction-type in favour of reactions
This commit is contained in:
Peter Evans 2020-04-17 16:38:20 +09:00 committed by GitHub
commit c1e8fb2113
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 146 additions and 70 deletions

View File

@ -20,7 +20,7 @@ This action was created to help facilitate a GitHub Actions "ChatOps" solution i
- Created by [create-or-update-comment][1] - Created by [create-or-update-comment][1]
[1]: https://github.com/peter-evans/create-or-update-comment [1]: https://github.com/peter-evans/create-or-update-comment
reaction-type: '+1' reactions: '+1'
``` ```
### Update a comment ### Update a comment
@ -32,17 +32,17 @@ This action was created to help facilitate a GitHub Actions "ChatOps" solution i
comment-id: 557858210 comment-id: 557858210
body: | body: |
**Edit:** Some additional info **Edit:** Some additional info
reaction-type: eyes reactions: eyes
``` ```
### Add a comment reaction ### Add comment reactions
```yml ```yml
- name: Add reaction - name: Add reactions
uses: peter-evans/create-or-update-comment@v1 uses: peter-evans/create-or-update-comment@v1
with: with:
comment-id: 557858210 comment-id: 557858210
reaction-type: heart reactions: heart, hooray, laugh
``` ```
### Action inputs ### 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. | | | `comment-id` | The id of the comment to update. | |
| `body` | The comment body. | | | `body` | The comment body. | |
| `edit-mode` | The mode when updating a comment, `replace` or `append`. | `append` | | `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 #### Outputs
@ -92,7 +92,7 @@ jobs:
uses: peter-evans/create-or-update-comment@v1 uses: peter-evans/create-or-update-comment@v1
with: with:
comment-id: ${{ github.event.comment.id }} comment-id: ${{ github.event.comment.id }}
reaction-type: eyes reactions: eyes
``` ```
### Accessing issues and comments in other repositories ### Accessing issues and comments in other repositories

View File

@ -15,7 +15,9 @@ inputs:
edit-mode: edit-mode:
description: 'The mode when updating a comment, "replace" or "append".' description: 'The mode when updating a comment, "replace" or "append".'
reaction-type: 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: outputs:
comment-id: comment-id:
description: 'The id of the created comment' description: 'The id of the created comment'

99
dist/index.js vendored
View File

@ -506,22 +506,57 @@ const REACTION_TYPES = [
"heart", "heart",
"hooray", "hooray",
"rocket", "rocket",
"eyes" "eyes",
]; ];
async function addReaction(octokit, repo, comment_id, reactionType) { async function addReactions(octokit, repo, comment_id, reactions) {
if (REACTION_TYPES.includes(reactionType)) { let ReactionsSet = [
await octokit.reactions.createForIssueComment({ ...new Set(
owner: repo[0], reactions
repo: repo[1], .replace(/\s/g, "")
comment_id: comment_id, .split(",")
content: reactionType .filter((item) => {
}); if (!REACTION_TYPES.includes(item)) {
core.info(`Set '${reactionType}' reaction on comment.`); core.info(`Skipping invalid reaction '${item}'.`);
} else { return false;
core.setFailed("Invalid 'reaction-type'."); }
return; 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() { async function run() {
@ -533,7 +568,9 @@ async function run() {
commentId: core.getInput("comment-id"), commentId: core.getInput("comment-id"),
body: core.getInput("body"), body: core.getInput("body"),
editMode: core.getInput("edit-mode"), 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)}`); core.debug(`Inputs: ${inspect(inputs)}`);
@ -551,11 +588,11 @@ async function run() {
} }
const octokit = new github.GitHub(inputs.token); const octokit = new github.GitHub(inputs.token);
if (inputs.commentId) { if (inputs.commentId) {
// Edit a comment // Edit a comment
if (!inputs.body && !inputs.reactionType) { if (!inputs.body && !inputs.reactions) {
core.setFailed("Missing either comment 'body' or 'reaction-type'."); core.setFailed("Missing either comment 'body' or 'reactions'.");
return; return;
} }
@ -566,7 +603,7 @@ async function run() {
const { data: comment } = await octokit.issues.getComment({ const { data: comment } = await octokit.issues.getComment({
owner: repo[0], owner: repo[0],
repo: repo[1], repo: repo[1],
comment_id: inputs.commentId comment_id: inputs.commentId,
}); });
commentBody = comment.body + "\n"; commentBody = comment.body + "\n";
} }
@ -577,16 +614,15 @@ async function run() {
owner: repo[0], owner: repo[0],
repo: repo[1], repo: repo[1],
comment_id: inputs.commentId, comment_id: inputs.commentId,
body: commentBody body: commentBody,
}); });
core.info(`Updated comment id '${inputs.commentId}'.`); core.info(`Updated comment id '${inputs.commentId}'.`);
core.setOutput('comment-id', inputs.commentId); core.setOutput("comment-id", inputs.commentId);
} }
// Set a comment reaction // Set comment reactions
if (inputs.reactionType) { if (inputs.reactions) {
await addReaction(octokit, repo, inputs.commentId, inputs.reactionType); await addReactions(octokit, repo, inputs.commentId, inputs.reactions);
core.info(`Added reaction '${inputs.reactionType}' to comment id '${inputs.commentId}'.`);
} }
} else if (inputs.issueNumber) { } else if (inputs.issueNumber) {
// Create a comment // Create a comment
@ -598,15 +634,16 @@ async function run() {
owner: repo[0], owner: repo[0],
repo: repo[1], repo: repo[1],
issue_number: inputs.issueNumber, issue_number: inputs.issueNumber,
body: inputs.body body: inputs.body,
}); });
core.info(`Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.`); core.info(
core.setOutput('comment-id', comment.id); `Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.`
);
core.setOutput("comment-id", comment.id);
// Set a comment reaction // Set comment reactions
if (inputs.reactionType) { if (inputs.reactions) {
await addReaction(octokit, repo, comment.id, inputs.reactionType); await addReactions(octokit, repo, comment.id, inputs.reactions);
core.info(`Added reaction '${inputs.reactionType}' to comment id '${comment.id}'.`);
} }
} else { } else {
core.setFailed("Missing either 'issue-number' or 'comment-id'."); core.setFailed("Missing either 'issue-number' or 'comment-id'.");

View File

@ -10,22 +10,57 @@ const REACTION_TYPES = [
"heart", "heart",
"hooray", "hooray",
"rocket", "rocket",
"eyes" "eyes",
]; ];
async function addReaction(octokit, repo, comment_id, reactionType) { async function addReactions(octokit, repo, comment_id, reactions) {
if (REACTION_TYPES.includes(reactionType)) { let ReactionsSet = [
await octokit.reactions.createForIssueComment({ ...new Set(
owner: repo[0], reactions
repo: repo[1], .replace(/\s/g, "")
comment_id: comment_id, .split(",")
content: reactionType .filter((item) => {
}); if (!REACTION_TYPES.includes(item)) {
core.info(`Set '${reactionType}' reaction on comment.`); core.info(`Skipping invalid reaction '${item}'.`);
} else { return false;
core.setFailed("Invalid 'reaction-type'."); }
return; 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() { async function run() {
@ -37,7 +72,9 @@ async function run() {
commentId: core.getInput("comment-id"), commentId: core.getInput("comment-id"),
body: core.getInput("body"), body: core.getInput("body"),
editMode: core.getInput("edit-mode"), 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)}`); core.debug(`Inputs: ${inspect(inputs)}`);
@ -55,11 +92,11 @@ async function run() {
} }
const octokit = new github.GitHub(inputs.token); const octokit = new github.GitHub(inputs.token);
if (inputs.commentId) { if (inputs.commentId) {
// Edit a comment // Edit a comment
if (!inputs.body && !inputs.reactionType) { if (!inputs.body && !inputs.reactions) {
core.setFailed("Missing either comment 'body' or 'reaction-type'."); core.setFailed("Missing either comment 'body' or 'reactions'.");
return; return;
} }
@ -70,7 +107,7 @@ async function run() {
const { data: comment } = await octokit.issues.getComment({ const { data: comment } = await octokit.issues.getComment({
owner: repo[0], owner: repo[0],
repo: repo[1], repo: repo[1],
comment_id: inputs.commentId comment_id: inputs.commentId,
}); });
commentBody = comment.body + "\n"; commentBody = comment.body + "\n";
} }
@ -81,16 +118,15 @@ async function run() {
owner: repo[0], owner: repo[0],
repo: repo[1], repo: repo[1],
comment_id: inputs.commentId, comment_id: inputs.commentId,
body: commentBody body: commentBody,
}); });
core.info(`Updated comment id '${inputs.commentId}'.`); core.info(`Updated comment id '${inputs.commentId}'.`);
core.setOutput('comment-id', inputs.commentId); core.setOutput("comment-id", inputs.commentId);
} }
// Set a comment reaction // Set comment reactions
if (inputs.reactionType) { if (inputs.reactions) {
await addReaction(octokit, repo, inputs.commentId, inputs.reactionType); await addReactions(octokit, repo, inputs.commentId, inputs.reactions);
core.info(`Added reaction '${inputs.reactionType}' to comment id '${inputs.commentId}'.`);
} }
} else if (inputs.issueNumber) { } else if (inputs.issueNumber) {
// Create a comment // Create a comment
@ -102,15 +138,16 @@ async function run() {
owner: repo[0], owner: repo[0],
repo: repo[1], repo: repo[1],
issue_number: inputs.issueNumber, issue_number: inputs.issueNumber,
body: inputs.body body: inputs.body,
}); });
core.info(`Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.`); core.info(
core.setOutput('comment-id', comment.id); `Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.`
);
core.setOutput("comment-id", comment.id);
// Set a comment reaction // Set comment reactions
if (inputs.reactionType) { if (inputs.reactions) {
await addReaction(octokit, repo, comment.id, inputs.reactionType); await addReactions(octokit, repo, comment.id, inputs.reactions);
core.info(`Added reaction '${inputs.reactionType}' to comment id '${comment.id}'.`);
} }
} else { } else {
core.setFailed("Missing either 'issue-number' or 'comment-id'."); core.setFailed("Missing either 'issue-number' or 'comment-id'.");