#!/usr/bin/env bash
# Copyright 2019 The Bazel Authors. All rights reserved.
#
# 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.
#
# Renerates the Stardoc release binary from source in @io_bazel.
#
# This should only need to be run for cutting a new Stardoc release.

set -eu

echo "** Building Stardoc from source..."
bazel build --java_language_version=11 @io_bazel//src/main/java/com/google/devtools/build/skydoc:skydoc_deploy.jar

echo "** Copying Stardoc binary..."
cp bazel-bin/external/io_bazel/src/main/java/com/google/devtools/build/skydoc/skydoc_deploy.jar \
    stardoc/stardoc_binary.jar

echo "** Stardoc copied."

echo "** Copying stardoc_output.proto from source..."
# Path of proto definition relative to Bazel source tree root
PROTO_SRC=src/main/java/com/google/devtools/build/skydoc/rendering/proto/stardoc_output.proto
# Path to @io_bazel repo on disk
IO_BAZEL="$(bazel info output_base)/external/io_bazel"
# Commit of @io_bazel's git_repository (generated by patch_cmds command in WORKSPACE)
IO_BAZEL_SHA="$(cat ${IO_BAZEL}/.io_bazel.sha)"
# Retrieve the first commit to modify ${PROTO_SRC} in the history of ${IO_BAZEL_SHA}
# using Github API; see https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28
# We need this because git_repository does a shallow clone, so our @io_bazel repo
# does not have the git log for any given file.
PROTO_SRC_SHA="$(curl -s -L -H "Accept: application/vnd.github+json" \
    "https://api.github.com/repos/bazelbuild/bazel/commits?sha=${IO_BAZEL_SHA}&path=${PROTO_SRC}" \
    | grep -m 1 '"sha":' | sed 's/.*"sha": "\(.*\)",.*/\1/')"
# Copy proto file and insert "Vendored from" slug immediately below the license.
sed -e '/^\/\/ limitations under the License./ a //\n// Vendored from '"${PROTO_SRC}"'\n// in the Bazel source tree at commit '"${PROTO_SRC_SHA}" \
    "${IO_BAZEL}/${PROTO_SRC}" > stardoc/proto/stardoc_output.proto
echo "** stardoc_output.proto copied."
