runBillingCheck method

Future<SetupStepResult> runBillingCheck({
  1. bool interactive = true,
})

Implementation

Future<SetupStepResult> runBillingCheck({bool interactive = true}) async {
  final BillingCheckResult check = await billing.checkBlazeStatus();
  switch (check.status) {
    case BlazeStatus.enabled:
      info('Blaze plan confirmed for ${config.firebaseProjectId}.');
      return SetupStepResult.success(
        WizardSubStep.billingCheck,
        message: check.billingAccountName != null
            ? 'Billing account: ${check.billingAccountName}'
            : 'Blaze',
      );
    case BlazeStatus.notEnabled:
      if (!interactive) {
        return SetupStepResult.skipped(
          WizardSubStep.billingCheck,
          message: 'Project is on Spark — Cloud Run requires Blaze',
          fixHint: _fixHintFor(WizardSubStep.billingCheck),
        );
      }
      final BillingCheckResult upgraded = await billing.guideUpgrade();
      if (upgraded.status == BlazeStatus.enabled) {
        return SetupStepResult.success(
          WizardSubStep.billingCheck,
          message: 'Upgraded to Blaze',
        );
      }
      return SetupStepResult.skipped(
        WizardSubStep.billingCheck,
        message:
            upgraded.message ??
            'Project remained on Spark; Blaze-only steps will be skipped.',
        fixHint: _fixHintFor(WizardSubStep.billingCheck),
      );
    case BlazeStatus.unknown:
      return SetupStepResult.skipped(
        WizardSubStep.billingCheck,
        message: check.message ?? 'Could not determine billing status',
        fixHint: _fixHintFor(WizardSubStep.billingCheck),
      );
  }
}