#!/bin/bash

# Copyright 2019 Istio Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -eu

if [ -z ${CI+x} ]; then
  # When not in CI, do nothing
  exit 0;
fi

echo "Fetching docker container status"
docker ps || true
echo "Fetching buildx logs"
docker logs buildx_buildkit_container-builder0 || true
echo "Fetching docker logs"
cat /var/log/docker.log || true
echo "Fetching local registry logs"
docker logs kind-registry || true
