run method
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;
}
}