1*e7b1675dSTing-Kang Chang#!/bin/bash 2*e7b1675dSTing-Kang Chang# Copyright 2020 Google LLC 3*e7b1675dSTing-Kang Chang# 4*e7b1675dSTing-Kang Chang# Licensed under the Apache License, Version 2.0 (the "License"); 5*e7b1675dSTing-Kang Chang# you may not use this file except in compliance with the License. 6*e7b1675dSTing-Kang Chang# You may obtain a copy of the License at 7*e7b1675dSTing-Kang Chang# 8*e7b1675dSTing-Kang Chang# http://www.apache.org/licenses/LICENSE-2.0 9*e7b1675dSTing-Kang Chang# 10*e7b1675dSTing-Kang Chang# Unless required by applicable law or agreed to in writing, software 11*e7b1675dSTing-Kang Chang# distributed under the License is distributed on an "AS IS" BASIS, 12*e7b1675dSTing-Kang Chang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*e7b1675dSTing-Kang Chang# See the License for the specific language governing permissions and 14*e7b1675dSTing-Kang Chang# limitations under the License. 15*e7b1675dSTing-Kang Chang################################################################################ 16*e7b1675dSTing-Kang Chang 17*e7b1675dSTing-Kang Chang# This script creates a Tinkey distribution and uploads it to Google Cloud 18*e7b1675dSTing-Kang Chang# Storage. 19*e7b1675dSTing-Kang Chang# Prerequisites: 20*e7b1675dSTing-Kang Chang# - Google Cloud SDK (https://cloud.google.com/sdk/install) 21*e7b1675dSTing-Kang Chang# - Write access to the "tinkey" GCS bucket. Ping tink-dev@. 22*e7b1675dSTing-Kang Chang# - Bazelisk (https://github.com/bazelbuild/bazelisk) or Bazel 23*e7b1675dSTing-Kang Chang# (https://bazel.build/) 24*e7b1675dSTing-Kang Chang 25*e7b1675dSTing-Kang Changusage() { 26*e7b1675dSTing-Kang Chang echo "Usage: $0 [-dh] <version>" 27*e7b1675dSTing-Kang Chang echo " -d: Dry run. Only execute idempotent commands (default: FALSE)." 28*e7b1675dSTing-Kang Chang echo " -h: Help. Print this usage information." 29*e7b1675dSTing-Kang Chang exit 1 30*e7b1675dSTing-Kang Chang} 31*e7b1675dSTing-Kang Chang 32*e7b1675dSTing-Kang Chang# Process flags. 33*e7b1675dSTing-Kang Chang 34*e7b1675dSTing-Kang ChangDRY_RUN="false" 35*e7b1675dSTing-Kang Chang 36*e7b1675dSTing-Kang Changwhile getopts "dh" opt; do 37*e7b1675dSTing-Kang Chang case "${opt}" in 38*e7b1675dSTing-Kang Chang d) DRY_RUN="true" ;; 39*e7b1675dSTing-Kang Chang h) usage ;; 40*e7b1675dSTing-Kang Chang *) usage ;; 41*e7b1675dSTing-Kang Chang esac 42*e7b1675dSTing-Kang Changdone 43*e7b1675dSTing-Kang Changshift $((OPTIND - 1)) 44*e7b1675dSTing-Kang Chang 45*e7b1675dSTing-Kang Changreadonly DRY_RUN 46*e7b1675dSTing-Kang Chang 47*e7b1675dSTing-Kang Chang# Process script arguments. 48*e7b1675dSTing-Kang Chang 49*e7b1675dSTing-Kang ChangVERSION="$1" 50*e7b1675dSTing-Kang Changshift 1 51*e7b1675dSTing-Kang Chang 52*e7b1675dSTing-Kang Changif [ -z "${VERSION}" ]; then 53*e7b1675dSTing-Kang Chang VERSION="snapshot" 54*e7b1675dSTing-Kang Changfi 55*e7b1675dSTing-Kang Chang 56*e7b1675dSTing-Kang Changif [[ "${VERSION}" =~ " " ]]; then 57*e7b1675dSTing-Kang Chang echo "Version name must not have any spaces" 58*e7b1675dSTing-Kang Chang exit 3 59*e7b1675dSTing-Kang Changfi 60*e7b1675dSTing-Kang Chang 61*e7b1675dSTing-Kang Chang# Set up parameters. 62*e7b1675dSTing-Kang Chang 63*e7b1675dSTing-Kang Changreadonly GCS_LOCATION="gs://tinkey/" 64*e7b1675dSTing-Kang Changreadonly TMP_DIR="$(mktemp -dt tinkey.XXXXXX)" 65*e7b1675dSTing-Kang ChangBAZEL_CMD="bazel" 66*e7b1675dSTing-Kang Changif command -v "bazelisk" &> /dev/null; then 67*e7b1675dSTing-Kang Chang BAZEL_CMD="bazelisk" 68*e7b1675dSTing-Kang Changfi 69*e7b1675dSTing-Kang Changreadonly BAZEL_CMD 70*e7b1675dSTing-Kang Chang 71*e7b1675dSTing-Kang Changdo_command() { 72*e7b1675dSTing-Kang Chang if ! "$@"; then 73*e7b1675dSTing-Kang Chang echo "*** Failed executing command. ***" 74*e7b1675dSTing-Kang Chang echo "Failed command: $@" 75*e7b1675dSTing-Kang Chang exit 1 76*e7b1675dSTing-Kang Chang fi 77*e7b1675dSTing-Kang Chang return $? 78*e7b1675dSTing-Kang Chang} 79*e7b1675dSTing-Kang Chang 80*e7b1675dSTing-Kang Changprint_command() { 81*e7b1675dSTing-Kang Chang printf '%q ' '+' "$@" 82*e7b1675dSTing-Kang Chang echo 83*e7b1675dSTing-Kang Chang} 84*e7b1675dSTing-Kang Chang 85*e7b1675dSTing-Kang Changprint_and_do() { 86*e7b1675dSTing-Kang Chang print_command "$@" 87*e7b1675dSTing-Kang Chang do_command "$@" 88*e7b1675dSTing-Kang Chang return $? 89*e7b1675dSTing-Kang Chang} 90*e7b1675dSTing-Kang Chang 91*e7b1675dSTing-Kang Changdo_if_not_dry_run() { 92*e7b1675dSTing-Kang Chang # $@ is an array containing a command to be executed and its arguments. 93*e7b1675dSTing-Kang Chang print_command "$@" 94*e7b1675dSTing-Kang Chang if [[ "${DRY_RUN}" == "true" ]]; then 95*e7b1675dSTing-Kang Chang echo " *** Dry run, command not executed. ***" 96*e7b1675dSTing-Kang Chang return 0 97*e7b1675dSTing-Kang Chang fi 98*e7b1675dSTing-Kang Chang do_command "$@" 99*e7b1675dSTing-Kang Chang return $? 100*e7b1675dSTing-Kang Chang} 101*e7b1675dSTing-Kang Chang 102*e7b1675dSTing-Kang Changbuild_tinkey() { 103*e7b1675dSTing-Kang Chang print_and_do cd tools 104*e7b1675dSTing-Kang Chang 105*e7b1675dSTing-Kang Chang print_and_do "${BAZEL_CMD}" build tinkey:tinkey_deploy.jar 106*e7b1675dSTing-Kang Chang 107*e7b1675dSTing-Kang Chang print_and_do cp bazel-bin/tinkey/tinkey_deploy.jar "${TMP_DIR}" 108*e7b1675dSTing-Kang Chang 109*e7b1675dSTing-Kang Chang print_and_do cd "${TMP_DIR}" 110*e7b1675dSTing-Kang Chang 111*e7b1675dSTing-Kang Chang cat <<EOF > tinkey 112*e7b1675dSTing-Kang Chang#!/usr/bin/env sh 113*e7b1675dSTing-Kang Chang 114*e7b1675dSTing-Kang Changjava -jar "\$(dirname \$0)/tinkey_deploy.jar" "\$@" 115*e7b1675dSTing-Kang ChangEOF 116*e7b1675dSTing-Kang Chang 117*e7b1675dSTing-Kang Chang cat <<EOF > tinkey.bat 118*e7b1675dSTing-Kang Changjava -jar "%~dp0\tinkey_deploy.jar" %* 119*e7b1675dSTing-Kang ChangEOF 120*e7b1675dSTing-Kang Chang 121*e7b1675dSTing-Kang Chang chmod 755 tinkey 122*e7b1675dSTing-Kang Chang 123*e7b1675dSTing-Kang Chang print_and_do tar -czvpf "tinkey-${VERSION}.tar.gz" tinkey_deploy.jar tinkey tinkey.bat 124*e7b1675dSTing-Kang Chang} 125*e7b1675dSTing-Kang Chang 126*e7b1675dSTing-Kang Changupload_to_gcs() { 127*e7b1675dSTing-Kang Chang print_and_do cd "${TMP_DIR}" 128*e7b1675dSTing-Kang Chang 129*e7b1675dSTing-Kang Chang shasum -a 256 "tinkey-${VERSION}.tar.gz" 130*e7b1675dSTing-Kang Chang 131*e7b1675dSTing-Kang Chang do_if_not_dry_run gsutil cp "tinkey-${VERSION}.tar.gz" "${GCS_LOCATION}" 132*e7b1675dSTing-Kang Chang} 133*e7b1675dSTing-Kang Chang 134*e7b1675dSTing-Kang Changmain() { 135*e7b1675dSTing-Kang Chang build_tinkey 136*e7b1675dSTing-Kang Chang upload_to_gcs 137*e7b1675dSTing-Kang Chang} 138*e7b1675dSTing-Kang Chang 139*e7b1675dSTing-Kang Changmain "$@" 140