xref: /aosp_15_r20/external/autotest/autotest_lib/metadata/generate_proto_descriptors.sh (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1#!/bin/bash -e
2# Copyright 2020 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6# Obtain the most recent proto descriptors from chromiumos/infra/proto protos.
7# This is needed to work with these protos from *.star code.
8
9set -eu
10
11CROS_CONFIG_REPO="https://chromium.googlesource.com/chromiumos/config"
12
13CIPD_PROTOC_VERSION='v3.6.1'
14CIPD_PROTOC_GEN_GO_VERSION='v1.3.2'
15
16readonly script_dir="$(dirname "$(realpath -e "${BASH_SOURCE[0]}")")"
17readonly target="${script_dir}/proto/descpb.bin"
18
19readonly work_dir=$(mktemp --tmpdir -d genprotodescXXXXXX)
20trap "rm -rf ${work_dir}" EXIT
21echo "Using temporary directory ${work_dir}"
22
23if [[ -n ${CHROMIUMOS_CONFIG_DIR+x} ]]; then
24  echo "CHROMIUMOS_CONFIG_DIR is set: " \
25    "Copying sources from ${CHROMIUMOS_CONFIG_DIR}/"
26  cp -r "${CHROMIUMOS_CONFIG_DIR}/" "${work_dir}/config"
27else
28  echo "Creating a shallow clone of ${CROS_CONFIG_REPO}"
29  git clone -q --depth=1 --shallow-submodules "${CROS_CONFIG_REPO}" \
30    "${work_dir}/config"
31fi
32readonly cros_config_subdir="config/proto"
33
34echo "Grabbing protoc from CIPD"
35cipd_root=.cipd_bin
36cipd ensure \
37  -log-level warning \
38  -root "${cipd_root}" \
39  -ensure-file - \
40  <<ENSURE_FILE
41infra/tools/protoc/\${platform} protobuf_version:${CIPD_PROTOC_VERSION}
42chromiumos/infra/tools/protoc-gen-go version:${CIPD_PROTOC_GEN_GO_VERSION}
43ENSURE_FILE
44
45# Need full path here for cipd as there is a cd to a different directory.
46export PATH="${script_dir}/${cipd_root}:${PATH}"
47
48echo "Generating protobuf descriptors"
49readonly all_protos=$(
50  cd "${work_dir}" &&
51  find "${cros_config_subdir}" -name "*.proto" | sort
52)
53(
54  cd "${work_dir}" &&
55  export LC_ALL=C  # for stable sorting order
56  protoc -I"${cros_config_subdir}" \
57    --descriptor_set_out=descpb.bin ${all_protos}
58)
59
60echo "Copying generated descriptors"
61cp "${work_dir}/descpb.bin" "${target}"
62