xref: /aosp_15_r20/external/tink/tools/release_tinkey.sh (revision e7b1675dde1b92d52ec075b0a92829627f2c52a5)
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