Files
gh-action-bot/src/lib/get_comments.mjs

55 lines
1.7 KiB
JavaScript

import logger from './logger.mjs';
export default async function getEvents(repo, { body, actor } = {}) {
const events = await repo.events.fetch();
const items = await (async () => {
// process 2 pages of events
if (events.nextPage) {
const moreEvents = await events.nextPage.fetch();
return [...events.items, ...moreEvents.items];
}
return events.items;
})();
return items
.map(comment => {
let skip = false;
const isComment = comment.type === 'IssueCommentEvent';
const bodyMatch = isComment && (!body || body.test(comment.payload.comment.body));
const isActor = comment.actor.login === actor;
// skip events that don't match the criteria
if (!isComment) skip = true;
if (comment.payload.action !== 'created') skip = true;
if (!isActor) skip = true;
if (isComment && !bodyMatch) skip = true;
if (skip) {
if (isActor) {
logger.debug(
`SKIP EVENT ${isComment ? `#${comment.payload.issue.number}` : comment.id}: ${
comment.type
} ${comment.payload.action} by ${comment.actor.login}`,
isComment && !bodyMatch && `(${comment.payload.comment.body.slice(0, 30)})`
);
}
return false;
}
logger.debug(`PROCESS #${comment.payload.issue.number}`);
return {
id: comment.id,
number: comment.payload.issue.number,
owner: comment.payload.issue.user.login,
labels: comment.payload.issue.labels.map(label => label.name),
comment_id: comment.payload.comment.id,
comment_author: comment.payload.comment.user.login,
comment_body: comment.payload.comment.body,
};
})
.filter(Boolean);
}