From 96b682d29f2b26168a8b283c62da1ad3f1262120 Mon Sep 17 00:00:00 2001 From: Ross Brodbeck Date: Mon, 18 May 2020 20:33:59 -0400 Subject: [PATCH] Fix an issue where the bot doesn't ignore its own comments (#73) --- __tests__/main.test.ts | 32 +++++++++++++++++++++++++++++++- dist/index.js | 5 +++-- src/IssueProcessor.ts | 11 +++++++++-- 3 files changed, 43 insertions(+), 5 deletions(-) diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index 4cedf9ac..781fbf88 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -493,7 +493,7 @@ test('stale label should be removed if a comment was added to a stale issue', as const processor = new IssueProcessor( opts, async p => (p == 1 ? TestIssueList : []), - async (num, dt) => [{user: {type: 'User'}}], // return a fake comment so indicate there was an update + async (num, dt) => [{user: {login: 'notme', type: 'User'}}], // return a fake comment to indicate there was an update async (issue, label) => new Date().toDateString() ); @@ -505,6 +505,36 @@ test('stale label should be removed if a comment was added to a stale issue', as expect(processor.removedLabelIssues.length).toEqual(1); }); +test('stale label should not be removed if a comment was added by the bot (and the issue should be closed)', async () => { + github.context.actor = 'abot'; + const TestIssueList: Issue[] = [ + generateIssue( + 1, + 'An issue that should stay stale', + '2020-01-01T17:00:00Z', + false, + ['Stale'] + ) + ]; + + const opts = DefaultProcessorOptions; + opts.removeStaleWhenUpdated = true; + + const processor = new IssueProcessor( + opts, + async p => (p == 1 ? TestIssueList : []), + async (num, dt) => [{user: {login: 'abot', type: 'User'}}], // return a fake comment to indicate there was an update by the bot + async (issue, label) => new Date().toDateString() + ); + + // process our fake issue list + await processor.processIssues(1); + + expect(processor.closedIssues.length).toEqual(1); + expect(processor.staleIssues.length).toEqual(0); + expect(processor.removedLabelIssues.length).toEqual(0); +}); + test('stale issues should not be closed until after the closed number of days', async () => { let lastUpdate = new Date(); lastUpdate.setDate(lastUpdate.getDate() - 5); diff --git a/dist/index.js b/dist/index.js index 158cc04d..9b977dd5 100644 --- a/dist/index.js +++ b/dist/index.js @@ -8570,8 +8570,9 @@ class IssueProcessor { this.operationsLeft -= 1; // find any comments since the stale label const comments = yield this.listIssueComments(issue.number, sinceDate); - // if there are any user comments returned, issue is not stale anymore - return comments.filter(comment => comment.user.type === 'User').length > 0; + // if there are any user comments returned, and they were not by this bot, the issue is not stale anymore + return (comments.filter(comment => comment.user.type === 'User' && + comment.user.login !== github.context.actor).length > 0); }); } // grab comments for an issue since a given date diff --git a/src/IssueProcessor.ts b/src/IssueProcessor.ts index 5308037e..38a8eac2 100644 --- a/src/IssueProcessor.ts +++ b/src/IssueProcessor.ts @@ -16,6 +16,7 @@ export interface Issue { export interface User { type: string; + login: string; } export interface Comment { @@ -249,8 +250,14 @@ export class IssueProcessor { // find any comments since the stale label const comments = await this.listIssueComments(issue.number, sinceDate); - // if there are any user comments returned, issue is not stale anymore - return comments.filter(comment => comment.user.type === 'User').length > 0; + // if there are any user comments returned, and they were not by this bot, the issue is not stale anymore + return ( + comments.filter( + comment => + comment.user.type === 'User' && + comment.user.login !== github.context.actor + ).length > 0 + ); } // grab comments for an issue since a given date