latestRelease method

Future<Release> latestRelease({
  1. required String track,
})

Implementation

Future<Release> latestRelease({required final String track}) async {
  final packageName = await _packageName();

  final scopes = [AndroidPublisherApi.androidpublisherScope];
  final client = await clientViaServiceAccount(
    _serviceAccountCredentials,
    scopes,
  );
  final androidPublisher = AndroidPublisherApi(client);

  try {
    final edit = await androidPublisher.edits.insert(AppEdit(), packageName);

    final tracks =
        await androidPublisher.edits.tracks.list(packageName, edit.id ?? '');
    final releases = tracks.tracks
        ?.firstWhere((final playStoreTrack) => playStoreTrack.track == track)
        .releases;

    if (releases != null && releases.isNotEmpty) {
      final latestRelease = releases.firstWhere(
        (final release) => release.status == 'completed',
        orElse: () => releases.first,
      );
      final name = latestRelease.name;
      final versionCode =
          int.tryParse(latestRelease.versionCodes?.firstOrNull ?? '');
      if (name == null || versionCode == null) {
        stdout.writeln('No releases found for the $track track.');

        return Release(
          buildName: name ?? '1.0.0',
          buildNumber: versionCode ?? 0,
        );
      }

      return Release(buildName: name, buildNumber: versionCode);
    }
    stdout.writeln('No releases found for the $track track.');

    return const Release(buildName: '1.0.0', buildNumber: 0);
  } catch (error) {
    rethrow;
  } finally {
    client.close();
  }
}