#!/bin/bash

# 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] [--update-latest] [--registry REGISTRY] [--org ORGANIZATION] [--no-push] [--tag TAG] [IMAGE]"
    exit 1
}

UPDATE_LATEST=false
ORGANIZATION=k8sgerrit
PUSH_IMAGES=true

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
    ;;
  *)
    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)

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

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

  docker image tag k8sgerrit/$IMAGE:$TAG ${REGISTRY}${ORGANIZATION}/$IMAGE:$TAG
  if test "$PUSH_IMAGES" = "true" ; then
    docker 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
