validate method
void
validate()
Implementation
void validate() {
const pubspecPath = 'pubspec.yaml';
final file = File(pubspecPath);
if (!file.existsSync()) {
print('❌ pubspec.yaml not found');
return;
}
final content = file.readAsStringSync();
late YamlMap doc;
try {
doc = loadYaml(content) as YamlMap;
} catch (e) {
print('❌ Invalid YAML: $e');
return;
}
final editor = YamlEditor(content);
// --- Enforce Dart SDK version ---
const enforcedSdk = '^3.9.0';
final environment = doc['environment'] as YamlMap?;
if (environment == null) {
print('➕ Adding environment section with sdk: $enforcedSdk');
editor.update(['environment'], {'sdk': enforcedSdk});
} else {
final currentSdk = environment['sdk']?.toString();
if (currentSdk != enforcedSdk) {
print('🔧 Updating Dart SDK from $currentSdk to $enforcedSdk');
editor.update(['environment', 'sdk'], enforcedSdk);
} else {
print('✅ Dart SDK version is correct: $currentSdk');
}
}
// --- Ensure dependencies ---
final deps = Map<String, dynamic>.from(doc['dependencies'] as YamlMap? ?? {});
final devDeps = Map<String, dynamic>.from(doc['dev_dependencies'] as YamlMap? ?? {});
int compareVersions(String current, String required) {
// Remove any ^ or + parts for simple numeric comparison
String clean(String v) => v.replaceAll(RegExp(r'[^\d.]'), '');
final cParts = clean(current).split('.').map(int.parse).toList();
final rParts = clean(required).split('.').map(int.parse).toList();
for (int i = 0; i < rParts.length; i++) {
final c = i < cParts.length ? cParts[i] : 0;
final r = rParts[i];
if (c < r) {
return -1;
}
if (c > r) {
return 1;
}
}
return 0;
}
for (var entry in requiredDeps.entries) {
if (deps.containsKey(entry.key)) {
final currentVersion = deps[entry.key].toString();
if (compareVersions(currentVersion, entry.value) < 0) {
print('🔧 Updating ${entry.key} from $currentVersion to ${entry.value}');
editor.update(['dependencies', entry.key], entry.value);
} else {
print('✅ ${entry.key} : $currentVersion');
}
}
}
for (var entry in requiredDevDeps.entries) {
if (devDeps.containsKey(entry.key)) {
final currentVersion = devDeps[entry.key].toString();
if (compareVersions(currentVersion, entry.value) < 0) {
print('🔧 Updating ${entry.key} from $currentVersion to ${entry.value}');
editor.update(['dev_dependencies', entry.key], entry.value);
} else {
print('✅ ${entry.key} : $currentVersion');
}
}
}
file.writeAsStringSync(editor.toString());
print('✅ pubspec.yaml updated successfully');
}