From d646bac4cc3a15851278fa1ca7c354d531e11b86 Mon Sep 17 00:00:00 2001 From: Yevgen Safronov Date: Mon, 19 Sep 2016 23:19:12 +0200 Subject: [PATCH] labels: defer resolving labels These changes defer the process of label resolving to prevent 404 errors from Github API Closes https://github.com/nodejs/github-bot/issues/79 --- lib/node-repo.js | 7 ++++++- package.json | 1 + scripts/node-subsystem-label.js | 3 ++- test/integration/node-labels-webhook.test.js | 9 +++++++-- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/node-repo.js b/lib/node-repo.js index 8b5f5104..762f0df7 100644 --- a/lib/node-repo.js +++ b/lib/node-repo.js @@ -4,6 +4,11 @@ const githubClient = require('./github-client') const resolveLabels = require('./node-labels').resolveLabels +function deferredResolveLabelsThenUpdatePr (options) { + const timeoutMillis = (options.timeoutInSec || 0) * 1000 + setTimeout(resolveLabelsThenUpdatePr, timeoutMillis, options) +} + function resolveLabelsThenUpdatePr (options) { githubClient.pullRequests.getFiles({ user: options.owner, @@ -40,4 +45,4 @@ function updatePrWithLabels (options, labels) { }) } -exports.resolveLabelsThenUpdatePr = resolveLabelsThenUpdatePr +exports.resolveLabelsThenUpdatePr = deferredResolveLabelsThenUpdatePr diff --git a/package.json b/package.json index c3c65138..ee89ec37 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ }, "devDependencies": { "eventsource": "^0.2.1", + "lolex": "^1.5.1", "nock": "^8.0.0", "nodemon": "^1.9.1", "proxyquire": "^1.7.10", diff --git a/scripts/node-subsystem-label.js b/scripts/node-subsystem-label.js index 22dc88f8..ba4d410f 100644 --- a/scripts/node-subsystem-label.js +++ b/scripts/node-subsystem-label.js @@ -24,7 +24,8 @@ module.exports = function (app) { repo, prId, logger, - baseBranch + baseBranch, + timeoutInSec: 2 }) } } diff --git a/test/integration/node-labels-webhook.test.js b/test/integration/node-labels-webhook.test.js index a5c535c8..df3eb3b7 100644 --- a/test/integration/node-labels-webhook.test.js +++ b/test/integration/node-labels-webhook.test.js @@ -7,6 +7,7 @@ const url = require('url') const nock = require('nock') const supertest = require('supertest') const proxyquire = require('proxyquire') +const lolex = require('lolex') const testStubs = { './github-secret': { @@ -23,6 +24,7 @@ const app = proxyquire('../../app', testStubs) setupNoRequestMatchHandler() tap.test('Sends POST request to https://api.github.com/repos/nodejs/node/issues//labels', (t) => { + const clock = lolex.install() const expectedLabels = ['timers'] const webhookPayload = readFixture('pull-request-opened.json') @@ -37,7 +39,7 @@ tap.test('Sends POST request to https://api.github.com/repos/nodejs/node/issues/ .reply(200) t.plan(1) - t.tearDown(() => filesScope.done() && newLabelsScope.done()) + t.tearDown(() => filesScope.done() && newLabelsScope.done() && clock.uninstall()) supertest(app) .post('/hooks/github') @@ -45,11 +47,13 @@ tap.test('Sends POST request to https://api.github.com/repos/nodejs/node/issues/ .send(webhookPayload) .expect(200) .end((err, res) => { + clock.runAll() t.equal(err, null) }) }) tap.test('Adds v6.x label when PR is targeting the v6.x-staging branch', (t) => { + const clock = lolex.install() const expectedLabels = ['timers', 'v6.x'] const webhookPayload = readFixture('pull-request-opened-v6.x.json') @@ -64,7 +68,7 @@ tap.test('Adds v6.x label when PR is targeting the v6.x-staging branch', (t) => .reply(200) t.plan(1) - t.tearDown(() => filesScope.done() && newLabelsScope.done()) + t.tearDown(() => filesScope.done() && newLabelsScope.done() && clock.uninstall()) supertest(app) .post('/hooks/github') @@ -72,6 +76,7 @@ tap.test('Adds v6.x label when PR is targeting the v6.x-staging branch', (t) => .send(webhookPayload) .expect(200) .end((err, res) => { + clock.runAll() t.equal(err, null) }) })