This is an automated email from the git hooks/post-receive script.
richard pushed a commit to branch main
in repository builders/tor-browser-build.
The following commit(s) were added to refs/heads/main by this push:
new 751756c Bug 40574: Improve tools/signing/android-signing
751756c is described below
commit 751756c2e7d7239df0636bf5ac8cc22d4781cbc6
Author: Nicolas Vigier <boklm(a)torproject.org>
AuthorDate: Tue Jul 12 16:48:51 2022 +0200
Bug 40574: Improve tools/signing/android-signing
* use projects/android-toolchain/config to download android build-tools
* download unsigned apk files for pkgstage and upload them to pkgstage
when signed
* use set-config.android-signing
---
projects/android-toolchain/config | 21 +++++++-
tools/signing/android-signing | 93 +++++++++++++++++++++++---------
tools/signing/set-config.android-signing | 7 +++
3 files changed, 93 insertions(+), 28 deletions(-)
diff --git a/projects/android-toolchain/config b/projects/android-toolchain/config
index 57c38c1..a2f34ae 100644
--- a/projects/android-toolchain/config
+++ b/projects/android-toolchain/config
@@ -47,11 +47,13 @@ var:
sdk_tools_version: 4333796
commandlinetools_version: 7583922
commandlinetools_version_string: 5.0
+ build_tools_filename: build-tools_r31-linux.zip
+ build_tools_sha256sum: f90c22f5562638a2e00762e1711eebd55e7f0a05232b65200d387307d057bfe8
input_files:
- project: container-image
- - URL: '[% c("var/google_repo") %]/build-tools_r31-linux.zip'
+ - URL: '[% c("var/google_repo") %]/[% c("var/build_tools_filename") %]'
name: build_tools
- sha256sum: f90c22f5562638a2e00762e1711eebd55e7f0a05232b65200d387307d057bfe8
+ sha256sum: '[% c("var/build_tools_sha256sum") %]'
- URL: '[% c("var/google_repo") %]/build-tools_r[% c("var/version_30") %]-linux.zip'
name: build_tools_30
sha256sum: 565af786dc0cc1941002174fb945122eabd080b222cd4c7c3d9a2ae0fabf5dc4
@@ -85,3 +87,18 @@ input_files:
- URL: '[% c("var/google_repo") %]/android-ndk-r[% c("var/android_ndk_version") %][% c("var/android_ndk_revision") %]-linux-x86_64.zip'
name: android_ndk_compiler
sha256sum: dd6dc090b6e2580206c64bcee499bc16509a5d017c6952dcd2bed9072af67cbd
+steps:
+ # The get_build_tools step is used by tools/signing/android-signing
+ get_build_tools:
+ filename: 'android-[% c("var/build_tools_filename") %]'
+ get_build_tools: |
+ #!/bin/bash
+ set -e
+ mv -v [% c("input_files_by_name/build_tools") %] [% dest_dir _ '/' _ c('filename') %]
+ var:
+ container:
+ use_container: 0
+ input_files:
+ - URL: '[% c("var/google_repo") %]/[% c("var/build_tools_filename") %]'
+ name: build_tools
+ sha256sum: '[% c("var/build_tools_sha256sum") %]'
diff --git a/tools/signing/android-signing b/tools/signing/android-signing
index 7c2ee50..16610e7 100755
--- a/tools/signing/android-signing
+++ b/tools/signing/android-signing
@@ -1,23 +1,64 @@
#!/bin/bash
# Sign apk for each target architecture.
-# This script requires two command line arguments.
-# Usage: android-signing <version> <path/to/signing/key>
+# This script does not require command line argument, but it needs
+# some configuration options to be set in set-config.android-signing:
+# - ssh_host_pkgstage is the host which you use for staging packages
+# during signing. The script will download the unsigned .apk files
+# from this host, and upload the signed .apk there
+# - pkgstage_tor_browser_build_dir: this is the path to tor-browser-build
+# on pkgstage
+# - android_signing_key_dir: the local path where the android signing
+# keys are located. That directory should contains files tba_alpha.p12
+# and tba_release.p12 for alpha and release signing keys.
+# The Tor Browser version is taken from set-config.tbb-version
-# In addition, hard-coding the path to an Android SDK build-tools version, as
-# BUILD_TOOLS, is required.
-
-set -x
set -e
+script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+source "$script_dir/functions"
+source "$script_dir/set-config.android-signing"
-VERSION=$1
-SIGNING_KEY_PATH=$2
+topdir="$script_dir/../.."
+ARCHS="armv7 aarch64 x86 x86_64"
-# TODO set correctly.
-BUILD_TOOLS=/path/to/build-tools/version
-export PATH="${BUILD_TOOLS}:${PATH}"
+android_signing_key_path="$android_signing_key_dir/tba_$tbb_version_type.p12"
+test -f "$android_signing_key_path" || exit_error "$android_signing_key_path is missing"
-ARCHS="armv7 aarch64 x86 x86_64"
+check_installed_packages() {
+ local packages='unzip openjdk-11-jdk-headless openjdk-11-jre-headless'
+ for package in $packages
+ do
+ dpkg -s "$package" | grep -q '^Status: install ok installed$' || \
+ exit_error "package $package is missing"
+ done
+}
+
+setup_build_tools() {
+ local rbm="$topdir/rbm/rbm"
+ local build_tools_zipfile="$topdir/out/android-toolchain/$("$rbm" showconf --step get_build_tools android-toolchain filename)"
+ if ! test -f "$build_tools_zipfile"; then
+ "$rbm" build --step get_build_tools android-toolchain
+ test -f "$build_tools_zipfile" || exit_error "$build_tools_zipfile is missing"
+ fi
+ local build_tools_dir=$(mktemp -d)
+ trap "rm -Rf $build_tools_dir" EXIT
+ unzip -d "$build_tools_dir" "$build_tools_zipfile"
+ test -f "$build_tools_dir"/android-12/apksigner || \
+ exit_error "$build_tools_dir/android-12/apksigner is missing"
+ export PATH="$build_tools_dir/android-12:${PATH}"
+}
+
+download_unsigned_apks() {
+ apks_dir=$(mktemp -d)
+ trap "rm -Rf $apks_dir" EXIT
+ rsync -avH "$ssh_host_pkgstage:$pkgstage_tor_browser_build_dir/$tbb_version_type/signed/$tbb_version/*-qa.apk" "$apks_dir/"
+}
+
+upload_signed_apks() {
+ rsync -avH --exclude="*-qa.apk" --exclude="*-unaligned.apk" \
+ --exclude="*-unsigned.apk" "$apks_dir/" \
+ "$ssh_host_pkgstage:$pkgstage_tor_browser_build_dir/$tbb_version_type/signed/$tbb_version/"
+}
# Sign individual apk
sign_apk() {
@@ -57,7 +98,7 @@ sign_apk() {
# Step 3: Sign
# Use this command if reading key from file
- apksigner sign --verbose -ks ${SIGNING_KEY_PATH} --ks-type pkcs12 --ks-pass env:KSPASS --debuggable-apk-permitted=false --out "${SIGNED_APK}" "${UNSIGNED_APK}"
+ apksigner sign --verbose -ks ${android_signing_key_path} --ks-type pkcs12 --ks-pass env:KSPASS --debuggable-apk-permitted=false --out "${SIGNED_APK}" "${UNSIGNED_APK}"
# Or, use below command if using a hardware token
# apksigner sign --verbose --provider-class sun.security.pkcs11.SunPKCS11 --provider-arg pkcs11_java.cfg --ks NONE --ks-type PKCS11 --debuggable-apk-permitted=false --out "${SIGNED_APK}" "${UNSIGNED_APK}"
@@ -81,18 +122,18 @@ sign_apk() {
# Rename and verify signing certificate
finalize() {
for arch in ${ARCHS}; do
- mv tor-browser-${VERSION}-android-${arch}-multi{-qa,}.apk
+ mv tor-browser-${tbb_version}-android-${arch}-multi{-qa,}.apk
done
for arch in ${ARCHS}; do
- verified=`apksigner verify --print-certs --verbose tor-browser-${VERSION}-android-${arch}-multi.apk`
+ verified=`apksigner verify --print-certs --verbose tor-browser-${tbb_version}-android-${arch}-multi.apk`
scheme_v1=
scheme_v2=
cert_digest=
pubkey_digest=
# Verify the expected signing key was used, Alpha verses Release based on the filename.
- if `echo ${VERSION} | grep -q a`; then
+ if test "$tbb_version_type" = "alpha"; then
scheme_v1="Verified using v1 scheme (JAR signing): true"
scheme_v2="Verified using v2 scheme (APK Signature Scheme v2): true"
cert_digest="Signer #1 certificate SHA-256 digest: 15f760b41acbe4783e667102c9f67119be2af62fab07763f9d57f01e5e1074e1"
@@ -117,15 +158,7 @@ finalize() {
echo Done.
}
-if [ -z "$VERSION" ]; then
- echo Provide version number
- exit
-fi
-
-if [ -z "${SIGNING_KEY_PATH}" ]; then
- echo Provide the path to the signing key: release or alpha
- exit
-fi
+check_installed_packages
if [ -z "$KSPASS" ]; then
echo "Enter keystore passphrase"
@@ -133,9 +166,17 @@ if [ -z "$KSPASS" ]; then
export KSPASS
fi
+setup_build_tools
+
+download_unsigned_apks
+
+cd $apks_dir
+
# Sign all packages
for arch in ${ARCHS}; do
- sign_apk tor-browser-${VERSION}-android-${arch}-multi-qa.apk
+ sign_apk tor-browser-${tbb_version}-android-${arch}-multi-qa.apk
done
finalize
+
+upload_signed_apks
diff --git a/tools/signing/set-config.android-signing b/tools/signing/set-config.android-signing
new file mode 100644
index 0000000..1731efc
--- /dev/null
+++ b/tools/signing/set-config.android-signing
@@ -0,0 +1,7 @@
+# The following line should be uncommented and updated:
+
+#ssh_host_pkgstage=tbbuild
+#pkgstage_tor_browser_build_dir=/home/user/tor-browser-build
+#android_signing_key_dir=/path/to/signing/key/dir
+
+var_is_defined ssh_host_pkgstage android_signing_key_dir
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.