@Override
  public void setFooter(List<String> newFooterLines) {
    List<String> truncatedNewFooterLines = truncateToMaxWidth(newFooterLines);

    if (truncatedNewFooterLines.equals(footerLines)) {
      return;
    }

    singleThreadedExecutor.execute(
        () -> {
          boolean didErase = eraseFooter();
          // If a previous footer was erased, the first new footer line needs to go up a line.
          if (didErase) {
            if (enableTwoCursorUpJump) {
              lifecycleConsumer.accept(String.format(CURSOR_UP_SEQUENCE_TEMPLATE, 2));
              printInBold(truncatedNewFooterLines);
            } else {
              printInBold(truncatedNewFooterLines, CURSOR_UP_SEQUENCE);
            }
          } else {
            printInBold(truncatedNewFooterLines);
          }

          footerLines = truncatedNewFooterLines;
        });
  }
Sets the footer asynchronously. This will replace the previously-printed footer with the new
{@code footerLines}.

<p>The footer is printed in <strong>bold</strong>.

@param newFooterLines the footer, with each line as an element (no newline at end)
jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/logging/AnsiLoggerWithFooter.java