diff --git a/.github/workflows/comment_on_pull_request.yml b/.github/workflows/comment_on_pull_request.yml index 5bbf51f..9e9384f 100644 --- a/.github/workflows/comment_on_pull_request.yml +++ b/.github/workflows/comment_on_pull_request.yml @@ -10,5 +10,7 @@ jobs: - uses: ./ with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + header: FromPR message: | Test ${{ github.sha }} is successfully ended. + This is message from PR. diff --git a/.github/workflows/comment_on_push.yml b/.github/workflows/comment_on_push.yml index 6524873..22d4e47 100644 --- a/.github/workflows/comment_on_push.yml +++ b/.github/workflows/comment_on_push.yml @@ -17,3 +17,4 @@ jobs: number: ${{ steps.finder.outputs.pr }} message: | Test ${{ github.sha }} is successfully ended. + This is message from push. diff --git a/__tests__/comment.test.ts b/__tests__/comment.test.ts index 4a9b92d..b57f2d9 100644 --- a/__tests__/comment.test.ts +++ b/__tests__/comment.test.ts @@ -11,23 +11,40 @@ it("findPreviousComment", async () => { }, body: "\nprevious message" }; - const otherComment = { + const commentWithCustomHeader = { user: { - login: "some-user" + login: "github-actions[bot]" }, - body: "lgtm" + body: "\nprevious message" }; + const otherComments = [ + { + user: { + login: "some-user" + }, + body: "lgtm" + }, + { + user: { + login: "github-actions[bot]" + }, + body: "\nprevious message" + } + ]; const octokit = { issues: { listComments: jest.fn(() => Promise.resolve({ - data: [otherComment, comment] + data: [commentWithCustomHeader, comment, ...otherComments] }) ) } }; - expect(await findPreviousComment(octokit, repo, 123)).toBe(comment); + expect(await findPreviousComment(octokit, repo, 123, "")).toBe(comment); + expect(await findPreviousComment(octokit, repo, 123, "TypeA")).toBe( + commentWithCustomHeader + ); expect(octokit.issues.listComments).toBeCalledWith({ issue_number: 123 }); }); it("updateComment", async () => { @@ -37,12 +54,19 @@ it("updateComment", async () => { } }; expect( - await updateComment(octokit, repo, 456, "hello there") + await updateComment(octokit, repo, 456, "hello there", "") ).toBeUndefined(); expect(octokit.issues.updateComment).toBeCalledWith({ comment_id: 456, body: "\nhello there" }); + expect( + await updateComment(octokit, repo, 456, "hello there", "TypeA") + ).toBeUndefined(); + expect(octokit.issues.updateComment).toBeCalledWith({ + comment_id: 456, + body: "\nhello there" + }); }); it("createComment", async () => { const octokit = { @@ -51,10 +75,17 @@ it("createComment", async () => { } }; expect( - await createComment(octokit, repo, 456, "hello there") + await createComment(octokit, repo, 456, "hello there", "") ).toBeUndefined(); expect(octokit.issues.createComment).toBeCalledWith({ issue_number: 456, body: "\nhello there" }); + expect( + await createComment(octokit, repo, 456, "hello there", "TypeA") + ).toBeUndefined(); + expect(octokit.issues.createComment).toBeCalledWith({ + issue_number: 456, + body: "\nhello there" + }); }); diff --git a/action.yml b/action.yml index bd2533e..571964f 100644 --- a/action.yml +++ b/action.yml @@ -2,6 +2,9 @@ name: "Sticky Pull Request Comment" description: "Create comment on pull request, if exists update that comment." author: "marocchino" inputs: + header: + description: "Header to determine if the comment is to be updated, not shown on screen" + required: false message: description: "comment message" required: true diff --git a/lib/comment.js b/lib/comment.js index e287e6b..2e4aabb 100644 --- a/lib/comment.js +++ b/lib/comment.js @@ -9,23 +9,26 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; Object.defineProperty(exports, "__esModule", { value: true }); -const HEADER = ""; -function findPreviousComment(octokit, repo, issue_number) { +function headerComment(header) { + return ``; +} +function findPreviousComment(octokit, repo, issue_number, header) { return __awaiter(this, void 0, void 0, function* () { const { data: comments } = yield octokit.issues.listComments(Object.assign(Object.assign({}, repo), { issue_number })); - return comments.find(comment => comment.body.startsWith(HEADER)); + const h = headerComment(header); + return comments.find(comment => comment.body.startsWith(h)); }); } exports.findPreviousComment = findPreviousComment; -function updateComment(octokit, repo, comment_id, body) { +function updateComment(octokit, repo, comment_id, body, header) { return __awaiter(this, void 0, void 0, function* () { - yield octokit.issues.updateComment(Object.assign(Object.assign({}, repo), { comment_id, body: `${HEADER}\n${body}` })); + yield octokit.issues.updateComment(Object.assign(Object.assign({}, repo), { comment_id, body: `${headerComment(header)}\n${body}` })); }); } exports.updateComment = updateComment; -function createComment(octokit, repo, issue_number, body) { +function createComment(octokit, repo, issue_number, body, header) { return __awaiter(this, void 0, void 0, function* () { - yield octokit.issues.createComment(Object.assign(Object.assign({}, repo), { issue_number, body: `${HEADER}\n${body}` })); + yield octokit.issues.createComment(Object.assign(Object.assign({}, repo), { issue_number, body: `${headerComment(header)}\n${body}` })); }); } exports.createComment = createComment; diff --git a/lib/main.js b/lib/main.js index 8f5ac6c..913c4aa 100644 --- a/lib/main.js +++ b/lib/main.js @@ -31,14 +31,15 @@ function run() { try { const repo = github_1.context.repo; const body = core.getInput("message", { required: true }); + const header = core.getInput("header", { required: false }) || ""; const githubToken = core.getInput("GITHUB_TOKEN", { required: true }); const octokit = new github_1.GitHub(githubToken); - const previous = yield comment_1.findPreviousComment(octokit, repo, number); + const previous = yield comment_1.findPreviousComment(octokit, repo, number, header); if (previous) { - yield comment_1.updateComment(octokit, repo, previous.id, body); + yield comment_1.updateComment(octokit, repo, previous.id, body, header); } else { - yield comment_1.createComment(octokit, repo, number, body); + yield comment_1.createComment(octokit, repo, number, body, header); } } catch ({ message }) { diff --git a/src/comment.ts b/src/comment.ts index 7497acc..7544984 100644 --- a/src/comment.ts +++ b/src/comment.ts @@ -1,23 +1,26 @@ -const HEADER = ""; +function headerComment(header) { + return ``; +} -export async function findPreviousComment(octokit, repo, issue_number) { +export async function findPreviousComment(octokit, repo, issue_number, header) { const { data: comments } = await octokit.issues.listComments({ ...repo, issue_number }); - return comments.find(comment => comment.body.startsWith(HEADER)); + const h = headerComment(header); + return comments.find(comment => comment.body.startsWith(h)); } -export async function updateComment(octokit, repo, comment_id, body) { +export async function updateComment(octokit, repo, comment_id, body, header) { await octokit.issues.updateComment({ ...repo, comment_id, - body: `${HEADER}\n${body}` + body: `${headerComment(header)}\n${body}` }); } -export async function createComment(octokit, repo, issue_number, body) { +export async function createComment(octokit, repo, issue_number, body, header) { await octokit.issues.createComment({ ...repo, issue_number, - body: `${HEADER}\n${body}` + body: `${headerComment(header)}\n${body}` }); } diff --git a/src/main.ts b/src/main.ts index 8696371..ed8e2f4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -14,13 +14,14 @@ async function run() { try { const repo = context.repo; const body = core.getInput("message", { required: true }); + const header = core.getInput("header", { required: false }) || ""; const githubToken = core.getInput("GITHUB_TOKEN", { required: true }); const octokit = new GitHub(githubToken); - const previous = await findPreviousComment(octokit, repo, number); + const previous = await findPreviousComment(octokit, repo, number, header); if (previous) { - await updateComment(octokit, repo, previous.id, body); + await updateComment(octokit, repo, previous.id, body, header); } else { - await createComment(octokit, repo, number, body); + await createComment(octokit, repo, number, body, header); } } catch ({ message }) { core.setFailed(message);