run method

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

Runs this command.

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

Implementation

@override
Future<int> run() async {
  _logger.info('Initializing flutter_build_manager configuration...');

  final configFile = File('flutter_build_manager.yaml');

  if (configFile.existsSync()) {
    _logger.warn('Configuration file already exists: flutter_build_manager.yaml');
    final shouldOverwrite = _logger.confirm('Do you want to overwrite it?', defaultValue: false);

    if (!shouldOverwrite) {
      _logger.info('Initialization cancelled by user.');
      return 0;
    }
  }

  // Detect project name using ProjectService
  String projectName = 'unknown_project';
  try {
    final projectService = ProjectService();
    final projectInfo = await projectService.getProjectInfo();
    projectName = projectInfo.name;
  } on ReleaseManagerException catch (e) {
    _logger.warn('Could not detect project name automatically: ${e.message}');
    _logger.info('Falling back to "unknown_project"');
  }

  final defaultConfig = '''
release_manager:
enabled: true
output_directory: release
template: "${projectName}_{date}_{env}_{build}"
build_counter:
  mode: daily
environment:
  source: auto
rename:
  apk: true
  aab: true
  ipa: true
organize_by:
  year: true
  month: true
  environment: true
checksum:
  sha256: true
metadata:
  enabled: true
''';

  try {
    // Write the file
    configFile.writeAsStringSync(defaultConfig);

    // Validate the newly created configuration to ensure it parses correctly
    _validateConfiguration(defaultConfig);

    _logger.success('Initialization complete. Created flutter_build_manager.yaml');
    return 0;
  } on ReleaseManagerException catch (e) {
    _logger.err('Validation failed after creation: ${e.message}');
    return 1;
  } catch (e) {
    _logger.err('Failed to create configuration file: $e');
    return 1;
  }
}