blob: 36a2fa572af33d6f9f64b6759e6058fb87aae66f [file] [log] [blame] [edit]
#!/bin/bash
# Copyright 2020 Google LLC
#
# 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.
################################################################################
# This script creates a Tinkey distribution and uploads it to Google Cloud
# Storage.
# Prerequisites:
# - Google Cloud SDK: https://cloud.google.com/sdk/install
# - Write access to the "tinkey" GCS bucket. Ping tink-dev@.
# - bazel: https://bazel.build/
usage() {
echo "Usage: $0 [-dh] <version>"
echo " -d: Dry run. Only execute idempotent commands (default: FALSE)."
echo " -h: Help. Print this usage information."
exit 1
}
# Process flags.
DRY_RUN="false"
while getopts "dh" opt; do
case "${opt}" in
d) DRY_RUN="true" ;;
h) usage ;;
*) usage ;;
esac
done
shift $((OPTIND - 1))
readonly DRY_RUN
# Process script arguments.
VERSION="$1"
shift 1
if [ -z "${VERSION}" ]; then
VERSION="snapshot"
fi
if [[ "${VERSION}" =~ " " ]]; then
echo "Version name must not have any spaces"
exit 3
fi
# Set up parameters.
readonly GCS_LOCATION="gs://tinkey/"
readonly TMP_DIR="$(mktemp -dt tinkey.XXXXXX)"
do_command() {
if ! "$@"; then
echo "*** Failed executing command. ***"
echo "Failed command: $@"
exit 1
fi
return $?
}
print_command() {
printf '%q ' '+' "$@"
echo
}
print_and_do() {
print_command "$@"
do_command "$@"
return $?
}
do_if_not_dry_run() {
# $@ is an array containing a command to be executed and its arguments.
print_command "$@"
if [[ "${DRY_RUN}" == "true" ]]; then
echo " *** Dry run, command not executed. ***"
return 0
fi
do_command "$@"
return $?
}
build_tinkey() {
print_and_do cd tools
print_and_do bazel build tinkey:tinkey_deploy.jar
print_and_do cp bazel-bin/tinkey/tinkey_deploy.jar "${TMP_DIR}"
print_and_do cd "${TMP_DIR}"
cat <<EOF > tinkey
#!/usr/bin/env sh
java -jar "\$(dirname \$0)/tinkey_deploy.jar" "\$@"
EOF
cat <<EOF > tinkey.bat
java -jar "%~dp0\tinkey_deploy.jar" %*
EOF
chmod 755 tinkey
print_and_do tar -czvpf "tinkey-${VERSION}.tar.gz" tinkey_deploy.jar tinkey tinkey.bat
}
upload_to_gcs() {
print_and_do cd "${TMP_DIR}"
shasum -a 256 "tinkey-${VERSION}.tar.gz"
do_if_not_dry_run gsutil cp "tinkey-${VERSION}.tar.gz" "${GCS_LOCATION}"
}
main() {
build_tinkey
upload_to_gcs
}
main "$@"