async run()

in src/commands/codepush/deployment/history.ts [34:96]


  async run(client: AppCenterClient): Promise<CommandResult> {
    const app = this.app;
    let releases: models.CodePushRelease[];
    let metrics: models.CodePushReleaseMetric[];
    try {
      const releasesHttpRequest = await out.progress(
        "Getting CodePush releases...",
        clientRequest<models.CodePushRelease[]>((cb) =>
          client.codePushDeploymentReleases.get(this.deploymentName, app.ownerName, app.appName, cb)
        )
      );
      releases = releasesHttpRequest.result;

      const metricsHttpRequest = await out.progress(
        "Getting CodePush releases metrics...",
        clientRequest<models.CodePushReleaseMetric[]>((cb) =>
          client.codePushDeploymentMetrics.get(this.deploymentName, app.ownerName, app.appName, cb)
        )
      );
      metrics = metricsHttpRequest.result;

      const releasesTotalActive = metrics.reduce((sum, releaseMetrics) => (sum += releaseMetrics.active), 0);

      let tableTitles: string[] = ["Label", "Release Time", "App Version", "Mandatory", "Description", "Install Metrics"];
      tableTitles = tableTitles.map((title) => chalk.cyan(title));

      out.table(
        out.getCommandOutputTableOptions(tableTitles),
        releases.map((release) => {
          let releaseRow: string[] = [
            release.label,
            formatDate(release.uploadTime) + this.generateReleaseAdditionalInfoString(release),
            release.targetBinaryRange,
            release.isMandatory ? "Yes" : "No",
            release.description,
            this.generateReleaseMetricsString(release, metrics, releasesTotalActive),
          ];

          if (release.isDisabled) {
            releaseRow = releaseRow.map((element) => this.applyDimChalkSkippingLineBreaks(element));
          }

          return releaseRow;
        })
      );
      return success();
    } catch (error) {
      debug(`Failed to get list of CodePush deployments - ${inspect(error)}`);
      if (error.statusCode === 404) {
        const appNotFoundErrorMsg = `The app ${
          this.identifier
        } does not exist. Please double check the name, and provide it in the form owner/appname. \nRun the command ${chalk.bold(
          `${scriptName} apps list`
        )} to see what apps you have access to.`;
        return failure(ErrorCodes.NotFound, appNotFoundErrorMsg);
      } else if (error.statusCode === 400) {
        const deploymentNotExistErrorMsg = `The deployment ${chalk.bold(this.deploymentName)} does not exist.`;
        return failure(ErrorCodes.Exception, deploymentNotExistErrorMsg);
      } else {
        return failure(ErrorCodes.Exception, error.response.body);
      }
    }
  }