Get needed version from API tool in health check (#213)

* Get needed version from API tool in health check

* Fix bug

* Rev version
diff --git a/pkgs/firehose/CHANGELOG.md b/pkgs/firehose/CHANGELOG.md
index cac9a63..94b3dd4 100644
--- a/pkgs/firehose/CHANGELOG.md
+++ b/pkgs/firehose/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.4.2
+
+- Get needed version from `dart_apitool` in PR health checks.
+
 ## 0.4.1
 
 - Ensure that packages are listed in lexical order.
diff --git a/pkgs/firehose/lib/src/health/health.dart b/pkgs/firehose/lib/src/health/health.dart
index 9e4831b..440b31f 100644
--- a/pkgs/firehose/lib/src/health/health.dart
+++ b/pkgs/firehose/lib/src/health/health.dart
@@ -141,27 +141,14 @@
       var formattedChanges = const JsonEncoder.withIndent('  ').convert(report);
       print('Breaking change report:\n$formattedChanges');
 
-      BreakingLevel breakingLevel;
-      if ((report['noChangesDetected'] as bool?) ?? false) {
-        breakingLevel = BreakingLevel.none;
-      } else {
-        if ((report['breakingChanges'] as Map? ?? {}).isNotEmpty) {
-          breakingLevel = BreakingLevel.breaking;
-        } else if ((report['nonBreakingChanges'] as Map? ?? {}).isNotEmpty) {
-          breakingLevel = BreakingLevel.nonBreaking;
-        } else {
-          breakingLevel = BreakingLevel.none;
-        }
-      }
-
-      var oldPackage = Package(
-        Directory(path.join(baseDirectory.path, currentPath)),
-        package.repository,
-      );
+      final versionMap = decoded['version'] as Map<String, dynamic>;
       changeForPackage[package] = BreakingChange(
-        level: breakingLevel,
-        oldVersion: oldPackage.version!,
-        newVersion: package.version!,
+        level: _breakingLevel(report),
+        oldVersion: Version.parse(versionMap['old'].toString()),
+        newVersion: Version.parse(versionMap['new'].toString()),
+        neededVersion: Version.parse(versionMap['needed'].toString()),
+        versionIsFine: versionMap['success'] as bool,
+        explanation: versionMap['explanation'].toString(),
       );
     }
     return HealthCheckResult(
@@ -178,6 +165,20 @@
     );
   }
 
+  BreakingLevel _breakingLevel(Map<String, dynamic> report) {
+    BreakingLevel breakingLevel;
+    if ((report['noChangesDetected'] as bool?) ?? false) {
+      breakingLevel = BreakingLevel.none;
+    } else if ((report['breakingChanges'] as Map? ?? {}).isNotEmpty) {
+      breakingLevel = BreakingLevel.breaking;
+    } else if ((report['nonBreakingChanges'] as Map? ?? {}).isNotEmpty) {
+      breakingLevel = BreakingLevel.nonBreaking;
+    } else {
+      breakingLevel = BreakingLevel.none;
+    }
+    return breakingLevel;
+  }
+
   Future<HealthCheckResult> licenseCheck(GithubApi github) async {
     var files = await github.listFilesForPR();
     var allFilePaths = await getFilesWithoutLicenses(Directory.current);
@@ -379,22 +380,24 @@
   final BreakingLevel level;
   final Version oldVersion;
   final Version newVersion;
+  final Version neededVersion;
+  final bool versionIsFine;
+  final String explanation;
 
   BreakingChange({
     required this.level,
     required this.oldVersion,
     required this.newVersion,
+    required this.neededVersion,
+    required this.versionIsFine,
+    required this.explanation,
   });
 
-  Version get suggestedNewVersion => getNewVersion(level, oldVersion);
-
-  bool get versionIsFine => newVersion == suggestedNewVersion;
-
   String toMarkdownRow() => [
         level.name,
         oldVersion,
         newVersion,
-        versionIsFine ? suggestedNewVersion : '**$suggestedNewVersion**',
+        versionIsFine ? neededVersion : '**$neededVersion** <br> $explanation',
         versionIsFine ? ':heavy_check_mark:' : ':warning:'
       ].map((e) => e.toString()).join('|');
 }
diff --git a/pkgs/firehose/pubspec.yaml b/pkgs/firehose/pubspec.yaml
index 4f26573..404af5e 100644
--- a/pkgs/firehose/pubspec.yaml
+++ b/pkgs/firehose/pubspec.yaml
@@ -1,6 +1,6 @@
 name: firehose
 description: A tool to automate publishing of Pub packages from GitHub actions.
-version: 0.4.1
+version: 0.4.2
 repository: https://github.com/dart-lang/ecosystem/tree/main/pkgs/firehose
 
 environment: