From 9d950b6220f2824d169b3d9507cae4200dc6a85e Mon Sep 17 00:00:00 2001 From: Umang Galaiya Date: Wed, 1 Jun 2022 20:33:14 +0530 Subject: [PATCH 1/4] Read body from file --- dist/index.js | 21 ++++++++++++++------- index.js | 21 ++++++++++++++------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/dist/index.js b/dist/index.js index fb6b823..3dfb657 100644 --- a/dist/index.js +++ b/dist/index.js @@ -8573,6 +8573,7 @@ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. (() => { const { inspect } = __nccwpck_require__(3837); +const { readFileSync } = __nccwpck_require__(7147); const core = __nccwpck_require__(2186); const github = __nccwpck_require__(5438); @@ -8645,6 +8646,7 @@ async function run() { issueNumber: core.getInput("issue-number"), commentId: core.getInput("comment-id"), body: core.getInput("body"), + file: core.getInput("file"), editMode: core.getInput("edit-mode"), reactions: core.getInput("reactions") ? core.getInput("reactions") @@ -8667,14 +8669,19 @@ async function run() { const octokit = github.getOctokit(inputs.token); + let bodyToUse = inputs.body; + if (inputs.file) { + bodyToUse = readFileSync(inputs.file, "utf8"); + } + if (inputs.commentId) { // Edit a comment - if (!inputs.body && !inputs.reactions) { - core.setFailed("Missing either comment 'body' or 'reactions'."); + if (!inputs.body && !inputs.reactions && !inputs.file) { + core.setFailed("Missing either comment 'body', 'file', or 'reactions'."); return; } - if (inputs.body) { + if (bodyToUse) { var commentBody = ""; if (editMode == "append") { // Get the comment body @@ -8686,7 +8693,7 @@ async function run() { commentBody = comment.body + "\n"; } - commentBody = commentBody + inputs.body; + commentBody = commentBody + bodyToUse; core.debug(`Comment body: ${commentBody}`); await octokit.rest.issues.updateComment({ owner: repo[0], @@ -8704,15 +8711,15 @@ async function run() { } } else if (inputs.issueNumber) { // Create a comment - if (!inputs.body) { - core.setFailed("Missing comment 'body'."); + if (!inputs.body && !inputs.file) { + core.setFailed("Missing comment 'body' or 'file'."); return; } const { data: comment } = await octokit.rest.issues.createComment({ owner: repo[0], repo: repo[1], issue_number: inputs.issueNumber, - body: inputs.body, + body: bodyToUse, }); core.info( `Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.` diff --git a/index.js b/index.js index ce6c3a8..0f17f97 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,5 @@ const { inspect } = require("util"); +const { readFileSync } = require("fs"); const core = require("@actions/core"); const github = require("@actions/github"); @@ -71,6 +72,7 @@ async function run() { issueNumber: core.getInput("issue-number"), commentId: core.getInput("comment-id"), body: core.getInput("body"), + file: core.getInput("file"), editMode: core.getInput("edit-mode"), reactions: core.getInput("reactions") ? core.getInput("reactions") @@ -93,14 +95,19 @@ async function run() { const octokit = github.getOctokit(inputs.token); + let bodyToUse = inputs.body; + if (inputs.file) { + bodyToUse = readFileSync(inputs.file, "utf8"); + } + if (inputs.commentId) { // Edit a comment - if (!inputs.body && !inputs.reactions) { - core.setFailed("Missing either comment 'body' or 'reactions'."); + if (!inputs.body && !inputs.reactions && !inputs.file) { + core.setFailed("Missing either comment 'body', 'file', or 'reactions'."); return; } - if (inputs.body) { + if (bodyToUse) { var commentBody = ""; if (editMode == "append") { // Get the comment body @@ -112,7 +119,7 @@ async function run() { commentBody = comment.body + "\n"; } - commentBody = commentBody + inputs.body; + commentBody = commentBody + bodyToUse; core.debug(`Comment body: ${commentBody}`); await octokit.rest.issues.updateComment({ owner: repo[0], @@ -130,15 +137,15 @@ async function run() { } } else if (inputs.issueNumber) { // Create a comment - if (!inputs.body) { - core.setFailed("Missing comment 'body'."); + if (!inputs.body && !inputs.file) { + core.setFailed("Missing comment 'body' or 'file'."); return; } const { data: comment } = await octokit.rest.issues.createComment({ owner: repo[0], repo: repo[1], issue_number: inputs.issueNumber, - body: inputs.body, + body: bodyToUse, }); core.info( `Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.` From 63c92e5e904af139385992558719087aaa687435 Mon Sep 17 00:00:00 2001 From: Umang Galaiya Date: Wed, 1 Jun 2022 23:29:04 +0530 Subject: [PATCH 2/4] Improve code, add support for fileEncoding --- dist/index.js | 41 +++++++++++++++++++++++++++++++---------- index.js | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 62 insertions(+), 20 deletions(-) diff --git a/dist/index.js b/dist/index.js index 3dfb657..109b40a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -8573,7 +8573,7 @@ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. (() => { const { inspect } = __nccwpck_require__(3837); -const { readFileSync } = __nccwpck_require__(7147); +const { readFileSync, existsSync } = __nccwpck_require__(7147); const core = __nccwpck_require__(2186); const github = __nccwpck_require__(5438); @@ -8647,6 +8647,7 @@ async function run() { commentId: core.getInput("comment-id"), body: core.getInput("body"), file: core.getInput("file"), + fileEncoding: core.getInput("file-encoding") || 'utf8', editMode: core.getInput("edit-mode"), reactions: core.getInput("reactions") ? core.getInput("reactions") @@ -8667,13 +8668,20 @@ async function run() { return; } - const octokit = github.getOctokit(inputs.token); - - let bodyToUse = inputs.body; - if (inputs.file) { - bodyToUse = readFileSync(inputs.file, "utf8"); + if (inputs.file && inputs.body) { + core.setFailed("Only one of 'file' or 'body' can be set."); + return; } + if (inputs.file) { + if (!existsSync(inputs.file)) { + core.setFailed(`File '${inputs.file}' does not exist.`); + return; + } + } + + const octokit = github.getOctokit(inputs.token); + if (inputs.commentId) { // Edit a comment if (!inputs.body && !inputs.reactions && !inputs.file) { @@ -8681,7 +8689,9 @@ async function run() { return; } - if (bodyToUse) { + const body = getBodyOrFile(inputs); + + if (body) { var commentBody = ""; if (editMode == "append") { // Get the comment body @@ -8693,7 +8703,7 @@ async function run() { commentBody = comment.body + "\n"; } - commentBody = commentBody + bodyToUse; + commentBody = commentBody + body; core.debug(`Comment body: ${commentBody}`); await octokit.rest.issues.updateComment({ owner: repo[0], @@ -8711,15 +8721,18 @@ async function run() { } } else if (inputs.issueNumber) { // Create a comment - if (!inputs.body && !inputs.file) { + const body = getBodyOrFile(inputs); + + if (!body) { core.setFailed("Missing comment 'body' or 'file'."); return; } + const { data: comment } = await octokit.rest.issues.createComment({ owner: repo[0], repo: repo[1], issue_number: inputs.issueNumber, - body: bodyToUse, + body, }); core.info( `Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.` @@ -8743,6 +8756,14 @@ async function run() { } } +function getBodyOrFile (inputs) { + if (inputs.body) { + return inputs.body; + } else if (inputs.file) { + return readFileSync(inputs.file, inputs.fileEncoding); + } +} + run(); })(); diff --git a/index.js b/index.js index 0f17f97..1017e11 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ const { inspect } = require("util"); -const { readFileSync } = require("fs"); +const { readFileSync, existsSync } = require("fs"); const core = require("@actions/core"); const github = require("@actions/github"); @@ -73,6 +73,7 @@ async function run() { commentId: core.getInput("comment-id"), body: core.getInput("body"), file: core.getInput("file"), + fileEncoding: core.getInput("file-encoding") || 'utf8', editMode: core.getInput("edit-mode"), reactions: core.getInput("reactions") ? core.getInput("reactions") @@ -93,13 +94,20 @@ async function run() { return; } - const octokit = github.getOctokit(inputs.token); - - let bodyToUse = inputs.body; - if (inputs.file) { - bodyToUse = readFileSync(inputs.file, "utf8"); + if (inputs.file && inputs.body) { + core.setFailed("Only one of 'file' or 'body' can be set."); + return; } + if (inputs.file) { + if (!existsSync(inputs.file)) { + core.setFailed(`File '${inputs.file}' does not exist.`); + return; + } + } + + const octokit = github.getOctokit(inputs.token); + if (inputs.commentId) { // Edit a comment if (!inputs.body && !inputs.reactions && !inputs.file) { @@ -107,7 +115,9 @@ async function run() { return; } - if (bodyToUse) { + const body = getBodyOrFile(inputs); + + if (body) { var commentBody = ""; if (editMode == "append") { // Get the comment body @@ -119,7 +129,7 @@ async function run() { commentBody = comment.body + "\n"; } - commentBody = commentBody + bodyToUse; + commentBody = commentBody + body; core.debug(`Comment body: ${commentBody}`); await octokit.rest.issues.updateComment({ owner: repo[0], @@ -137,15 +147,18 @@ async function run() { } } else if (inputs.issueNumber) { // Create a comment - if (!inputs.body && !inputs.file) { + const body = getBodyOrFile(inputs); + + if (!body) { core.setFailed("Missing comment 'body' or 'file'."); return; } + const { data: comment } = await octokit.rest.issues.createComment({ owner: repo[0], repo: repo[1], issue_number: inputs.issueNumber, - body: bodyToUse, + body, }); core.info( `Created comment id '${comment.id}' on issue '${inputs.issueNumber}'.` @@ -169,4 +182,12 @@ async function run() { } } +function getBodyOrFile (inputs) { + if (inputs.body) { + return inputs.body; + } else if (inputs.file) { + return readFileSync(inputs.file, inputs.fileEncoding); + } +} + run(); From 1fdf65a50f79c8290bea2d0b1f6854472f583072 Mon Sep 17 00:00:00 2001 From: Umang Galaiya Date: Wed, 1 Jun 2022 23:43:03 +0530 Subject: [PATCH 3/4] Update README --- README.md | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 584e1f2..405d090 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,8 @@ This action was created to help facilitate a GitHub Actions "ChatOps" solution i | `issue-number` | The number of the issue or pull request in which to create a comment. | | | `comment-id` | The id of the comment to update. | | | `body` | The comment body. | | +| `file` | The path to a file that can be read as `body`. Use either `file` or `body`, but not both. | | +| `fileEncoding` | The encoding of the file provided as `file`. | `utf8` | | `edit-mode` | The mode when updating a comment, `replace` or `append`. | `append` | | `reactions` | A comma separated list of reactions to add to the comment. (`+1`, `-1`, `laugh`, `confused`, `heart`, `hooray`, `rocket`, `eyes`) | | @@ -158,23 +160,12 @@ If required, the create and update steps can be separated for greater control. ### Setting the comment body from a file -This example shows how file content can be read into a variable and passed to the action. -The content must be [escaped to preserve newlines](https://github.community/t/set-output-truncates-multiline-strings/16852/3). - ```yml - - id: get-comment-body - run: | - body="$(cat comment-body.txt)" - body="${body//'%'/'%25'}" - body="${body//$'\n'/'%0A'}" - body="${body//$'\r'/'%0D'}" - echo "::set-output name=body::$body" - - name: Create comment uses: peter-evans/create-or-update-comment@v2 with: issue-number: 1 - body: ${{ steps.get-comment-body.outputs.body }} + file: 'comment-body.txt' ``` ### Using a markdown template From acea7ce9cea804615d6cb036b612b25040fc2dd1 Mon Sep 17 00:00:00 2001 From: Umang Galaiya Date: Fri, 3 Jun 2022 00:42:46 +0530 Subject: [PATCH 4/4] Update inputs --- action.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/action.yml b/action.yml index a3b8799..4e98fdb 100644 --- a/action.yml +++ b/action.yml @@ -12,6 +12,8 @@ inputs: description: 'The id of the comment to update.' body: description: 'The comment body.' + file: + description: 'The path to a file that can be read as `body`. Use either `file` or `body`, but not both.' edit-mode: description: 'The mode when updating a comment, "replace" or "append".' reaction-type: @@ -25,5 +27,5 @@ runs: using: 'node16' main: 'dist/index.js' branding: - icon: 'message-square' + icon: 'message-square' color: 'gray-dark'