diff --git a/lib/config/index.js b/lib/config/index.js
index 97c850a381c6df6e88057f5b23d716bd1a049005..81769486f56a5ff5c21301db2e9c195beb2176ad 100644
--- a/lib/config/index.js
+++ b/lib/config/index.js
@@ -123,9 +123,10 @@ function mergeChildConfig(parentConfig, childConfig) {
     ) {
       logger.trace(`mergeable option: ${option.name}`);
       if (option.type === 'list') {
-        config[option.name] = (parentConfig[option.name] || []).concat(
-          config[option.name] || []
-        );
+        config[option.name] = [
+          ...(parentConfig[option.name] || []),
+          ...(config[option.name] || []),
+        ];
       } else {
         config[option.name] = {
           ...parentConfig[option.name],
diff --git a/lib/config/migrate-validate.js b/lib/config/migrate-validate.js
index ec33e6ef5f3949028a1f889037d46525d3697c2e..11be51a91f37507ad50b02d8cf1dcaae0e67a9c3 100644
--- a/lib/config/migrate-validate.js
+++ b/lib/config/migrate-validate.js
@@ -24,10 +24,10 @@ function migrateAndValidate(config, input) {
   if (errors && errors.length) {
     logger.info({ errors }, 'Found renovate config errors');
   }
-  massagedConfig.errors = (config.errors || []).concat(errors);
+  massagedConfig.errors = [...(config.errors || []), ...errors];
   if (!config.repoIsOnboarded) {
     // TODO #556 - enable warnings in real PRs
-    massagedConfig.warnings = (config.warnings || []).concat(warnings);
+    massagedConfig.warnings = [...(config.warnings || []), ...warnings];
   }
   return massagedConfig;
 }
diff --git a/lib/config/presets.js b/lib/config/presets.js
index 8ff99198881a4d56d0dff77784286403ba6fca17..62c101bbd4d6c42edfb640d7a7f76bbfdc387d9c 100644
--- a/lib/config/presets.js
+++ b/lib/config/presets.js
@@ -54,10 +54,10 @@ async function resolveConfigPresets(inputConfig, existingPresets = []) {
             fetchedPreset = {};
           }
         }
-        const presetConfig = await resolveConfigPresets(
-          fetchedPreset,
-          existingPresets.concat([preset])
-        );
+        const presetConfig = await resolveConfigPresets(fetchedPreset, [
+          ...existingPresets,
+          ...[preset],
+        ]);
         config = configParser.mergeChildConfig(config, presetConfig);
       }
     }
diff --git a/lib/config/validation.js b/lib/config/validation.js
index e0fe44d25eb23575bb8ce7c91f109e4e4f6bca3a..a62d64b5f442cbb0c9e82d30755088d3685fe56e 100644
--- a/lib/config/validation.js
+++ b/lib/config/validation.js
@@ -90,8 +90,8 @@ function validateConfig(config) {
             val.forEach(subval => {
               if (isObject(subval)) {
                 const subValidation = module.exports.validateConfig(subval);
-                warnings = warnings.concat(subValidation.warnings);
-                errors = errors.concat(subValidation.errors);
+                warnings = [...warnings, ...subValidation.warnings];
+                errors = [...errors, ...subValidation.errors];
               }
             });
           }
