#!/bin/bash -x

# Copyright (C) 2018 The Android Open Source Project
#
# 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.

usage() {
    me=`basename "$0"`
    echo >&2 "Usage: $me [--help] [--buildah] [--update-latest] [--registry REGISTRY] [--org ORGANIZATION] [--no-push] [--tag TAG] [IMAGE]"
    exit 1
}

UPDATE_LATEST=false
ORGANIZATION=k8sgerrit
PUSH_IMAGES=true
BUILD_TOOL=docker

while test $# -gt 0 ; do
  case "$1" in
  --help)
    usage
    ;;
  --update-latest)
    UPDATE_LATEST=true
    shift
    ;;
  --registry)
    shift
    REGISTRY=$1
    shift
    ;;
  --org)
    shift
    ORGANIZATION=$1
    shift
    ;;
  --no-push)
    PUSH_IMAGES=false
    shift
    ;;
  --tag)
    shift
    TAG=$1
    shift
    ;;
  --buildah)
    BUILD_TOOL="buildah"
    shift
    ;;
  *)
    break
  esac
done

if test -z "$TAG"; then
  TAG=$(./get_version.sh)
fi

#Get list of images
source container-images/publish_list
IMAGES=$(get_image_list)

if [[ "$BUILD_TOOL" = "docker" ]]; then
	IMG_TAG_CMD="docker image tag"
elif [[ "$BUILD_TOOL" = "buildah" ]]; then
	IMG_TAG_CMD="buildah tag"
fi

test -n "$REGISTRY" && [[ "$REGISTRY" != */ ]] && REGISTRY="$REGISTRY/"

publish_image(){
  IMAGE=$1
  if test "$UPDATE_LATEST" = "true" ; then
    $IMG_TAG_CMD k8sgerrit/$IMAGE:$TAG ${REGISTRY}${ORGANIZATION}/$IMAGE:latest
    if test "$PUSH_IMAGES" = "true" ; then
      $BUILD_TOOL push "${REGISTRY}${ORGANIZATION}/$IMAGE:latest"
    fi
  fi

  $IMG_TAG_CMD k8sgerrit/$IMAGE:$TAG ${REGISTRY}${ORGANIZATION}/$IMAGE:$TAG
  if test "$PUSH_IMAGES" = "true" ; then
    $BUILD_TOOL push "${REGISTRY}${ORGANIZATION}/$IMAGE:$TAG"
  fi
}

if test $# -eq 0 ; then
  for IMAGE in $IMAGES; do
    publish_image $IMAGE
  done
else
  while test $# -gt 0 ; do
    publish_image $1
    shift
  done
fi
