static ImmutableList<PushImageStep> makeList(
      BuildContext buildContext,
      ProgressEventDispatcher.Factory progressEventDispatcherFactory,
      RegistryClient registryClient,
      BlobDescriptor containerConfigurationDigestAndSize,
      Image builtImage,
      boolean manifestAlreadyExists)
      throws IOException {
    // Gets the image manifest to push.
    BuildableManifestTemplate manifestTemplate =
        new ImageToJsonTranslator(builtImage)
            .getManifestTemplate(
                buildContext.getTargetFormat(), containerConfigurationDigestAndSize);
    DescriptorDigest manifestDigest = Digests.computeJsonDigest(manifestTemplate);
    Set<String> imageQualifiers = getImageQualifiers(buildContext, builtImage, manifestDigest);

    EventHandlers eventHandlers = buildContext.getEventHandlers();
    try (TimerEventDispatcher ignored =
            new TimerEventDispatcher(eventHandlers, "Preparing manifest pushers");
        ProgressEventDispatcher progressDispatcher =
            progressEventDispatcherFactory.create(
                "launching manifest pushers", imageQualifiers.size())) {

      if (JibSystemProperties.skipExistingImages() && manifestAlreadyExists) {
        eventHandlers.dispatch(LogEvent.info("Skipping pushing manifest; already exists."));
        return ImmutableList.of();
      }

      return imageQualifiers.stream()
          .map(
              qualifier ->
                  new PushImageStep(
                      buildContext,
                      progressDispatcher.newChildProducer(),
                      registryClient,
                      manifestTemplate,
                      qualifier,
                      manifestDigest,
                      containerConfigurationDigestAndSize.getDigest()))
          .collect(ImmutableList.toImmutableList());
    }
  }
Pushes a manifest or a manifest list for a tag. If not a manifest list, returns the manifest
digest ("image digest") and the container configuration digest ("image id") as {@link
BuildResult}. If a manifest list, returns the manifest list digest only.
jib-core/src/main/java/com/google/cloud/tools/jib/builder/steps/PushImageStep.java