script to update dependency verification metadata

Bug: 223642687
Test: cherry-pick the following generated change and test it

Change-Id: I7ac56f3ac74505a0bf6fb29141337077f5700049
diff --git a/development/update-verification-metadata.sh b/development/update-verification-metadata.sh
new file mode 100755
index 0000000..69a7be0
--- /dev/null
+++ b/development/update-verification-metadata.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+set -e
+
+# This script regenerates signature-related information (dependency-verification-metadata and keyring)
+function regenerateTrustedKeys() {
+  echo "regenerating list of trusted keys"
+  # regenerate metadata
+  # Need to run a clean build, https://github.com/gradle/gradle/issues/19228
+  ./gradlew --write-verification-metadata pgp,sha256 --dry-run --clean bOS
+  # extract and keep only the <trusted-keys> section
+  WORK_DIR=gradle/update-keys-temp
+  rm -rf "$WORK_DIR"
+  mkdir -p "$WORK_DIR"
+
+  # extract the middle of the new file, https://github.com/gradle/gradle/issues/18569
+  grep -B 10000 "<trusted-keys>" gradle/verification-metadata.dryrun.xml > "$WORK_DIR/new.head"
+  grep -A 10000 "</trusted-keys>" gradle/verification-metadata.dryrun.xml > "$WORK_DIR/new.tail"
+  numTopLines="$(cat "$WORK_DIR/new.head" | wc -l)"
+  numTopLinesPlus1="$(($numTopLines + 1))"
+  numBottomLines="$(cat "$WORK_DIR/new.tail" | wc -l)"
+  numLines="$(cat gradle/verification-metadata.dryrun.xml | wc -l)"
+  numMiddleLines="$(($numLines - $numTopLines - $numBottomLines))"
+  # also remove 'version=' lines, https://github.com/gradle/gradle/issues/20192
+  cat gradle/verification-metadata.dryrun.xml | tail -n "+$numTopLinesPlus1" | head -n "$numMiddleLines" | sed 's/ version="[^"]*"//' > "$WORK_DIR/new.middle"
+
+  # extract the top and bottom of the old file
+  grep -B 10000 "<trusted-keys>" gradle/verification-metadata.xml > "$WORK_DIR/old.head"
+  grep -A 10000 "</trusted-keys>" gradle/verification-metadata.xml > "$WORK_DIR/old.tail"
+
+  # update file
+  cat "$WORK_DIR/old.head" "$WORK_DIR/new.middle" "$WORK_DIR/old.tail" > gradle/verification-metadata.xml
+
+  # remove temporary files
+  rm -rf "$WORK_DIR"
+  rm -rf gradle/verification-metadata.dryrun.xml
+}
+regenerateTrustedKeys
+
+# updates the keyring, including sorting entries and removing duplicates
+function regenerateKeyring() {
+  # a separate step from regenerating the verification metadata, https://github.com/gradle/gradle/issues/20138
+  echo "regenerating keyring"
+  ./gradlew --write-verification-metadata sha256 --export-keys --dry-run bOS
+
+  echo "sorting keyring and removing duplicates"
+  # sort and unique the keyring
+  # https://github.com/gradle/gradle/issues/20140
+  # `sed 's/$/NEWLINE/g'` adds the word NEWLINE at the end of each line
+  # `tr -d '\n'` deletes the actual newlines
+  # `sed` again adds a newline at the end of each key, so each key is one line
+  # `sort` orders the keys deterministically
+  # `uniq` removes identical keys
+  # `sed 's/NEWLINE/\n/g'` puts the newlines back
+  cat gradle/verification-keyring-dryrun.keys \
+    | sed 's/$/NEWLINE/g' \
+    | tr -d '\n' \
+    | sed 's/\(-----END PGP PUBLIC KEY BLOCK-----\)/\1\n/g' \
+    | grep "END PGP PUBLIC KEY BLOCK" \
+    | sort \
+    | uniq \
+    | sed 's/NEWLINE/\n/g' \
+    > gradle/verification-keyring.keys
+
+  # remove unused files
+  rm -f gradle/verification-keyring-dryrun.gpg
+  rm -f gradle/verification-keyring-dryrun.keys
+  rm -f gradle/verification-metadata.dryrun.xml
+}
+regenerateKeyring
+
+echo
+echo "Done. Please check that these changes look correct ('git diff')"