private void pushManifestList(ProgressEventDispatcher.Factory progressDispatcherFactory) {
    results.buildResult =
        executorService.submit(
            () -> {
              realizeFutures(results.imagePushResults.get());
              List<Future<BuildResult>> manifestListPushResults =
                  scheduleCallables(
                      PushImageStep.makeListForManifestList(
                          buildContext,
                          progressDispatcherFactory,
                          results.targetRegistryClient.get(),
                          results.manifestListOrSingleManifest.get(),
                          results.manifestCheckResult.get().isPresent()));

              realizeFutures(manifestListPushResults);
              return manifestListPushResults.isEmpty()
                  ? results.imagePushResults.get().get(0).get()
                  : manifestListPushResults.get(0).get();
            });
  }
Run all steps and return a BuildResult after a build is completed.

@return a {@link BuildResult} with build metadata
@throws ExecutionException if an error occurred during asynchronous execution of steps
@throws InterruptedException if the build was interrupted while waiting for results
jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/StepsRunner.java