From daff90163e040f13b1adb8e06f9ab69d4d18f176 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Thu, 9 May 2019 10:43:17 +0200
Subject: [PATCH] =?UTF-8?q?fix(travis):=20don=E2=80=99t=20use=20setTimeout?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 bin/config-validator.js       |  4 ----
 lib/manager/travis/package.js | 33 +++++++++++++++++----------------
 lib/workers/global/index.js   |  4 ----
 3 files changed, 17 insertions(+), 24 deletions(-)

diff --git a/bin/config-validator.js b/bin/config-validator.js
index 483315ddf2..8782a2e58f 100755
--- a/bin/config-validator.js
+++ b/bin/config-validator.js
@@ -77,10 +77,6 @@ async function validate(desc, config, isPreset = false) {
   } catch (err) {
     // ignore
   }
-  // istanbul ignore if
-  if (global.renovateTimers) {
-    global.renovateTimers.forEach(timer => clearTimeout(timer));
-  }
   if (returnVal !== 0) {
     process.exit(returnVal);
   }
diff --git a/lib/manager/travis/package.js b/lib/manager/travis/package.js
index be01696fc3..0bdcc65991 100644
--- a/lib/manager/travis/package.js
+++ b/lib/manager/travis/package.js
@@ -9,6 +9,7 @@ module.exports = {
 };
 
 let policies;
+let refreshDate;
 
 function generatePolicies() {
   policies = {
@@ -41,32 +42,32 @@ function generatePolicies() {
   policies.lts_latest.push(policies.lts[policies.lts.length - 1]);
 }
 
-const initTime = new Date();
-for (const data of Object.values(nodeJsSchedule)) {
-  const fields = ['start', 'lts', 'maintenance', 'end'];
-  for (const field of fields) {
-    const fieldDate = new Date(data[field]);
-    if (fieldDate > initTime) {
-      const offsetmilliseconds = 1 + fieldDate.getTime() - initTime.getTime();
-      // istanbul ignore if
-      if (offsetmilliseconds < 10000000000) {
-        global.renovateTimers = global.renovateTimers || [];
-        global.renovateTimers.push(
-          setTimeout(generatePolicies, offsetmilliseconds)
-        );
+function checkPolicies() {
+  if (policies && refreshDate > new Date()) {
+    return;
+  }
+  generatePolicies();
+  refreshDate = new Date('3000-01-01'); // y3k
+  const now = new Date();
+  for (const data of Object.values(nodeJsSchedule)) {
+    const fields = ['start', 'lts', 'maintenance', 'end'];
+    for (const field of fields) {
+      const fieldDate = new Date(data[field]);
+      if (fieldDate > now && fieldDate < refreshDate) {
+        refreshDate = fieldDate;
       }
     }
   }
+  logger.debug('Node.js policies refresh date: ' + refreshDate);
 }
 
-generatePolicies();
-
 async function getPackageUpdates(config) {
-  logger.debug('travis.getPackageUpdates()');
+  logger.trace('travis.getPackageUpdates()');
   const { supportPolicy } = config;
   if (!(supportPolicy && supportPolicy.length)) {
     return [];
   }
+  checkPolicies();
   for (const policy of supportPolicy) {
     if (!Object.keys(policies).includes(policy)) {
       logger.warn(`Unknown supportPolicy: ${policy}`);
diff --git a/lib/workers/global/index.js b/lib/workers/global/index.js
index c2bfc8cfa7..f95bb6fcb1 100644
--- a/lib/workers/global/index.js
+++ b/lib/workers/global/index.js
@@ -64,10 +64,6 @@ async function start() {
       await repositoryWorker.renovateRepository(repoConfig);
     }
     logger.setMeta({});
-    // istanbul ignore if
-    if (global.renovateTimers) {
-      global.renovateTimers.forEach(timer => clearTimeout(timer));
-    }
     logger.info(`${appName} finished`);
   } catch (err) /* istanbul ignore next */ {
     logger.fatal({ err }, `Fatal error: ${err.message}`);
-- 
GitLab