diff --git a/.circleci/config.yml b/.circleci/config.yml
index de9af6148c0974617aaf39dab536ff2c24c38a9e..57429a084ea59dea70482c547d7427d5be33509b 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -32,6 +32,7 @@ commands:
           command: |
             yarn lint
             yarn test-schema
+            yarn type-check
 
       - run:
           name: Build
diff --git a/.eslintrc.js b/.eslintrc.js
index 104c5bed6ee77ab46240b70d75e0dc79b2d37351..b45ff30f175af1fd3422c227a8881a0f01e1eccc 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -15,7 +15,7 @@ module.exports = {
     project: './tsconfig.json',
   },
   rules: {
-    'import/no-unresolved': 0, // only required for js, see overrides
+    'import/no-unresolved': 0, // done by typescript
     'require-await': 'error',
     'no-use-before-define': 0,
     'no-restricted-syntax': 0,
@@ -25,6 +25,7 @@ module.exports = {
     'no-underscore-dangle': 0,
 
     // TODO: fix lint
+    'import/prefer-default-export': 1,
     '@typescript-eslint/camelcase': 'off', // disabled until ??
     '@typescript-eslint/no-var-requires': 'off', // disable until all files converted to typescript
     '@typescript-eslint/no-use-before-define': 'off', // disable until all files converted to typescript
@@ -32,17 +33,13 @@ module.exports = {
     '@typescript-eslint/explicit-function-return-type': 0,
     '@typescript-eslint/no-explicit-any': 0,
     '@typescript-eslint/no-non-null-assertion': 0,
-  },
-  overrides: [
-    {
-      // TODO: should be removed in near future, uses around ~50% lint time
-      files: ['*.js'],
-      rules: {
-        'import/no-unresolved': [
-          'error',
-          { commonjs: true, caseSensitive: true },
-        ],
+    '@typescript-eslint/no-unused-vars': [
+      'error',
+      {
+        vars: 'all',
+        args: 'none',
+        ignoreRestSiblings: false,
       },
-    },
-  ],
+    ], // disable until proper interfaced api
+  },
 };
diff --git a/lib/config/decrypt.js b/lib/config/decrypt.js
index 8003289316dd99545e476a7c568c71a92593079a..c5b353a02c5a01e675d986bd4bc9eecd935bbfe4 100644
--- a/lib/config/decrypt.js
+++ b/lib/config/decrypt.js
@@ -1,11 +1,10 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const crypto = require('crypto');
 const { logger } = require('../logger');
 const { maskToken } = require('../util/mask');
 
-module.exports = {
-  decryptConfig,
-};
+export { decryptConfig };
 
 function decryptConfig(config, privateKey) {
   logger.trace({ config }, 'decryptConfig()');
diff --git a/lib/config/massage.js b/lib/config/massage.js
index 6ff9aca252ad0a1f050afa0b53e1d904fd560a69..72b43f3277b45922f3a055f6541bd1b3436cb80e 100644
--- a/lib/config/massage.js
+++ b/lib/config/massage.js
@@ -1,13 +1,12 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const options = require('./definitions').getOptions();
 
 const clone = input => JSON.parse(JSON.stringify(input));
 
 let allowedStrings;
 
-module.exports = {
-  massageConfig,
-};
+export { massageConfig };
 
 // Returns a massaged config
 function massageConfig(config) {
diff --git a/lib/config/migrate-validate.js b/lib/config/migrate-validate.js
index 772d02841c022e1645fc6d53a552295202de12ab..72a29c18d40fd11aa661809001106ff5a64ce999 100644
--- a/lib/config/migrate-validate.js
+++ b/lib/config/migrate-validate.js
@@ -1,12 +1,11 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../logger');
 const configMigration = require('./migration');
 const configMassage = require('./massage');
 const configValidation = require('./validation');
 
-module.exports = {
-  migrateAndValidate,
-};
+export { migrateAndValidate };
 
 async function migrateAndValidate(config, input) {
   logger.debug('migrateAndValidate()');
diff --git a/lib/config/migration.js b/lib/config/migration.js
index bc4d7175b663e4527a640fedac5a2dd5ab0dcaa4..d9724eb0d728ac0b6379bcd474ddf68685c3004a 100644
--- a/lib/config/migration.js
+++ b/lib/config/migration.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const later = require('later');
 const { logger } = require('../logger');
 const options = require('./definitions').getOptions();
@@ -7,9 +8,7 @@ const clone = input => JSON.parse(JSON.stringify(input));
 
 let optionTypes;
 
-module.exports = {
-  migrateConfig,
-};
+export { migrateConfig };
 
 const removedOptions = [
   'maintainYarnLock',
@@ -83,11 +82,13 @@ function migrateConfig(config, parentKey) {
         const fileList = [];
         for (const packageFile of val) {
           if (is.object(packageFile) && !is.array(packageFile)) {
+            // @ts-ignore
             fileList.push(packageFile.packageFile);
             if (Object.keys(packageFile).length > 1) {
               migratedConfig.packageRules = migratedConfig.packageRules || [];
               const payload = migrateConfig(packageFile, key).migratedConfig;
               for (const subrule of payload.packageRules || []) {
+                // @ts-ignore
                 subrule.paths = [packageFile.packageFile];
                 migratedConfig.packageRules.push(subrule);
               }
@@ -96,6 +97,7 @@ function migrateConfig(config, parentKey) {
               if (Object.keys(payload).length) {
                 migratedConfig.packageRules.push({
                   ...payload,
+                  // @ts-ignore
                   paths: [packageFile.packageFile],
                 });
               }
@@ -344,6 +346,7 @@ function migrateConfig(config, parentKey) {
       } else if (key === 'depTypes' && is.array(val)) {
         val.forEach(depType => {
           if (is.object(depType) && !is.array(depType)) {
+            // @ts-ignore
             const depTypeName = depType.depType;
             if (depTypeName) {
               migratedConfig.packageRules = migratedConfig.packageRules || [];
diff --git a/lib/config/presets.js b/lib/config/presets.js
index f8df3b648722f5cd9ba120ceab904c7db13a6f18..9e7ad8bf801fa3aafdce80ee3f1eff3060d6f882 100644
--- a/lib/config/presets.js
+++ b/lib/config/presets.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../logger');
 const configParser = require('./index');
 const massage = require('./massage');
@@ -13,12 +14,7 @@ const datasources = {
   gitlab,
 };
 
-module.exports = {
-  resolveConfigPresets,
-  replaceArgs,
-  parsePreset,
-  getPreset,
-};
+export { resolveConfigPresets, replaceArgs, parsePreset, getPreset };
 
 async function resolveConfigPresets(
   inputConfig,
diff --git a/lib/config/validation-helpers/managers.js b/lib/config/validation-helpers/managers.js
index d6601ba2e2cfd6fc400428f228a34fc2a0156316..500dec3ca2439ba01b02f32f945511f8ac56c6a4 100644
--- a/lib/config/validation-helpers/managers.js
+++ b/lib/config/validation-helpers/managers.js
@@ -1,9 +1,7 @@
 const { getManagerList } = require('../../manager');
 /**
  * Only if type condition or context condition violated then errors array will be mutated to store metadata
- * @param {Obgect} param
- * * {Obgect} param.resolvedRule
- * * {string} param.currentPath
+ * @param {{resolvedRule:any, currentPath: string}} param
  * @returns {Array} with finded error or empty array
  */
 const check = ({ resolvedRule, currentPath }) => {
@@ -17,7 +15,7 @@ const check = ({ resolvedRule, currentPath }) => {
       managersErrMessage = `${currentPath}:
         You have included an unsupported manager in a package rule. Your list: ${
           resolvedRule.managers
-        }. 
+        }.
         Supported managers are: (${getManagerList().join(', ')}).`;
     }
   } else if (typeof resolvedRule.managers !== 'undefined')
diff --git a/lib/config/validation.js b/lib/config/validation.js
index 186b919ebeb49d5902490637c7f5da3a3cb944aa..88d88ed09617da3c8511af50f790ceba2a6fcef7 100644
--- a/lib/config/validation.js
+++ b/lib/config/validation.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const safe = require('safe-regex');
 const options = require('./definitions').getOptions();
 const { resolveConfigPresets } = require('./presets');
@@ -10,9 +11,7 @@ const managerValidator = require('./validation-helpers/managers');
 
 let optionTypes;
 
-module.exports = {
-  validateConfig,
-};
+export { validateConfig };
 
 // istanbul ignore next
 async function validateBaseBranches(config) {
@@ -79,6 +78,7 @@ async function validateConfig(config, isPreset, parentPath) {
     const currentPath = parentPath ? `${parentPath}.${key}` : key;
     if (
       !isIgnored(key) && // We need to ignore some reserved keys
+      // @ts-ignore
       !is.function(val) // Ignore all functions
     ) {
       if (getDeprecationMessage(key)) {
@@ -203,6 +203,7 @@ async function validateConfig(config, isPreset, parentPath) {
               !(val && val.length === 1 && val[0] === '*')
             ) {
               try {
+                // @ts-ignore
                 RegExp(val);
                 if (!safe(val)) {
                   errors.push({
diff --git a/lib/datasource/dart/index.js b/lib/datasource/dart/index.js
index a8b64f54bb35157a6f67eea8b8d1f3c9f5d85151..e8d9f4df4a7978dc1426dbeb1b2625865c244bda 100644
--- a/lib/datasource/dart/index.js
+++ b/lib/datasource/dart/index.js
@@ -2,6 +2,7 @@ const got = require('../../util/got');
 const { logger } = require('../../logger');
 
 async function getPkgReleases({ lookupName }) {
+  /** @type any */
   let result = null;
   const pkgUrl = `https://pub.dartlang.org/api/packages/${lookupName}`;
   let raw = null;
diff --git a/lib/datasource/docker/index.js b/lib/datasource/docker/index.js
index 5685d7e09f85aefe0495936a1cb430012b957183..c232b241be0d0606288a773bf588c792d4d7e1e2 100644
--- a/lib/datasource/docker/index.js
+++ b/lib/datasource/docker/index.js
@@ -1,6 +1,7 @@
+import is from '@sindresorhus/is';
+
 const hasha = require('hasha');
 const URL = require('url');
-const is = require('@sindresorhus/is');
 const parseLinkHeader = require('parse-link-header');
 const wwwAuthenticate = require('www-authenticate');
 const { logger } = require('../../logger');
@@ -8,12 +9,15 @@ const { logger } = require('../../logger');
 const got = require('../../util/got');
 const hostRules = require('../../util/host-rules');
 
-module.exports = {
-  getDigest,
-  getPkgReleases,
-};
+export { getDigest, getPkgReleases };
 
+/**
+ *
+ * @param {string} lookupName
+ * @param {string[]=} registryUrls
+ */
 function getRegistryRepository(lookupName, registryUrls) {
+  /** @type string */
   let registry;
   const split = lookupName.split('/');
   if (split.length > 1 && split[0].includes('.')) {
@@ -50,6 +54,7 @@ async function getAuthHeaders(registry, repository) {
       apiCheckResponse.headers['www-authenticate']
     );
 
+    /** @type any */
     const opts = hostRules.find({ hostType: 'docker', url: apiCheckUrl });
     opts.json = true;
     if (opts.username && opts.password) {
@@ -200,7 +205,7 @@ async function getManifestResponse(registry, repository, tag) {
   }
 }
 
-/*
+/**
  * docker.getDigest
  *
  * The `newValue` supplied here should be a valid tag for the docker image.
@@ -208,8 +213,9 @@ async function getManifestResponse(registry, repository, tag) {
  * This function will:
  *  - Look up a sha256 digest for a tag on its registry
  *  - Return the digest as a string
+ * @param {{registryUrls? : string[], lookupName: string}} args
+ * @param {string=} newValue
  */
-
 async function getDigest({ registryUrls, lookupName }, newValue) {
   const { registry, repository } = getRegistryRepository(
     lookupName,
@@ -451,7 +457,7 @@ async function getLabels(registry, repository, tag) {
   }
 }
 
-/*
+/**
  * docker.getPkgReleases
  *
  * A docker image usually looks something like this: somehost.io/owner/repo:8.1.0-alpine
@@ -461,8 +467,8 @@ async function getLabels(registry, repository, tag) {
  *  - '8.1.0-alpine' is the tag
  *
  * This function will filter only tags that contain a semver version
+ * @param {{lookupName :string, registryUrls?: string[]  }} args
  */
-
 async function getPkgReleases({ lookupName, registryUrls }) {
   const { registry, repository } = getRegistryRepository(
     lookupName,
diff --git a/lib/datasource/github/index.js b/lib/datasource/github/index.js
index e88e9cfc80f892a0e27e9a86b4d79017a80bb40d..e78a10ae5fadb1c00be7f66a2e38028b287b2e8d 100644
--- a/lib/datasource/github/index.js
+++ b/lib/datasource/github/index.js
@@ -1,13 +1,11 @@
-import ghGot from '../../platform/github/gh-got-wrapper';
+import { api } from '../../platform/github/gh-got-wrapper';
 
 const { logger } = require('../../logger');
 const got = require('../../util/got');
 
-module.exports = {
-  getPreset,
-  getDigest,
-  getPkgReleases,
-};
+const ghGot = api.get;
+
+export { getPreset, getDigest, getPkgReleases };
 
 async function fetchJSONFile(repo, fileName) {
   const url = `https://api.github.com/repos/${repo}/contents/${fileName}`;
diff --git a/lib/datasource/gitlab/index.js b/lib/datasource/gitlab/index.js
index 048071a3935f5e1a5384413062312fc6f5dcb151..2168a778e34c3b3d59d58bf53505a907beed0d24 100644
--- a/lib/datasource/gitlab/index.js
+++ b/lib/datasource/gitlab/index.js
@@ -1,12 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
 
 const glGot = require('../../platform/gitlab/gl-got-wrapper').api.get;
 const { logger } = require('../../logger');
 
-module.exports = {
-  getPreset,
-  getPkgReleases,
-};
+export { getPreset, getPkgReleases };
 
 const GitLabApiUrl = 'https://gitlab.com/api/v4/projects';
 
@@ -14,6 +11,7 @@ async function getPreset(pkgName, presetName = 'default') {
   if (presetName !== 'default') {
     throw new Error(
       { pkgName, presetName },
+      // @ts-ignore
       'Sub-preset names are not supported with Gitlab datasource'
     );
   }
@@ -45,6 +43,10 @@ function getCacheKey(depHost, repo, lookupType) {
   return `${depHost}:${repo}:${type}`;
 }
 
+/**
+ *
+ * @param {{registryUrls? : string[], lookupName:string, lookupType:string}} param0
+ */
 async function getPkgReleases({ registryUrls, lookupName: repo, lookupType }) {
   // Use registryUrls if present, otherwise default to publid gitlab.com
   const depHost = is.nonEmptyArray(registryUrls)
diff --git a/lib/datasource/go/index.js b/lib/datasource/go/index.js
index 1b838a3a42aae93cc996a1c4daedce910187058d..e44d1aab7a5429d997843b88672cbee9bb35a5db 100644
--- a/lib/datasource/go/index.js
+++ b/lib/datasource/go/index.js
@@ -74,6 +74,7 @@ async function getPkgReleases({ lookupName }) {
   logger.trace(`go.getPkgReleases(${lookupName})`);
   const source = await getDatasource(lookupName);
   if (source && source.datasource === 'github') {
+    // @ts-ignore
     const res = await github.getPkgReleases(source);
     if (res && res.releases) {
       res.releases = res.releases.filter(
diff --git a/lib/datasource/hex/index.js b/lib/datasource/hex/index.js
index 7f5b7ece41751c9f5f8b206d2dbaf97b6848ae82..3db55774d3017a48a7cd06ed5d06d5391fdf582c 100644
--- a/lib/datasource/hex/index.js
+++ b/lib/datasource/hex/index.js
@@ -15,7 +15,7 @@ function getHostOpts() {
 async function getPkgReleases({ lookupName }) {
   const hexUrl = `https://hex.pm/api/packages/${lookupName}`;
   try {
-    const opts = getHostOpts(hexUrl);
+    const opts = getHostOpts();
     const res = (await got(hexUrl, {
       json: true,
       ...opts,
diff --git a/lib/datasource/maven/index.js b/lib/datasource/maven/index.js
index 6f86f9e0cb8bf563080621dfee8560ed282e9de3..33041c6e12d9be8248e72f91b52d418487df0b5e 100644
--- a/lib/datasource/maven/index.js
+++ b/lib/datasource/maven/index.js
@@ -1,17 +1,20 @@
+import is from '@sindresorhus/is';
+
 const url = require('url');
 const fs = require('fs-extra');
 const { XmlDocument } = require('xmldoc');
-const is = require('@sindresorhus/is');
 const { logger } = require('../../logger');
 
 const { compare } = require('../../versioning/maven/compare');
 const { containsPlaceholder } = require('../../manager/maven/extract');
 const { downloadHttpProtocol } = require('./util');
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
 
+/**
+ *
+ * @param {{lookupName:string, registryUrls?: string[]}} args
+ */
 // eslint-disable-next-line no-unused-vars
 async function getPkgReleases({ lookupName, registryUrls }) {
   const versions = [];
diff --git a/lib/datasource/metadata.js b/lib/datasource/metadata.js
index 85401ce250080a9acc21e359ca5c6b68351a440e..34bdbe97c27ec8e509a0547f75033444ae8eb71e 100644
--- a/lib/datasource/metadata.js
+++ b/lib/datasource/metadata.js
@@ -1,9 +1,8 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const parse = require('github-url-from-git');
 
-module.exports = {
-  addMetaData,
-};
+export { addMetaData };
 
 // Use this object to define changelog URLs for packages
 // Only necessary when the changelog data cannot be found in the package's source repository
diff --git a/lib/datasource/npm/npmrc.js b/lib/datasource/npm/npmrc.js
index bd33b9000d6b13392e02884c4f77cd394eca88a6..d9093a8a0cf98ba87745b4f4dcc3a08ba79d0e61 100644
--- a/lib/datasource/npm/npmrc.js
+++ b/lib/datasource/npm/npmrc.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const ini = require('ini');
 const { isBase64 } = require('validator');
 const { logger } = require('../../logger');
@@ -6,10 +7,7 @@ const { logger } = require('../../logger');
 let npmrc = null;
 let npmrcRaw;
 
-module.exports = {
-  getNpmrc,
-  setNpmrc,
-};
+export { getNpmrc, setNpmrc };
 
 function getNpmrc() {
   return npmrc;
diff --git a/lib/datasource/npm/presets.js b/lib/datasource/npm/presets.js
index bcab3aa0bbfcff9fda5b6daf3aa46f65e53d39ba..b7137f3e0331cefdf5f3f62d575dc8203de65a04 100644
--- a/lib/datasource/npm/presets.js
+++ b/lib/datasource/npm/presets.js
@@ -2,9 +2,7 @@ import { logger } from '../../logger';
 
 const { getDependency } = require('./get');
 
-module.exports = {
-  getPreset,
-};
+export { getPreset };
 
 async function getPreset(pkgName, presetName = 'default') {
   const dep = await getDependency(pkgName);
diff --git a/lib/datasource/npm/releases.js b/lib/datasource/npm/releases.js
index b340ac059c1c1b61f09a595a29550464e7a4b0d6..f2c96a675627edc201340df756beec0fd1be3d75 100644
--- a/lib/datasource/npm/releases.js
+++ b/lib/datasource/npm/releases.js
@@ -5,11 +5,15 @@ module.exports = {
   getPkgReleases,
 };
 
+/**
+ *
+ * @param {{lookupName: string, npmrc?: string}} args
+ */
 async function getPkgReleases({ lookupName, npmrc }) {
   if (npmrc) {
     setNpmrc(npmrc);
   }
-  const res = await getDependency(lookupName, global.testNpmRetries);
+  const res = await getDependency(lookupName);
   if (res) {
     res.tags = res['dist-tags'];
     delete res['dist-tags'];
diff --git a/lib/datasource/packagist/index.js b/lib/datasource/packagist/index.js
index 42772c6c4e56942e85a4d8bc6fbd0f42d46efa97..2eff397eea2b9ab54ce1454c477bbd33f5c335af 100644
--- a/lib/datasource/packagist/index.js
+++ b/lib/datasource/packagist/index.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const URL = require('url');
 const delay = require('delay');
 const parse = require('github-url-from-git');
@@ -8,9 +9,7 @@ const { logger } = require('../../logger');
 const got = require('../../util/got');
 const hostRules = require('../../util/host-rules');
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
 
 function getHostOpts(url) {
   const opts = {
diff --git a/lib/datasource/pypi/index.js b/lib/datasource/pypi/index.js
index 63cc85622311f94ecf0a9f25c29239cd82752722..825824e3d081c72355ad6958472c91c8f19ca6f4 100644
--- a/lib/datasource/pypi/index.js
+++ b/lib/datasource/pypi/index.js
@@ -1,13 +1,12 @@
+import is from '@sindresorhus/is';
+
 const url = require('url');
-const is = require('@sindresorhus/is');
 const { parse } = require('node-html-parser');
 const { logger } = require('../../logger');
 const { matches } = require('../../versioning/pep440');
 const got = require('../../util/got');
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
 
 function normalizeName(input) {
   return input.toLowerCase().replace(/(-|\.)/g, '_');
@@ -28,6 +27,10 @@ function compatibleVersions(releases, compatibility) {
   );
 }
 
+/**
+ *
+ * @param {{compatibility:any, lookupName:string, registryUrls?: string[] }} args
+ */
 async function getPkgReleases({ compatibility, lookupName, registryUrls }) {
   let hostUrls = ['https://pypi.org/pypi/'];
   if (is.nonEmptyArray(registryUrls)) {
@@ -114,6 +117,7 @@ async function getSimpleDependency(depName, hostUrl) {
       return null;
     }
     const root = parse(dep);
+    // @ts-ignore
     const links = root.querySelectorAll('a');
     const versions = new Set();
     for (const link of links) {
diff --git a/lib/datasource/ruby-version/index.js b/lib/datasource/ruby-version/index.js
index 03598f3440f62f1f98281af0793a6b574f7bdcc1..cd2507bbb98feb50a3c13f4122805dec7006a5e9 100644
--- a/lib/datasource/ruby-version/index.js
+++ b/lib/datasource/ruby-version/index.js
@@ -26,6 +26,7 @@ async function getPkgReleases() {
     };
     const response = await got(rubyVersionsUrl);
     const root = parse(response.body);
+    // @ts-ignore
     const rows = root.querySelector('.release-list').querySelectorAll('tr');
     for (const row of rows) {
       const columns = Array.from(
diff --git a/lib/datasource/rubygems/get-rubygems-org.js b/lib/datasource/rubygems/get-rubygems-org.js
index 25eea2834d505ec0aaa5d132829be94e813656c7..4ccdfa726125f792bd0f82cc174b91595a32e055 100644
--- a/lib/datasource/rubygems/get-rubygems-org.js
+++ b/lib/datasource/rubygems/get-rubygems-org.js
@@ -72,6 +72,7 @@ async function updateRubyGemsVersions() {
 }
 
 function isDataStale() {
+  // @ts-ignore
   const minutesElapsed = Math.floor((new Date() - lastSync) / (60 * 1000));
   return minutesElapsed >= 5;
 }
diff --git a/lib/datasource/rubygems/get.js b/lib/datasource/rubygems/get.js
index 0e2c869bc9549fcdf0c19e0d9bfbef69d2294a95..0310497587a8b8ad1e81d777aa5d9be57fcf7aa7 100644
--- a/lib/datasource/rubygems/get.js
+++ b/lib/datasource/rubygems/get.js
@@ -39,7 +39,7 @@ const fetch = async ({ dependency, registry, path }) => {
   const json = true;
 
   const retry = retriable();
-  const headers = getHeaders(registry);
+  const headers = getHeaders();
 
   const name = `/${dependency}.json`;
   const baseUrl = `${registry}/${path}`;
diff --git a/lib/datasource/rubygems/releases.js b/lib/datasource/rubygems/releases.js
index 3e1af2632851f7cb801e42ef79d0160ce7f41c67..f7c8f1cf8905b735999bac45b29d9b562e192e47 100644
--- a/lib/datasource/rubygems/releases.js
+++ b/lib/datasource/rubygems/releases.js
@@ -1,9 +1,11 @@
-const { nonEmptyArray } = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { getDependency } = require('./get');
 const { getRubygemsOrgDependency } = require('./get-rubygems-org');
 
+/** @param {{lookupName:string, registryUrls?: string[]}} opt */
 async function getPkgReleases({ lookupName, registryUrls }) {
-  const registries = nonEmptyArray(registryUrls) ? registryUrls : [];
+  const registries = is.nonEmptyArray(registryUrls) ? registryUrls : [];
 
   for (const registry of registries) {
     let pkg;
@@ -20,6 +22,4 @@ async function getPkgReleases({ lookupName, registryUrls }) {
   return null;
 }
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
diff --git a/lib/datasource/rubygems/retriable.js b/lib/datasource/rubygems/retriable.js
index dea324b7735ec4d5011de8f463097a04e8be0bb8..1f91ecd27ee3016d2828912282406f4b2e21363d 100644
--- a/lib/datasource/rubygems/retriable.js
+++ b/lib/datasource/rubygems/retriable.js
@@ -11,7 +11,7 @@ const RETRY_AFTER = 600;
 const NUMBER_OF_RETRIES = 5;
 
 const getDelayStep = () =>
-  process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP || 1000;
+  parseInt(process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP || '1000', 10);
 
 const toMs = value => parseInt(value, 10) * getDelayStep();
 const getBannedDelay = retryAfter => (retryAfter || RETRY_AFTER) + 1;
diff --git a/lib/datasource/terraform/index.js b/lib/datasource/terraform/index.js
index 0a378b4f02b5cf6f3bc8f6d9850b89213e14fada..949f035c34667861be4abb9582216893eebabdef 100644
--- a/lib/datasource/terraform/index.js
+++ b/lib/datasource/terraform/index.js
@@ -1,12 +1,11 @@
+import is from '@sindresorhus/is';
+
 const parse = require('github-url-from-git');
-const is = require('@sindresorhus/is');
 const { logger } = require('../../logger');
 
 const got = require('../../util/got');
 
-module.exports = {
-  getPkgReleases,
-};
+export { getPkgReleases };
 
 function getRegistryRepository(lookupName, registryUrls) {
   let registry;
diff --git a/lib/logger/config-serializer.js b/lib/logger/config-serializer.js
index 123ce383796171f03a25e4732e844064ed60e035..6c81673f6e4f54a79fe2a5a7c4a641eb27e8b397 100644
--- a/lib/logger/config-serializer.js
+++ b/lib/logger/config-serializer.js
@@ -23,23 +23,26 @@ function configSerializer(config) {
     'yarnLockParsed',
   ];
   const arrayFields = ['packageFiles', 'upgrades'];
-  // eslint-disable-next-line array-callback-return
-  return traverse(config).map(function scrub(val) {
-    if (val && redactedFields.includes(this.key)) {
-      this.update('***********');
+  return traverse(config).map(
+    /** @this {{key:string, update: (val:any) => void}} */
+    // eslint-disable-next-line array-callback-return
+    function scrub(val) {
+      if (val && redactedFields.includes(this.key)) {
+        this.update('***********');
+      }
+      if (val && templateFields.includes(this.key)) {
+        this.update('[Template]');
+      }
+      if (val && contentFields.includes(this.key)) {
+        this.update('[content]');
+      }
+      if (val && this.key === 'releases') {
+        this.update(val.map(release => release.version));
+      }
+      // istanbul ignore if
+      if (val && arrayFields.includes(this.key)) {
+        this.update('[Array]');
+      }
     }
-    if (val && templateFields.includes(this.key)) {
-      this.update('[Template]');
-    }
-    if (val && contentFields.includes(this.key)) {
-      this.update('[content]');
-    }
-    if (val && this.key === 'releases') {
-      this.update(val.map(release => release.version));
-    }
-    // istanbul ignore if
-    if (val && arrayFields.includes(this.key)) {
-      this.update('[Array]');
-    }
-  });
+  );
 }
diff --git a/lib/logger/err-serializer.js b/lib/logger/err-serializer.js
index b18605afaf49f28fb80ff15e6e42ed80e5176cc1..79b425ab44f87d1aebab3eb2f333296c47e7874e 100644
--- a/lib/logger/err-serializer.js
+++ b/lib/logger/err-serializer.js
@@ -1,8 +1,6 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
 
-module.exports = errSerializer;
-
-function errSerializer(err) {
+export default function errSerializer(err) {
   const response = {
     ...err,
   };
diff --git a/lib/manager/composer/artifacts.js b/lib/manager/composer/artifacts.js
index 9af10932809d2567889b205273e6289347779097..2e971d44b2b881d418933b013e07366340738813 100644
--- a/lib/manager/composer/artifacts.js
+++ b/lib/manager/composer/artifacts.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const URL = require('url');
 const { exec } = require('child-process-promise');
 const fs = require('fs-extra');
@@ -7,9 +8,7 @@ const { logger } = require('../../logger');
 const hostRules = require('../../util/host-rules');
 const { getChildProcessEnv } = require('../../util/env');
 
-module.exports = {
-  updateArtifacts,
-};
+export { updateArtifacts };
 
 async function updateArtifacts(
   packageFileName,
diff --git a/lib/manager/composer/extract.js b/lib/manager/composer/extract.js
index a650d18f037de3e541c9ac1ad2f5bfb75a6473a5..b67da65a068d8d6429d4c51e86dd2fb180fa58fa 100644
--- a/lib/manager/composer/extract.js
+++ b/lib/manager/composer/extract.js
@@ -1,10 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../../logger');
 const semverComposer = require('../../versioning/composer');
 
-module.exports = {
-  extractPackageFile,
-};
+export { extractPackageFile };
 
 async function extractPackageFile(content, fileName) {
   logger.trace(`composer.extractPackageFile(${fileName})`);
diff --git a/lib/manager/dockerfile/extract.js b/lib/manager/dockerfile/extract.js
index afd04dc1320de8783ef2d75f24f7664d664a57de..6972faf3310474745f622bb032b58b951b51d9e0 100644
--- a/lib/manager/dockerfile/extract.js
+++ b/lib/manager/dockerfile/extract.js
@@ -36,6 +36,7 @@ function splitImageParts(currentFrom) {
 }
 
 function getDep(currentFrom) {
+  /** @type any */
   const dep = {
     ...splitImageParts(currentFrom),
     currentFrom,
diff --git a/lib/manager/github-actions/extract.js b/lib/manager/github-actions/extract.js
index 6e04847e0711a6584b3c827327a9e1ecd03fb410..3e668af6653a5cb26f5e4240fa04789bd62cd715 100644
--- a/lib/manager/github-actions/extract.js
+++ b/lib/manager/github-actions/extract.js
@@ -13,6 +13,7 @@ function extractPackageFile(content) {
     const match = line.match(/^\s+uses = "docker:\/\/([^"]+)"\s*$/);
     if (match) {
       const currentFrom = match[1];
+      /** @type any */
       const dep = getDep(currentFrom);
       logger.debug(
         {
diff --git a/lib/manager/gitlabci-include/extract.js b/lib/manager/gitlabci-include/extract.js
index 8427ff767d21d191c195c62fbe5c23ad05814be8..9fdcd29879d32f1b023f7fbd62b7bfeed5118a86 100644
--- a/lib/manager/gitlabci-include/extract.js
+++ b/lib/manager/gitlabci-include/extract.js
@@ -1,11 +1,10 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const yaml = require('js-yaml');
 
 const { logger } = require('../../logger');
 
-module.exports = {
-  extractPackageFile,
-};
+export { extractPackageFile };
 
 function extractDepFromInclude(includeObj) {
   if (!includeObj.file || !includeObj.project) {
diff --git a/lib/manager/gitlabci/extract.js b/lib/manager/gitlabci/extract.js
index 66dbe232216293b5b95de6383ef198e55fc1e58c..ff3480247ce2299a50c1fefe80f3a329acea0175 100644
--- a/lib/manager/gitlabci/extract.js
+++ b/lib/manager/gitlabci/extract.js
@@ -24,6 +24,7 @@ function extractPackageFile(content) {
               lineNumber += 1;
               logger.trace(`Matched image name on line ${lineNumber}`);
               const currentFrom = imageNameMatch[1];
+              /** @type any */
               const dep = getDep(currentFrom);
               dep.lineNumber = lineNumber;
               dep.depType = 'image-name';
@@ -34,6 +35,7 @@ function extractPackageFile(content) {
           default: {
             logger.trace(`Matched image on line ${lineNumber}`);
             const currentFrom = imageMatch[1];
+            /** @type any */
             const dep = getDep(currentFrom);
             dep.lineNumber = lineNumber;
             dep.depType = 'image';
@@ -57,6 +59,7 @@ function extractPackageFile(content) {
             foundImage = true;
             const currentFrom = serviceImageMatch[1];
             lineNumber += 1;
+            /** @type any */
             const dep = getDep(currentFrom);
             dep.lineNumber = lineNumber;
             dep.depType = 'service-image';
diff --git a/lib/manager/kubernetes/extract.js b/lib/manager/kubernetes/extract.js
index 36391926d980a7b0b0e2f8cbc641dbc172413fda..4e79fae8caa56128968d6b3ccef0edab98247165 100644
--- a/lib/manager/kubernetes/extract.js
+++ b/lib/manager/kubernetes/extract.js
@@ -20,6 +20,7 @@ function extractPackageFile(content) {
     const match = line.match(/^\s*-?\s*image:\s*'?"?([^\s'"]+)'?"?\s*$/);
     if (match) {
       const currentFrom = match[1];
+      /** @type any */
       const dep = getDep(currentFrom);
       logger.debug(
         {
diff --git a/lib/manager/maven/extract.js b/lib/manager/maven/extract.js
index 9d10255eab9c31dc4248861984989a40d2567035..e8af7a6c1c9ae7d43c5e72087d016553cc9cf580 100644
--- a/lib/manager/maven/extract.js
+++ b/lib/manager/maven/extract.js
@@ -195,6 +195,7 @@ function resolveProps(packages) {
       pkg = extractedPackages[pkg.parent];
     }
     hierarchy.unshift({});
+    // @ts-ignore
     extractedProps[name] = Object.assign.apply(null, hierarchy);
   });
 
diff --git a/lib/manager/npm/extract/monorepo.js b/lib/manager/npm/extract/monorepo.js
index 1f9cdbf112bd01686236e4631fb65001b05e5771..e678bb461b402d30c9bc03676a1ca1e626c5ed06 100644
--- a/lib/manager/npm/extract/monorepo.js
+++ b/lib/manager/npm/extract/monorepo.js
@@ -1,12 +1,11 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const minimatch = require('minimatch');
 const path = require('path');
 const upath = require('upath');
 const { logger } = require('../../../logger');
 
-module.exports = {
-  detectMonorepos,
-};
+export { detectMonorepos };
 
 function matchesAnyPattern(val, patterns) {
   const res = patterns.some(
diff --git a/lib/manager/npm/post-update/index.js b/lib/manager/npm/post-update/index.js
index bde075d86d35cfe56db9c3aac0b6d03da585101c..c7ffd9fa2a742f2948b9859200fb1675481e5bd5 100644
--- a/lib/manager/npm/post-update/index.js
+++ b/lib/manager/npm/post-update/index.js
@@ -1,7 +1,8 @@
+import is from '@sindresorhus/is';
+
 const fs = require('fs-extra');
 const path = require('path');
 const upath = require('upath');
-const is = require('@sindresorhus/is');
 const { logger } = require('../../../logger');
 const npm = require('./npm');
 const lerna = require('./lerna');
@@ -10,7 +11,7 @@ const pnpm = require('./pnpm');
 const hostRules = require('../../../util/host-rules');
 const { getChildProcessEnv } = require('../../../util/env');
 
-module.exports = {
+export {
   determineLockFileDirs,
   writeExistingFiles,
   writeUpdatedPackageFiles,
@@ -353,7 +354,7 @@ async function getAdditionalFiles(config, packageFiles) {
   const dirs = module.exports.determineLockFileDirs(config, packageFiles);
   logger.debug({ dirs }, 'lock file dirs');
   await module.exports.writeExistingFiles(config, packageFiles);
-  await module.exports.writeUpdatedPackageFiles(config, packageFiles);
+  await module.exports.writeUpdatedPackageFiles(config);
 
   process.env.NPM_CONFIG_CACHE =
     process.env.NPM_CONFIG_CACHE || upath.join(config.cacheDir, './others/npm');
diff --git a/lib/manager/pip_setup/extract.js b/lib/manager/pip_setup/extract.js
index b085288e6ca88e8c74003e355813eebc0c5cd877..c7e5eaa70abe3c6a879b095eedb1f2f888778c21 100644
--- a/lib/manager/pip_setup/extract.js
+++ b/lib/manager/pip_setup/extract.js
@@ -135,7 +135,9 @@ async function extractPackageFile(content, packageFile, config) {
     .filter(Boolean)
     .sort((a, b) =>
       a.lineNumber === b.lineNumber
-        ? (a.depName > b.depName) - (a.depName < b.depName)
+        ? // TODO: dummy comment for prettier
+          // @ts-ignore
+          (a.depName > b.depName) - (a.depName < b.depName)
         : a.lineNumber - b.lineNumber
     );
   // istanbul ignore if
diff --git a/lib/manager/pipenv/extract.js b/lib/manager/pipenv/extract.js
index 4c81528f153758a60fa2b295073ab0d802698333..c95cf9e47b5ca2ae1b6d88dfe2c63bacb361a243 100644
--- a/lib/manager/pipenv/extract.js
+++ b/lib/manager/pipenv/extract.js
@@ -1,5 +1,6 @@
+import is from '@sindresorhus/is';
+
 const toml = require('toml');
-const is = require('@sindresorhus/is');
 
 // based on https://www.python.org/dev/peps/pep-0508/#names
 const packageRegex = /^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])$/i;
@@ -12,9 +13,7 @@ const specifierPartPattern = `\\s*${rangePattern.replace(
 )}\\s*`;
 const specifierPattern = `${specifierPartPattern}(?:,${specifierPartPattern})*`;
 
-module.exports = {
-  extractPackageFile,
-};
+export { extractPackageFile };
 
 function extractPackageFile(content) {
   logger.debug('pipenv.extractPackageFile()');
diff --git a/lib/manager/pub/extract.js b/lib/manager/pub/extract.js
index 5dcac29ade29878a752b01b7e54361ae09f666a2..99bce6dc9bb805a1dfff923d9ef9dca42cb13613 100644
--- a/lib/manager/pub/extract.js
+++ b/lib/manager/pub/extract.js
@@ -22,6 +22,7 @@ function getDeps(depsObj, preset = {}) {
       currentValue = section.version.toString();
     }
 
+    /** @type any */
     const dep = { ...preset, depName, currentValue };
     if (!currentValue) {
       dep.skipReason = 'not-a-version';
diff --git a/lib/manager/travis/extract.js b/lib/manager/travis/extract.js
index ab9a374814608a96172b1ee181342b040e6c82f4..682f7506f700c1d02674d9d09a15149e1a4a7d61 100644
--- a/lib/manager/travis/extract.js
+++ b/lib/manager/travis/extract.js
@@ -1,9 +1,8 @@
+import is from '@sindresorhus/is';
+
 const yaml = require('js-yaml');
-const is = require('@sindresorhus/is');
 
-module.exports = {
-  extractPackageFile,
-};
+export { extractPackageFile };
 
 function extractPackageFile(content) {
   const doc = yaml.safeLoad(content);
diff --git a/lib/manager/travis/package.js b/lib/manager/travis/package.js
index 78c00e7caedef8c71d73231e18c17e660deea7c4..bb5370eba139200b2ab1c092dc9ea799b353b0a7 100644
--- a/lib/manager/travis/package.js
+++ b/lib/manager/travis/package.js
@@ -1,13 +1,12 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { isEqual } = require('lodash');
 const { getPkgReleases } = require('../../datasource');
 const { isVersion, maxSatisfyingVersion } = require('../../versioning/semver');
 const { logger } = require('../../logger');
 const nodeJsSchedule = require('../../../data/node-js-schedule.json');
 
-module.exports = {
-  getPackageUpdates,
-};
+export { getPackageUpdates };
 
 let policies;
 let refreshDate;
diff --git a/lib/manager/travis/update.js b/lib/manager/travis/update.js
index f3c94aca9ccd70d7f57f3913417c250b0beb13e2..44e8d31a165616ec18065e4888fbc20443e04a2d 100644
--- a/lib/manager/travis/update.js
+++ b/lib/manager/travis/update.js
@@ -1,10 +1,9 @@
+import is from '@sindresorhus/is';
+
 const detectIndent = require('detect-indent');
-const is = require('@sindresorhus/is');
 const { logger } = require('../../logger');
 
-module.exports = {
-  updateDependency,
-};
+export { updateDependency };
 
 function updateDependency(fileContent, upgrade) {
   try {
diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts
index fe56b4e271011c6d1e82a4c47e1816376bbe61cf..d8ad3e570bfcd9994a45eac5f432e24a140c8bf3 100644
--- a/lib/platform/github/index.ts
+++ b/lib/platform/github/index.ts
@@ -29,6 +29,12 @@ interface Pr {
   branchName: string;
   number: number;
   comments: Comment[];
+
+  createdAt: string;
+
+  sha: string;
+
+  sourceRepo: string;
 }
 
 interface RepoConfig {
@@ -507,7 +513,7 @@ export function getFile(filePath: string, branchName?: string) {
 }
 
 // istanbul ignore next
-export function deleteBranch(branchName: string) {
+export function deleteBranch(branchName: string, closePr?: boolean) {
   return config.storage.deleteBranch(branchName);
 }
 
@@ -665,7 +671,7 @@ export async function setBranchStatus(
   context: string,
   description: string,
   state: string,
-  targetUrl: string
+  targetUrl?: string
 ) {
   // istanbul ignore if
   if (config.parentRepo) {
@@ -1274,7 +1280,7 @@ async function getOpenPrs() {
         json: false,
       };
       const res = JSON.parse((await api.post(url, options)).body);
-      const prNumbers = [];
+      const prNumbers: number[] = [];
       // istanbul ignore if
       if (!res.data) {
         logger.info({ query, res }, 'No graphql res.data');
@@ -1399,7 +1405,7 @@ async function getClosedPrs() {
         json: false,
       };
       const res = JSON.parse((await api.post(url, options)).body);
-      const prNumbers = [];
+      const prNumbers: number[] = [];
       // istanbul ignore if
       if (!res.data) {
         logger.info(
@@ -1555,7 +1561,7 @@ export async function getPrFiles(prNo: number) {
   return files.map((f: { filename: string }) => f.filename);
 }
 
-export async function updatePr(prNo: number, title: string, body: string) {
+export async function updatePr(prNo: number, title: string, body?: string) {
   logger.debug(`updatePr(${prNo}, ${title}, body)`);
   const patchBody: any = { title };
   if (body) {
diff --git a/lib/types.d.ts b/lib/types.d.ts
index 3ce19ad72db1945d62e5fedd04555ba047830f66..edca5fb38c671fd9c6442214cb9d508af8ebdfa3 100644
--- a/lib/types.d.ts
+++ b/lib/types.d.ts
@@ -1,6 +1,23 @@
-declare namespace Renovate {}
+declare namespace Renovate {
+  interface Cache {
+    get<T = any>(namespace: string, key: string): Promise<T>;
+    rm(namespace: string, key: string): Promise<void>;
+    rmAll(): Promise<void>;
+
+    set<T = any>(
+      namespace: string,
+      key: string,
+      value: T,
+      ttlMinutes?: number
+    ): Promise<void>;
+  }
+}
 
 declare interface Error {
+  configFile?: string;
+
+  statusCode?: number;
+
   validationError?: string;
   validationMessage?: string;
 }
@@ -13,5 +30,23 @@ declare namespace NodeJS {
     renovateVersion: string;
     // TODO: declare interface for all platforms
     platform: typeof import('./platform/github');
+
+    renovateCache: Renovate.Cache;
+
+    repoCache: Record<string, any>;
+
+    trustLevel?: string;
+
+    updateRubyGemsVersions?: Promise<void>;
   }
 }
+
+declare let platform: typeof import('./platform/github');
+
+declare let renovateCache: Renovate.Cache;
+
+// can't use `resolveJsonModule` because it will copy json files and change dist path
+declare module '*.json' {
+  const value: any;
+  export = value;
+}
diff --git a/lib/util/got/auth.js b/lib/util/got/auth.js
index 77311e45cc748abd7f7d24bc89872b6b5115e918..069c98bfc98666f07f3d850f91d645758660b023 100644
--- a/lib/util/got/auth.js
+++ b/lib/util/got/auth.js
@@ -2,6 +2,7 @@ const got = require('got');
 const { logger } = require('../../logger');
 
 // istanbul ignore next
+// @ts-ignore
 module.exports = got.create({
   options: {},
   handler: (options, next) => {
diff --git a/lib/util/got/cache-get.js b/lib/util/got/cache-get.js
index 82c3049a721e9d80dc4ddeb3430d58bb59175b60..93e4e4aebd2402bc5b3032c6274e6b49ced22b0a 100644
--- a/lib/util/got/cache-get.js
+++ b/lib/util/got/cache-get.js
@@ -7,6 +7,7 @@ const clone = input => JSON.parse(JSON.stringify(input));
 // With this caching, it means every GET request is cached during each repository run
 
 // istanbul ignore next
+// @ts-ignore
 module.exports = got.create({
   options: {},
   handler: (options, next) => {
diff --git a/lib/util/got/host-rules.js b/lib/util/got/host-rules.js
index bed682ab0a69a5b629e5d024fea497f69c065c08..61762f6837ac597b7eec31b84327f7396066ca0e 100644
--- a/lib/util/got/host-rules.js
+++ b/lib/util/got/host-rules.js
@@ -6,6 +6,7 @@ const hostRules = require('../host-rules');
 // Apply host rules to requests
 
 // istanbul ignore next
+// @ts-ignore
 module.exports = got.create({
   options: {},
   handler: (options, next) => {
diff --git a/lib/util/got/index.js b/lib/util/got/index.js
index 92e03756d03bc0ee1f473a8748ca61dda4ea0da7..06a94285c2b92501fd42696cc8ce7433ba4b559c 100644
--- a/lib/util/got/index.js
+++ b/lib/util/got/index.js
@@ -13,6 +13,7 @@ const stats = require('./stats');
  * Important: always put the renovateAgent one last, to make sure the correct user agent is used
  */
 
+// @ts-ignore
 module.exports = got.mergeInstances(
   cacheGet,
   renovateAgent,
diff --git a/lib/util/got/stats.js b/lib/util/got/stats.js
index cf723302d713690badb6312554d13d296fa87425..f04d5da553f2625656e2c9f54d0908e067b6e1cf 100644
--- a/lib/util/got/stats.js
+++ b/lib/util/got/stats.js
@@ -26,12 +26,14 @@ module.exports.printStats = () => {
   logger.debug({ hostStats }, 'Host request stats (milliseconds)');
 };
 
+// @ts-ignore
 module.exports.instance = got.create({
   options: {},
   handler: (options, next) => {
     const start = new Date();
     const nextPromise = next(options);
     nextPromise.on('response', () => {
+      // @ts-ignore
       const elapsed = new Date() - start;
       stats[options.hostname] = stats[options.hostname] || [];
       stats[options.hostname].push(elapsed);
diff --git a/lib/util/host-rules.ts b/lib/util/host-rules.ts
index 5299e163a36a8e72517663fde585377af9bb6f63..beb26180d7eb34c8d8641d14108076217355886d 100644
--- a/lib/util/host-rules.ts
+++ b/lib/util/host-rules.ts
@@ -6,10 +6,13 @@ export interface HostRule {
   hostType?: string;
   domainName?: string;
   hostName?: string;
+  json?: true;
   baseUrl?: string;
   token?: string;
   username?: string;
   password?: string;
+
+  timeout?: number;
 }
 
 let hostRules: HostRule[] = [];
@@ -29,7 +32,7 @@ export function add(params: HostRule) {
 
 export interface HostRuleSearch {
   hostType?: string;
-  url: string;
+  url?: string;
 }
 
 function isEmptyRule(rule: HostRule) {
diff --git a/lib/workers/branch/commit.js b/lib/workers/branch/commit.js
index 85aaffdf79e0e6771b56ec5505052b9e70189278..ae1e3fdad1ad92518206ec41a8d5955c909e1e43 100644
--- a/lib/workers/branch/commit.js
+++ b/lib/workers/branch/commit.js
@@ -1,10 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const minimatch = require('minimatch');
 const { logger } = require('../../logger');
 
-module.exports = {
-  commitFilesToBranch,
-};
+export { commitFilesToBranch };
 
 async function commitFilesToBranch(config) {
   let updatedFiles = config.updatedPackageFiles.concat(config.updatedArtifacts);
@@ -30,15 +29,13 @@ async function commitFilesToBranch(config) {
       logger.info('DRY-RUN: Would commit files to branch ' + config.branchName);
     } else {
       // API will know whether to create new branch or not
-      const res = await platform.commitFilesToBranch(
+      await platform.commitFilesToBranch(
         config.branchName,
         updatedFiles,
         config.commitMessage,
         config.baseBranch || undefined
       );
-      if (res) {
-        logger.info({ branch: config.branchName }, `Branch ${res}`);
-      }
+      logger.info({ branch: config.branchName }, `files committed`);
     }
   } else {
     logger.debug(`No files to commit`);
diff --git a/lib/workers/branch/get-updated.js b/lib/workers/branch/get-updated.js
index 7265e2aa69b11ccb8e67e610b70525648054a469..7e0cc6240c46557823138d86c4ac6634fd5433ec 100644
--- a/lib/workers/branch/get-updated.js
+++ b/lib/workers/branch/get-updated.js
@@ -1,10 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../../logger');
 const { get } = require('../../manager');
 
-module.exports = {
-  getUpdatedPackageFiles,
-};
+export { getUpdatedPackageFiles };
 
 async function getUpdatedPackageFiles(config) {
   logger.debug('manager.getUpdatedPackageFiles()');
@@ -83,6 +82,7 @@ async function getUpdatedPackageFiles(config) {
       );
       if (is.nonEmptyArray(results)) {
         for (const res of results) {
+          // @ts-ignore
           const { file, artifactError } = res;
           if (file) {
             updatedArtifacts.push(file);
@@ -110,6 +110,7 @@ async function getUpdatedPackageFiles(config) {
         );
         if (is.nonEmptyArray(results)) {
           for (const res of results) {
+            // @ts-ignore
             const { file, artifactError } = res;
             if (file) {
               updatedArtifacts.push(file);
diff --git a/lib/workers/branch/schedule.js b/lib/workers/branch/schedule.js
index 5a1d37d67f7132ec654a81a0c921e88a155041ba..4ce8a67136d20ea78520bc667f90fe1c23f6c5a2 100644
--- a/lib/workers/branch/schedule.js
+++ b/lib/workers/branch/schedule.js
@@ -1,13 +1,10 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const later = require('later');
 const moment = require('moment-timezone');
 const { logger } = require('../../logger');
 
-module.exports = {
-  hasValidTimezone,
-  hasValidSchedule,
-  isScheduledNow,
-};
+export { hasValidTimezone, hasValidSchedule, isScheduledNow };
 
 const scheduleMappings = {
   'every month': 'before 3am on the first day of the month',
@@ -64,7 +61,7 @@ function hasValidSchedule(schedule) {
     // If any fail then we invalidate the whole thing
     return [false, message];
   }
-  return [true];
+  return [true, ''];
 }
 
 function isScheduledNow(config) {
@@ -88,6 +85,7 @@ function isScheduledNow(config) {
   }
   const [validSchedule, errorMessage] = hasValidSchedule(configSchedule);
   if (!validSchedule) {
+    // @ts-ignore
     logger.warn(errorMessage);
     return true;
   }
@@ -98,6 +96,7 @@ function isScheduledNow(config) {
     logger.debug({ timezone: config.timezone }, 'Found timezone');
     const [validTimezone, error] = hasValidTimezone(config.timezone);
     if (!validTimezone) {
+      // @ts-ignore
       logger.warn(error);
       return true;
     }
diff --git a/lib/workers/global/autodiscover.js b/lib/workers/global/autodiscover.js
index 1eeb4d25370db38bb9606118579bbefd4493930d..a4405e8c04e37e9993fa5cca7f66827e6e758313 100644
--- a/lib/workers/global/autodiscover.js
+++ b/lib/workers/global/autodiscover.js
@@ -1,10 +1,9 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const minimatch = require('minimatch');
 const { logger } = require('../../logger');
 
-module.exports = {
-  autodiscoverRepositories,
-};
+export { autodiscoverRepositories };
 
 async function autodiscoverRepositories(config) {
   if (!config.autodiscover) {
diff --git a/lib/workers/global/index.js b/lib/workers/global/index.js
index 8c16d80249ad58e1df45f26a7b3f686797c4974a..a960078cf5ec39cd2d0411ce399b68d9aac87675 100644
--- a/lib/workers/global/index.js
+++ b/lib/workers/global/index.js
@@ -1,6 +1,7 @@
+import is from '@sindresorhus/is';
+
 const fs = require('fs-extra');
 const os = require('os');
-const is = require('@sindresorhus/is');
 const path = require('path');
 const { logger, setMeta } = require('../../logger');
 const configParser = require('../../config');
@@ -12,10 +13,7 @@ const { initPlatform } = require('../../platform');
 const hostRules = require('../../util/host-rules');
 const { printStats } = require('../../util/got/stats');
 
-module.exports = {
-  start,
-  getRepositoryConfig,
-};
+export { start, getRepositoryConfig };
 
 async function start() {
   try {
@@ -82,6 +80,7 @@ async function start() {
 // istanbul ignore next
 function detectRenovateVersion() {
   try {
+    // @ts-ignore
     global.renovateVersion = require('../../../package.json').version; // eslint-disable-line global-require
   } catch (err) {
     logger.debug({ err }, 'Error getting renovate version');
diff --git a/lib/workers/pr/changelog/release-notes.js b/lib/workers/pr/changelog/release-notes.js
index 2a85c223baa724e71a80f936ca3233efec155f4f..d5f280eebc14623e88879a0f2da43269a48e17e1 100644
--- a/lib/workers/pr/changelog/release-notes.js
+++ b/lib/workers/pr/changelog/release-notes.js
@@ -1,14 +1,16 @@
-import ghGot from '../../../platform/github/gh-got-wrapper';
+import { api } from '../../../platform/github/gh-got-wrapper';
 
 const changelogFilenameRegex = require('changelog-filename-regex');
 const { linkify } = require('linkify-markdown');
 const MarkdownIt = require('markdown-it');
 const { logger } = require('../../../logger');
 
+const ghGot = api.get;
+
 const markdown = new MarkdownIt('zero');
 markdown.enable(['heading', 'lheading']);
 
-module.exports = {
+export {
   getReleaseList,
   massageBody,
   getReleaseNotesMd,
diff --git a/lib/workers/pr/changelog/source-github.js b/lib/workers/pr/changelog/source-github.js
index 214e478490a2bd5e2f4e356cec1b5ae218bce831..6b9fb35273a748dd3287fa402bd097c86b84d714 100644
--- a/lib/workers/pr/changelog/source-github.js
+++ b/lib/workers/pr/changelog/source-github.js
@@ -1,4 +1,4 @@
-import ghGot from '../../../platform/github/gh-got-wrapper';
+import { api } from '../../../platform/github/gh-got-wrapper';
 
 const URL = require('url');
 const { logger } = require('../../../logger');
@@ -6,9 +6,9 @@ const hostRules = require('../../../util/host-rules');
 const versioning = require('../../../versioning');
 const { addReleaseNotes } = require('./release-notes');
 
-module.exports = {
-  getChangeLogJSON,
-};
+const ghGot = api.get;
+
+export { getChangeLogJSON };
 
 async function getTags(endpoint, versionScheme, repository) {
   let url = endpoint
@@ -72,6 +72,7 @@ async function getChangeLogJSON({
   const githubApiBaseURL = sourceUrl.startsWith('https://github.com/')
     ? 'https://api.github.com/'
     : endpoint; // TODO FIX
+  // @ts-ignore
   const repository = pathname.slice(1).replace(/\/$/, '');
   if (repository.split('/').length !== 2) {
     logger.info({ sourceUrl }, 'Invalid github URL found');
diff --git a/lib/workers/pr/pr-body.js b/lib/workers/pr/pr-body.js
index c03bc443566865609b0b44676c6b0364d64e5d4d..b400bb210cc662a01b7d6b8561e1bcdc1ca26100 100644
--- a/lib/workers/pr/pr-body.js
+++ b/lib/workers/pr/pr-body.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const handlebars = require('handlebars');
 const { logger } = require('../../logger');
 const releaseNotesHbs = require('./changelog/hbs-template');
@@ -10,9 +11,7 @@ const { appName, appSlug } = require('../../config/app-strings');
 
 handlebars.registerHelper('encodeURIComponent', encodeURIComponent);
 
-module.exports = {
-  getPrBody,
-};
+export { getPrBody };
 
 function getTableDefinition(config) {
   const res = [];
diff --git a/lib/workers/repository/finalise/validate.js b/lib/workers/repository/finalise/validate.js
index dd26a2e31315e07faf9aa247d0fc3f80a2b79714..ade9c898dadc1c9a0762161712fb47b3f690f3f8 100644
--- a/lib/workers/repository/finalise/validate.js
+++ b/lib/workers/repository/finalise/validate.js
@@ -52,7 +52,10 @@ async function validatePrs(config) {
           if (file.endsWith('.json5')) {
             parsed = JSON5.parse(content);
           } else {
-            parsed = JSON.parse(content);
+            parsed = JSON.parse(
+              // @ts-ignore
+              content
+            );
           }
         } catch (err) {
           validations.push({
diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js
index c206adc3f1a7521dd5ab469ac29676d0da18e327..83e1c094195a0783e8525398cd3d0f29211f7a65 100644
--- a/lib/workers/repository/index.js
+++ b/lib/workers/repository/index.js
@@ -1,7 +1,6 @@
 import handleError from './error';
 
 const fs = require('fs-extra');
-
 const { logger, setMeta } = require('../../logger');
 const { initRepo } = require('./init');
 const { ensureOnboardingPr } = require('./onboarding/pr');
@@ -10,9 +9,7 @@ const { processRepo } = require('./process');
 const { finaliseRepo } = require('./finalise');
 const { ensureMasterIssue } = require('./master-issue');
 
-module.exports = {
-  renovateRepository,
-};
+export { renovateRepository };
 
 // istanbul ignore next
 async function renovateRepository(repoConfig) {
diff --git a/lib/workers/repository/init/config.js b/lib/workers/repository/init/config.js
index 07ded19677e8dddf430308f74cba8c52af3a22ba..6b8ad59b143a071783618922dfd8be391af73c0e 100644
--- a/lib/workers/repository/init/config.js
+++ b/lib/workers/repository/init/config.js
@@ -20,7 +20,10 @@ async function mergeRenovateConfig(config) {
     for (const fileName of configFileNames) {
       if (fileName === 'package.json') {
         try {
-          const pJson = JSON.parse(await platform.getFile('package.json'));
+          const pJson = JSON.parse(
+            // @ts-ignore
+            await platform.getFile('package.json')
+          );
           if (pJson.renovate) {
             logger.info('Using package.json for global renovate config');
             return 'package.json';
@@ -43,7 +46,10 @@ async function mergeRenovateConfig(config) {
   let renovateJson;
   if (configFile === 'package.json') {
     // We already know it parses
-    renovateJson = JSON.parse(await platform.getFile('package.json')).renovate;
+    renovateJson = JSON.parse(
+      // @ts-ignore
+      await platform.getFile('package.json')
+    ).renovate;
     logger.info({ config: renovateJson }, 'package.json>renovate config');
   } else {
     let renovateConfig = await platform.getFile(configFile);
diff --git a/lib/workers/repository/init/index.js b/lib/workers/repository/init/index.js
index 9870527218fd64736dfc8ce368f4a1ca87471e93..245bcfc9a1943f8239e9973629f9d5b5c0fd39d7 100644
--- a/lib/workers/repository/init/index.js
+++ b/lib/workers/repository/init/index.js
@@ -8,6 +8,7 @@ const { detectSemanticCommits } = require('./semantic');
 const { detectVulnerabilityAlerts } = require('./vulnerability');
 
 async function initRepo(input) {
+  // @ts-ignore
   global.repoCache = {};
   let config = {
     ...input,
diff --git a/lib/workers/repository/onboarding/branch/check.js b/lib/workers/repository/onboarding/branch/check.js
index cd6e0058280f1f419df0315546479cc5fcbd8f86..1b37cacc7c5f9ee5deea272a57e378e416862482 100644
--- a/lib/workers/repository/onboarding/branch/check.js
+++ b/lib/workers/repository/onboarding/branch/check.js
@@ -24,7 +24,10 @@ const configFileExists = async () => {
 
 const packageJsonConfigExists = async () => {
   try {
-    const pJson = JSON.parse(await platform.getFile('package.json'));
+    const pJson = JSON.parse(
+      // @ts-ignore
+      await platform.getFile('package.json')
+    );
     if (pJson[appSlug]) {
       return true;
     }
@@ -64,7 +67,7 @@ const isOnboarded = async config => {
     throw new Error('disabled');
   }
 
-  const pr = await closedPrExists(config);
+  const pr = await closedPrExists();
   if (!pr) {
     logger.debug('Found no closed onboarding PR');
     return false;
diff --git a/lib/workers/repository/onboarding/branch/config.js b/lib/workers/repository/onboarding/branch/config.js
index 899d482fccfd86eb404d9240a6e7edf4d3842cd8..ffde5255ae8f321ebfb295ab622b5dd1306f74d2 100644
--- a/lib/workers/repository/onboarding/branch/config.js
+++ b/lib/workers/repository/onboarding/branch/config.js
@@ -1,21 +1,22 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../../../../logger');
 
 const { appSlug } = require('../../../../config/app-strings');
 
 const clone = input => JSON.parse(JSON.stringify(input));
 
-module.exports = {
-  getOnboardingConfig,
-};
+export { getOnboardingConfig };
 
 async function getOnboardingConfig(config) {
   const onboardingConfig = clone(config.onboardingConfig);
   try {
     logger.debug('Checking for greenkeeper config');
 
-    const greenkeeperConfig = JSON.parse(await platform.getFile('package.json'))
-      .greenkeeper;
+    const greenkeeperConfig = JSON.parse(
+      // @ts-ignore
+      await platform.getFile('package.json')
+    ).greenkeeper;
     if (greenkeeperConfig) {
       onboardingConfig.statusCheckVerify = true;
     }
diff --git a/lib/workers/repository/onboarding/branch/index.js b/lib/workers/repository/onboarding/branch/index.js
index 1b0707422b99e05032d47e2c0a161d40e77466c6..905ae8ab98263ff097f21ef3fb1b8524a5f588b2 100644
--- a/lib/workers/repository/onboarding/branch/index.js
+++ b/lib/workers/repository/onboarding/branch/index.js
@@ -17,7 +17,7 @@ async function checkOnboardingBranch(config) {
     throw new Error('fork');
   }
   logger.info('Repo is not onboarded');
-  if (await onboardingPrExists(config)) {
+  if (await onboardingPrExists()) {
     logger.debug('Onboarding PR already exists');
     await rebaseOnboardingBranch(config);
   } else {
diff --git a/lib/workers/repository/onboarding/pr/index.js b/lib/workers/repository/onboarding/pr/index.js
index d8aad933094586ac225f398d47a6054622cacc68..ade8d8edcdb8be7b9e915b650d76e05b3a911931 100644
--- a/lib/workers/repository/onboarding/pr/index.js
+++ b/lib/workers/repository/onboarding/pr/index.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const { logger } = require('../../../../logger');
 const { getConfigDesc } = require('./config-description');
 const { getErrors, getWarnings, getDepWarnings } = require('./errors-warnings');
@@ -136,6 +137,4 @@ If you need any further assistance then you can also [request help here](${urls.
   }
 }
 
-module.exports = {
-  ensureOnboardingPr,
-};
+export { ensureOnboardingPr };
diff --git a/lib/workers/repository/process/fetch.js b/lib/workers/repository/process/fetch.js
index ca483171291b59f1d520aac08ee22caaa259acb9..a50316202782704f79bc095163a0d2e4a7c47c54 100644
--- a/lib/workers/repository/process/fetch.js
+++ b/lib/workers/repository/process/fetch.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const pAll = require('p-all');
 const { logger } = require('../../../logger');
 
@@ -8,9 +9,7 @@ const { applyPackageRules } = require('../../../util/package-rules');
 const { getManagerConfig } = require('../../../config');
 const { lookupUpdates } = require('./lookup');
 
-module.exports = {
-  fetchUpdates,
-};
+export { fetchUpdates };
 
 async function fetchDepUpdates(packageFileConfig, dep) {
   /* eslint-disable no-param-reassign */
diff --git a/lib/workers/repository/process/lookup/filter.js b/lib/workers/repository/process/lookup/filter.js
index 6cd3a42d9cb5995fddab767906342206e25b4d72..a5d3a5a68dfb79416347f245025960aa39e40f9f 100644
--- a/lib/workers/repository/process/lookup/filter.js
+++ b/lib/workers/repository/process/lookup/filter.js
@@ -66,7 +66,11 @@ function filterVersions(
         'Falling back to npm semver syntax for allowedVersions'
       );
       filteredVersions = filteredVersions.filter(version =>
-        semver.satisfies(semver.coerce(version), allowedVersions)
+        semver.satisfies(
+          // @ts-ignore
+          semver.coerce(version),
+          allowedVersions
+        )
       );
     } else {
       logger.warn(
diff --git a/lib/workers/repository/process/lookup/index.js b/lib/workers/repository/process/lookup/index.js
index 64ddd9d669d357c3b73552c0bdd59d0ddab98a50..5cce99116fba76f9b2ae8c221fdb3e6012bddf7c 100644
--- a/lib/workers/repository/process/lookup/index.js
+++ b/lib/workers/repository/process/lookup/index.js
@@ -31,6 +31,7 @@ async function lookupUpdates(config) {
     getNewValue,
     valueToVersion,
   } = versioning.get(config.versionScheme);
+  /** @type any */
   const res = { updates: [], warnings: [] };
   if (isValid(currentValue)) {
     const dependency = clone(await getPkgReleases(config));
diff --git a/lib/workers/repository/process/write.js b/lib/workers/repository/process/write.js
index f72d032f745e8c1f11b6d1ccbbc7e207969f9bfe..5f24970a36282604615a74a733cfb2b6aaef74aa 100644
--- a/lib/workers/repository/process/write.js
+++ b/lib/workers/repository/process/write.js
@@ -31,6 +31,7 @@ async function writeUpdates(config, packageFiles, allBranches) {
       packageFiles
     );
     branch.res = res;
+    // @ts-ignore
     if (res === 'pr-closed' || res === 'automerged') {
       // Stop procesing other branches because base branch has been changed
       return res;
diff --git a/lib/workers/repository/updates/branchify.js b/lib/workers/repository/updates/branchify.js
index 0f916163ec5ff6cd03e07cdf43833940caea810d..ffbe9a4f90c947be037180e560dff3e25fb18c40 100644
--- a/lib/workers/repository/updates/branchify.js
+++ b/lib/workers/repository/updates/branchify.js
@@ -1,5 +1,6 @@
+import slugify from 'slugify';
+
 const handlebars = require('handlebars');
-const slugify = require('slugify');
 const cleanGitRef = require('clean-git-ref').clean;
 const { logger, setMeta } = require('../../../logger');
 
@@ -132,6 +133,4 @@ function branchifyUpgrades(config, packageFiles) {
   };
 }
 
-module.exports = {
-  branchifyUpgrades,
-};
+export { branchifyUpgrades };
diff --git a/lib/workers/repository/updates/flatten.js b/lib/workers/repository/updates/flatten.js
index 3704d2783466b09386dfdc4ff308e372287b3eeb..94bc0e93b9acb0dd6b95186fac03716e1562758d 100644
--- a/lib/workers/repository/updates/flatten.js
+++ b/lib/workers/repository/updates/flatten.js
@@ -1,4 +1,5 @@
-const is = require('@sindresorhus/is');
+import is from '@sindresorhus/is';
+
 const {
   getManagerConfig,
   mergeChildConfig,
@@ -7,9 +8,7 @@ const {
 const { applyPackageRules } = require('../../../util/package-rules');
 const { get } = require('../../../manager');
 
-module.exports = {
-  flattenUpdates,
-};
+export { flattenUpdates };
 
 // Return only rules that contain an updateType
 function getUpdateTypeRules(packageRules) {
diff --git a/lib/workers/repository/updates/generate.js b/lib/workers/repository/updates/generate.js
index 794d7c2756f0c9e4a61bc13cbe9ed559aeec912a..e7ad6acd47426e9f4dc8e0605377ed5d27887733 100644
--- a/lib/workers/repository/updates/generate.js
+++ b/lib/workers/repository/updates/generate.js
@@ -21,6 +21,7 @@ function ifTypesGroup(depNames, hasGroupName, branchUpgrades) {
 function generateBranchConfig(branchUpgrades) {
   logger.debug(`generateBranchConfig(${branchUpgrades.length})`);
   logger.trace({ config: branchUpgrades });
+  /** @type any */
   let config = {
     upgrades: [],
   };
diff --git a/package.json b/package.json
index c74a7b49d755ef0caaa77a4edfbe5c67cc6f15c4..43b9d1cfdf8f460e1724c1e8f5b49532706a6c6c 100644
--- a/package.json
+++ b/package.json
@@ -7,9 +7,10 @@
     "renovate-config-validator": "bin/config-validator.js"
   },
   "scripts": {
-    "build": "yarn clean && tsc -p tsconfig.app.json && yarn copy-static-files",
+    "build": "run-s clean compile copy-static-files",
     "clean": "rimraf dist",
     "clean-cache": "node bin/clean-cache.js",
+    "compile": "tsc -p tsconfig.app.json",
     "copy-static-files": "copyfiles -u 1 lib/**/*.json lib/**/*.py dist/",
     "create-json-schema": "node bin/create-json-schema.js && prettier --write \"renovate-schema.json\"",
     "debug": "babel-node --inspect-brk  --extensions \".ts,.js\" -- lib/renovate.ts",
@@ -18,15 +19,16 @@
     "jest": "yarn clean-cache && cross-env NODE_ENV=test LOG_LEVEL=fatal jest",
     "jest-debug": "cross-env NODE_ENV=test LOG_LEVEL=fatal node --inspect-brk node_modules/jest/bin/jest.js",
     "jest-silent": "cross-env NODE_ENV=test yarn jest --reporters jest-silent-reporter",
-    "lint": "yarn eslint && yarn prettier",
-    "lint-fix": "yarn eslint-fix && yarn prettier-fix",
+    "lint": "run-s eslint prettier",
+    "lint-fix": "run-s eslint-fix prettier-fix",
     "prettier": "prettier --list-different \"**/*.{ts,js,json,md}\"",
     "prettier-fix": "prettier --write \"**/*.{ts,js,json,md}\"",
     "start": "babel-node --extensions \".ts,.js\" -- lib/renovate.ts",
     "test-dirty": "git diff --exit-code",
     "test-e2e": "npm pack && cd e2e && yarn install --no-lockfile && yarn test",
     "test-schema": "bash test/json-schema.sh",
-    "test": "yarn lint && yarn test-schema && yarn jest"
+    "test": "run-s lint test-schema type-check jest",
+    "type-check": "tsc --noEmit"
   },
   "repository": {
     "type": "git",
diff --git a/test/config/__snapshots__/validation.spec.js.snap b/test/config/__snapshots__/validation.spec.js.snap
index 7e555c227646aed0f45c7ec7c219afdcaa197b90..2865dfe627cdbe54689fe8170401baf2314db903 100644
--- a/test/config/__snapshots__/validation.spec.js.snap
+++ b/test/config/__snapshots__/validation.spec.js.snap
@@ -86,7 +86,7 @@ Array [
   Object {
     "depName": "Configuration Error",
     "message": "packageRules:
-        You have included an unsupported manager in a package rule. Your list: foo. 
+        You have included an unsupported manager in a package rule. Your list: foo.
         Supported managers are: (ansible, bazel, buildkite, bundler, cargo, circleci, composer, deps-edn, docker-compose, dockerfile, github-actions, gitlabci, gitlabci-include, gomod, gradle, gradle-wrapper, kubernetes, leiningen, maven, meteor, npm, nuget, nvm, pip_requirements, pip_setup, pipenv, poetry, pub, sbt, swift, terraform, travis, ruby-version, homebrew).",
   },
 ]
diff --git a/test/config/cli.spec.js b/test/config/cli.spec.js
index ecc60376b58400f7660621c20edff6fc8dbd0af0..5d329df90f2050a8ce0aefa246baa1276e9d1512 100644
--- a/test/config/cli.spec.js
+++ b/test/config/cli.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const cli = require('../../lib/config/cli.js');
 const getArgv = require('./config/_fixtures/argv');
 
diff --git a/test/config/index.spec.js b/test/config/index.spec.js
index dd31c9919ceee41cf85bc1dc4f66c4eb5a7c47c0..5b86396fa40bb83352cf99328d52657a59537f3f 100644
--- a/test/config/index.spec.js
+++ b/test/config/index.spec.js
@@ -1,7 +1,9 @@
 const argv = require('./config/_fixtures/argv');
+/** @type any */
 const defaultConfig = require('../../lib/config/defaults').getConfig();
+/** @type any */
 const npm = require('../../lib/datasource/npm');
-const presetDefaults = require('./npm/_fixtures/renovate-config-default');
+const presetDefaults = require('./npm/_fixtures/renovate-config-default.json');
 
 npm.getPkgReleases = jest.fn(() => ({
   'renovate-config':
@@ -19,6 +21,7 @@ describe('config/index', () => {
       configParser = require('../../lib/config/index.js');
       defaultArgv = argv();
       jest.mock('delay');
+      // @ts-ignore
       require('delay').mockImplementation(() => Promise.resolve());
     });
     it('supports token in env', async () => {
diff --git a/test/config/presets.spec.js b/test/config/presets.spec.js
index 46fb26f49ff8dfda60278dfe20d8c6dec91299d7..d26792c668489ac5eff766e120d1450e94b55f92 100644
--- a/test/config/presets.spec.js
+++ b/test/config/presets.spec.js
@@ -1,10 +1,10 @@
 const npm = require('../../lib/datasource/npm');
 const presets = require('../../lib/config/presets');
-const presetDefaults = require('./npm/_fixtures/renovate-config-default');
-const presetPackages = require('./npm/_fixtures/renovate-config-packages');
-const presetGroup = require('./npm/_fixtures/renovate-config-group');
-const presetMonorepo = require('./npm/_fixtures/renovate-config-monorepo');
-const presetIkatyang = require('./npm/_fixtures/renovate-config-ikatyang');
+const presetDefaults = require('./npm/_fixtures/renovate-config-default.json');
+const presetPackages = require('./npm/_fixtures/renovate-config-packages.json');
+const presetGroup = require('./npm/_fixtures/renovate-config-group.json');
+const presetMonorepo = require('./npm/_fixtures/renovate-config-monorepo.json');
+const presetIkatyang = require('./npm/_fixtures/renovate-config-ikatyang.json');
 
 npm.getPreset = jest.fn((dep, presetName) => {
   if (dep === 'renovate-config-default') {
diff --git a/test/datasource/docker.spec.js b/test/datasource/docker.spec.js
index 08fa8a62cc3a7d467b0c388067f5e7b8f9211c06..e91566d11df1da45a82a1039228546d368cc0635 100644
--- a/test/datasource/docker.spec.js
+++ b/test/datasource/docker.spec.js
@@ -1,6 +1,7 @@
 const got = require('../../lib/util/got');
 const docker = require('../../lib/datasource/docker');
 const { getPkgReleases } = require('../../lib/datasource');
+/** @type any */
 const hostRules = require('../../lib/util/host-rules');
 
 jest.mock('../../lib/util/got');
diff --git a/test/datasource/git-tags.spec.js b/test/datasource/git-tags.spec.js
index 829875bf9ba05d78bf796ef0dc900c08e3c565bf..9288c35b6509c14d35ac4ed939707f2a6d41d28e 100644
--- a/test/datasource/git-tags.spec.js
+++ b/test/datasource/git-tags.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const simpleGit = require('simple-git/promise');
 const { getPkgReleases } = require('../../lib/datasource/git-tags');
 
diff --git a/test/datasource/github.spec.js b/test/datasource/github.spec.js
index 6e4871fd9143a77c6a7eef2095ed90f61854cec7..aa72db11d160c4b3977379f442accd5f277c8479 100644
--- a/test/datasource/github.spec.js
+++ b/test/datasource/github.spec.js
@@ -1,4 +1,4 @@
-import ghGot from '../../lib/platform/github/gh-got-wrapper';
+import { api } from '../../lib/platform/github/gh-got-wrapper';
 
 const datasource = require('../../lib/datasource');
 const github = require('../../lib/datasource/github');
@@ -9,6 +9,9 @@ jest.mock('../../lib/platform/github/gh-got-wrapper');
 jest.mock('../../lib/util/got');
 jest.mock('../../lib/util/host-rules');
 
+/** @type any */
+const ghGot = api.get;
+
 describe('datasource/github', () => {
   beforeEach(() => global.renovateCache.rmAll());
   describe('getDigest', () => {
@@ -19,28 +22,19 @@ describe('datasource/github', () => {
     });
     it('returns null if no token', async () => {
       ghGot.mockReturnValueOnce({ body: [] });
-      const res = await github.getDigest(
-        { depName: 'some-dep', githubRepo: 'some/dep' },
-        null
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, null);
       expect(res).toBeNull();
     });
     it('returns digest', async () => {
       ghGot.mockReturnValueOnce({ body: [{ sha: 'abcdef' }] });
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        null
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, null);
       expect(res).toBe('abcdef');
     });
     it('returns commit digest', async () => {
       ghGot.mockReturnValueOnce({
         body: { object: { type: 'commit', sha: 'ddd111' } },
       });
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        'v1.2.0'
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, 'v1.2.0');
       expect(res).toBe('ddd111');
     });
     it('returns tagged commit digest', async () => {
@@ -50,28 +44,19 @@ describe('datasource/github', () => {
       ghGot.mockReturnValueOnce({
         body: { object: { type: 'commit', sha: 'ddd111' } },
       });
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        'v1.2.0'
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, 'v1.2.0');
       expect(res).toBe('ddd111');
     });
     it('warns if unknown ref', async () => {
       ghGot.mockReturnValueOnce({
         body: { object: { sha: 'ddd111' } },
       });
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        'v1.2.0'
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, 'v1.2.0');
       expect(res).toBeNull();
     });
     it('returns null for missed tagged digest', async () => {
       ghGot.mockReturnValueOnce({});
-      const res = await github.getDigest(
-        { depName: 'some-dep', lookupName: 'some/dep' },
-        'v1.2.0'
-      );
+      const res = await github.getDigest({ lookupName: 'some/dep' }, 'v1.2.0');
       expect(res).toBeNull();
     });
   });
@@ -97,6 +82,7 @@ describe('datasource/github', () => {
       await expect(github.getPreset('some/repo')).rejects.toThrow();
     });
     it('should return default.json', async () => {
+      // @ts-ignore
       hostRules.find.mockReturnValueOnce({ token: 'abc' });
       got.mockImplementationOnce(() => ({
         body: {
@@ -107,6 +93,7 @@ describe('datasource/github', () => {
       expect(content).toEqual({ foo: 'bar' });
     });
     it('should return custom.json', async () => {
+      // @ts-ignore
       hostRules.find.mockReturnValueOnce({ token: 'abc' });
       got.mockImplementationOnce(() => ({
         body: {
@@ -134,7 +121,7 @@ describe('datasource/github', () => {
       ghGot.mockReturnValueOnce({ headers: {}, body });
       const res = await datasource.getPkgReleases({
         datasource: 'github',
-        depName: 'some/dep',
+        lookupName: 'some/dep',
         lookupType: 'releases',
       });
       expect(res).toMatchSnapshot();
@@ -148,7 +135,7 @@ describe('datasource/github', () => {
       ghGot.mockReturnValueOnce({ headers: {}, body });
       const res = await datasource.getPkgReleases({
         datasource: 'github',
-        depName: 'some/dep2',
+        lookupName: 'some/dep2',
       });
       expect(res).toMatchSnapshot();
       expect(res.releases).toHaveLength(2);
diff --git a/test/datasource/gitlab.spec.js b/test/datasource/gitlab.spec.js
index 0734e45239d094896d46195e2416c25dd12c2b58..7b7c26dcf1ad1cf6c27acb5b7852ee04aa6cb656 100644
--- a/test/datasource/gitlab.spec.js
+++ b/test/datasource/gitlab.spec.js
@@ -1,5 +1,6 @@
 const datasource = require('../../lib/datasource');
 const gitlab = require('../../lib/datasource/gitlab');
+/** @type any */
 const glGot = require('../../lib/platform/gitlab/gl-got-wrapper').api.get;
 
 jest.mock('../../lib/platform/gitlab/gl-got-wrapper');
diff --git a/test/datasource/go.spec.js b/test/datasource/go.spec.js
index 8684abaaa6d45217cf83e59ab23d5b573f35e246..94795d723631610b7a0452999f216ac8f1bbc52d 100644
--- a/test/datasource/go.spec.js
+++ b/test/datasource/go.spec.js
@@ -1,4 +1,5 @@
 const got = require('../../lib/util/got');
+/** @type any */
 const github = require('../../lib/datasource/github');
 const go = require('../../lib/datasource/go');
 
diff --git a/test/datasource/gradle-version.spec.js b/test/datasource/gradle-version.spec.js
index 35e927fb2020c9f8016ffa67eefc5839b385ed86..6719d097e6aee39930f88e3356803030163add74 100644
--- a/test/datasource/gradle-version.spec.js
+++ b/test/datasource/gradle-version.spec.js
@@ -4,6 +4,7 @@ const datasource = require('../../lib/datasource');
 
 jest.mock('../../lib/util/got');
 
+/** @type any */
 const allResponse = fs.readFileSync(
   'test/datasource/gradle-wrapper/_fixtures/all.json'
 );
diff --git a/test/datasource/hex.spec.js b/test/datasource/hex.spec.js
index 918c23197c43719905e668c1894b0b0b8c071c0f..7559bb2604362accad5f9d7a82d90f13f0adcb98 100644
--- a/test/datasource/hex.spec.js
+++ b/test/datasource/hex.spec.js
@@ -1,5 +1,6 @@
 const fs = require('fs');
 const got = require('../../lib/util/got');
+/** @type any */
 const hostRules = require('../../lib/util/host-rules');
 const { getPkgReleases } = require('../../lib/datasource/hex');
 
@@ -49,7 +50,7 @@ describe('datasource/hex', () => {
       got.mockImplementationOnce(() => {
         throw new Error();
       });
-      expect(await getPkgReleases('some_package')).toBeNull();
+      expect(await getPkgReleases({ lookupName: 'some_package' })).toBeNull();
     });
     it('returns null with wrong auth token', async () => {
       hostRules.find.mockReturnValueOnce({ token: 'this_simple_token' });
diff --git a/test/datasource/index.spec.js b/test/datasource/index.spec.js
index 56d5e8b6ca3d4b7c04db3ffc50f04871384d8b22..a3cf872d54327948a3bffb743b4a68049d050f80 100644
--- a/test/datasource/index.spec.js
+++ b/test/datasource/index.spec.js
@@ -1,4 +1,5 @@
 const datasource = require('../../lib/datasource');
+/** @type any */
 const npmDatasource = require('../../lib/datasource/npm');
 
 jest.mock('../../lib/datasource/docker');
diff --git a/test/datasource/packagist.spec.js b/test/datasource/packagist.spec.js
index 57000b53cec20c3304a07417e34e7aab8bc97322..8fc2922b6be142166f7d8488aa556438e287e60f 100644
--- a/test/datasource/packagist.spec.js
+++ b/test/datasource/packagist.spec.js
@@ -6,12 +6,15 @@ const hostRules = require('../../lib/util/host-rules');
 jest.mock('../../lib/util/got');
 jest.mock('../../lib/util/host-rules');
 
+/** @type any */
 const includesJson = fs.readFileSync(
   'test/datasource/packagist/_fixtures/includes.json'
 );
+/** @type any */
 const beytJson = fs.readFileSync(
   'test/datasource/packagist/_fixtures/1beyt.json'
 );
+/** @type any */
 const mailchimpJson = fs.readFileSync(
   'test/datasource/packagist/_fixtures/mailchimp-api.json'
 );
diff --git a/test/datasource/pypi.spec.js b/test/datasource/pypi.spec.js
index 246037df0f1fcbc05cedb938e9d49e094d06e78b..dbb8f1e6642719c4cf3f46768c0af4dd537ecb6f 100644
--- a/test/datasource/pypi.spec.js
+++ b/test/datasource/pypi.spec.js
@@ -4,6 +4,7 @@ const datasource = require('../../lib/datasource');
 
 jest.mock('../../lib/util/got');
 
+/** @type any */
 const res1 = fs.readFileSync(
   'test/datasource/pypi/_fixtures/azure-cli-monitor.json'
 );
diff --git a/test/datasource/rubygems/index.spec.js b/test/datasource/rubygems/index.spec.js
index cbe9db9f86a177584b69df21240c3d1483cc0ba9..9e61afc139c444f5a35671851b61d2ed6dac2414 100644
--- a/test/datasource/rubygems/index.spec.js
+++ b/test/datasource/rubygems/index.spec.js
@@ -34,7 +34,7 @@ describe('datasource/rubygems', () => {
     };
 
     beforeEach(() => {
-      process.env.RENOVATE_SKIP_CACHE = true;
+      process.env.RENOVATE_SKIP_CACHE = 'true';
       jest.resetAllMocks();
     });
 
diff --git a/test/datasource/rubygems/retriable.spec.js b/test/datasource/rubygems/retriable.spec.js
index c078415c4034100184fb47ce809cabf42a7f53c6..27cc770a8f55ad0ccf8bfd752ff39845a652f97d 100644
--- a/test/datasource/rubygems/retriable.spec.js
+++ b/test/datasource/rubygems/retriable.spec.js
@@ -4,7 +4,7 @@ describe('datasource/rubygems/retriable', () => {
   const { RENOVATE_RUBYGEMS_RETRY_DELAY_STEP } = process.env;
 
   beforeEach(() => {
-    process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP = 1;
+    process.env.RENOVATE_RUBYGEMS_RETRY_DELAY_STEP = '1';
   });
 
   it('returns 0 when numberOfRetries equals 0', () => {
diff --git a/test/datasource/terraform.spec.js b/test/datasource/terraform.spec.js
index 095f0ff7044f8f0ea11663085d92e4cd733e1883..247cd121b70120d96ad6880c385d374797bbe9d4 100644
--- a/test/datasource/terraform.spec.js
+++ b/test/datasource/terraform.spec.js
@@ -3,7 +3,7 @@ const got = require('../../lib/util/got');
 const datasource = require('../../lib/datasource');
 
 jest.mock('../../lib/util/got');
-
+/** @type any */
 const consulData = fs.readFileSync(
   'test/datasource/terraform/_fixtures/registry-consul.json'
 );
diff --git a/test/logger/err-serializer.spec.js b/test/logger/err-serializer.spec.js
index 03d9762e1b8f8eb4cb6e84fc1cf443c4417826f2..e74c8b5f9b7ee25139083bd736ed3f5d362b56dc 100644
--- a/test/logger/err-serializer.spec.js
+++ b/test/logger/err-serializer.spec.js
@@ -1,4 +1,4 @@
-const configSerializer = require('../../lib/logger/err-serializer');
+import configSerializer from '../../lib/logger/err-serializer';
 
 describe('logger/err-serializer', () => {
   it('expands errors', () => {
diff --git a/test/manager/ansible/extract.spec.js b/test/manager/ansible/extract.spec.js
index 9662bff5b1a2257669a315b8e96bd121dcc1e91a..4683256ded6690b27bdce7ba5ddcdd20e3b45b9e 100644
--- a/test/manager/ansible/extract.spec.js
+++ b/test/manager/ansible/extract.spec.js
@@ -12,20 +12,16 @@ const yamlFile2 = fs.readFileSync(
 
 describe('lib/manager/ansible/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines from docker_container', () => {
-      const res = extractPackageFile(yamlFile1, config);
+      const res = extractPackageFile(yamlFile1);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(9);
     });
     it('extracts multiple image lines from docker_service', () => {
-      const res = extractPackageFile(yamlFile2, config);
+      const res = extractPackageFile(yamlFile2);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(4);
     });
diff --git a/test/manager/bazel/extract.spec.js b/test/manager/bazel/extract.spec.js
index 9cc45b860e6916c861b07b46832da7b4b94fbca1..8d529f1222b827483b279d69ca07118708ec7adc 100644
--- a/test/manager/bazel/extract.spec.js
+++ b/test/manager/bazel/extract.spec.js
@@ -13,24 +13,20 @@ const fileWithBzlExtension = fs.readFileSync(
 
 describe('lib/manager/bazel/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns empty if fails to parse', () => {
-      const res = extractPackageFile('blahhhhh:foo:@what\n', config);
+      const res = extractPackageFile('blahhhhh:foo:@what\n');
       expect(res).toBeNull();
     });
     it('returns empty if cannot parse dependency', () => {
-      const res = extractPackageFile('git_repository(\n  nothing\n)\n', config);
+      const res = extractPackageFile('git_repository(\n  nothing\n)\n');
       expect(res).toBeNull();
     });
     it('extracts multiple types of dependencies', () => {
-      const res = extractPackageFile(workspaceFile, config);
+      const res = extractPackageFile(workspaceFile);
       expect(res.deps).toMatchSnapshot();
     });
     it('extracts dependencies from *.bzl files', () => {
-      const res = extractPackageFile(fileWithBzlExtension, config);
+      const res = extractPackageFile(fileWithBzlExtension);
       expect(res.deps).toMatchSnapshot();
     });
 
@@ -44,8 +40,7 @@ describe('lib/manager/bazel/extract', () => {
           # v1.0.0-alpha31.cli-migrations 11/28
           digest="sha256:a4e8d8c444ca04fe706649e82263c9f4c2a4229bc30d2a64561b5e1d20cc8548",
           tag="v1.0.0-alpha31.cli-migrations"
-        )`,
-        config
+        )`
       );
       expect(res.deps).toMatchSnapshot();
     });
@@ -59,8 +54,7 @@ go_repository(
   remote = "https://github.com/test/uuid-fork",
   commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
 )
-        `,
-        config
+        `
       );
       expect(successStory.deps[0].datasource).toBe('go');
       expect(successStory.deps[0].lookupName).toBe('github.com/test/uuid-fork');
@@ -73,8 +67,7 @@ go_repository(
   remote = "https://github.com/test/uuid.git#branch",
   commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
 )
-        `,
-        config
+        `
       );
       expect(badStory.deps[0].skipReason).toBe('unsupported-remote');
 
@@ -86,8 +79,7 @@ go_repository(
   remote = "https://github.mycompany.com/test/uuid",
   commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
 )
-        `,
-        config
+        `
       );
       expect(gheStory.deps[0].skipReason).toBe('unsupported-remote');
 
@@ -99,8 +91,7 @@ go_repository(
   remote = "https://gitlab.com/test/uuid",
   commit = "dec09d789f3dba190787f8b4454c7d3c936fed9e"
 )
-        `,
-        config
+        `
       );
       expect(gitlabRemote.deps[0].skipReason).toBe('unsupported-remote');
     });
diff --git a/test/manager/bazel/update.spec.js b/test/manager/bazel/update.spec.js
index 6729d866a62bcd0c67603936f4c15927c1aad6ac..d2719ef580aca04ccaa1563a194ed8aca794055c 100644
--- a/test/manager/bazel/update.spec.js
+++ b/test/manager/bazel/update.spec.js
@@ -1,4 +1,5 @@
 const fs = require('fs');
+/** @type any */
 const hasha = require('hasha');
 const path = require('path');
 const bazelfile = require('../../../lib/manager/bazel/update');
diff --git a/test/manager/buildkite/extract.spec.js b/test/manager/buildkite/extract.spec.js
index 50c00bd43a3ef87a9929f2482eee9c4de43601ab..0a06072b78f663397383b658ccc4333b3ca5da47 100644
--- a/test/manager/buildkite/extract.spec.js
+++ b/test/manager/buildkite/extract.spec.js
@@ -22,30 +22,26 @@ const pipeline4 = fs.readFileSync(
 
 describe('lib/manager/buildkite/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts simple single plugin', () => {
-      const res = extractPackageFile(pipeline1, config).deps;
+      const res = extractPackageFile(pipeline1).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(1);
     });
     it('extracts multiple plugins in same file', () => {
-      const res = extractPackageFile(pipeline2, config).deps;
+      const res = extractPackageFile(pipeline2).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
     it('adds skipReason', () => {
-      const res = extractPackageFile(pipeline3, config).deps;
+      const res = extractPackageFile(pipeline3).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(3);
     });
     it('extracts arrays of plugins', () => {
-      const res = extractPackageFile(pipeline4, config).deps;
+      const res = extractPackageFile(pipeline4).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2); // TODO: should be 4
     });
diff --git a/test/manager/bundler/extract.spec.js b/test/manager/bundler/extract.spec.js
index 3007eef13a386d9af0ffc3e84e78acf465294432..220c6fcb0214add1aa43a54b796c4e575634e6e3 100644
--- a/test/manager/bundler/extract.spec.js
+++ b/test/manager/bundler/extract.spec.js
@@ -1,6 +1,9 @@
 const fs = require('fs');
 const { extractPackageFile } = require('../../../lib/manager/bundler/extract');
 
+/** @type any */
+const platform = global.platform;
+
 const railsGemfile = fs.readFileSync(
   'test/manager/bundler/_fixtures/Gemfile.rails',
   'utf8'
diff --git a/test/manager/bundler/range.spec.js b/test/manager/bundler/range.spec.js
index 9885a7d23f6d497bccf36c61ab6eddb0c8c91bdb..2b69f36a7ed7899381831d7d7b930674e4657477 100644
--- a/test/manager/bundler/range.spec.js
+++ b/test/manager/bundler/range.spec.js
@@ -2,12 +2,8 @@ const { getRangeStrategy } = require('../../../lib/manager/bundler');
 
 describe('lib/manager/bundler/range', () => {
   describe('getRangeStrategy()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('always returns replace', () => {
-      expect(getRangeStrategy(config)).toEqual('replace');
+      expect(getRangeStrategy()).toEqual('replace');
     });
   });
 });
diff --git a/test/manager/cargo/artifacts.spec.js b/test/manager/cargo/artifacts.spec.js
index ad8e1728b879b7ae2439277425e7f71683fa22df..c6e7ce44727d261f76fe3a8f5d950602a489a4b6 100644
--- a/test/manager/cargo/artifacts.spec.js
+++ b/test/manager/cargo/artifacts.spec.js
@@ -1,10 +1,14 @@
 jest.mock('fs-extra');
 jest.mock('child-process-promise');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const cargo = require('../../../lib/manager/cargo/artifacts');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: '/tmp/github/some/repo',
 };
diff --git a/test/manager/circleci/extract.spec.js b/test/manager/circleci/extract.spec.js
index 5d327ca0495bfe0645132ff022ae67cfa919c45f..92a66b5784373128555fa30d0a88f9b07abeb7c1 100644
--- a/test/manager/circleci/extract.spec.js
+++ b/test/manager/circleci/extract.spec.js
@@ -12,20 +12,16 @@ const file2 = fs.readFileSync(
 
 describe('lib/manager/circleci/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines', () => {
-      const res = extractPackageFile(file1, config);
+      const res = extractPackageFile(file1);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(4);
     });
     it('extracts orbs too', () => {
-      const res = extractPackageFile(file2, config);
+      const res = extractPackageFile(file2);
       expect(res.deps).toMatchSnapshot();
       // expect(res.deps).toHaveLength(4);
     });
diff --git a/test/manager/composer/artifacts.spec.js b/test/manager/composer/artifacts.spec.js
index 5fbc84598fe0a6b692ddc9af2711983816fab512..a3e8a419366dab05af61aaadbd0bde3dee12e4ea 100644
--- a/test/manager/composer/artifacts.spec.js
+++ b/test/manager/composer/artifacts.spec.js
@@ -2,11 +2,16 @@ jest.mock('fs-extra');
 jest.mock('child-process-promise');
 jest.mock('../../../lib/util/host-rules');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const composer = require('../../../lib/manager/composer/artifacts');
+/** @type any */
 const hostRules = require('../../../lib/util/host-rules');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: '/tmp/github/some/repo',
   cacheDir: '/tmp/renovate/cache',
diff --git a/test/manager/composer/extract.spec.js b/test/manager/composer/extract.spec.js
index 2a59097ca9d80d9b2a63ad79546291ff49838aab..e8420dac96f81b9bf97b5d67e59929935265ac0a 100644
--- a/test/manager/composer/extract.spec.js
+++ b/test/manager/composer/extract.spec.js
@@ -1,6 +1,9 @@
 const fs = require('fs');
 const { extractPackageFile } = require('../../../lib/manager/composer/extract');
 
+/** @type any */
+const platform = global.platform;
+
 const requirements1 = fs.readFileSync(
   'test/manager/composer/_fixtures/composer1.json',
   'utf8'
diff --git a/test/manager/deps-edn/extract.spec.js b/test/manager/deps-edn/extract.spec.js
index def76847f6ffc4e36062ac02fc8619aa9124d36d..e5b1856ddb5649d635d6897fe3162bd42831e2ad 100644
--- a/test/manager/deps-edn/extract.spec.js
+++ b/test/manager/deps-edn/extract.spec.js
@@ -10,6 +10,6 @@ const depsEdn = fs.readFileSync(
 
 describe('manager/deps-edn/extract', () => {
   it('extractPackageFile', () => {
-    expect(extractPackageFile(depsEdn, 'deps.edn')).toMatchSnapshot();
+    expect(extractPackageFile(depsEdn)).toMatchSnapshot();
   });
 });
diff --git a/test/manager/deps-edn/update.spec.js b/test/manager/deps-edn/update.spec.js
index 0e45c0f7905ad6de28f26d314ff3a358883368c3..61ac28a57b1d5b09085fcdad9d995f343dbd9de0 100644
--- a/test/manager/deps-edn/update.spec.js
+++ b/test/manager/deps-edn/update.spec.js
@@ -11,7 +11,7 @@ const depsEdn = fs.readFileSync(
 
 describe('manager/deps-edn/update', () => {
   it('updateDependency', () => {
-    const { deps } = extractPackageFile(depsEdn, 'deps.edn');
+    const { deps } = extractPackageFile(depsEdn);
     const dep = deps.pop();
     const upgrade = {
       ...dep,
diff --git a/test/manager/docker-compose/extract.spec.js b/test/manager/docker-compose/extract.spec.js
index c36878c1afd4dab76b1669ddaa464fc31f66088e..51bf755ecaed3972c933c8a6034c3b227c90c02f 100644
--- a/test/manager/docker-compose/extract.spec.js
+++ b/test/manager/docker-compose/extract.spec.js
@@ -10,15 +10,11 @@ const yamlFile = fs.readFileSync(
 
 describe('lib/manager/docker-compose/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines', () => {
-      const res = extractPackageFile(yamlFile, config);
+      const res = extractPackageFile(yamlFile);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(8);
     });
diff --git a/test/manager/dockerfile/extract.spec.js b/test/manager/dockerfile/extract.spec.js
index 5033414b69c27aa03f4edc4700c5dcfbefcf9bd1..19dec3b0fad26d4c01d99d391417d28cf107d47d 100644
--- a/test/manager/dockerfile/extract.spec.js
+++ b/test/manager/dockerfile/extract.spec.js
@@ -10,70 +10,57 @@ const d1 = fs.readFileSync(
 
 describe('lib/manager/dockerfile/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('handles no FROM', () => {
-      const res = extractPackageFile('no from!', config);
+      const res = extractPackageFile('no from!');
       expect(res).toBeNull();
     });
     it('handles naked dep', () => {
-      const res = extractPackageFile('FROM node\n', config).deps;
+      const res = extractPackageFile('FROM node\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('is case insensitive', () => {
-      const res = extractPackageFile('From node\n', config).deps;
+      const res = extractPackageFile('From node\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('handles tag', () => {
-      const res = extractPackageFile('FROM node:8.9.0-alpine\n', config).deps;
+      const res = extractPackageFile('FROM node:8.9.0-alpine\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('handles digest', () => {
       const res = extractPackageFile(
-        'FROM node@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063\n',
-        config
+        'FROM node@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
     it('handles tag and digest', () => {
       const res = extractPackageFile(
-        'FROM node:8.9.0@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063\n',
-        config
+        'FROM node:8.9.0@sha256:eb85fc5b1198f5e1ec025ea07586bdbbf397e7d82df66c90d7511f533517e063\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
     it('handles from as', () => {
-      const res = extractPackageFile('FROM node:8.9.0-alpine as base\n', config)
-        .deps;
+      const res = extractPackageFile('FROM node:8.9.0-alpine as base\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('handles comments', () => {
-      const res = extractPackageFile(
-        '# some comment\n# another\n\nFROM node\n',
-        config
-      ).deps;
+      const res = extractPackageFile('# some comment\n# another\n\nFROM node\n')
+        .deps;
       expect(res).toMatchSnapshot();
     });
     it('handles custom hosts', () => {
-      const res = extractPackageFile(
-        'FROM registry2.something.info/node:8\n',
-        config
-      ).deps;
+      const res = extractPackageFile('FROM registry2.something.info/node:8\n')
+        .deps;
       expect(res).toMatchSnapshot();
     });
     it('handles custom hosts and suffix', () => {
       const res = extractPackageFile(
-        'FROM registry2.something.info/node:8-alpine\n',
-        config
+        'FROM registry2.something.info/node:8-alpine\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
     it('handles custom hosts with port', () => {
       const res = extractPackageFile(
-        'FROM registry2.something.info:5005/node:8\n',
-        config
+        'FROM registry2.something.info:5005/node:8\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res[0].depName).toEqual('registry2.something.info:5005/node');
@@ -81,20 +68,18 @@ describe('lib/manager/dockerfile/extract', () => {
     });
     it('handles custom hosts with port without tag', () => {
       const res = extractPackageFile(
-        'FROM registry2.something.info:5005/node\n',
-        config
+        'FROM registry2.something.info:5005/node\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res[0].depName).toEqual('registry2.something.info:5005/node');
     });
     it('handles namespaced images', () => {
-      const res = extractPackageFile('FROM mynamespace/node:8\n', config).deps;
+      const res = extractPackageFile('FROM mynamespace/node:8\n').deps;
       expect(res).toMatchSnapshot();
     });
     it('handles custom hosts with namespace', () => {
       const res = extractPackageFile(
-        'FROM registry2.something.info/someaccount/node:8\n',
-        config
+        'FROM registry2.something.info/someaccount/node:8\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
@@ -106,51 +91,45 @@ describe('lib/manager/dockerfile/extract', () => {
     });
     it('extracts multiple FROM tags', () => {
       const res = extractPackageFile(
-        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nFROM python:3.6-slim\n',
-        config
+        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nFROM python:3.6-slim\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
     it('skips scratchs', () => {
-      const res = extractPackageFile('FROM scratch\nADD foo\n', config);
+      const res = extractPackageFile('FROM scratch\nADD foo\n');
       expect(res).toBeNull();
     });
     it('skips named multistage FROM tags', () => {
       const res = extractPackageFile(
-        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nFROM frontend\n',
-        config
+        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nFROM frontend\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(1);
     });
     it('handles COPY --from', () => {
       const res = extractPackageFile(
-        'FROM scratch\nCOPY --from=gcr.io/k8s-skaffold/skaffold:v0.11.0 /usr/bin/skaffold /usr/bin/skaffold\n',
-        config
+        'FROM scratch\nCOPY --from=gcr.io/k8s-skaffold/skaffold:v0.11.0 /usr/bin/skaffold /usr/bin/skaffold\n'
       ).deps;
       expect(res).toMatchSnapshot();
     });
     it('skips named multistage COPY --from tags', () => {
       const res = extractPackageFile(
-        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nCOPY --from=frontend /usr/bin/node /usr/bin/node\n',
-        config
+        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nCOPY --from=frontend /usr/bin/node /usr/bin/node\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(1);
     });
     it('skips index reference COPY --from tags', () => {
       const res = extractPackageFile(
-        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nCOPY --from=0 /usr/bin/node /usr/bin/node\n',
-        config
+        'FROM node:6.12.3 as frontend\n\n# comment\nENV foo=bar\nCOPY --from=0 /usr/bin/node /usr/bin/node\n'
       ).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(1);
     });
     it('detects ["stage"] and ["final"] deps of docker multi-stage build.', () => {
       const res = extractPackageFile(
-        'FROM node:8.15.1-alpine as skippedfrom\nFROM golang:1.7.3 as builder\n\n# comment\nWORKDIR /go/src/github.com/alexellis/href-counter/\nRUN go get -d -v golang.org/x/net/html  \nCOPY app.go    .\nRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .\n\nFROM alpine:latest  \nRUN apk --no-cache add ca-certificates\nWORKDIR /root/\nCOPY --from=builder /go/src/github.com/alexellis/href-counter/app .\nCMD ["./app"]\n',
-        config
+        'FROM node:8.15.1-alpine as skippedfrom\nFROM golang:1.7.3 as builder\n\n# comment\nWORKDIR /go/src/github.com/alexellis/href-counter/\nRUN go get -d -v golang.org/x/net/html  \nCOPY app.go    .\nRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .\n\nFROM alpine:latest  \nRUN apk --no-cache add ca-certificates\nWORKDIR /root/\nCOPY --from=builder /go/src/github.com/alexellis/href-counter/app .\nCMD ["./app"]\n'
       ).deps;
       expect(res).toMatchSnapshot();
       const passed = [
@@ -163,12 +142,12 @@ describe('lib/manager/dockerfile/extract', () => {
       expect(passed).toBe(true);
     });
     it('extracts images on adjacent lines', () => {
-      const res = extractPackageFile(d1, config).deps;
+      const res = extractPackageFile(d1).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(2);
     });
     it('handles calico/node', () => {
-      const res = extractPackageFile('FROM calico/node\n', config).deps;
+      const res = extractPackageFile('FROM calico/node\n').deps;
       expect(res).toMatchSnapshot();
     });
   });
diff --git a/test/manager/github-actions/extract.spec.js b/test/manager/github-actions/extract.spec.js
index 5924fe185bbc1d4b4cbc96756735cba8c509c2e3..c5fa9d75fdf9d657ce1a1cfb1790ed4c2f9e8eab 100644
--- a/test/manager/github-actions/extract.spec.js
+++ b/test/manager/github-actions/extract.spec.js
@@ -10,15 +10,11 @@ const workflow1 = fs.readFileSync(
 
 describe('lib/manager/github-actions/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines from docker_container', () => {
-      const res = extractPackageFile(workflow1, config);
+      const res = extractPackageFile(workflow1);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(2);
     });
diff --git a/test/manager/gitlabci/extract.spec.js b/test/manager/gitlabci/extract.spec.js
index 7106a856146bb35d86cc8114f724c4f03b9a5c73..b86f618fcea0da574ee4f9cd636b45d25f9dc84f 100644
--- a/test/manager/gitlabci/extract.spec.js
+++ b/test/manager/gitlabci/extract.spec.js
@@ -8,15 +8,11 @@ const yamlFile = fs.readFileSync(
 
 describe('lib/manager/gitlabci/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts multiple image lines', () => {
-      const res = extractPackageFile(yamlFile, config);
+      const res = extractPackageFile(yamlFile);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(6);
     });
diff --git a/test/manager/gomod/artifacts.spec.js b/test/manager/gomod/artifacts.spec.js
index 35115d7eb50103d39f90d4a27e2bba28db41eae6..5123aa5593aa81858fa1345b3f8bd29939f076ae 100644
--- a/test/manager/gomod/artifacts.spec.js
+++ b/test/manager/gomod/artifacts.spec.js
@@ -2,11 +2,16 @@ jest.mock('fs-extra');
 jest.mock('child-process-promise');
 jest.mock('../../../lib/util/host-rules');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const gomod = require('../../../lib/manager/gomod/artifacts');
+/** @type any */
 const hostRules = require('../../../lib/util/host-rules');
 
+/** @type any */
+const platform = global.platform;
+
 const gomod1 = `module github.com/renovate-tests/gomod1
 
 require github.com/pkg/errors v0.7.0
diff --git a/test/manager/gomod/extract.spec.js b/test/manager/gomod/extract.spec.js
index 5cf42852e476a9b1b8088e747aa2ffef46addb83..c4e47b93cd204c8dc14aa35c58db4c973494d4e9 100644
--- a/test/manager/gomod/extract.spec.js
+++ b/test/manager/gomod/extract.spec.js
@@ -6,21 +6,17 @@ const gomod2 = fs.readFileSync('test/manager/gomod/_fixtures/2/go.mod', 'utf8');
 
 describe('lib/manager/gomod/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts single-line requires', () => {
-      const res = extractPackageFile(gomod1, config).deps;
+      const res = extractPackageFile(gomod1).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(7);
       expect(res.filter(e => e.skipReason)).toHaveLength(1);
     });
     it('extracts multi-line requires', () => {
-      const res = extractPackageFile(gomod2, config).deps;
+      const res = extractPackageFile(gomod2).deps;
       expect(res).toMatchSnapshot();
       expect(res).toHaveLength(58);
       expect(res.filter(e => e.skipReason)).toHaveLength(0);
diff --git a/test/manager/gradle-wrapper/extract.spec.js b/test/manager/gradle-wrapper/extract.spec.js
index 2674def6b40e664e92677ea427d68e00e949dca3..08a4af42b2e3037cf17162adf0bc9c00a8202818 100644
--- a/test/manager/gradle-wrapper/extract.spec.js
+++ b/test/manager/gradle-wrapper/extract.spec.js
@@ -14,23 +14,17 @@ const propertiesFile2 = fs.readFileSync(
 
 describe('lib/manager/gradle-wrapper/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-
-    beforeEach(() => {
-      config = {};
-    });
-
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
 
     it('extracts bin version line', () => {
-      const res = extractPackageFile(propertiesFile1, config);
+      const res = extractPackageFile(propertiesFile1);
       expect(res.deps).toMatchSnapshot();
     });
 
     it('extracts all version line', () => {
-      const res = extractPackageFile(propertiesFile2, config);
+      const res = extractPackageFile(propertiesFile2);
       expect(res.deps).toMatchSnapshot();
     });
   });
diff --git a/test/manager/gradle/index.spec.js b/test/manager/gradle/index.spec.js
index 6575cb2e48b7e830f39edf5e4455f233e8d9da60..bde2e7ad590c087ee1e6078ebe2a72c1ffa3316e 100644
--- a/test/manager/gradle/index.spec.js
+++ b/test/manager/gradle/index.spec.js
@@ -2,12 +2,16 @@ jest.mock('fs-extra');
 jest.mock('child-process-promise');
 
 const { toUnix } = require('upath');
+/** @type any */
 const fs = require('fs-extra');
 const fsReal = require('fs');
 const { exec } = require('child-process-promise');
 
 const manager = require('../../../lib/manager/gradle/index');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: 'localDir',
   gradle: {
diff --git a/test/manager/kubernetes/extract.spec.js b/test/manager/kubernetes/extract.spec.js
index 238209381c5d41289ee4245b3a7250e911256bff..2a51d6ff4258826231bb7fcc014b2dc543541153 100644
--- a/test/manager/kubernetes/extract.spec.js
+++ b/test/manager/kubernetes/extract.spec.js
@@ -25,27 +25,21 @@ const otherYamlFile = fs.readFileSync(
 
 describe('lib/manager/kubernetes/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {
-        fileMatch: ['(^|/)[^/]*\\.yaml$'],
-      };
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile(kubernetesConfigMapFile, config)).toBeNull();
+      expect(extractPackageFile(kubernetesConfigMapFile)).toBeNull();
     });
     it('extracts multiple image lines', () => {
-      const res = extractPackageFile(kubernetesImagesFile, config);
+      const res = extractPackageFile(kubernetesImagesFile);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(2);
     });
     it('extracts image line in a YAML array', () => {
-      const res = extractPackageFile(kubernetesArraySyntaxFile, config);
+      const res = extractPackageFile(kubernetesArraySyntaxFile);
       expect(res.deps).toMatchSnapshot();
       expect(res.deps).toHaveLength(1);
     });
     it('ignores non-Kubernetes YAML files', () => {
-      expect(extractPackageFile(otherYamlFile, config)).toBeNull();
+      expect(extractPackageFile(otherYamlFile)).toBeNull();
     });
   });
 });
diff --git a/test/manager/leiningen/extract.spec.js b/test/manager/leiningen/extract.spec.js
index 09e6ce7ae9e1301c4950fd503e7413949674f04b..378f21f8e1e34c5228e01f9401e51a6ab9d4f2ea 100644
--- a/test/manager/leiningen/extract.spec.js
+++ b/test/manager/leiningen/extract.spec.js
@@ -50,6 +50,6 @@ describe('manager/clojure/extract', () => {
     ]);
   });
   it('extractPackageFile', () => {
-    expect(extractPackageFile(leinProjectClj, 'project.clj')).toMatchSnapshot();
+    expect(extractPackageFile(leinProjectClj)).toMatchSnapshot();
   });
 });
diff --git a/test/manager/leiningen/update.spec.js b/test/manager/leiningen/update.spec.js
index 6106330a7e64e5144fce3bcfaac262950f01615a..ea9e752222964aab7635cbf7f514df2cfa0dbc07 100644
--- a/test/manager/leiningen/update.spec.js
+++ b/test/manager/leiningen/update.spec.js
@@ -13,7 +13,7 @@ const leinProjectClj = fs.readFileSync(
 
 describe('manager/leiningen/update', () => {
   it('updatePackageFile', () => {
-    const { deps } = extractPackageFile(leinProjectClj, 'project.clj');
+    const { deps } = extractPackageFile(leinProjectClj);
     const dep = deps.pop();
     const upgrade = {
       ...dep,
diff --git a/test/manager/maven/index.spec.js b/test/manager/maven/index.spec.js
index a52c4251f7ed9ce5180b95a08a595fe448070062..366f507f83e46db96a9c282c8ed19bf372ff5283 100644
--- a/test/manager/maven/index.spec.js
+++ b/test/manager/maven/index.spec.js
@@ -8,6 +8,9 @@ const {
   updateDependency,
 } = require('../../../lib/manager/maven/index');
 
+/** @type any */
+const platform = global.platform;
+
 const pomContent = fs.readFileSync(
   'test/manager/maven/_fixtures/simple.pom.xml',
   'utf8'
diff --git a/test/manager/meteor/__snapshots__/update.spec.js.snap b/test/manager/meteor/__snapshots__/update.spec.js.snap
index ae350256a10ee9d9b7ec69c624e14bd0049cc3b5..58abe7ace103984b4c3a5ef1db2c32b6857422d9 100644
--- a/test/manager/meteor/__snapshots__/update.spec.js.snap
+++ b/test/manager/meteor/__snapshots__/update.spec.js.snap
@@ -1,7 +1,8 @@
 // Jest Snapshot v1, https://goo.gl/fbAQLP
 
 exports[`workers/branch/package-js .updateDependency(fileContent, depName, currentValue, newValue) handles alternative quotes and white space 1`] = `
-"Package.describe({
+"// @ts-nocheck
+Package.describe({
     \\"name\\": \\"steffo:meteor-accounts-saml\\",
     \\"summary\\": \\"SAML Login (SP) for Meteor. Works with OpenAM, OpenIDP and provides Single Logout.\\",
     \\"version\\": \\"0.0.1\\",
@@ -31,7 +32,8 @@ Npm.depends({
 `;
 
 exports[`workers/branch/package-js .updateDependency(fileContent, depName, currentValue, newValue) replaces a dependency value 1`] = `
-"Package.describe({
+"// @ts-nocheck
+Package.describe({
 	'name': 'steffo:meteor-accounts-saml',
 	'summary': 'SAML Login (SP) for Meteor. Works with OpenAM, OpenIDP and provides Single Logout.',
 	'version': '0.0.1',
diff --git a/test/manager/meteor/_fixtures/package-1.js b/test/manager/meteor/_fixtures/package-1.js
index 65f5015c78a4a86419c16ab65bef47e5dc542cb9..7a447bad3e6bc4c192f51c2b2dce5a2cca77356a 100644
--- a/test/manager/meteor/_fixtures/package-1.js
+++ b/test/manager/meteor/_fixtures/package-1.js
@@ -1,3 +1,4 @@
+// @ts-nocheck
 Package.describe({
 	'name': 'steffo:meteor-accounts-saml',
 	'summary': 'SAML Login (SP) for Meteor. Works with OpenAM, OpenIDP and provides Single Logout.',
diff --git a/test/manager/meteor/_fixtures/package-2.js b/test/manager/meteor/_fixtures/package-2.js
index 182fa7c9a0fa194db03f8c546f827b8287c029ca..631ab31db111d40941e6f25affa275e861f66b15 100644
--- a/test/manager/meteor/_fixtures/package-2.js
+++ b/test/manager/meteor/_fixtures/package-2.js
@@ -1,3 +1,4 @@
+// @ts-nocheck
 Package.describe({
     "name": "steffo:meteor-accounts-saml",
     "summary": "SAML Login (SP) for Meteor. Works with OpenAM, OpenIDP and provides Single Logout.",
diff --git a/test/manager/meteor/extract.spec.js b/test/manager/meteor/extract.spec.js
index b866334788ede3321abf1325bd158bc87baa994b..2b26dbd2f82a407c2f4f8725c73e76b408c3e7e8 100644
--- a/test/manager/meteor/extract.spec.js
+++ b/test/manager/meteor/extract.spec.js
@@ -13,16 +13,12 @@ const input01Content = readFixture('package-1.js');
 
 describe('lib/manager/meteor/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns empty if fails to parse', () => {
-      const res = extractPackageFile('blahhhhh:foo:@what\n', config);
+      const res = extractPackageFile('blahhhhh:foo:@what\n');
       expect(res).toBeNull();
     });
     it('returns results', () => {
-      const res = extractPackageFile(input01Content, config);
+      const res = extractPackageFile(input01Content);
       expect(res).toMatchSnapshot();
       expect(res.deps).toHaveLength(6);
     });
diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js
index 37d263085e93045f3baf32ea7bad944a83c8bfc6..8957543bb418fb9801cab48c185d2c08008f68a0 100644
--- a/test/manager/npm/extract/index.spec.js
+++ b/test/manager/npm/extract/index.spec.js
@@ -3,6 +3,9 @@ const path = require('path');
 const npmExtract = require('../../../../lib/manager/npm/extract');
 const defaultConfig = require('../../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 function readFixture(fixture) {
   return fs.readFileSync(
     path.resolve(__dirname, `../_fixtures/${fixture}`),
diff --git a/test/manager/npm/extract/locked-versions.spec.js b/test/manager/npm/extract/locked-versions.spec.js
index d7fda6a91eb89afb51a9b953563e8e90bbcaafe4..21401bf27d6c9a41b262725cfd0880212c80e427 100644
--- a/test/manager/npm/extract/locked-versions.spec.js
+++ b/test/manager/npm/extract/locked-versions.spec.js
@@ -2,7 +2,9 @@ const {
   getLockedVersions,
 } = require('../../../../lib/manager/npm/extract/locked-versions');
 
+/** @type any */
 const npm = require('../../../../lib/manager/npm/extract/npm');
+/** @type any */
 const yarn = require('../../../../lib/manager/npm/extract/yarn');
 
 jest.mock('../../../../lib/manager/npm/extract/npm');
diff --git a/test/manager/npm/extract/npm.spec.js b/test/manager/npm/extract/npm.spec.js
index afb2bafafaa60cb675738d81fd0e8dedb09b02fd..f3127623ccd3bd07dbd5fd72e94589556fe4f4aa 100644
--- a/test/manager/npm/extract/npm.spec.js
+++ b/test/manager/npm/extract/npm.spec.js
@@ -1,6 +1,9 @@
 const fs = require('fs');
 const { getNpmLock } = require('../../../../lib/manager/npm/extract/npm');
 
+/** @type any */
+const platform = global.platform;
+
 describe('manager/npm/extract/npm', () => {
   describe('.getNpmLock()', () => {
     it('returns empty if failed to parse', async () => {
diff --git a/test/manager/npm/extract/yarn.spec.js b/test/manager/npm/extract/yarn.spec.js
index 0328773ea01a9dafa21775c1fbc3fa86b669d621..6e6c844648504074882deaa947da7f1a74bba08f 100644
--- a/test/manager/npm/extract/yarn.spec.js
+++ b/test/manager/npm/extract/yarn.spec.js
@@ -1,6 +1,9 @@
 const fs = require('fs');
 const { getYarnLock } = require('../../../../lib/manager/npm/extract/yarn');
 
+/** @type any */
+const platform = global.platform;
+
 describe('manager/npm/extract/yarn', () => {
   describe('.getYarnLock()', () => {
     it('returns empty if exception parsing', async () => {
diff --git a/test/manager/pipenv/artifacts.spec.js b/test/manager/pipenv/artifacts.spec.js
index 1abe4b5a3a5f47233df3545791ad0ae3f7cc15a9..5b5756d015889a5353a80f2eef49c362ec027958 100644
--- a/test/manager/pipenv/artifacts.spec.js
+++ b/test/manager/pipenv/artifacts.spec.js
@@ -2,10 +2,14 @@ jest.mock('fs-extra');
 jest.mock('child-process-promise');
 jest.mock('../../../lib/util/host-rules');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const pipenv = require('../../../lib/manager/pipenv/artifacts');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: '/tmp/github/some/repo',
   cacheDir: '/tmp/renovate/cache',
diff --git a/test/manager/pipenv/extract.spec.js b/test/manager/pipenv/extract.spec.js
index 39416bdcda705c19c90726a8f94082e4f544983c..eb95ac3238a39bd166999cd4b23b0dcb3eb0cc4a 100644
--- a/test/manager/pipenv/extract.spec.js
+++ b/test/manager/pipenv/extract.spec.js
@@ -24,57 +24,48 @@ const pipfile5 = fs.readFileSync(
 
 describe('lib/manager/pipenv/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('[packages]\r\n', config)).toBeNull();
+      expect(extractPackageFile('[packages]\r\n')).toBeNull();
     });
     it('returns null for invalid toml file', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts dependencies', () => {
-      const res = extractPackageFile(pipfile1, config);
+      const res = extractPackageFile(pipfile1);
       expect(res).toMatchSnapshot();
       expect(res.deps).toHaveLength(6);
       expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(4);
     });
     it('marks packages with "extras" as skipReason === any-version', () => {
-      const res = extractPackageFile(pipfile3, {
-        extends: ['config:base'],
-        pipenv: { enabled: true },
-        pip_setup: { enabled: true },
-        labels: ['dependencies'],
-      });
+      const res = extractPackageFile(pipfile3);
       expect(res.deps.filter(r => !r.skipReason)).toHaveLength(0);
       expect(res.deps.filter(r => r.skipReason)).toHaveLength(6);
     });
     it('extracts multiple dependencies', () => {
-      const res = extractPackageFile(pipfile2, config);
+      const res = extractPackageFile(pipfile2);
       expect(res).toMatchSnapshot();
       expect(res.deps).toHaveLength(5);
     });
     it('ignores git dependencies', () => {
       const content =
         '[packages]\r\nflask = {git = "https://github.com/pallets/flask.git"}\r\nwerkzeug = ">=0.14"';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.deps.filter(r => !r.skipReason)).toHaveLength(1);
     });
     it('ignores invalid package names', () => {
       const content = '[packages]\r\nfoo = "==1.0.0"\r\n_invalid = "==1.0.0"';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.deps).toHaveLength(2);
       expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(1);
     });
     it('ignores relative path dependencies', () => {
       const content = '[packages]\r\nfoo = "==1.0.0"\r\ntest = {path = "."}';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.deps.filter(r => !r.skipReason)).toHaveLength(1);
     });
     it('ignores invalid versions', () => {
       const content = '[packages]\r\nfoo = "==1.0.0"\r\nsome-package = "==0 0"';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.deps).toHaveLength(2);
       expect(res.deps.filter(dep => !dep.skipReason)).toHaveLength(1);
     });
@@ -83,15 +74,15 @@ describe('lib/manager/pipenv/extract', () => {
         '[[source]]\r\nurl = "source-url"\r\n' +
         '[[source]]\r\nurl = "other-source-url"\r\n' +
         '[packages]\r\nfoo = "==1.0.0"\r\n';
-      const res = extractPackageFile(content, config);
+      const res = extractPackageFile(content);
       expect(res.registryUrls).toEqual(['source-url', 'other-source-url']);
     });
     it('extracts example pipfile', () => {
-      const res = extractPackageFile(pipfile4, config);
+      const res = extractPackageFile(pipfile4);
       expect(res).toMatchSnapshot();
     });
     it('supports custom index', () => {
-      const res = extractPackageFile(pipfile5, config);
+      const res = extractPackageFile(pipfile5);
       expect(res).toMatchSnapshot();
       expect(res.registryUrls).toBeDefined();
       expect(res.registryUrls).toHaveLength(2);
diff --git a/test/manager/poetry/artifacts.spec.js b/test/manager/poetry/artifacts.spec.js
index 1f99df6b4c0e06adcc67e9c7e7ba3a7fb267ef5c..f8871ad2a9f33f89bc2e47988f6a402b2967299d 100644
--- a/test/manager/poetry/artifacts.spec.js
+++ b/test/manager/poetry/artifacts.spec.js
@@ -1,10 +1,14 @@
 jest.mock('fs-extra');
 jest.mock('child-process-promise');
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const poetry = require('../../../lib/manager/poetry/artifacts');
 
+/** @type any */
+const platform = global.platform;
+
 const config = {
   localDir: '/tmp/github/some/repo',
 };
diff --git a/test/manager/terraform/extract.spec.js b/test/manager/terraform/extract.spec.js
index 901bf3c58528d72c124e48520520b10ef28b3184..d4be1dd9f1374f8186fb2e36cb64043055bfe3fe 100644
--- a/test/manager/terraform/extract.spec.js
+++ b/test/manager/terraform/extract.spec.js
@@ -11,12 +11,8 @@ const tf2 = `module "relative" {
 
 describe('lib/manager/terraform/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns null for empty', () => {
-      expect(extractPackageFile('nothing here', config)).toBeNull();
+      expect(extractPackageFile('nothing here')).toBeNull();
     });
     it('extracts', () => {
       const res = extractPackageFile(tf1);
@@ -25,7 +21,7 @@ describe('lib/manager/terraform/extract', () => {
       expect(res.deps.filter(dep => dep.skipReason)).toHaveLength(5);
     });
     it('returns null if only local deps', () => {
-      expect(extractPackageFile(tf2, config)).toBeNull();
+      expect(extractPackageFile(tf2)).toBeNull();
     });
   });
 });
diff --git a/test/manager/travis/extract.spec.js b/test/manager/travis/extract.spec.js
index e24ac4ef27e9fcbd09ff2718749b68d93dabdd7d..8798027fb01ee2d681b365efdd99d28bc14ce767 100644
--- a/test/manager/travis/extract.spec.js
+++ b/test/manager/travis/extract.spec.js
@@ -2,16 +2,12 @@ const { extractPackageFile } = require('../../../lib/manager/travis/extract');
 
 describe('lib/manager/travis/extract', () => {
   describe('extractPackageFile()', () => {
-    let config;
-    beforeEach(() => {
-      config = {};
-    });
     it('returns empty if fails to parse', () => {
-      const res = extractPackageFile('blahhhhh:foo:@what\n', config);
+      const res = extractPackageFile('blahhhhh:foo:@what\n');
       expect(res).toBeNull();
     });
     it('returns results', () => {
-      const res = extractPackageFile('node_js:\n  - 6\n  - 8\n', config);
+      const res = extractPackageFile('node_js:\n  - 6\n  - 8\n');
       expect(res).toMatchSnapshot();
       expect(res.deps).toHaveLength(1);
     });
diff --git a/test/manager/travis/package.spec.js b/test/manager/travis/package.spec.js
index b2d791495f227202e3b019ba1fa537c16ebbe1d6..a85168e47a70b2336d817884620710757c645c89 100644
--- a/test/manager/travis/package.spec.js
+++ b/test/manager/travis/package.spec.js
@@ -1,5 +1,6 @@
 const node = require('../../../lib/manager/travis/package');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
+/** @type any */
 const githubDatasource = require('../../../lib/datasource/github');
 
 jest.mock('../../../lib/datasource/github');
diff --git a/test/util/env.spec.js b/test/util/env.spec.js
index 237a173ed967295f82880775530f750d025f9468..c5ed09400aebe9920e33cb29f1681c8f6a32a2f9 100644
--- a/test/util/env.spec.js
+++ b/test/util/env.spec.js
@@ -11,7 +11,15 @@ describe('getChildProcess environment when trustlevel set to low', () => {
     envVars.forEach(env => delete process.env[env]);
   });
   it('returns default environment variables', () => {
-    expect(getChildProcessEnv()).toHaveProperty(...envVars);
+    expect(getChildProcessEnv()).toMatchInlineSnapshot(`
+      Object {
+        "HOME": "HOME",
+        "HTTPS_PROXY": "HTTPS_PROXY",
+        "HTTP_PROXY": "HTTP_PROXY",
+        "NO_PROXY": "NO_PROXY",
+        "PATH": "PATH",
+      }
+    `);
   });
   it('returns environment variable only if defined', () => {
     delete process.env.PATH;
@@ -19,7 +27,16 @@ describe('getChildProcess environment when trustlevel set to low', () => {
   });
   it('returns custom environment variables if passed and defined', () => {
     process.env.LANG = 'LANG';
-    expect(getChildProcessEnv(['LANG'])).toHaveProperty(...envVars, 'LANG');
+    expect(getChildProcessEnv(['LANG'])).toMatchInlineSnapshot(`
+      Object {
+        "HOME": "HOME",
+        "HTTPS_PROXY": "HTTPS_PROXY",
+        "HTTP_PROXY": "HTTP_PROXY",
+        "LANG": "LANG",
+        "NO_PROXY": "NO_PROXY",
+        "PATH": "PATH",
+      }
+    `);
     delete process.env.LANG;
   });
 
diff --git a/test/util/host-rules.spec.js b/test/util/host-rules.spec.js
index 260d45c1cfc03ca69f8958a584724209c93da7ac..7ba8f439aa0a50480c5be44a8f22e008b76feff8 100644
--- a/test/util/host-rules.spec.js
+++ b/test/util/host-rules.spec.js
@@ -43,6 +43,7 @@ describe('util/host-rules', () => {
   });
   describe('find()', () => {
     it('warns and returns empty for bad search', () => {
+      // @ts-ignore
       expect(find({ abc: 'def' })).toEqual({});
     });
     it('needs exact host matches', () => {
diff --git a/test/versioning/docker.spec.js b/test/versioning/docker.spec.js
index a3a7b8f86207327919d878708e8936833e3e9d58..345aa31c0b7b914c6494002f48aee8521da9de6d 100644
--- a/test/versioning/docker.spec.js
+++ b/test/versioning/docker.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const docker = require('../../lib/versioning/docker');
 const semver = require('../../lib/versioning/semver');
 
@@ -110,6 +111,7 @@ describe('docker.', () => {
         ['2.0.1', '1.2.3'],
         ['1.2.3', '0.9.5'],
       ].forEach(pair => {
+        // @ts-ignore
         expect(docker.sortVersions(...pair)).toBe(semver.sortVersions(...pair));
       });
     });
diff --git a/test/website-docs.spec.js b/test/website-docs.spec.js
index f484442d4f125a396e99b9c649749c887875f492..1c95febf0ea10049d97d0f1d3c09e7b15a7ae664 100644
--- a/test/website-docs.spec.js
+++ b/test/website-docs.spec.js
@@ -86,6 +86,7 @@ describe('docs', () => {
   // Lists through each option in the relatedOptions array to be able to locate the exact element which causes error, in case of one
   it('has valid relateOptions values', () => {
     relatedOptions.forEach(relOption => {
+      // @ts-ignore
       expect(allOptionNames).toContainOption(relOption);
     });
   });
diff --git a/test/workers/branch/automerge.spec.js b/test/workers/branch/automerge.spec.js
index 3fbdd5cd55c0f59efe0e1a3feb4e5153a55aa20a..4f511dba021a9b790ddce19433c603dd55719bc5 100644
--- a/test/workers/branch/automerge.spec.js
+++ b/test/workers/branch/automerge.spec.js
@@ -1,6 +1,9 @@
 const { tryBranchAutomerge } = require('../../../lib/workers/branch/automerge');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/automerge', () => {
   describe('tryBranchAutomerge', () => {
     let config;
diff --git a/test/workers/branch/check-existing.spec.js b/test/workers/branch/check-existing.spec.js
index 05ae5bc5eb12fbd7d770d058770bfcecd8f5d2a8..1835bda7eb8bd6bab63089b200b9cd068e479d62 100644
--- a/test/workers/branch/check-existing.spec.js
+++ b/test/workers/branch/check-existing.spec.js
@@ -3,6 +3,9 @@ const {
 } = require('../../../lib/workers/branch/check-existing');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/check-existing', () => {
   describe('prAlreadyExisted', () => {
     let config;
diff --git a/test/workers/branch/commit.spec.js b/test/workers/branch/commit.spec.js
index ca3285175f1dcc1acfd1cc5b313e3b042b8de978..bbd581400a2fb9ab0a2ee685b871989f353370c4 100644
--- a/test/workers/branch/commit.spec.js
+++ b/test/workers/branch/commit.spec.js
@@ -1,6 +1,9 @@
 const { commitFilesToBranch } = require('../../../lib/workers/branch/commit');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/automerge', () => {
   describe('commitFilesToBranch', () => {
     let config;
diff --git a/test/workers/branch/get-updated.spec.js b/test/workers/branch/get-updated.spec.js
index a00e4e988052fb730f12e0d5d3c89ff45b44b293..503c0bf8fa1cbfed6319b8a63eb1bcf87a17bcdb 100644
--- a/test/workers/branch/get-updated.spec.js
+++ b/test/workers/branch/get-updated.spec.js
@@ -1,10 +1,15 @@
+/** @type any */
 const composer = require('../../../lib/manager/composer');
+/** @type any */
 const npm = require('../../../lib/manager/npm');
 const {
   getUpdatedPackageFiles,
 } = require('../../../lib/workers/branch/get-updated');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/get-updated', () => {
   describe('getUpdatedPackageFiles()', () => {
     let config;
diff --git a/test/workers/branch/index.spec.js b/test/workers/branch/index.spec.js
index e7f847cafadf8696a6d6c3c0669734bfb576f5ef..11970153cc16b2cc64acf7a67feb0b2c1b08209c 100644
--- a/test/workers/branch/index.spec.js
+++ b/test/workers/branch/index.spec.js
@@ -1,14 +1,22 @@
 const branchWorker = require('../../../lib/workers/branch');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
 const schedule = require('../../../lib/workers/branch/schedule');
+/** @type any */
 const checkExisting = require('../../../lib/workers/branch/check-existing');
+/** @type any */
 const parent = require('../../../lib/workers/branch/parent');
+/** @type any */
 const npmPostExtract = require('../../../lib/manager/npm/post-update');
+/** @type any */
 const commit = require('../../../lib/workers/branch/commit');
 const statusChecks = require('../../../lib/workers/branch/status-checks');
+/** @type any */
 const automerge = require('../../../lib/workers/branch/automerge');
+/** @type any */
 const prWorker = require('../../../lib/workers/pr');
+/** @type any */
 const getUpdated = require('../../../lib/workers/branch/get-updated');
 const { appSlug } = require('../../../lib/config/app-strings');
 
@@ -22,6 +30,9 @@ jest.mock('../../../lib/workers/branch/automerge');
 jest.mock('../../../lib/workers/branch/commit');
 jest.mock('../../../lib/workers/pr');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch', () => {
   describe('processBranch', () => {
     let config;
diff --git a/test/workers/branch/lock-files/index.spec.js b/test/workers/branch/lock-files/index.spec.js
index ee8c1df0b69de4fb5a446586430bcb523a205143..6c829471af1b1b2b3d98bb2bdfc15134d15fdba3 100644
--- a/test/workers/branch/lock-files/index.spec.js
+++ b/test/workers/branch/lock-files/index.spec.js
@@ -1,15 +1,22 @@
+/** @type any */
 const fs = require('fs-extra');
 const lockFiles = require('../../../../lib/manager/npm/post-update');
 const defaultConfig = require('../../../../lib/config/defaults').getConfig();
 // const upath = require('upath');
 
+/** @type any */
 const npm = require('../../../../lib/manager/npm/post-update/npm');
+/** @type any */
 const yarn = require('../../../../lib/manager/npm/post-update/yarn');
+/** @type any */
 const pnpm = require('../../../../lib/manager/npm/post-update/pnpm');
 const lerna = require('../../../../lib/manager/npm/post-update/lerna');
 
 const hostRules = require('../../../../lib/util/host-rules');
 
+/** @type any */
+const platform = global.platform;
+
 hostRules.find = jest.fn(() => ({
   token: 'abc',
 }));
diff --git a/test/workers/branch/lock-files/lerna.spec.js b/test/workers/branch/lock-files/lerna.spec.js
index 06adb3ac972a77112baf410a106dbaa67017ab3a..a54bb660b9b7adcf23c098964a1dce5cc2b41695 100644
--- a/test/workers/branch/lock-files/lerna.spec.js
+++ b/test/workers/branch/lock-files/lerna.spec.js
@@ -3,6 +3,9 @@ const lernaHelper = require('../../../../lib/manager/npm/post-update/lerna');
 
 jest.mock('child-process-promise');
 
+/** @type any */
+const platform = global.platform;
+
 describe('generateLockFiles()', () => {
   it('returns if no lernaClient', async () => {
     const res = await lernaHelper.generateLockFiles(undefined, 'some-dir', {});
diff --git a/test/workers/branch/lock-files/npm.spec.js b/test/workers/branch/lock-files/npm.spec.js
index adcc3228c7739c909d2bee78129f0e9e809ed3b2..41914eb689aa24ec7ef756c6de7b56d07da265cf 100644
--- a/test/workers/branch/lock-files/npm.spec.js
+++ b/test/workers/branch/lock-files/npm.spec.js
@@ -6,6 +6,7 @@ jest.mock('get-installed-path');
 
 getInstalledPath.mockImplementation(() => null);
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const npmHelper = require('../../../../lib/manager/npm/post-update/npm');
diff --git a/test/workers/branch/lock-files/pnpm.spec.js b/test/workers/branch/lock-files/pnpm.spec.js
index 92ab3940047cd174c2145a9ca8b187b0f64122ee..75d6f4a4bbf04a02b0c56bfb06eb329d87e6a677 100644
--- a/test/workers/branch/lock-files/pnpm.spec.js
+++ b/test/workers/branch/lock-files/pnpm.spec.js
@@ -6,6 +6,7 @@ jest.mock('get-installed-path');
 
 getInstalledPath.mockImplementation(() => null);
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const pnpmHelper = require('../../../../lib/manager/npm/post-update/pnpm');
diff --git a/test/workers/branch/lock-files/yarn.spec.js b/test/workers/branch/lock-files/yarn.spec.js
index 7933d717695cfec1e4a949c04decb0b343a6d0de..f43c879021972389357e063efc17fa6603718ef8 100644
--- a/test/workers/branch/lock-files/yarn.spec.js
+++ b/test/workers/branch/lock-files/yarn.spec.js
@@ -6,6 +6,7 @@ jest.mock('get-installed-path');
 
 getInstalledPath.mockImplementation(() => null);
 
+/** @type any */
 const fs = require('fs-extra');
 const { exec } = require('child-process-promise');
 const yarnHelper = require('../../../../lib/manager/npm/post-update/yarn');
diff --git a/test/workers/branch/parent.spec.js b/test/workers/branch/parent.spec.js
index 876a3bdc2ec92b2c7208c9f8734694393f140ac6..192425c3d9571595b5b4baf970852c2404afea86 100644
--- a/test/workers/branch/parent.spec.js
+++ b/test/workers/branch/parent.spec.js
@@ -1,5 +1,8 @@
 const { getParentBranch } = require('../../../lib/workers/branch/parent');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/parent', () => {
   describe('getParentBranch(config)', () => {
     let config;
diff --git a/test/workers/branch/schedule.spec.js b/test/workers/branch/schedule.spec.js
index 3026203aeb226ebfabb9643d18d2bdb125bfc44a..8c0afdd46e465c252a03a4ad96762cc7143508d3 100644
--- a/test/workers/branch/schedule.spec.js
+++ b/test/workers/branch/schedule.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const mockDate = require('mockdate');
 const schedule = require('../../../lib/workers/branch/schedule');
 
diff --git a/test/workers/branch/status-checks.spec.js b/test/workers/branch/status-checks.spec.js
index 0f2ab550aa1afe23a8a1bbe9ed22a062feb62f26..17fec24c5fa5372bb5c2ae19f61e326ff3bbe245 100644
--- a/test/workers/branch/status-checks.spec.js
+++ b/test/workers/branch/status-checks.spec.js
@@ -3,6 +3,9 @@ const {
 } = require('../../../lib/workers/branch/status-checks');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/branch/status-checks', () => {
   describe('setUnpublishable', () => {
     let config;
diff --git a/test/workers/global/autodiscover.spec.js b/test/workers/global/autodiscover.spec.js
index bbd5adc57924254de5529a56328250509d27545a..1f5a3b70d99ed38987581d304ffef21f60309f58 100644
--- a/test/workers/global/autodiscover.spec.js
+++ b/test/workers/global/autodiscover.spec.js
@@ -27,7 +27,7 @@ describe('lib/workers/global/autodiscover', () => {
     hostRules.find = jest.fn(() => ({
       token: 'abc',
     }));
-    ghApi.getRepos = jest.fn(() => []);
+    ghApi.getRepos = jest.fn(() => Promise.resolve([]));
     const res = await autodiscoverRepositories(config);
     expect(res).toEqual(config);
   });
@@ -37,7 +37,7 @@ describe('lib/workers/global/autodiscover', () => {
     hostRules.find = jest.fn(() => ({
       token: 'abc',
     }));
-    ghApi.getRepos = jest.fn(() => [{}, {}]);
+    ghApi.getRepos = jest.fn(() => Promise.resolve([{}, {}]));
     const res = await autodiscoverRepositories(config);
     expect(res.repositories).toHaveLength(2);
   });
@@ -48,7 +48,9 @@ describe('lib/workers/global/autodiscover', () => {
     hostRules.find = jest.fn(() => ({
       token: 'abc',
     }));
-    ghApi.getRepos = jest.fn(() => ['project/repo', 'project/another-repo']);
+    ghApi.getRepos = jest.fn(() =>
+      Promise.resolve(['project/repo', 'project/another-repo'])
+    );
     const res = await autodiscoverRepositories(config);
     expect(res.repositories).toEqual(['project/repo']);
   });
@@ -59,10 +61,9 @@ describe('lib/workers/global/autodiscover', () => {
     hostRules.find = jest.fn(() => ({
       token: 'abc',
     }));
-    ghApi.getRepos = jest.fn(() => [
-      'another-project/repo',
-      'another-project/another-repo',
-    ]);
+    ghApi.getRepos = jest.fn(() =>
+      Promise.resolve(['another-project/repo', 'another-project/another-repo'])
+    );
     const res = await autodiscoverRepositories(config);
     expect(res).toEqual(config);
   });
diff --git a/test/workers/global/index.spec.js b/test/workers/global/index.spec.js
index cda86e3c426bbb0d17c6e444ecee99429529bc70..27f5212f04c0aee8614d32d84c6b476c4bd92e09 100644
--- a/test/workers/global/index.spec.js
+++ b/test/workers/global/index.spec.js
@@ -1,6 +1,8 @@
 const globalWorker = require('../../../lib/workers/global');
 const repositoryWorker = require('../../../lib/workers/repository');
+/** @type any */
 const configParser = require('../../../lib/config');
+/** @type any */
 const platform = require('../../../lib/platform');
 
 jest.mock('../../../lib/platform');
diff --git a/test/workers/pr/changelog/index.spec.js b/test/workers/pr/changelog/index.spec.js
index 16989a7b331b17491a29a6baf5c0d548b023fc12..1bc3c6d435af5a38ff9aa6263fac729cb1f1a940 100644
--- a/test/workers/pr/changelog/index.spec.js
+++ b/test/workers/pr/changelog/index.spec.js
@@ -1,8 +1,11 @@
-import ghGot from '../../../../lib/platform/github/gh-got-wrapper';
+import { api } from '../../../../lib/platform/github/gh-got-wrapper';
 
 jest.mock('../../../../lib/platform/github/gh-got-wrapper');
 jest.mock('../../../../lib/datasource/npm');
 
+/** @type any */
+const ghGot = api.get;
+
 const hostRules = require('../../../../lib/util/host-rules');
 
 const { getChangeLogJSON } = require('../../../../lib/workers/pr/changelog');
diff --git a/test/workers/pr/index.spec.js b/test/workers/pr/index.spec.js
index 1be7083c53c56d3210af4e6fd904b8d28ac0bad4..749eccd37181f03339840f01b617639458da28cb 100644
--- a/test/workers/pr/index.spec.js
+++ b/test/workers/pr/index.spec.js
@@ -1,8 +1,13 @@
 const prWorker = require('../../../lib/workers/pr');
+/** @type any */
 const changelogHelper = require('../../../lib/workers/pr/changelog');
 const defaultConfig = require('../../../lib/config/defaults').getConfig();
 
 jest.mock('../../../lib/workers/pr/changelog');
+
+/** @type any */
+const platform = global.platform;
+
 changelogHelper.getChangeLogJSON = jest.fn();
 changelogHelper.getChangeLogJSON.mockReturnValue({
   project: {
@@ -98,6 +103,7 @@ describe('workers/pr', () => {
     });
   });
   describe('ensurePr', () => {
+    /** @type any */
     let config;
     const existingPr = {
       displayNumber: 'Existing PR',
diff --git a/test/workers/repository/error-config.spec.js b/test/workers/repository/error-config.spec.js
index f97b2b0dc44ca71ad7d77b568e9c751edb906794..5031c62ece8be417a5c5c43dace191ca13428bd8 100644
--- a/test/workers/repository/error-config.spec.js
+++ b/test/workers/repository/error-config.spec.js
@@ -2,6 +2,9 @@ const {
   raiseConfigWarningIssue,
 } = require('../../../lib/workers/repository/error-config');
 
+/** @type any */
+const platform = global.platform;
+
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
diff --git a/test/workers/repository/extract/index.spec.js b/test/workers/repository/extract/index.spec.js
index a47b3fb94958fef2cefadcf536c7fe777500ad69..d78cafd6e2b2743495aa5a82c978c7c177890bb9 100644
--- a/test/workers/repository/extract/index.spec.js
+++ b/test/workers/repository/extract/index.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 const managerFiles = require('../../../../lib/workers/repository/extract/manager-files');
 const {
   extractAllDependencies,
diff --git a/test/workers/repository/extract/manager-files.spec.js b/test/workers/repository/extract/manager-files.spec.js
index 126d0d90870789522abf49d918722211f5428e43..259300fc657f913468a45f75b2b17eff6435cd2e 100644
--- a/test/workers/repository/extract/manager-files.spec.js
+++ b/test/workers/repository/extract/manager-files.spec.js
@@ -1,12 +1,17 @@
 const {
   getManagerPackageFiles,
 } = require('../../../../lib/workers/repository/extract/manager-files');
+/** @type any */
 const fileMatch = require('../../../../lib/workers/repository/extract/file-match');
 const npm = require('../../../../lib/manager/npm');
+/** @type any */
 const dockerfile = require('../../../../lib/manager/dockerfile');
 
 jest.mock('../../../../lib/workers/repository/extract/file-match');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/extract/manager-files', () => {
   describe('getManagerPackageFiles()', () => {
     let config;
diff --git a/test/workers/repository/finalise/prune.spec.js b/test/workers/repository/finalise/prune.spec.js
index 8a6288883d829650de5b5b37e84903b5dc5b31f0..f0a9d3153226ce004f656ea6573f3cf187c28caa 100644
--- a/test/workers/repository/finalise/prune.spec.js
+++ b/test/workers/repository/finalise/prune.spec.js
@@ -1,5 +1,9 @@
 const cleanup = require('../../../../lib/workers/repository/finalise/prune');
 
+/** @type any */
+const platform = global.platform;
+
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
diff --git a/test/workers/repository/finalise/validate.spec.js b/test/workers/repository/finalise/validate.spec.js
index cc1a8f6f4eb2db46dfec67aa449f79cbfc0b46c8..6bedf52f5904916fae01a3a2c7397a3611b34597 100644
--- a/test/workers/repository/finalise/validate.spec.js
+++ b/test/workers/repository/finalise/validate.spec.js
@@ -1,5 +1,8 @@
 const validate = require('../../../../lib/workers/repository/finalise/validate');
 
+/** @type any */
+const platform = global.platform;
+
 beforeEach(() => {
   jest.resetAllMocks();
 });
diff --git a/test/workers/repository/index.spec.js b/test/workers/repository/index.spec.js
index 5f42fba1be2b60872cadf71d057f2b508d43e38a..26a16de3e7b6471d8194db18cd1d3c12d17cc7d9 100644
--- a/test/workers/repository/index.spec.js
+++ b/test/workers/repository/index.spec.js
@@ -1,4 +1,5 @@
 const { renovateRepository } = require('../../../lib/workers/repository/index');
+/** @type any */
 const process = require('../../../lib/workers/repository/process');
 
 jest.mock('../../../lib/workers/repository/init');
diff --git a/test/workers/repository/init/apis.spec.js b/test/workers/repository/init/apis.spec.js
index b8820793765c2e92debf1e8420cf6a091da8b3cc..7bf16e3ebd9c664ae2348aaad5161b8b6eb0158d 100644
--- a/test/workers/repository/init/apis.spec.js
+++ b/test/workers/repository/init/apis.spec.js
@@ -4,6 +4,7 @@ jest.mock('../../../../lib/platform/github');
 
 describe('workers/repository/init/apis', () => {
   describe('initApis', () => {
+    /** @type any */
     let config;
     beforeEach(() => {
       config = require('../../../config/config/_fixtures');
diff --git a/test/workers/repository/init/base.spec.js b/test/workers/repository/init/base.spec.js
index 1d80b7989a8bfb529b656d0b22024961c6e12a94..184197e1565e0e13de93b1a461afd635ea0bd82e 100644
--- a/test/workers/repository/init/base.spec.js
+++ b/test/workers/repository/init/base.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -10,6 +11,9 @@ const {
   checkBaseBranch,
 } = require('../../../../lib/workers/repository/init/base');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/init/base', () => {
   describe('checkBaseBranch()', () => {
     it('errors', async () => {
diff --git a/test/workers/repository/init/config.spec.js b/test/workers/repository/init/config.spec.js
index 6d254cd9a9816d564eeef16f9b0ed18f8b28f809..7c81c6a2bb67be289ca94a8218a5c83c5908f998 100644
--- a/test/workers/repository/init/config.spec.js
+++ b/test/workers/repository/init/config.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -9,10 +10,14 @@ beforeEach(() => {
 const {
   mergeRenovateConfig,
 } = require('../../../../lib/workers/repository/init/config');
+/** @type any */
 const migrateValidate = require('../../../../lib/config/migrate-validate');
 
 jest.mock('../../../../lib/config/migrate-validate');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/init/config', () => {
   describe('mergeRenovateConfig()', () => {
     beforeEach(() => {
diff --git a/test/workers/repository/init/index.spec.js b/test/workers/repository/init/index.spec.js
index abe30c37e615c8fce83925e992738bfbf9b00cd9..8972907ecd1d13e3c28563c084419f61cf9a3a1b 100644
--- a/test/workers/repository/init/index.spec.js
+++ b/test/workers/repository/init/index.spec.js
@@ -1,4 +1,6 @@
+/** @type any */
 const base = require('../../../../lib/workers/repository/init/base');
+/** @type any */
 const apis = require('../../../../lib/workers/repository/init/apis');
 const { initRepo } = require('../../../../lib/workers/repository/init');
 
@@ -14,7 +16,7 @@ describe('workers/repository/init', () => {
     it('runs', async () => {
       base.checkBaseBranch.mockReturnValue({});
       apis.initApis.mockReturnValue({});
-      await initRepo({}, null);
+      await initRepo({});
     });
   });
 });
diff --git a/test/workers/repository/init/semantic.spec.js b/test/workers/repository/init/semantic.spec.js
index 022340adcf88a4cec69d6c25bdaeb0db4b2b369f..ba90dc29c06ae25fdaade301bd3b415b465c8270 100644
--- a/test/workers/repository/init/semantic.spec.js
+++ b/test/workers/repository/init/semantic.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -10,6 +11,9 @@ const {
   detectSemanticCommits,
 } = require('../../../../lib/workers/repository/init/semantic');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/init/semantic', () => {
   describe('detectSemanticCommits()', () => {
     it('returns config if already set', async () => {
diff --git a/test/workers/repository/init/vulnerability.spec.js b/test/workers/repository/init/vulnerability.spec.js
index adf55d3a1ad66b5819eafa225d78e1581ee73bd1..5cc3d1472e1f3cfa701cfa8ec4c0d480dc2b524f 100644
--- a/test/workers/repository/init/vulnerability.spec.js
+++ b/test/workers/repository/init/vulnerability.spec.js
@@ -10,6 +10,9 @@ const {
   detectVulnerabilityAlerts,
 } = require('../../../../lib/workers/repository/init/vulnerability');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/init/vulnerability', () => {
   describe('detectVulnerabilityAlerts()', () => {
     it('returns if alerts are missing', async () => {
diff --git a/test/workers/repository/master-issue.spec.js b/test/workers/repository/master-issue.spec.js
index 896cee0141b7f16b9a2565c2c85243545b3fbc09..6c4659e4cf8b6eb2cdabf662a8fc9f6f88ffb551 100644
--- a/test/workers/repository/master-issue.spec.js
+++ b/test/workers/repository/master-issue.spec.js
@@ -1,6 +1,10 @@
 const fs = require('fs');
 const masterIssue = require('../../../lib/workers/repository/master-issue');
 
+/** @type any */
+const platform = global.platform;
+
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -12,6 +16,7 @@ beforeEach(() => {
 
 async function dryRun(
   branches,
+  // eslint-disable-next-line no-shadow
   platform,
   ensureIssueClosingCalls = 0,
   ensureIssueCalls = 0,
diff --git a/test/workers/repository/onboarding/branch/index.spec.js b/test/workers/repository/onboarding/branch/index.spec.js
index 7e9cbd9fdd7159bdb42f0e6bd06fc39b864b24fd..e63d0d4fe131e36b42a1c58cb36a8203bf85ad66 100644
--- a/test/workers/repository/onboarding/branch/index.spec.js
+++ b/test/workers/repository/onboarding/branch/index.spec.js
@@ -5,6 +5,9 @@ const {
 
 jest.mock('../../../../../lib/workers/repository/onboarding/branch/rebase');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/onboarding/branch', () => {
   describe('checkOnboardingBranch', () => {
     let config;
diff --git a/test/workers/repository/onboarding/branch/rebase.spec.js b/test/workers/repository/onboarding/branch/rebase.spec.js
index 764b764b5109157491c1690a96a1d5bd513f9678..a7c2d326abcc0b692852e6a4ac93f68622508a09 100644
--- a/test/workers/repository/onboarding/branch/rebase.spec.js
+++ b/test/workers/repository/onboarding/branch/rebase.spec.js
@@ -3,6 +3,9 @@ const {
   rebaseOnboardingBranch,
 } = require('../../../../../lib/workers/repository/onboarding/branch/rebase');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/onboarding/branch/rebase', () => {
   describe('rebaseOnboardingBranch()', () => {
     let config;
diff --git a/test/workers/repository/onboarding/pr/index.spec.js b/test/workers/repository/onboarding/pr/index.spec.js
index a86fc10f813eb4491cbda235d45c4e59a951b866..a84a4996fb4f0553bb7b2cf2e585d3ac0ce0a7e1 100644
--- a/test/workers/repository/onboarding/pr/index.spec.js
+++ b/test/workers/repository/onboarding/pr/index.spec.js
@@ -4,6 +4,9 @@ const {
   ensureOnboardingPr,
 } = require('../../../../../lib/workers/repository/onboarding/pr');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/onboarding/pr', () => {
   describe('ensureOnboardingPr()', () => {
     let config;
diff --git a/test/workers/repository/process/deprecated.spec.js b/test/workers/repository/process/deprecated.spec.js
index 6db91efd0eb039335eba5256e3dcca5aaea522ab..b52abbaf48be5f501da8eef08a6dda2e690c1a11 100644
--- a/test/workers/repository/process/deprecated.spec.js
+++ b/test/workers/repository/process/deprecated.spec.js
@@ -2,6 +2,9 @@ const {
   raiseDeprecationWarnings,
 } = require('../../../../lib/workers/repository/process/deprecated');
 
+/** @type any */
+const platform = global.platform;
+
 describe('workers/repository/process/deprecated', () => {
   describe('raiseDeprecationWarnings()', () => {
     it('returns if onboarding', async () => {
diff --git a/test/workers/repository/process/extract-update.spec.js b/test/workers/repository/process/extract-update.spec.js
index 3dc4e18dafc62c924c59c6a1bfded3ab90ab64d0..bceaa51573f9a10f06f9b59e42234758b009c831 100644
--- a/test/workers/repository/process/extract-update.spec.js
+++ b/test/workers/repository/process/extract-update.spec.js
@@ -1,6 +1,7 @@
 const {
   extractAndUpdate,
 } = require('../../../../lib/workers/repository/process/extract-update');
+/** @type any */
 const branchify = require('../../../../lib/workers/repository/updates/branchify');
 
 jest.mock('../../../../lib/workers/repository/process/write');
diff --git a/test/workers/repository/process/fetch.spec.js b/test/workers/repository/process/fetch.spec.js
index 9ba8875427588afcbeaf78cbf02bb8f81be2b296..a722fb3a290eb82da4d82234899653e901c04e1b 100644
--- a/test/workers/repository/process/fetch.spec.js
+++ b/test/workers/repository/process/fetch.spec.js
@@ -3,6 +3,7 @@ const {
 } = require('../../../../lib/workers/repository/process/fetch');
 
 const npm = require('../../../../lib/manager/npm');
+/** @type any */
 const lookup = require('../../../../lib/workers/repository/process/lookup');
 
 jest.mock('../../../../lib/workers/repository/process/lookup');
diff --git a/test/workers/repository/process/index.spec.js b/test/workers/repository/process/index.spec.js
index 4c1337ca234a56873e5c1795f227de1412b61a0c..3f73348553518f5361c5a57462c7c18d1d84cb04 100644
--- a/test/workers/repository/process/index.spec.js
+++ b/test/workers/repository/process/index.spec.js
@@ -1,6 +1,7 @@
 const {
   processRepo,
 } = require('../../../../lib/workers/repository/process/index');
+/** @type any */
 const extractUpdate = require('../../../../lib/workers/repository/process/extract-update');
 
 jest.mock('../../../../lib/workers/repository/process/extract-update');
diff --git a/test/workers/repository/process/limits.spec.js b/test/workers/repository/process/limits.spec.js
index 15d876f4f0d0aabe27a72fc9aaeb6ccb5285b30d..036e8788b41242abd47bcc9b8b40ac758bc6828a 100644
--- a/test/workers/repository/process/limits.spec.js
+++ b/test/workers/repository/process/limits.spec.js
@@ -1,6 +1,10 @@
 const moment = require('moment');
+/** @type any */
 const limits = require('../../../../lib/workers/repository/process/limits');
 
+/** @type any */
+const platform = global.platform;
+
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
diff --git a/test/workers/repository/process/lookup/index.spec.js b/test/workers/repository/process/lookup/index.spec.js
index d53f2e2cb9065300f8954afea4b9eb4275e0130e..c53805d3dd1a7ffc0e6d6505944ed4ad5ac07771 100644
--- a/test/workers/repository/process/lookup/index.spec.js
+++ b/test/workers/repository/process/lookup/index.spec.js
@@ -7,6 +7,7 @@ const webpackJson = require('../../../../config/npm/_fixtures/webpack.json');
 const nextJson = require('../../../../config/npm/_fixtures/next.json');
 const vueJson = require('../../../../config/npm/_fixtures/vue.json');
 const typescriptJson = require('../../../../config/npm/_fixtures/typescript.json');
+/** @type any */
 const docker = require('../../../../../lib/datasource/docker');
 const defaults = require('../../../../../lib/config/defaults');
 
@@ -14,6 +15,7 @@ jest.mock('../../../../../lib/datasource/docker');
 
 qJson.latestVersion = '1.4.1';
 
+/** @type any */
 let config;
 
 describe('workers/repository/process/lookup', () => {
diff --git a/test/workers/repository/process/write.spec.js b/test/workers/repository/process/write.spec.js
index 167d1828b671d5001df4d4ad76f99a4f642d2a09..3ea14619a5f1cd9dce89e1a7e6b4d3055cbc1f95 100644
--- a/test/workers/repository/process/write.spec.js
+++ b/test/workers/repository/process/write.spec.js
@@ -1,7 +1,9 @@
 const {
   writeUpdates,
 } = require('../../../../lib/workers/repository/process/write');
+/** @type any */
 const branchWorker = require('../../../../lib/workers/branch');
+/** @type any */
 const limits = require('../../../../lib/workers/repository/process/limits');
 
 branchWorker.processBranch = jest.fn();
diff --git a/test/workers/repository/updates/branchify.spec.js b/test/workers/repository/updates/branchify.spec.js
index 1fb8b2c7380ff1fded7681cd4726be17fe78b549..628e0f28dfb146614fa31b6bdc089849958cf3f3 100644
--- a/test/workers/repository/updates/branchify.spec.js
+++ b/test/workers/repository/updates/branchify.spec.js
@@ -1,3 +1,4 @@
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
@@ -9,6 +10,8 @@ beforeEach(() => {
 const {
   branchifyUpgrades,
 } = require('../../../../lib/workers/repository/updates/branchify');
+
+/** @type any */
 const {
   flattenUpdates,
 } = require('../../../../lib/workers/repository/updates/flatten');
diff --git a/test/workers/repository/updates/flatten.spec.js b/test/workers/repository/updates/flatten.spec.js
index b118a958a0c076a1de77fc4d1190937f3c39b66e..2cde0443390482c2af964e3f73db3470a343f293 100644
--- a/test/workers/repository/updates/flatten.spec.js
+++ b/test/workers/repository/updates/flatten.spec.js
@@ -2,6 +2,7 @@ const {
   flattenUpdates,
 } = require('../../../../lib/workers/repository/updates/flatten');
 
+/** @type any */
 let config;
 beforeEach(() => {
   jest.resetAllMocks();
diff --git a/tsconfig.app.json b/tsconfig.app.json
index 19cea95f7afc2c18539b46930354cb08e6f7dc58..91698e6057a8c963b88b31760d07d4453416df5e 100644
--- a/tsconfig.app.json
+++ b/tsconfig.app.json
@@ -2,7 +2,7 @@
   "extends": "./tsconfig",
   "compilerOptions": {
     "resolveJsonModule": false,
-    "isolatedModules": false,
+    "isolatedModules": true,
     "sourceMap": false,
     "types": ["node"]
   },
diff --git a/tsconfig.json b/tsconfig.json
index 814df428d8b5f35449ca183fd0e9cd4ac7151e06..d05ddae809a2441a3c27d2c4ce8ca9cff7000852 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,15 +1,17 @@
 {
   "compilerOptions": {
     "strict": true,
+    "noImplicitAny": false /* required for js files */,
+    "strictNullChecks": false /* required for js files */,
     "outDir": "./dist",
     "target": "es2018",
     "allowJs": true,
-    "checkJs": false,
+    "checkJs": true,
     "module": "commonjs",
     "sourceMap": true,
     "allowSyntheticDefaultImports": true,
     "esModuleInterop": true,
-    "resolveJsonModule": true,
+    "resolveJsonModule": false,
     "isolatedModules": true,
     "lib": ["es2018"],
     "types": ["node", "jest"]