run method

  1. @override
Future<void> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<void> run() async {
  logger.info('Running preflight checks...');

  final checks = <String, bool>{
    'Git': await _isInstalled('git', ['--version']),
    'GitHub CLI (gh)': await _isInstalled('gh', ['--version']),
    'GitHub Auth': await _checkGhAuth(),
    'Dart SDK': await _isInstalled('dart', ['--version']),
    'Flutter SDK': await _isInstalled('flutter', ['--version']),
    'Node.js': await _isInstalled('node', ['--version']),
    'NPM': await _isInstalled('npm', ['--version']),
    'Ruby': await _isInstalled('ruby', ['--version']),
    'Android SDK (ANDROID_HOME)': _checkAndroidHome(),
    'Android SDK (adb)': await _isInstalled('adb', ['version']),
    'Xcode': await _checkXcode(),
  };

  for (final entry in checks.entries) {
    if (entry.value) {
      logger.success('${entry.key} is installed ✅');
    } else {
      logger.err('${entry.key} is missing ❌');
    }
  }

  final allOk = checks.values.every((v) => v);
  if (allOk) {
    logger.info('All checks passed. Environment is ready.');
  } else {
    logger.err(
      'Some checks failed. Fix the issues above before running commands.',
    );
    exit(1);
  }
}