@@ -105,8 +105,8 @@ function validateConfig(config) {
         } else if (type === 'json') {
           if (isObject(val)) {
             const subValidation = module.exports.validateConfig(val);
-            warnings = warnings.concat(subValidation.warnings);
-            errors = errors.concat(subValidation.errors);
+            warnings = [...warnings, ...subValidation.warnings];
+            errors = [...errors, ...subValidation.errors];
           } else {
             errors.push({
               depName: 'Configuration Error',
diff --git a/lib/manager/index.js b/lib/manager/index.js
index 129908c4388b5c55f6ed711b6e048bc92f38332e..0b8d3ea014a57bc2c6b8f1c6967f95b26470b414 100644
--- a/lib/manager/index.js
+++ b/lib/manager/index.js
@@ -54,7 +54,7 @@ async function detectPackageFiles(config) {
     }
     if (files.length) {
       logger.info({ manager, files }, `Detected package files`);
-      packageFiles = packageFiles.concat(files);
+      packageFiles = [...packageFiles, ...files];
     }
   }
   logger.debug({ packageFiles }, 'All detected package files');
diff --git a/lib/manager/travis/package.js b/lib/manager/travis/package.js
index 4c3588a7f253145a233bfe08c5bf4e313a2673ae..c2855c40e41f777e9a10d6e4f72e9ceeb9a4c5dc 100644
--- a/lib/manager/travis/package.js
+++ b/lib/manager/travis/package.js
@@ -21,7 +21,7 @@ function getPackageUpdates(config) {
   }
   const newVersion = supportPolicy
     .map(policy => policies[policy])
-    .reduce((result, policy) => result.concat(policy), [])
+    .reduce((result, policy) => [...result, ...policy], [])
     .sort() // sort combined array
     .reverse() // we want to order latest to oldest
     .map(version => `${version}`); // convert to strings
diff --git a/lib/platform/github/gh-got-wrapper.js b/lib/platform/github/gh-got-wrapper.js
index b05f3b7f7fa6982cb71d1e8dd7596a88eb5a0321..9fd9943e7cb9bbc805e310bc8e09ba65385c8aec 100644
--- a/lib/platform/github/gh-got-wrapper.js
+++ b/lib/platform/github/gh-got-wrapper.js
@@ -38,9 +38,10 @@ async function get(path, opts, retries = 5) {
       // Check if result is paginated
       const linkHeader = parseLinkHeader(res.headers.link);
       if (linkHeader && linkHeader.next && linkHeader.next.page !== '11') {
-        res.body = res.body.concat(
-          (await get(linkHeader.next.url, opts, retries)).body
-        );
+        res.body = [
+          ...res.body,
+          ...(await get(linkHeader.next.url, opts, retries)).body,
+        ];
       }
     }
     if (method === 'get' && path.startsWith('repos/')) {
diff --git a/lib/platform/gitlab/gl-got-wrapper.js b/lib/platform/gitlab/gl-got-wrapper.js
index e517af745b250b6bf40fadcbbf41b83212db847e..364857d99204e51bd3c701efc6c5fbac9c74f016 100644
--- a/lib/platform/gitlab/gl-got-wrapper.js
+++ b/lib/platform/gitlab/gl-got-wrapper.js
@@ -16,9 +16,10 @@ async function get(path, opts, retries = 5) {
     try {
       const linkHeader = parseLinkHeader(res.headers.link);
       if (linkHeader && linkHeader.next) {
-        res.body = res.body.concat(
-          (await get(linkHeader.next.url, opts, retries)).body
-        );
+        res.body = [
+          ...res.body,
+          ...(await get(linkHeader.next.url, opts, retries)).body,
+        ];
       }
     } catch (err) {
       logger.warn({ err }, 'Pagination error');
diff --git a/lib/workers/branch/commit.js b/lib/workers/branch/commit.js
index 135b5b6ba1731310838bbd60a7ff6a6b9e4b2569..7222445021dce3bea3e855caf50a8ee5edcc2ee1 100644
--- a/lib/workers/branch/commit.js
+++ b/lib/workers/branch/commit.js
@@ -5,9 +5,10 @@ module.exports = {
 };
 
 async function commitFilesToBranch(config) {
-  const updatedFiles = config.updatedPackageFiles.concat(
-    config.updatedLockFiles
-  );
+  const updatedFiles = [
+    ...config.updatedPackageFiles,
+    ...config.updatedLockFiles,
+  ];
   if (updatedFiles && updatedFiles.length) {
     logger.debug(`${updatedFiles.length} file(s) to commit`);
     let commitMessage = handlebars.compile(config.commitMessage)(config);
diff --git a/lib/workers/dep-type/index.js b/lib/workers/dep-type/index.js
index a31e279d1316bccc02e5fb3c52037c911c63b3ba..6f660cc4a91ab29d1ce6d891219b996e619b8dc5 100644
--- a/lib/workers/dep-type/index.js
+++ b/lib/workers/dep-type/index.js
@@ -41,7 +41,7 @@ async function renovateDepType(packageContent, config) {
   const allUpgrades = await Promise.all(pkgWorkers);
   logger.trace({ config: allUpgrades }, `allUpgrades`);
   // Squash arrays into one
-  const combinedUpgrades = [].concat(...allUpgrades);
+  const combinedUpgrades = [...allUpgrades];
   logger.trace({ config: combinedUpgrades }, `combinedUpgrades`);
   return combinedUpgrades;
 }
diff --git a/lib/workers/package-file/index.js b/lib/workers/package-file/index.js
index c4da377906324760eca54dab7dcdf5a869589d72..0173e429e56fbdd3f7646dd53493a09f7fdf12c8 100644
--- a/lib/workers/package-file/index.js
+++ b/lib/workers/package-file/index.js
@@ -122,9 +122,10 @@ async function renovatePackageJson(input) {
   });
   logger.trace({ config: depTypeConfigs }, `depTypeConfigs`);
   for (const depTypeConfig of depTypeConfigs) {
-    upgrades = upgrades.concat(
-      await depTypeWorker.renovateDepType(config.content, depTypeConfig)
-    );
+    upgrades = [
+      ...upgrades,
+      ...(await depTypeWorker.renovateDepType(config.content, depTypeConfig)),
+    ];
   }
   if (
     config.lockFileMaintenance.enabled &&
diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js
index 69e57dab7856d70d0cd898a7921a01f775d96381..854efa3c47294adb6c6264ed0396886c958c0343 100644
--- a/lib/workers/repository/index.js
+++ b/lib/workers/repository/index.js
@@ -47,7 +47,7 @@ async function renovateRepository(repoConfig, token, loop = 1) {
         if (index === 0) {
           config = res;
         } else {
-          config.branches = config.branches.concat(res.branches);
+          config.branches = [...config.branches, ...res.branches];
         }
       }
       // istanbul ignore next
diff --git a/lib/workers/repository/init/base.js b/lib/workers/repository/init/base.js
index 49fdcffe0e20d15e0f6d74eb4c6888d9c78e22b8..41fb81b6ee653c92cd2761ea6a632de74e2489c7 100644
--- a/lib/workers/repository/init/base.js
+++ b/lib/workers/repository/init/base.js
@@ -20,7 +20,7 @@ async function checkBaseBranch(config) {
       logger.warn(message);
     }
   }
-  return { ...config, errors: config.errors.concat(error) };
+  return { ...config, errors: [...config.errors, ...error] };
 }
 
 module.exports = {
diff --git a/lib/workers/repository/onboarding/pr/config-description.js b/lib/workers/repository/onboarding/pr/config-description.js
index d54ca8742084d6e46d53fc9f51a1b615b43013e9..fdaf1b688c298d770c61deb64bd68609b78ff2b1 100644
--- a/lib/workers/repository/onboarding/pr/config-description.js
+++ b/lib/workers/repository/onboarding/pr/config-description.js
@@ -12,7 +12,7 @@ function getScheduleDesc(config) {
 function getDescriptionArray(config) {
   logger.debug('getDescriptionArray()');
   logger.trace({ config });
-  return (config.description || []).concat(getScheduleDesc(config));
+  return [...(config.description || []), ...getScheduleDesc(config)];
 }
 
 function getConfigDesc(config) {
diff --git a/lib/workers/repository/updates/branchify.js b/lib/workers/repository/updates/branchify.js
index ebea4b4ca45bfe055ff2c50daec61b7dd2c2ac76..ee3e316f6722afd9412f3443ee025faa50ae4476 100644
--- a/lib/workers/repository/updates/branchify.js
+++ b/lib/workers/repository/updates/branchify.js
@@ -36,7 +36,10 @@ function branchifyUpgrades(config) {
         branchName = handlebars.compile(upgrade.branchName)(upgrade);
       }
       branchUpgrades[branchName] = branchUpgrades[branchName] || [];
-      branchUpgrades[branchName] = [upgrade].concat(branchUpgrades[branchName]);
+      branchUpgrades[branchName] = [
+        ...[upgrade],
+        ...branchUpgrades[branchName],
+      ];
     }
   }
   logger.debug(`Returning ${Object.keys(branchUpgrades).length} branch(es)`);
@@ -58,8 +61,8 @@ function branchifyUpgrades(config) {
     : config.branchList;
   return {
     ...config,
-    errors: config.errors.concat(errors),
-    warnings: config.warnings.concat(warnings),
+    errors: [...config.errors, ...errors],
+    warnings: [...config.warnings, ...warnings],
     branches,
     branchList,
     upgrades: null,
diff --git a/lib/workers/repository/updates/determine.js b/lib/workers/repository/updates/determine.js
index 058864e760ddbc03c13186d080dc1da71c3c3116..077aa5fb9fbcd442b5645d64588ade5da681bdb3 100644
--- a/lib/workers/repository/updates/determine.js
+++ b/lib/workers/repository/updates/determine.js
@@ -17,9 +17,10 @@ async function determineRepoUpgrades(config) {
     logger.trace({ fullPackageFile: packageFile });
     let packageFileConfig = mergeChildConfig(config, packageFile);
     packageFileConfig = filterConfig(packageFileConfig, 'packageFile');
-    upgrades = upgrades.concat(
-      await packageFileWorker.renovatePackageFile(packageFileConfig)
-    );
+    upgrades = [
+      ...upgrades,
+      ...(await packageFileWorker.renovatePackageFile(packageFileConfig)),
+    ];
   }
   let semanticCommits;
   if (upgrades.length) {