feat: add ability to set custom header

This commit is contained in:
marocchino 2020-02-04 17:19:50 +09:00
parent ee22346016
commit c873eaf14f
No known key found for this signature in database
GPG key ID: AFF521DBDB122570
4 changed files with 56 additions and 18 deletions

View file

@ -11,23 +11,40 @@ it("findPreviousComment", async () => {
}, },
body: "<!-- Sticky Pull Request Comment -->\nprevious message" body: "<!-- Sticky Pull Request Comment -->\nprevious message"
}; };
const otherComment = { const commentWithCustomHeader = {
user: { user: {
login: "some-user" login: "github-actions[bot]"
}, },
body: "lgtm" body: "<!-- Sticky Pull Request CommentTypeA -->\nprevious message"
}; };
const otherComments = [
{
user: {
login: "some-user"
},
body: "lgtm"
},
{
user: {
login: "github-actions[bot]"
},
body: "<!-- Sticky Pull Request CommentTypeB -->\nprevious message"
}
];
const octokit = { const octokit = {
issues: { issues: {
listComments: jest.fn(() => listComments: jest.fn(() =>
Promise.resolve({ 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 }); expect(octokit.issues.listComments).toBeCalledWith({ issue_number: 123 });
}); });
it("updateComment", async () => { it("updateComment", async () => {
@ -37,12 +54,19 @@ it("updateComment", async () => {
} }
}; };
expect( expect(
await updateComment(octokit, repo, 456, "hello there") await updateComment(octokit, repo, 456, "hello there", "")
).toBeUndefined(); ).toBeUndefined();
expect(octokit.issues.updateComment).toBeCalledWith({ expect(octokit.issues.updateComment).toBeCalledWith({
comment_id: 456, comment_id: 456,
body: "<!-- Sticky Pull Request Comment -->\nhello there" body: "<!-- Sticky Pull Request Comment -->\nhello there"
}); });
expect(
await updateComment(octokit, repo, 456, "hello there", "TypeA")
).toBeUndefined();
expect(octokit.issues.updateComment).toBeCalledWith({
comment_id: 456,
body: "<!-- Sticky Pull Request CommentTypeA -->\nhello there"
});
}); });
it("createComment", async () => { it("createComment", async () => {
const octokit = { const octokit = {
@ -51,10 +75,17 @@ it("createComment", async () => {
} }
}; };
expect( expect(
await createComment(octokit, repo, 456, "hello there") await createComment(octokit, repo, 456, "hello there", "")
).toBeUndefined(); ).toBeUndefined();
expect(octokit.issues.createComment).toBeCalledWith({ expect(octokit.issues.createComment).toBeCalledWith({
issue_number: 456, issue_number: 456,
body: "<!-- Sticky Pull Request Comment -->\nhello there" body: "<!-- Sticky Pull Request Comment -->\nhello there"
}); });
expect(
await createComment(octokit, repo, 456, "hello there", "TypeA")
).toBeUndefined();
expect(octokit.issues.createComment).toBeCalledWith({
issue_number: 456,
body: "<!-- Sticky Pull Request CommentTypeA -->\nhello there"
});
}); });

View file

@ -2,6 +2,9 @@ name: "Sticky Pull Request Comment"
description: "Create comment on pull request, if exists update that comment." description: "Create comment on pull request, if exists update that comment."
author: "marocchino" author: "marocchino"
inputs: inputs:
header:
description: "Header to determine if the comment is to be updated, not shown on screen"
required: false
message: message:
description: "comment message" description: "comment message"
required: true required: true

View file

@ -1,23 +1,26 @@
const HEADER = "<!-- Sticky Pull Request Comment -->"; export async function findPreviousComment(octokit, repo, issue_number, header) {
export async function findPreviousComment(octokit, repo, issue_number) {
const { data: comments } = await octokit.issues.listComments({ const { data: comments } = await octokit.issues.listComments({
...repo, ...repo,
issue_number 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({ await octokit.issues.updateComment({
...repo, ...repo,
comment_id, 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({ await octokit.issues.createComment({
...repo, ...repo,
issue_number, issue_number,
body: `${HEADER}\n${body}` body: `${headerComment(header)}\n${body}`
}); });
} }
function headerComment(header) {
return `<!-- Sticky Pull Request Comment${header} -->`;
}

View file

@ -14,13 +14,14 @@ async function run() {
try { try {
const repo = context.repo; const repo = context.repo;
const body = core.getInput("message", { required: true }); const body = core.getInput("message", { required: true });
const header = core.getInput("header", { required: false }) || "";
const githubToken = core.getInput("GITHUB_TOKEN", { required: true }); const githubToken = core.getInput("GITHUB_TOKEN", { required: true });
const octokit = new GitHub(githubToken); const octokit = new GitHub(githubToken);
const previous = await findPreviousComment(octokit, repo, number); const previous = await findPreviousComment(octokit, repo, number, header);
if (previous) { if (previous) {
await updateComment(octokit, repo, previous.id, body); await updateComment(octokit, repo, previous.id, body, header);
} else { } else {
await createComment(octokit, repo, number, body); await createComment(octokit, repo, number, body, header);
} }
} catch ({ message }) { } catch ({ message }) {
core.setFailed(message); core.setFailed(message);