diff --git a/.eslintrc.js b/.eslintrc.js
index def4988a60d7819e9a89710e88d7e76309948406..7e5e79deec20ae4dabbc0fcb026b44a1e054156f 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -208,6 +208,7 @@ module.exports = {
           'error',
           { devDependencies: true },
         ],
+        'no-console': 'off',
       },
     },
     {
diff --git a/lib/config-validator.ts b/lib/config-validator.ts
index 4cd144ed57dedbeb014864e3d62d3080863b3503..00d3176fc5917ee084b03b3ebe8dd4618dbabceb 100644
--- a/lib/config-validator.ts
+++ b/lib/config-validator.ts
@@ -16,8 +16,6 @@ import {
 
 let returnVal = 0;
 
-/* eslint-disable no-console */
-
 async function validate(
   desc: string,
   config: RenovateConfig,
@@ -131,6 +129,7 @@ type PackageJson = {
   }
   logger.info('Config validated successfully');
 })().catch((e) => {
+  // eslint-disable-next-line no-console
   console.error(e);
   process.exit(99);
 });
diff --git a/package.json b/package.json
index b985c5a7d48779d4a151e216a9dd58e27907e329..ea64cdbc034046d9e63a018d4151574dc38bba75 100644
--- a/package.json
+++ b/package.json
@@ -266,6 +266,7 @@
     "@types/fs-extra": "11.0.1",
     "@types/git-url-parse": "9.0.1",
     "@types/github-url-from-git": "1.5.1",
+    "@types/glob": "8.1.0",
     "@types/global-agent": "2.1.1",
     "@types/ini": "1.3.31",
     "@types/js-yaml": "4.0.5",
@@ -283,7 +284,7 @@
     "@types/semver": "7.3.13",
     "@types/semver-stable": "3.0.0",
     "@types/semver-utils": "1.1.1",
-    "@types/shelljs": "0.8.12",
+    "@types/tar": "6.1.4",
     "@types/traverse": "0.6.32",
     "@types/url-join": "4.0.1",
     "@types/validate-npm-package-name": "4.0.0",
@@ -323,8 +324,8 @@
     "npm-run-all": "4.1.5",
     "rimraf": "5.0.0",
     "semantic-release": "21.0.1",
-    "shelljs": "0.8.5",
     "strip-ansi": "6.0.1",
+    "tar": "6.1.13",
     "tmp-promise": "3.0.3",
     "ts-jest": "29.1.0",
     "ts-node": "10.9.1",
diff --git a/tools/check-fenced-code.mjs b/tools/check-fenced-code.mjs
index 4ecb8538f17a642f7d7a6085cfedc1d62dd6f398..cc9f6a1df55cca9233aa8014e277fb14f4d8c96a 100644
--- a/tools/check-fenced-code.mjs
+++ b/tools/check-fenced-code.mjs
@@ -2,7 +2,6 @@ import { promisify } from 'node:util';
 import fs from 'fs-extra';
 import g from 'glob';
 import MarkdownIt from 'markdown-it';
-import shell from 'shelljs';
 
 const glob = promisify(g);
 
@@ -30,11 +29,11 @@ function checkValidJson(file, token) {
   } catch (err) {
     issues += 1;
     if (process.env.CI) {
-      shell.echo(
+      console.log(
         `::error file=${file},line=${start},endLine=${end},title=${errorTitle}::${err.message}. ${errorBody}`
       );
     } else {
-      shell.echo(
+      console.log(
         `${errorTitle} (${file} lines ${start}-${end}): ${err.message}`
       );
     }
@@ -64,9 +63,9 @@ await (async () => {
   }
 
   if (issues) {
-    shell.echo(
+    console.error(
       `${issues} issues found. ${errorBody} See above for lines affected.`
     );
-    shell.exit(1);
+    process.exit(1);
   }
 })();
diff --git a/tools/check-git-version.mjs b/tools/check-git-version.mjs
index bd1b328035da9ea765ec6f527d730e17a4c39cc5..e9470d14fd1be0b4f1eaf4d692bb32c4c7c25034 100644
--- a/tools/check-git-version.mjs
+++ b/tools/check-git-version.mjs
@@ -1,5 +1,4 @@
 import semver from 'semver';
-import shell from 'shelljs';
 import { simpleGit } from 'simple-git';
 
 const GIT_MINIMUM_VERSION = '2.33.0';
@@ -11,7 +10,7 @@ await (async () => {
     const gitVersion = `${major}.${minor}.${patch}`;
     if (!installed || semver.lt(gitVersion, GIT_MINIMUM_VERSION)) {
       if (process.env.CI) {
-        shell.echo(
+        console.log(
           `::error ::Minimum Git version ${GIT_MINIMUM_VERSION} is required, found version '${gitVersion}'.`
         );
       } else {
@@ -20,10 +19,10 @@ await (async () => {
         );
       }
     }
-    shell.echo('Found git version: ', gitVersion);
+    console.log('Found git version: ', gitVersion);
     process.exit(0);
   } catch (err) {
-    shell.echo('ERROR:', err.message);
+    console.log('ERROR:', err.message);
     process.exit(1);
   }
 })();
diff --git a/tools/check-re2.mjs b/tools/check-re2.mjs
index 2b32b9f76c0529a2fc67ef59b61a55157d8d037f..861206f74fa9d617a4826c0289674e9ecffece12 100644
--- a/tools/check-re2.mjs
+++ b/tools/check-re2.mjs
@@ -1,14 +1,11 @@
-import shell from 'shelljs';
-
 await (async () => {
-  shell.echo('-n', 'Checking re2 ... ');
+  console.log('-n', 'Checking re2 ... ');
   try {
     const { default: RE2 } = await import('re2');
     new RE2('.*').exec('test');
-    shell.echo(`ok.`);
+    console.log(`ok.`);
   } catch (e) {
-    shell.echo(`error.\n${e}`);
-    shell.echo();
-    shell.exit(1);
+    console.error(`error.\n${e}`);
+    process.exit(1);
   }
 })();
diff --git a/tools/clean-cache.mjs b/tools/clean-cache.mjs
index 6e7a921f561e2f705b7ffd9eaf98860769ab5a2a..afcb31319085d7d9eb39a4bbb8b7651eff2e7d3c 100644
--- a/tools/clean-cache.mjs
+++ b/tools/clean-cache.mjs
@@ -5,7 +5,6 @@ import upath from 'upath';
 await (async () => {
   const tmpDir = process.env.RENOVATE_TMPDIR ?? tmpdir();
   const renovateDir = upath.join(tmpDir, 'renovate');
-  // eslint-disable-next-line no-console
   console.log('Removing ' + renovateDir);
   await remove(renovateDir);
 })();
diff --git a/tools/dispatch-release.mjs b/tools/dispatch-release.mjs
index 0d0f5545feb7cb9cba98ed3865a36df6f3912870..c8cb6f62c9573a2c83b955794ead3e9319d7624f 100644
--- a/tools/dispatch-release.mjs
+++ b/tools/dispatch-release.mjs
@@ -1,16 +1,15 @@
 import got from 'got';
-import shell from 'shelljs';
 import { options } from './utils/options.mjs';
 
 const version = options.release;
 const tag = options.tag || 'latest';
 const dry = options.dryRun;
 
-shell.echo(`Dispatching version: ${version}`);
+console.log(`Dispatching version: ${version}`);
 
 (async () => {
   if (dry) {
-    shell.echo('DRY-RUN: done.');
+    console.log('DRY-RUN: done.');
     return;
   }
   await got(
@@ -35,5 +34,5 @@ shell.echo(`Dispatching version: ${version}`);
   );
 })().catch((e) => {
   // Ignore for now
-  shell.echo(e.toString());
+  console.warn(e.toString());
 });
diff --git a/tools/generate-docs.ts b/tools/generate-docs.ts
index f19869daf342b2f86e94cc52df1cdbc0607902b8..4ef4a1af47b5970d1e200adeae46e1db912badda 100644
--- a/tools/generate-docs.ts
+++ b/tools/generate-docs.ts
@@ -1,5 +1,6 @@
 import { ERROR } from 'bunyan';
-import shell from 'shelljs';
+import fs from 'fs-extra';
+import * as tar from 'tar';
 import { getProblems, logger } from '../lib/logger';
 import { generateConfig } from './docs/config';
 import { generateDatasources } from './docs/datasources';
@@ -22,20 +23,13 @@ process.on('unhandledRejection', (err) => {
 (async () => {
   try {
     const dist = 'tmp/docs';
-    let r: shell.ShellString;
 
     logger.info('generating docs');
 
-    r = shell.mkdir('-p', `${dist}/`);
-    if (r.code) {
-      return;
-    }
+    await fs.mkdir(`${dist}/`, { recursive: true });
 
     logger.info('* static');
-    r = shell.cp('-r', 'docs/usage/.', `${dist}`);
-    if (r.code) {
-      return;
-    }
+    await fs.copy('docs/usage/.', `${dist}`);
 
     logger.info('* fetching open GitHub issues');
     const openItems = await getOpenGitHubItems();
@@ -79,16 +73,16 @@ process.on('unhandledRejection', (err) => {
     logger.info('* json-schema');
     await generateSchema(dist);
 
-    r = shell.exec('tar -czf ./tmp/docs.tgz -C ./tmp/docs .');
-    if (r.code) {
-      return;
-    }
+    await tar.create(
+      { file: './tmp/docs.tgz', cwd: './tmp/docs', gzip: true },
+      ['.']
+    );
   } catch (err) {
     logger.error({ err }, 'Unexpected error');
   } finally {
     const loggerErrors = getProblems().filter((p) => p.level >= ERROR);
     if (loggerErrors.length) {
-      shell.exit(1);
+      process.exit(1);
     }
   }
 })();
diff --git a/tools/generate-imports.mjs b/tools/generate-imports.mjs
index 755b3b687a06836346342f769e6d8a1be9e878e7..3e60f97e3ff44243e6de2fde28cfeb1e215c8869 100644
--- a/tools/generate-imports.mjs
+++ b/tools/generate-imports.mjs
@@ -3,22 +3,21 @@ import fs from 'fs-extra';
 import _glob from 'glob';
 import hasha from 'hasha';
 import minimatch from 'minimatch';
-import shell from 'shelljs';
 import upath from 'upath';
 
 const glob = util.promisify(_glob);
 
-shell.echo('generating imports');
+console.log('generating imports');
 const newFiles = new Set();
 
 if (!fs.existsSync('lib')) {
-  shell.echo('> missing sources');
-  shell.exit(0);
+  console.log('> missing sources');
+  process.exit(0);
 }
 
 if (!fs.existsSync('data')) {
-  shell.echo('> missing data folder');
-  shell.exit(0);
+  console.log('> missing data folder');
+  process.exit(0);
 }
 
 /**
@@ -124,7 +123,7 @@ async function generateData() {
     const rawFileContent = await fs.readFile(file, 'utf8');
     const value = JSON.stringify(rawFileContent);
 
-    shell.echo(`> ${key}`);
+    console.log(`> ${key}`);
     contentMapAssignments.push(`data.set('${key}', ${value});`);
   }
 
@@ -140,7 +139,7 @@ async function generateData() {
 }
 
 async function generateHash() {
-  shell.echo('generating hashes');
+  console.log('generating hashes');
   try {
     const hashMap = `export const hashMap = new Map<string, string>();`;
     /** @type {string[]} */
@@ -168,7 +167,7 @@ async function generateHash() {
       [hashMap, hashes.join('\n')].join('\n\n')
     );
   } catch (err) {
-    shell.echo('ERROR:', err.message);
+    console.log('ERROR:', err.message);
     process.exit(1);
   }
 }
@@ -179,13 +178,12 @@ await (async () => {
     await generateData();
     await generateHash();
     await Promise.all(
-      shell
-        .find('lib/**/*.generated.ts')
+      (await glob('lib/**/*.generated.ts'))
         .filter((f) => !newFiles.has(f))
         .map((file) => fs.remove(file))
     );
   } catch (e) {
-    shell.echo(e.toString());
-    shell.exit(1);
+    console.log(e.toString());
+    process.exit(1);
   }
 })();
diff --git a/tools/generate-schema.ts b/tools/generate-schema.ts
index fb7e3c27df5e92eda8ca33a309935be5548afd5e..ad897eab296e4c2342597f8cb8ec5eb787e85c90 100644
--- a/tools/generate-schema.ts
+++ b/tools/generate-schema.ts
@@ -1,5 +1,4 @@
 import { ERROR } from 'bunyan';
-import shell from 'shelljs';
 import { getProblems, logger } from '../lib/logger';
 import { generateSchema } from './docs/schema';
 
@@ -22,7 +21,7 @@ process.on('unhandledRejection', (err) => {
   } finally {
     const loggerErrors = getProblems().filter((p) => p.level >= ERROR);
     if (loggerErrors.length) {
-      shell.exit(1);
+      process.exit(1);
     }
   }
 })();
diff --git a/tools/release.mjs b/tools/release.mjs
index 748028a26ba2d00a6acd8bfd42d73e43a7846eeb..87d7e9f1ed375cde69eccd144f0f916b549afb12 100644
--- a/tools/release.mjs
+++ b/tools/release.mjs
@@ -1,9 +1,8 @@
-import shell from 'shelljs';
 import { options } from './utils/options.mjs';
 
 const version = options.release;
 
-shell.echo(`Publishing version: ${version}`);
+console.log(`Publishing version: ${version}`);
 
 // eslint-disable-next-line promise/valid-params,@typescript-eslint/no-floating-promises
 import('./dispatch-release.mjs').catch();
diff --git a/tools/static-data/generate-azure-pipelines-tasks.mjs b/tools/static-data/generate-azure-pipelines-tasks.mjs
index 413e70693c443d964805e6880802d8d39b7f7e23..e13d9e5d61a359ccac155d98ea30832bc17d2aa0 100644
--- a/tools/static-data/generate-azure-pipelines-tasks.mjs
+++ b/tools/static-data/generate-azure-pipelines-tasks.mjs
@@ -3,7 +3,6 @@ import { promisify } from 'node:util';
 import fs from 'fs-extra';
 import g from 'glob';
 import JSON5 from 'json5';
-import shell from 'shelljs';
 import Git from 'simple-git';
 import path from 'upath';
 import { updateJsonFile } from './utils.mjs';
@@ -20,7 +19,7 @@ const localPath = path.join(os.tmpdir(), 'azure-pipelines-tasks');
  *  5. After all the `task.json` files have been processed it writes the results to `./data/azure-pipelines-tasks.json`
  */
 await (async () => {
-  shell.echo('Generating azure pipelines tasks');
+  console.log('Generating azure pipelines tasks');
   await fs.ensureDir(localPath);
   const git = Git(localPath);
 
@@ -44,7 +43,7 @@ await (async () => {
   for (const file of files) {
     // Find all commits that have the file
     const revs = (await git.raw(['rev-list', 'HEAD', '--', file])).split('\n');
-    shell.echo(`Parsing ${file}`);
+    console.log(`Parsing ${file}`);
     for (const rev of revs) {
       try {
         // Get the content of the file at the commit
@@ -59,8 +58,8 @@ await (async () => {
           tasks[parsedContent.id.toLowerCase()]?.add(version) ??
           new Set([version]);
       } catch (e) {
-        shell.echo(`Failed to parse ${file} at ${rev}`);
-        shell.echo(e.toString());
+        console.error(`Failed to parse ${file} at ${rev}`);
+        console.error(e.toString());
       }
     }
   }
diff --git a/tools/static-data/generate-distro-info.mjs b/tools/static-data/generate-distro-info.mjs
index cedd4bacb4ccd5f7e7a90dfa2298c0c6fabe851a..21ccf3c7ecdab19ee144c748bc4d5982ef4a972e 100644
--- a/tools/static-data/generate-distro-info.mjs
+++ b/tools/static-data/generate-distro-info.mjs
@@ -1,5 +1,4 @@
 import got from 'got';
-import shell from 'shelljs';
 import { updateJsonFile } from './utils.mjs';
 
 const ubuntuUrl = 'https://debian.pages.debian.net/distro-info-data/ubuntu.csv';
@@ -60,7 +59,7 @@ async function update(url, file) {
 }
 
 await (async () => {
-  shell.echo('Generating distro info');
+  console.log('Generating distro info');
   await update(ubuntuUrl, `./data/ubuntu-distro-info.json`);
   await update(debianUrl, `./data/debian-distro-info.json`);
 })();
diff --git a/tools/static-data/generate-node-schedule.mjs b/tools/static-data/generate-node-schedule.mjs
index b3cd175aa836176611364f6d46ed5dceaf06791d..1f5e09afeecef0b6e7d76277744215caedc37e24 100644
--- a/tools/static-data/generate-node-schedule.mjs
+++ b/tools/static-data/generate-node-schedule.mjs
@@ -1,12 +1,11 @@
 import got from 'got';
-import shell from 'shelljs';
 import { updateJsonFile } from './utils.mjs';
 
 const dataUrl =
   'https://raw.githubusercontent.com/nodejs/LTS/HEAD/schedule.json';
 
 await (async () => {
-  shell.echo('Generating node schedule');
+  console.log('Generating node schedule');
   const { body } = await got(dataUrl);
   await updateJsonFile('./data/node-js-schedule.json', body);
 })();
diff --git a/tools/static-data/utils.mjs b/tools/static-data/utils.mjs
index 93cdbfd42b3cd919430106615f56f833eafa8280..d344e3fd8f9a54a0bbf8dcbb257c25b66c9a711d 100644
--- a/tools/static-data/utils.mjs
+++ b/tools/static-data/utils.mjs
@@ -1,5 +1,4 @@
 import fs from 'fs-extra';
-import shell from 'shelljs';
 
 /**
  * Update given file with new provided data.
@@ -8,10 +7,10 @@ import shell from 'shelljs';
  */
 export async function updateJsonFile(file, newData) {
   try {
-    shell.echo(`Updating ${file}`);
+    console.log(`Updating ${file}`);
     await fs.writeFile(file, newData);
   } catch (e) {
-    shell.echo(e.toString());
-    shell.exit(1);
+    console.error(e.toString());
+    process.exit(1);
   }
 }
diff --git a/tools/utils/exec.mjs b/tools/utils/exec.mjs
new file mode 100644
index 0000000000000000000000000000000000000000..23b8f37064d21e0d7f97106dfb2c13cefc78ec90
--- /dev/null
+++ b/tools/utils/exec.mjs
@@ -0,0 +1,13 @@
+import { execSync } from 'node:child_process';
+
+const maxBuffer = 20 * 1024 * 1024;
+
+/**
+ * Execute a command
+ * @param {string} cmd
+ * @returns {string}
+ */
+export function exec(cmd) {
+  // args from shelljs
+  return execSync(cmd, { maxBuffer, stdio: [0, 1, 2] }).toString('utf-8');
+}
diff --git a/tools/verify.mjs b/tools/verify.mjs
index ebc9a62f544e3d7d85479e7563be2be265577916..804fe9194ec8fcb17d82a3a7d6b774f6ade554a5 100644
--- a/tools/verify.mjs
+++ b/tools/verify.mjs
@@ -1,8 +1,5 @@
-import shell from 'shelljs';
+import { exec } from './utils/exec.mjs';
 
-shell.echo(`Verifying ...`);
+console.log(`Verifying ...`);
 
-const res = shell.exec(`npm whoami`);
-if (res.code !== 0) {
-  shell.exit(2);
-}
+exec(`npm whoami`);
diff --git a/yarn.lock b/yarn.lock
index 6d413acc11dc33cbecc953e414d7d35932ebeb37..175293a8f3a9e61210e4db4544aacb56034b9676 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2916,12 +2916,12 @@
   resolved "https://registry.yarnpkg.com/@types/github-url-from-git/-/github-url-from-git-1.5.1.tgz#73b1b6fa0490b903f50e7d7d9897d91769a15d8d"
   integrity sha512-B/SvVZMrLRUI9mOoguNNz58gV8A5PDtcGIaUe5PYmzAUTsIJ+ZAn/ujwBIuGIU3mRHY5SfV9dyWfnhOWtOVh6A==
 
-"@types/glob@~7.2.0":
-  version "7.2.0"
-  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
-  integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
+"@types/glob@8.1.0":
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/@types/glob/-/glob-8.1.0.tgz#b63e70155391b0584dce44e7ea25190bbc38f2fc"
+  integrity sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==
   dependencies:
-    "@types/minimatch" "*"
+    "@types/minimatch" "^5.1.2"
     "@types/node" "*"
 
 "@types/global-agent@2.1.1":
@@ -3051,7 +3051,7 @@
   resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9"
   integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==
 
-"@types/minimatch@*":
+"@types/minimatch@^5.1.2":
   version "5.1.2"
   resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
   integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
@@ -3135,14 +3135,6 @@
   resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
   integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
 
-"@types/shelljs@0.8.12":
-  version "0.8.12"
-  resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.8.12.tgz#79dc9632af7d5ca1b5afb65a6bfc1422d79b5fa0"
-  integrity sha512-ZA8U81/gldY+rR5zl/7HSHrG2KDfEb3lzG6uCUDhW1DTQE9yC/VBQ45fXnXq8f3CgInfhZmjtdu/WOUlrXRQUg==
-  dependencies:
-    "@types/glob" "~7.2.0"
-    "@types/node" "*"
-
 "@types/sinon@^10.0.10":
   version "10.0.14"
   resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.14.tgz#6bd18b088ea5ef1e5153fa37d0b68e91eff09e22"
@@ -3160,6 +3152,14 @@
   resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
   integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
 
+"@types/tar@6.1.4":
+  version "6.1.4"
+  resolved "https://registry.yarnpkg.com/@types/tar/-/tar-6.1.4.tgz#cf8497e1ebdc09212fd51625cd2eb5ca18365ad1"
+  integrity sha512-Cp4oxpfIzWt7mr2pbhHT2OTXGMAL0szYCzuf8lRWyIMCgsx6/Hfc3ubztuhvzXHXgraTQxyOCmmg7TDGIMIJJQ==
+  dependencies:
+    "@types/node" "*"
+    minipass "^4.0.0"
+
 "@types/tmp@0.2.3":
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.3.tgz#908bfb113419fd6a42273674c00994d40902c165"
@@ -5654,7 +5654,7 @@ glob@^6.0.1:
     once "^1.3.0"
     path-is-absolute "^1.0.0"
 
-glob@^7.0.0, glob@^7.1.3, glob@^7.1.4:
+glob@^7.1.3, glob@^7.1.4:
   version "7.2.3"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
   integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -6097,11 +6097,6 @@ internal-slot@^1.0.5:
     has "^1.0.3"
     side-channel "^1.0.4"
 
-interpret@^1.0.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
-  integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
-
 into-stream@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702"
@@ -9030,13 +9025,6 @@ readable-stream@^4.1.0:
     events "^3.3.0"
     process "^0.11.10"
 
-rechoir@^0.6.2:
-  version "0.6.2"
-  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
-  integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
-  dependencies:
-    resolve "^1.1.6"
-
 redent@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
@@ -9177,7 +9165,7 @@ resolve.exports@^2.0.0:
   resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800"
   integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==
 
-resolve@^1.1.6, resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.1:
+resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.1:
   version "1.22.2"
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
   integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
@@ -9428,15 +9416,6 @@ shell-quote@^1.6.1:
   resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680"
   integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
 
-shelljs@0.8.5:
-  version "0.8.5"
-  resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c"
-  integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
-  dependencies:
-    glob "^7.0.0"
-    interpret "^1.0.0"
-    rechoir "^0.6.2"
-
 shimmer@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337"
@@ -9907,7 +9886,7 @@ tapable@^2.2.0:
   resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
   integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
 
-tar@^6.0.5, tar@^6.1.11, tar@^6.1.13, tar@^6.1.2:
+tar@6.1.13, tar@^6.0.5, tar@^6.1.11, tar@^6.1.13, tar@^6.1.2:
   version "6.1.13"
   resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b"
   integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==