verifyRelease method
Verifies artifact and release state integrity without mutating project state.
Implementation
Future<String> verifyRelease(String projectPath) async {
final buffer = StringBuffer();
buffer.writeln('=== RELEASE INTEGRITY VERIFICATION ===');
final metadata = await _metadataManager.getLatestMetadata(projectPath);
if (metadata == null) {
buffer.writeln(
'Status: ✗ No release manifest found in .flutter_setup/releases/');
buffer.writeln('======================================');
return buffer.toString();
}
buffer.writeln(
'Release: ${metadata.versionName}+${metadata.buildNumber} (${metadata.releaseMode})');
buffer.writeln('Timestamp: ${metadata.timestamp}');
// Verify Artifacts
if (metadata.artifacts.isNotEmpty) {
buffer.writeln('\nArtifact Verification:');
for (final entry in metadata.artifacts.entries) {
final artifactValid =
await _artifactIntegrity.verifyArtifact(artifactPath: entry.value);
if (artifactValid) {
final hash = await _artifactIntegrity.computeSha256(entry.value);
buffer.writeln(' ✓ ${entry.key}: Valid (${entry.value})');
buffer.writeln(' SHA-256: $hash');
} else {
buffer.writeln(
' ✗ ${entry.key}: Missing or corrupt at "${entry.value}"');
}
}
}
// Verify Git Tag
if (metadata.tag != null) {
final isRepo = await _gitClient.isGitRepository(projectPath);
if (isRepo) {
final tagExists =
await _gitClient.tagExists(projectPath, metadata.tag!);
if (tagExists) {
buffer.writeln('\nGit Tag: ✓ ${metadata.tag} verified in repository');
} else {
buffer.writeln(
'\nGit Tag: ✗ ${metadata.tag} missing from repository tags');
}
}
}
buffer.writeln('\nStatus: Verification completed cleanly.');
buffer.writeln('======================================');
return buffer.toString();
}