2023-03-30 08:47:29 -04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
###### script header ######
|
|
|
|
|
|
|
|
lib=$(realpath @@BASE_LIB@@) || exit 1
|
|
|
|
stat "${lib}" >> /dev/null || exit 1
|
|
|
|
|
2023-09-07 04:53:42 -04:00
|
|
|
if [[ -n ${DIFF+x} ]]; then
|
|
|
|
diff=$(realpath "${DIFF}") || exit 1
|
|
|
|
else
|
|
|
|
diff=$(command -v diff) || exit 1
|
|
|
|
fi
|
|
|
|
stat "${diff}" >> /dev/null || exit 1
|
|
|
|
|
2023-03-30 08:47:29 -04:00
|
|
|
# shellcheck source=../sh/lib.bash
|
|
|
|
if ! source "${lib}"; then
|
|
|
|
echo "Error: could not find import"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
protoTargets=(@@PROTO_TARGETS@@)
|
|
|
|
|
|
|
|
cd "${BUILD_WORKSPACE_DIRECTORY}"
|
|
|
|
|
|
|
|
###### script body ######
|
|
|
|
|
|
|
|
exitCode=0
|
|
|
|
|
|
|
|
writeGoProtoFindingsStr=$(
|
|
|
|
grep \
|
|
|
|
-rw . \
|
|
|
|
-e "write_go_proto_srcs(" \
|
|
|
|
--include=*.bazel
|
|
|
|
)
|
|
|
|
readarray -t <<< "${writeGoProtoFindingsStr}"
|
|
|
|
writeGoProtoFindings=("${MAPFILE[@]}")
|
|
|
|
|
|
|
|
echo "Checking that all proto files have a 'write_go_proto_srcs' in the BUILD.bazel file of that package..."
|
|
|
|
|
|
|
|
protoFilesStr=$(find . -type f -name "*.proto")
|
|
|
|
readarray -t <<< "${protoFilesStr}"
|
|
|
|
protoFiles=("${MAPFILE[@]}")
|
|
|
|
|
|
|
|
protoFilePaths=()
|
|
|
|
for protoFile in "${protoFiles[@]}"; do
|
|
|
|
protoFilePaths+=("$(dirname "${protoFile}")")
|
|
|
|
done
|
|
|
|
|
|
|
|
writeGoProtoPaths=()
|
|
|
|
for writeGoProtoFinding in "${writeGoProtoFindings[@]}"; do
|
|
|
|
writeGoProtoPaths+=("${writeGoProtoFinding%/*}") # remove everything after the last slash
|
|
|
|
done
|
|
|
|
|
|
|
|
protoFilePathsSorted=$(printf '%s\n' "${protoFilePaths[@]}" | sort)
|
|
|
|
writeGoProtoPathsSorted=$(printf '%s\n' "${writeGoProtoPaths[@]}" | sort)
|
|
|
|
|
2023-09-07 04:53:42 -04:00
|
|
|
diff=$($diff <(echo "${protoFilePathsSorted}") <(echo "${writeGoProtoPathsSorted}") || true) # don't let diff fail
|
2023-03-30 08:47:29 -04:00
|
|
|
|
|
|
|
if [[ -n ${diff} ]]; then
|
|
|
|
echo "Mismatch between proto files and 'write_go_proto_srcs' calls:"
|
|
|
|
# shellcheck disable=SC2001
|
|
|
|
echo "${diff}" | sed -e 's/^/ /'
|
|
|
|
exitCode=1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "Checking that all 'write_go_proto_srcs' calls and targets in bazel/ci/proto_targets.bzl match..."
|
|
|
|
|
|
|
|
writeGoProtoFindingsCleaned=()
|
|
|
|
for protoFinding in "${writeGoProtoFindings[@]}"; do
|
|
|
|
findingCleaned=$(
|
|
|
|
echo "${protoFinding}" |
|
|
|
|
sed \
|
|
|
|
-e 's$/BUILD.bazel$$' \
|
|
|
|
-e 's/write_go_proto_srcs(/write_generated_protos/g' \
|
|
|
|
-e 's$./$//$'
|
|
|
|
)
|
|
|
|
writeGoProtoFindingsCleaned+=("${findingCleaned}")
|
|
|
|
done
|
|
|
|
|
|
|
|
writeGoProtoFindingsSorted=$(printf '%s\n' "${writeGoProtoFindingsCleaned[@]}" | sort)
|
|
|
|
protoTargetsSorted=$(printf '%s\n' "${protoTargets[@]}" | sort)
|
|
|
|
|
|
|
|
diff=$(diff <(echo "${writeGoProtoFindingsSorted}") <(echo "${protoTargetsSorted}") || true) # don't let diff fail
|
|
|
|
|
|
|
|
if [[ -n ${diff} ]]; then
|
|
|
|
echo "Mismatch between 'write_go_proto_srcs' calls and targets listed in bazel/ci/proto_targets.bzl:"
|
|
|
|
# shellcheck disable=SC2001
|
|
|
|
echo "${diff}" | sed -e 's/^/ /'
|
|
|
|
exitCode=1
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit "${exitCode}"
|