From 37aceca8b03f7a0b5ba382cd54542b4e811c7c16 Mon Sep 17 00:00:00 2001 From: Randell Dawson Date: Wed, 28 Nov 2018 02:58:30 -0800 Subject: [PATCH] feat: modified the close/open scripts --- .../close-open-specific-failures.js | 12 ++--- one-off-scripts/find-failures.js | 49 ++++++++++--------- pr-tasks/close-open.js | 17 +++++-- 3 files changed, 45 insertions(+), 33 deletions(-) diff --git a/one-off-scripts/close-open-specific-failures.js b/one-off-scripts/close-open-specific-failures.js index 21681902c5..8671692b54 100644 --- a/one-off-scripts/close-open-specific-failures.js +++ b/one-off-scripts/close-open-specific-failures.js @@ -29,16 +29,16 @@ const getUserInput = async () => { const lastPR = prs[prs.length - 1].number; log.setFirstLast({ firstPR, lastPR }); for (let { number, data: { errorDesc } } of prs) { - if (errorDesc !== "unknown error") { + //if (errorDesc !== "unknown error") { log.add(number, { closedOpened: true, errorDesc }); if (process.env.PRODUCTION_RUN === 'true') { await closeOpen(number); - await rateLimiter(30000); + await rateLimiter(2000); } - } - else { - log.add(number, { closedOpened: false, errorDesc }); - } + //} + //else { + // log.add(number, { closedOpened: false, errorDesc }); + //} } }) .then(() => { diff --git a/one-off-scripts/find-failures.js b/one-off-scripts/find-failures.js index c8746ada95..4958da2d57 100644 --- a/one-off-scripts/find-failures.js +++ b/one-off-scripts/find-failures.js @@ -24,7 +24,7 @@ const errorsToFind = require(path.resolve(__dirname, '../input-files/failuresToF (async () => { const { firstPR, lastPR } = await getUserInput(); log.setFirstLast({ firstPR, lastPR }); - const prPropsToGet = ['number', 'head']; + const prPropsToGet = ['number', 'labels', 'head']; const { openPRs } = await getPRs(firstPR, lastPR, prPropsToGet); if (openPRs.length) { @@ -32,31 +32,34 @@ const errorsToFind = require(path.resolve(__dirname, '../input-files/failuresToF log.start(); console.log('Starting error finding process...'); for (let count in openPRs) { - let { number, head: { sha: ref } } = openPRs[count]; - const { data: statuses } = await octokit.repos.listStatusesForRef({ owner, repo, ref }); + let { number, labels, head: { sha: ref } } = openPRs[count]; + const existingLabels = labels.map(({ name }) => name); - if (statuses.length) { - const { state, target_url } = statuses[0]; // first element contain most recent status - const hasProblem = state === 'failure' || state === 'error'; - if (hasProblem) { - let buildNum = Number(target_url.match(/\/builds\/(\d+)\?/i)[1]); - //const logNumber = 'need to use Travis api to access the full log for the buildNum above' - const logNumber = ++buildNum; - const travisLogUrl = `https://api.travis-ci.org/v3/job/${logNumber}/log.txt`; - const response = await fetch(travisLogUrl) - const logText = await response.text(); - let found = false; - let error; - for (let { error: errorDesc, regex } of errorsToFind) { - regex = RegExp(regex); - if (regex.test(logText)) { - error = errorDesc; - found = true; - break; + if (!existingLabels.includes('status: merge conflict') && !existingLabels.includes('status: needs update') && !existingLabels.includes('status: discussing')) { + const { data: statuses } = await octokit.repos.listStatusesForRef({ owner, repo, ref }); + if (statuses.length) { + const { state, target_url } = statuses[0]; // first element contain most recent status + const hasProblem = state === 'failure' || state === 'error'; + if (hasProblem) { + let buildNum = Number(target_url.match(/\/builds\/(\d+)\?/i)[1]); + //const logNumber = 'need to use Travis api to access the full log for the buildNum above' + const logNumber = ++buildNum; + const travisLogUrl = `https://api.travis-ci.org/v3/job/${logNumber}/log.txt`; + const response = await fetch(travisLogUrl) + const logText = await response.text(); + let found = false; + let error; + for (let { error: errorDesc, regex } of errorsToFind) { + regex = RegExp(regex); + if (regex.test(logText)) { + error = errorDesc; + found = true; + break; + } } + const errorDesc = error ? error : 'unknown error'; + log.add(number, { errorDesc, buildLog: travisLogUrl }); } - const errorDesc = error ? error : 'unknown error'; - log.add(number, { errorDesc, buildLog: travisLogUrl }); } } } diff --git a/pr-tasks/close-open.js b/pr-tasks/close-open.js index 375de5ffd7..4a377cd80f 100644 --- a/pr-tasks/close-open.js +++ b/pr-tasks/close-open.js @@ -11,15 +11,24 @@ octokit.authenticate(octokitAuth); const closeOpen = async (number) => { const result = await octokit.pullRequests.update({ owner, repo , number, state: 'closed', base: 'master' }) .then(async () => { - await rateLimiter(2000); + await rateLimiter(10000); return octokit.pullRequests.update({ owner, repo , number, state: 'open', base: 'master' }) }) .then(async () => { - await rateLimiter(1000); + await rateLimiter(2000); await addComment(number, 'Closed and Reopened this PR to attempt to resolve a specific Travis build failure.'); }) - .catch((err) => { - console.log(err) + .catch(async (err) => { + const { errors } = JSON.parse(err.message); // Octokit stores message as a stringified object + const errorMg = errors[0].message; + if (errorMg === "state cannot be changed. The repository that submitted this pull request has been deleted.") { + await rateLimiter(1000); + await addComment(number, `This PR was closed because user's repo was deleted.`); + console.log(`PR #${number} was closed because user's repo was deleted.`); + } + else { + console.log(err); + } }) };