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