blob: 8f89e213695f7a5f9c534e6bff65831a0b7cc921 [file] [log] [blame] [edit]
#!/bin/bash
# This is a script to release the Debian image built by Kokoro to Lorry.
set -e
show_help() {
echo "Usage: $0 [OPTION]..."
echo "Fetches a debian image from Placer and releases it to /android/ferrochrome/ARCH/TAG"
echo "Options:"
echo "-h Print usage and this help message and exit."
echo "-a ARCH Architecture of the image. Defaults to all supported architectures."
echo "-b BUILD_ID Build ID to fetch. If omitted, latest build ID is selected."
echo "-t TAG Tag name to attach to the release. Defaults to BUILD_ID."
}
parse_opt() {
while getopts "ha:b:t:" option; do
case ${option} in
h)
show_help
exit;;
a)
if [[ "$OPTARG" != "aarch64" && "$OPTARG" != "x86_64" ]]; then
echo "Invalid architecture: $OPTARG"
exit
fi
arch="$OPTARG"
;;
b)
build_id="$OPTARG"
;;
t)
tag="$OPTARG"
;;
*)
echo "Invalid option: $OPTARG"
exit
;;
esac
done
if [ "${build_id}" != "latest" ]; then
echo "Build ID is ambiguous when architecture is not set"
exit
fi
}
arch=all
build_id=latest
tag=
placer_url="/placer/test/home/kokoro-dedicated-qa/build_artifacts/qa/android-ferrochrome"
image_filename="images.tar.gz"
get_build_id() {
local arch=$1
local build_id=$2
if [ "${build_id}" == "latest" ]; then
local pattern=${placer_url}/${arch}/continuous
build_id=$(basename $(fileutil ls ${pattern} | sort -V | tail -1))
fi
echo ${build_id}
}
get_image_path() {
local arch=$1
local build_id=$2
local pattern=${placer_url}/${arch}/continuous/${build_id}/*/${image_filename}
image=$(fileutil ls ${pattern} | tail -1)
if [ $? -ne 0 ]; then
echo "Cannot find image"
exit
fi
echo ${image}
}
do_release() {
local arch=$1
local build_id=$2
build_id=$(get_build_id ${arch} ${build_id})
echo "Using build ID ${build_id} for ${arch}"
local image=$(get_image_path ${arch} ${build_id})
local tag=${tag:-${build_id}}
local serving_url=/android/ferrochrome/${tag}/${arch}/${image_filename}
echo "Releasing ${image} to ${serving_url}"
local request='payload : { url_path: '"\"${serving_url}\""' source_path : '"\"${image}\""' }'
local id=$(stubby call blade:download-lorry-api LorryService.CreatePayloads "${request}" | cut -d\ -f2)
echo "Done. Visit https://lorry.corp.google.com/view/${id} to get an approval for the release."
}
parse_opt "$@"
if [ "${arch}" == "all" ]; then
do_release aarch64 ${build_id}
do_release x86_64 ${build_id}
else
do_release ${arch} ${build_id}
fi