From 65bccdf399517222b954d7f773323fd53506da58 Mon Sep 17 00:00:00 2001 From: Ross Brodbeck Date: Mon, 8 Jun 2020 07:41:31 -0400 Subject: [PATCH] Add API failure handling/logging --- dist/index.js | 117 +++++++++++++++++++++++++++--------------- src/IssueProcessor.ts | 110 ++++++++++++++++++++++++--------------- 2 files changed, 145 insertions(+), 82 deletions(-) diff --git a/dist/index.js b/dist/index.js index db08e764..6fde0c16 100644 --- a/dist/index.js +++ b/dist/index.js @@ -8755,27 +8755,39 @@ class IssueProcessor { listIssueComments(issueNumber, sinceDate) { return __awaiter(this, void 0, void 0, function* () { // find any comments since date on the given issue - const comments = yield this.client.issues.listComments({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issueNumber, - since: sinceDate - }); - return comments.data; + try { + const comments = yield this.client.issues.listComments({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issueNumber, + since: sinceDate + }); + return comments.data; + } + catch (error) { + core.error(`List issue comments error: ${error.message}`); + return Promise.resolve([]); + } }); } // grab issues from github in baches of 100 getIssues(page) { return __awaiter(this, void 0, void 0, function* () { - const issueResult = yield this.client.issues.listForRepo({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - state: 'open', - labels: this.options.onlyLabels, - per_page: 100, - page - }); - return issueResult.data; + try { + const issueResult = yield this.client.issues.listForRepo({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + state: 'open', + labels: this.options.onlyLabels, + per_page: 100, + page + }); + return issueResult.data; + } + catch (error) { + core.error(`Get issues for repo error: ${error.message}`); + return Promise.resolve([]); + } }); } // Mark an issue as stale with a comment and a label @@ -8788,21 +8800,36 @@ class IssueProcessor { // so that close calculations work correctly const newUpdatedAtDate = new Date(); issue.updated_at = newUpdatedAtDate.toString(); + // of days to wait before actually closing the issue. + const daysBeforeStaleInMillis = 1000 * 60 * 60 * 24 * this.options.daysBeforeStale; + const newUpdatedAtDate = new Date(); + newUpdatedAtDate.setTime(newUpdatedAtDate.getTime() - daysBeforeStaleInMillis); + issue.updated_at = newUpdatedAtDate.toString(); if (this.options.debugOnly) { return; } - yield this.client.issues.createComment({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issue.number, - body: staleMessage - }); - yield this.client.issues.addLabels({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issue.number, - labels: [staleLabel] - }); + try { + yield this.client.issues.createComment({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issue.number, + body: staleMessage + }); + } + catch (error) { + core.error(`Error creating a comment: ${error.message}`); + } + try { + yield this.client.issues.addLabels({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issue.number, + labels: [staleLabel] + }); + } + catch (error) { + core.error(`Error adding a label: ${error.message}`); + } }); } // Close an issue based on staleness @@ -8814,12 +8841,17 @@ class IssueProcessor { if (this.options.debugOnly) { return; } - yield this.client.issues.update({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issue.number, - state: 'closed' - }); + try { + yield this.client.issues.update({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issue.number, + state: 'closed' + }); + } + catch (error) { + core.error(`Error updating an issue: ${error.message}`); + } }); } // Remove a label from an issue @@ -8831,12 +8863,17 @@ class IssueProcessor { if (this.options.debugOnly) { return; } - yield this.client.issues.removeLabel({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issue.number, - name: encodeURIComponent(label) // A label can have a "?" in the name - }); + try { + yield this.client.issues.removeLabel({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issue.number, + name: encodeURIComponent(label) // A label can have a "?" in the name + }); + } + catch (error) { + core.error(`Error removing a label: ${error.message}`); + } }); } // returns the creation date of a given label on an issue (or nothing if no label existed) diff --git a/src/IssueProcessor.ts b/src/IssueProcessor.ts index 0ae90f6b..a21c9ad0 100644 --- a/src/IssueProcessor.ts +++ b/src/IssueProcessor.ts @@ -268,28 +268,38 @@ export class IssueProcessor { sinceDate: string ): Promise { // find any comments since date on the given issue - const comments = await this.client.issues.listComments({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issueNumber, - since: sinceDate - }); - - return comments.data; + try { + const comments = await this.client.issues.listComments({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issueNumber, + since: sinceDate + }); + return comments.data; + } catch (error) { + core.error(`List issue comments error: ${error.message}`); + return Promise.resolve([]); + } } // grab issues from github in baches of 100 private async getIssues(page: number): Promise { - const issueResult: OctoKitIssueList = await this.client.issues.listForRepo({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - state: 'open', - labels: this.options.onlyLabels, - per_page: 100, - page - }); - - return issueResult.data; + try { + const issueResult: OctoKitIssueList = await this.client.issues.listForRepo( + { + owner: github.context.repo.owner, + repo: github.context.repo.repo, + state: 'open', + labels: this.options.onlyLabels, + per_page: 100, + page + } + ); + return issueResult.data; + } catch (error) { + core.error(`Get issues for repo error: ${error.message}`); + return Promise.resolve([]); + } } // Mark an issue as stale with a comment and a label @@ -313,19 +323,27 @@ export class IssueProcessor { return; } - await this.client.issues.createComment({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issue.number, - body: staleMessage - }); + try { + await this.client.issues.createComment({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issue.number, + body: staleMessage + }); + } catch (error) { + core.error(`Error creating a comment: ${error.message}`); + } - await this.client.issues.addLabels({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issue.number, - labels: [staleLabel] - }); + try { + await this.client.issues.addLabels({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issue.number, + labels: [staleLabel] + }); + } catch (error) { + core.error(`Error adding a label: ${error.message}`); + } } // Close an issue based on staleness @@ -342,12 +360,16 @@ export class IssueProcessor { return; } - await this.client.issues.update({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issue.number, - state: 'closed' - }); + try { + await this.client.issues.update({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issue.number, + state: 'closed' + }); + } catch (error) { + core.error(`Error updating an issue: ${error.message}`); + } } // Remove a label from an issue @@ -364,12 +386,16 @@ export class IssueProcessor { return; } - await this.client.issues.removeLabel({ - owner: github.context.repo.owner, - repo: github.context.repo.repo, - issue_number: issue.number, - name: encodeURIComponent(label) // A label can have a "?" in the name - }); + try { + await this.client.issues.removeLabel({ + owner: github.context.repo.owner, + repo: github.context.repo.repo, + issue_number: issue.number, + name: encodeURIComponent(label) // A label can have a "?" in the name + }); + } catch (error) { + core.error(`Error removing a label: ${error.message}`); + } } // returns the creation date of a given label on an issue (or nothing if no label existed)