From f3773f7ee7c0de42997a5b19cc5ee215da3f06ec Mon Sep 17 00:00:00 2001 From: joe fleming Date: Tue, 23 Oct 2018 15:09:27 -0700 Subject: [PATCH] feat: add a clean command --- package.json | 3 ++- src/clean.mjs | 30 ++++++++++++++++++++++++++++++ src/lib/get_pull_comments.mjs | 9 +++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/clean.mjs create mode 100644 src/lib/get_pull_comments.mjs diff --git a/package.json b/package.json index 29bd424..f0c9b11 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "precommit": "lint-staged", "version": "auto-changelog -p && auto-authors && git add CHANGELOG.md AUTHORS.md", "start": "node .", - "force": "node -r esm src/force.mjs" + "force": "node -r esm src/force.mjs", + "clean": "node -r esm src/clean.mjs" }, "repository": { "type": "git", diff --git a/src/clean.mjs b/src/clean.mjs new file mode 100644 index 0000000..28e0e6f --- /dev/null +++ b/src/clean.mjs @@ -0,0 +1,30 @@ +import dotenv from 'dotenv'; +import logger from './lib/logger.mjs'; +import createRepo from './lib/create_repo.mjs'; +import getPullComments from './lib/get_pull_comments.mjs'; +import { deleteComment } from './lib/comments.mjs'; + +dotenv.config(); + +async function forceRetest() { + const [ownerRepo, prNumber] = process.argv.splice(2); + const { COMMENT_BODY_REGEXP, COMMENT_BODY_REGEXP_FLAGS, COMMENT_ACTOR } = process.env; + + if (!ownerRepo || !prNumber) { + throw new Error('You must specify an owner/repo combo and a pull request number'); + } + + const repo = createRepo(ownerRepo); + + const comments = await getPullComments(repo, prNumber); + const bodyRegexp = new RegExp(COMMENT_BODY_REGEXP, COMMENT_BODY_REGEXP_FLAGS); + comments + .filter(comment => bodyRegexp.test(comment.body) && comment.owner === COMMENT_ACTOR) + .forEach(async comment => { + const res = await deleteComment(repo, comment.id); + if (res) logger.debug(`Comment ${comment.id} deleted`); + else logger.error(new Error(`Failed to remove comment ${comment.id}`)); + }); +} + +forceRetest().catch(err => logger.error(err)); diff --git a/src/lib/get_pull_comments.mjs b/src/lib/get_pull_comments.mjs new file mode 100644 index 0000000..519cbc2 --- /dev/null +++ b/src/lib/get_pull_comments.mjs @@ -0,0 +1,9 @@ +export default async function getPull(repo, id) { + const { items } = await repo.issues(id).comments.fetch(); + + return items.map(item => ({ + id: item.id, + owner: item.user.login, + body: item.body, + })); +}