run method

  1. @override
Future<void> run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<void> run() async {
  final results = argResults!;

  final serviceAccount = results['serviceAccount'] as String;
  final storePassword = results['storePassword'] as String;
  final keyPassword = results['keyPassword'] as String;
  final keyAlias = results['keyAlias'] as String;
  final storeFile = results['storeFile'] as String;
  final buildOptions = results['buildOptions'] as String;
  final flutterVersion = results['flutterVersion'] as String;
  final allowAssetDiffs = results['allowAssetDiffs'] as bool;

  await AndroidUtil.configureSigning(
    storePassword: storePassword,
    keyPassword: keyPassword,
    keyAlias: keyAlias,
    storeFile: storeFile,
  );

  final googlePlayStoreUtil = GooglePlayStoreUtil(
    serviceAccount: serviceAccount,
  );

  final release = await googlePlayStoreUtil.latestRelease(track: 'internal');
  final buildName = release.buildName;
  final buildNumber = release.buildNumber;

  final pubspecVersionChange = await GitUtil.pubspecVersionChange();

  if (pubspecVersionChange == null) {
    await ShorebirdUtil.patch(
      buildName: buildName,
      buildNumber: buildNumber,
      platform: 'android',
      buildOptions: buildOptions,
      flutterVersion: flutterVersion,
      allowAssetDiffs: allowAssetDiffs,
    );

    return;
  }

  final newBuildPaths = await ShorebirdUtil.release(
    buildName: pubspecVersionChange,
    buildNumber: buildNumber,
    platform: 'android',
    buildOptions: buildOptions,
    flutterVersion: flutterVersion,
  );
  for (final buildPath in newBuildPaths) {
    stdout.writeln(
      'Uploading shorebird build from $buildPath to Google Play...',
    );
    await googlePlayStoreUtil.uploadBuild(
      track: 'internal',
      filePath: buildPath,
    );
  }
}