logUpgradeFailure (...errors) {
    // Uh-oh, something didn't work as it should have.
    versions.getVersions().then((debugVersions) => {
      let info

      if (this.options.npmVersion && this.installedVersion) {
        info = `You wanted to install npm ${this.options.npmVersion}, but the installed version is ${this.installedVersion}.\n\n`
        info += 'A common reason is an attempted "npm install npm" or "npm upgrade npm". '
        info += 'As of today, the only solution is to completely uninstall and then reinstall Node.js. '
        info += 'For a small tutorial, please see https://github.com/felixrieseberg/npm-windows-upgrade#fix-an-attempted-upgrade.\n'
      } else if (this.options.npmVersion) {
        info = `You wanted to install npm ${this.options.npmVersion}, but we could not confirm that the installation succeeded.`
      } else {
        info = 'We encountered an error during installation.\n'
      }

      info += '\nPlease consider reporting your trouble to https://aka.ms/npm-issues.'

      console.log(chalk.red(info))
      console.log(chalk.bold('\nDebug Information:\n'))
      console.log(debugVersions)

      if (errors && errors.length && errors.length > 0) console.log('Here is the error:')

      // If we just got an error string (we shouldn't handle that)
      if (typeof errors !== 'string') {
        console.log('\n' + errors + '\n')
        return process.exit(1)
      }

      for (let i = 0; i < errors.length; i++) {
        console.log('\n' + errors[i] + '\n')
      }

      setTimeout(() => {
        process.exit(1)
      }, 1000)
    })
  }
If the whole upgrade failed, we use this method to log a
detailed trace with versions - all to make it easier for
users to create meaningful issues.

@param errors {array} - AS many errors as found