boklm pushed to branch main at The Tor Project / Applications / tor-browser-build
Commits:
- 
821c192e
by Nicolas Vigier at 2025-08-29T12:16:22+02:00
30 changed files:
- rbm.conf
- tools/signing/do-all-signing
- + tools/signing/do-all-signing.torvpn
- tools/signing/functions
- + tools/signing/linux-signer-gpg-sign.torvpn
- + tools/signing/linux-signer-sign-android-aab
- + tools/signing/linux-signer-sign-android-aab.torvpn
- tools/signing/linux-signer-sign-android-apks
- + tools/signing/linux-signer-sign-android-apks.torvpn
- tools/signing/machines-setup/setup-signing-machine
- + tools/signing/machines-setup/sudoers.d/sign-aab
- tools/signing/machines-setup/sudoers.d/sign-apk
- tools/signing/set-config
- + tools/signing/staticiforme-prepare-cdn-dist-upload.torvpn
- + tools/signing/sync-builder-to-local.torvpn
- + tools/signing/sync-builder-to-local.torvpn.dry-run
- + tools/signing/sync-builder-unsigned-to-local-signed.torvpn
- + tools/signing/sync-builder-unsigned-to-local-signed.torvpn.dry-run
- + tools/signing/sync-linux-signer-to-local.torvpn
- + tools/signing/sync-linux-signer-to-local.torvpn.dry-run
- + tools/signing/sync-local-to-builder.torvpn
- + tools/signing/sync-local-to-builder.torvpn.dry-run
- + tools/signing/sync-local-to-linux-signer.torvpn
- + tools/signing/sync-local-to-linux-signer.torvpn.dry-run
- + tools/signing/sync-local-to-staticiforme.torvpn
- + tools/signing/sync-local-to-staticiforme.torvpn.dry-run
- + tools/signing/sync-scripts-to-linux-signer.torvpn
- + tools/signing/sync-scripts-to-linux-signer.torvpn.dry-run
- + tools/signing/wrappers/sign-aab
- tools/signing/wrappers/sign-apk
Changes:
| ... | ... | @@ -97,8 +97,8 @@ var: | 
| 97 | 97 |      # enable/disable all android or desktop platforms. If you want to
 | 
| 98 | 98 |      # check whether a release includes some android or desktop platforms
 | 
| 99 | 99 |      # see signing_android and signing_desktop below.
 | 
| 100 | -    is_android_release: '[% c("var/tor-browser") %]'
 | |
| 101 | -    is_desktop_release: '1'
 | |
| 100 | +    is_android_release: '[% c("var/tor-browser") || c("var/tor-vpn") %]'
 | |
| 101 | +    is_desktop_release: '[% ! c("var/tor-vpn") %]'
 | |
| 102 | 102 | |
| 103 | 103 |      # signing_android is used in signing scripts to check if at least
 | 
| 104 | 104 |      # one android platform is being signed/published
 | 
| ... | ... | @@ -328,6 +328,18 @@ targets: | 
| 328 | 328 |        max_torbrowser_incremental_from: 2
 | 
| 329 | 329 |        build_infos_json: 1
 | 
| 330 | 330 | |
| 331 | +  torvpn:
 | |
| 332 | +    var:
 | |
| 333 | +      tor-vpn: 1
 | |
| 334 | +      torbrowser_version: '1.0.0Beta'
 | |
| 335 | +      torbrowser_build: 'build1'
 | |
| 336 | +      browser_release_date: '2025/08/28 15:33:44'
 | |
| 337 | +      project-name: tor-vpn
 | |
| 338 | +      projectname: torvpn
 | |
| 339 | +      Project_Name: 'Tor VPN'
 | |
| 340 | +      ProjectName: TorVPN
 | |
| 341 | +      project_initials: tv
 | |
| 342 | + | |
| 331 | 343 |    torbrowser:
 | 
| 332 | 344 |      var:
 | 
| 333 | 345 |        tor-browser: 1
 | 
| ... | ... | @@ -67,7 +67,7 @@ echo | 
| 67 | 67 |  echo
 | 
| 68 | 68 | |
| 69 | 69 |  [ -z "$platform_android" ] || \
 | 
| 70 | -  [ -f "$steps_dir/linux-signer-sign-android-apks.done" ] || \
 | |
| 70 | +  [ -f "$steps_dir/sync-after-sign-android-apks.done" ] || \
 | |
| 71 | 71 |    [ -n "$KSPASS" ] || \
 | 
| 72 | 72 |    read -sp "Enter android apk signing password ($tbb_version_type): " KSPASS
 | 
| 73 | 73 |  echo
 | 
| ... | ... | @@ -155,6 +155,14 @@ EOF | 
| 155 | 155 |    unset KSPASS
 | 
| 156 | 156 |  }
 | 
| 157 | 157 | |
| 158 | +function linux-signer-sign-android-aab {
 | |
| 159 | +  ssh "$ssh_host_linux_signer" 'bash -s' << EOF
 | |
| 160 | +  export KSPASS=$KSPASS
 | |
| 161 | +  ~/signing-$SIGNING_PROJECTNAME-$tbb_version_type/linux-signer-sign-android-aab.$SIGNING_PROJECTNAME
 | |
| 162 | +EOF
 | |
| 163 | +  unset KSPASS
 | |
| 164 | +}
 | |
| 165 | + | |
| 158 | 166 |  function sync-after-sign-android-apks {
 | 
| 159 | 167 |    "$script_dir/sync-linux-signer-to-local"
 | 
| 160 | 168 |  }
 | 
| ... | ... | @@ -257,6 +265,8 @@ do_step sync-before-linux-signer-signmars | 
| 257 | 265 |    do_step sync-after-signmars
 | 
| 258 | 266 |  [ -n "$platform_android" ] && \
 | 
| 259 | 267 |    do_step linux-signer-sign-android-apks
 | 
| 268 | +[ "$SIGNING_PROJECTNAME" = 'torvpn' ] && [ -n "$platform_android" ] && \
 | |
| 269 | +  do_step linux-signer-sign-android-aab
 | |
| 260 | 270 |  [ -n "$platform_android" ] && \
 | 
| 261 | 271 |    do_step sync-after-sign-android-apks
 | 
| 262 | 272 |  [ -n "$platform_windows" ] && \
 | 
| ... | ... | @@ -275,6 +285,6 @@ do_step download-unsigned-sha256sums-gpg-signatures-from-people-tpo | 
| 275 | 285 |  do_step sync-local-to-staticiforme
 | 
| 276 | 286 |  do_step sync-scripts-to-staticiforme
 | 
| 277 | 287 |  do_step staticiforme-prepare-cdn-dist-upload
 | 
| 278 | -! is_legacy && \
 | |
| 288 | +[ "$SIGNING_PROJECTNAME" != 'torvpn' ] && ! is_legacy \
 | |
| 279 | 289 |    do_step upload-update_responses-to-staticiforme
 | 
| 280 | 290 |  do_step finished-signing-clean-linux-signer | 
| 1 | +do-all-signing | |
| \ No newline at end of file | 
| ... | ... | @@ -14,6 +14,7 @@ function var_is_defined { | 
| 14 | 14 |  }
 | 
| 15 | 15 | |
| 16 | 16 |  function check_update_responses_repository_dir {
 | 
| 17 | +  test "$SIGNING_PROJECTNAME" = 'torvpn' && return 0
 | |
| 17 | 18 |    if test -z "$update_responses_repository_dir" || ! test -d "$update_responses_repository_dir"
 | 
| 18 | 19 |    then
 | 
| 19 | 20 |      cat << 'EOF' > /dev/stderr
 | 
| 1 | +linux-signer-gpg-sign | |
| \ No newline at end of file | 
| 1 | +#!/bin/bash
 | |
| 2 | + | |
| 3 | +set -e
 | |
| 4 | +no_generate_config=1
 | |
| 5 | +script_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 | |
| 6 | +source "$script_dir/functions"
 | |
| 7 | + | |
| 8 | +topdir="$script_dir/../.."
 | |
| 9 | +test "$SIGNING_PROJECTNAME" = 'torvpn'
 | |
| 10 | +projname=$(project-name)
 | |
| 11 | +# tbb_version_type, tbb_version and SIGNING_PROJECTNAME are used in
 | |
| 12 | +# wrappers/sign-apk, so we export them
 | |
| 13 | +export tbb_version tbb_version_type SIGNING_PROJECTNAME
 | |
| 14 | +# (note: we should also export SIGNING_PROJECTNAME and tbb_version in
 | |
| 15 | +# the maint-14.5 branch)
 | |
| 16 | + | |
| 17 | +check_installed_packages() {
 | |
| 18 | +  local packages='unzip openjdk-11-jdk-headless openjdk-11-jre-headless'
 | |
| 19 | +  for package in $packages
 | |
| 20 | +  do
 | |
| 21 | +    dpkg -s "$package" | grep -q '^Status: install ok installed$' || \
 | |
| 22 | +      exit_error "package $package is missing"
 | |
| 23 | +  done
 | |
| 24 | +}
 | |
| 25 | + | |
| 26 | +sign_aab() {
 | |
| 27 | +  sudo -u signing-apk -- /signing/tor-browser-build/tools/signing/wrappers/sign-aab
 | |
| 28 | +}
 | |
| 29 | + | |
| 30 | +check_installed_packages
 | |
| 31 | + | |
| 32 | +if [ -z "$KSPASS" ]; then
 | |
| 33 | +    echo "Enter keystore passphrase"
 | |
| 34 | +    stty -echo; read KSPASS; stty echo
 | |
| 35 | +    export KSPASS
 | |
| 36 | +fi
 | |
| 37 | + | |
| 38 | +cp -af ~/"$SIGNING_PROJECTNAME-$tbb_version"/$projname-$tbb_version.aab \
 | |
| 39 | +  /home/signing-apk/unsigned-files/"$SIGNING_PROJECTNAME-$tbb_version_type.aab"
 | |
| 40 | + | |
| 41 | +sign_aab
 | |
| 42 | + | |
| 43 | +cp /home/signing-apk/signed-files/"$SIGNING_PROJECTNAME-$tbb_version_type.aab" \
 | |
| 44 | +  ~/"$SIGNING_PROJECTNAME-$tbb_version"/$projname-$tbb_version.aab
 | |
| 45 | +rm /home/signing-apk/signed-files/"$SIGNING_PROJECTNAME-$tbb_version_type.aab"
 | |
| 46 | +rm /home/signing-apk/unsigned-files/"$SIGNING_PROJECTNAME-$tbb_version_type.aab" | 
| 1 | +linux-signer-sign-android-aab | |
| \ No newline at end of file | 
| ... | ... | @@ -7,9 +7,11 @@ source "$script_dir/functions" | 
| 7 | 7 | |
| 8 | 8 |  topdir="$script_dir/../.."
 | 
| 9 | 9 |  ARCHS="armv7 aarch64 x86 x86_64"
 | 
| 10 | +test "$SIGNING_PROJECTNAME" = 'torvpn' && ARCHS='multiarch'
 | |
| 10 | 11 |  projname=$(project-name)
 | 
| 11 | -# tbb_version_type is used in wrappers/sign-apk, so we export it
 | |
| 12 | -export tbb_version_type
 | |
| 12 | +# tbb_version_type, tbb_version and SIGNING_PROJECTNAME are used in
 | |
| 13 | +# wrappers/sign-apk, so we export them
 | |
| 14 | +export tbb_version tbb_version_type SIGNING_PROJECTNAME
 | |
| 13 | 15 | |
| 14 | 16 |  check_installed_packages() {
 | 
| 15 | 17 |    local packages='unzip openjdk-11-jdk-headless openjdk-11-jre-headless'
 | 
| ... | ... | @@ -21,10 +23,11 @@ check_installed_packages() { | 
| 21 | 23 |  }
 | 
| 22 | 24 | |
| 23 | 25 |  setup_build_tools() {
 | 
| 26 | +  abt_version=16
 | |
| 24 | 27 |    build_tools_dir=/signing/android-build-tools
 | 
| 25 | -  test -f "$build_tools_dir"/android-12/apksigner || \
 | |
| 26 | -    exit_error "$build_tools_dir/android-12/apksigner is missing"
 | |
| 27 | -  export PATH="$build_tools_dir/android-12:${PATH}"
 | |
| 28 | +  test -f "$build_tools_dir"/android-$abt_version/apksigner || \
 | |
| 29 | +    exit_error "$build_tools_dir/android-$abt_version/apksigner is missing"
 | |
| 30 | +  export PATH="$build_tools_dir/android-$abt_version:${PATH}"
 | |
| 28 | 31 |  }
 | 
| 29 | 32 | |
| 30 | 33 |  sign_apk() {
 | 
| ... | ... | @@ -36,7 +39,6 @@ verify_apk() { | 
| 36 | 39 |    scheme_v1="Verified using v1 scheme (JAR signing): true"
 | 
| 37 | 40 |    scheme_v2="Verified using v2 scheme (APK Signature Scheme v2): true"
 | 
| 38 | 41 | |
| 39 | -  # Verify the expected signing key was used, Alpha verses Release based on the filename.
 | |
| 40 | 42 |    if test "$tbb_version_type" = "alpha"; then
 | 
| 41 | 43 |      cert_digest="Signer #1 certificate SHA-256 digest: 15f760b41acbe4783e667102c9f67119be2af62fab07763f9d57f01e5e1074e1"
 | 
| 42 | 44 |      pubkey_digest="Signer #1 public key SHA-256 digest: 4e617e6516f81123ca58e718d617a704ac8365c575bd9e7a731ba5dd0476869d"
 | 
| ... | ... | @@ -44,7 +46,14 @@ verify_apk() { | 
| 44 | 46 |      cert_digest="Signer #1 certificate SHA-256 digest: 20061f045e737c67375c17794cfedb436a03cec6bacb7cb9f96642205ca2cec8"
 | 
| 45 | 47 |      pubkey_digest="Signer #1 public key SHA-256 digest: 343ca8a2e5452670bdc335a181a4baed909f868937d68c4653e44ef84de8dfc6"
 | 
| 46 | 48 |    fi
 | 
| 49 | +  if test "$SIGNING_PROJECTNAME" = "torvpn"; then
 | |
| 50 | +    # No v1 scheme signature on torvpn apk
 | |
| 51 | +    scheme_v1=''
 | |
| 52 | +    cert_digest="Signer #1 certificate SHA-256 digest: c2f6ffa30e56a7c53a226248ef908612ee539df2f52bede5a55037425b83331d"
 | |
| 53 | +    pubkey_digest="Signer #1 public key SHA-256 digest: fddc5f93ae0bc971e951481b0b5e6b62e47040fe979ff535cf75daade2f13f3d"
 | |
| 54 | +  fi
 | |
| 47 | 55 |    for digest in "${scheme_v1}" "${scheme_v2}" "${cert_digest}" "${pubkey_digest}"; do
 | 
| 56 | +    test -z "$digest" && continue
 | |
| 48 | 57 |      if ! echo "${verified}" | grep -q "${digest}"; then
 | 
| 49 | 58 |        echo "Expected digest not found:"
 | 
| 50 | 59 |        echo ${digest}
 | 
| ... | ... | @@ -69,8 +78,10 @@ mkdir -p ~/"$SIGNING_PROJECTNAME-$tbb_version-apks" | 
| 69 | 78 |  chgrp signing ~/"$SIGNING_PROJECTNAME-$tbb_version-apks"
 | 
| 70 | 79 |  chmod g+w ~/"$SIGNING_PROJECTNAME-$tbb_version-apks"
 | 
| 71 | 80 |  cp -af ~/"$SIGNING_PROJECTNAME-$tbb_version"/*.apk \
 | 
| 72 | -  ~/"$SIGNING_PROJECTNAME-$tbb_version"/*.bspatch \
 | |
| 73 | 81 |    ~/"$SIGNING_PROJECTNAME-$tbb_version-apks"
 | 
| 82 | +test "$SIGNING_PROJECTNAME" != 'torvpn' && \
 | |
| 83 | +  cp -af ~/"$SIGNING_PROJECTNAME-$tbb_version"/*.bspatch \
 | |
| 84 | +    ~/"$SIGNING_PROJECTNAME-$tbb_version-apks"
 | |
| 74 | 85 |  cd ~/"$SIGNING_PROJECTNAME-$tbb_version-apks"
 | 
| 75 | 86 | |
| 76 | 87 |  # Sign all packages
 | 
| ... | ... | @@ -79,7 +90,8 @@ for arch in ${ARCHS}; do | 
| 79 | 90 |    unsigned_apk=${projname}-qa-unsigned-android-${arch}-${tbb_version}.apk
 | 
| 80 | 91 |    unsigned_apk_bspatch=${projname}-qa-unsign-android-${arch}-${tbb_version}.bspatch
 | 
| 81 | 92 |    signed_apk=${projname}-android-${arch}-${tbb_version}.apk
 | 
| 82 | -  bspatch "$qa_apk" "$unsigned_apk" "$unsigned_apk_bspatch"
 | |
| 93 | +  test -f "$unsigned_apk" || \
 | |
| 94 | +    bspatch "$qa_apk" "$unsigned_apk" "$unsigned_apk_bspatch"
 | |
| 83 | 95 |    sign_apk "$unsigned_apk" "$signed_apk"
 | 
| 84 | 96 |    verify_apk "$signed_apk"
 | 
| 85 | 97 |    cp -f "$signed_apk" ~/"$SIGNING_PROJECTNAME-$tbb_version"
 | 
| 1 | +linux-signer-sign-android-apks | |
| \ No newline at end of file | 
| ... | ... | @@ -91,6 +91,7 @@ sudoers_file sign-gpg | 
| 91 | 91 |  sudoers_file sign-mar
 | 
| 92 | 92 |  sudoers_file sign-exe
 | 
| 93 | 93 |  sudoers_file sign-apk
 | 
| 94 | +sudoers_file sign-aab
 | |
| 94 | 95 |  sudoers_file sign-rcodesign
 | 
| 95 | 96 |  sudoers_file sign-rcodesign-128
 | 
| 96 | 97 |  sudoers_file set-date
 | 
| ... | ... | @@ -105,6 +106,10 @@ authorized_keys ma1 ma1.pub | 
| 105 | 106 |  create_user pierov signing
 | 
| 106 | 107 |  authorized_keys pierov pierov.pub
 | 
| 107 | 108 | |
| 109 | +mkdir -p /home/signing-apk/unsigned-files /home/signing-apk/signed-files
 | |
| 110 | +chgrp signing /home/signing-apk/unsigned-files /home/signing-apk/signed-files
 | |
| 111 | +chmod g+rwx /home/signing-apk/unsigned-files /home/signing-apk/signed-files
 | |
| 112 | + | |
| 108 | 113 |  # Install rbm deps
 | 
| 109 | 114 |  install_packages libyaml-libyaml-perl libtemplate-perl libdatetime-perl \
 | 
| 110 | 115 |                   libio-handle-util-perl libio-all-perl \
 | 
| 1 | +Defaults>signing-apk env_keep += "SIGNING_PROJECTNAME tbb_version tbb_version_type KSPASS"
 | |
| 2 | +%signing ALL = (signing-apk) NOPASSWD: /signing/tor-browser-build/tools/signing/wrappers/sign-aab | 
| 1 | -Defaults>signing-apk env_keep += "SIGNING_PROJECTNAME tbb_version_type KSPASS"
 | |
| 1 | +Defaults>signing-apk env_keep += "SIGNING_PROJECTNAME tbb_version tbb_version_type KSPASS"
 | |
| 2 | 2 |  %signing ALL = (signing-apk) NOPASSWD: /signing/tor-browser-build/tools/signing/wrappers/sign-apk | 
| ... | ... | @@ -16,6 +16,7 @@ test -n "${SIGNING_PROJECTNAME+x}" \ | 
| 16 | 16 |  test "$SIGNING_PROJECTNAME" = 'torbrowser' \
 | 
| 17 | 17 |    || test "$SIGNING_PROJECTNAME" = 'basebrowser' \
 | 
| 18 | 18 |    || test "$SIGNING_PROJECTNAME" = 'mullvadbrowser' \
 | 
| 19 | +  || test "$SIGNING_PROJECTNAME" = 'torvpn' \
 | |
| 19 | 20 |    || exit_error "Unknown SIGNING_PROJECTNAME $SIGNING_PROJECTNAME"
 | 
| 20 | 21 | |
| 21 | 22 |  export SIGNING_PROJECTNAME
 | 
| 1 | +staticiforme-prepare-cdn-dist-upload | |
| \ No newline at end of file | 
| 1 | +sync-builder-to-local | |
| \ No newline at end of file | 
| 1 | +sync-builder-to-local | |
| \ No newline at end of file | 
| 1 | +sync-builder-unsigned-to-local-signed | |
| \ No newline at end of file | 
| 1 | +sync-builder-unsigned-to-local-signed | |
| \ No newline at end of file | 
| 1 | +sync-linux-signer-to-local | |
| \ No newline at end of file | 
| 1 | +sync-linux-signer-to-local | |
| \ No newline at end of file | 
| 1 | +sync-local-to-builder | |
| \ No newline at end of file | 
| 1 | +sync-local-to-builder | |
| \ No newline at end of file | 
| 1 | +sync-local-to-linux-signer | |
| \ No newline at end of file | 
| 1 | +sync-local-to-linux-signer | |
| \ No newline at end of file | 
| 1 | +sync-local-to-staticiforme | |
| \ No newline at end of file | 
| 1 | +sync-local-to-staticiforme | |
| \ No newline at end of file | 
| 1 | +sync-scripts-to-linux-signer | |
| \ No newline at end of file | 
| 1 | +sync-scripts-to-linux-signer | |
| \ No newline at end of file | 
| 1 | +#!/bin/bash
 | |
| 2 | +set -e
 | |
| 3 | + | |
| 4 | +function exit_error {
 | |
| 5 | +  for msg in "$@"
 | |
| 6 | +  do
 | |
| 7 | +    echo "$msg" >&2
 | |
| 8 | +  done
 | |
| 9 | +  exit 1
 | |
| 10 | +}
 | |
| 11 | + | |
| 12 | +case "$SIGNING_PROJECTNAME" in
 | |
| 13 | +  torbrowser | mullvadbrowser | torvpn)
 | |
| 14 | +    ;;
 | |
| 15 | +  *)
 | |
| 16 | +    exit_error "Unexpected value for SIGNING_PROJECTNAME: $SIGNING_PROJECTNAME"
 | |
| 17 | +    ;;
 | |
| 18 | +esac
 | |
| 19 | + | |
| 20 | +case "$tbb_version_type" in
 | |
| 21 | +  release | alpha)
 | |
| 22 | +    ;;
 | |
| 23 | +  *)
 | |
| 24 | +    exit_error "Unexpected value for tbb_version_type: $tbb_version_type"
 | |
| 25 | +    ;;
 | |
| 26 | +esac
 | |
| 27 | + | |
| 28 | +android_signing_key_dir=/home/signing-apk/keys
 | |
| 29 | +android_signing_key_path="$android_signing_key_dir/torvpn.p12"
 | |
| 30 | +test -f "$android_signing_key_path" || exit_error "$android_signing_key_path is missing"
 | |
| 31 | + | |
| 32 | +tmpdir=$(mktemp -d)
 | |
| 33 | +cd "$tmpdir"
 | |
| 34 | + | |
| 35 | +jarsigner -keystore "${android_signing_key_path}" -storepass:env KSPASS \
 | |
| 36 | +  -signedjar /home/signing-apk/signed-files/"$SIGNING_PROJECTNAME-$tbb_version_type.aab" \
 | |
| 37 | +  -verbose /home/signing-apk/unsigned-files/"$SIGNING_PROJECTNAME-$tbb_version_type.aab" \
 | |
| 38 | +  tor-vpn
 | |
| 39 | + | |
| 40 | +cd -
 | |
| 41 | +rm -Rf "$tmpdir" | 
| ... | ... | @@ -14,15 +14,30 @@ if test "$tbb_version_type" != 'release' \ | 
| 14 | 14 |    exit_error "Unexpected value for tbb_version_type: $tbb_version_type"
 | 
| 15 | 15 |  fi
 | 
| 16 | 16 | |
| 17 | +case "$SIGNING_PROJECTNAME" in
 | |
| 18 | +  torbrowser | mullvadbrowser | torvpn)
 | |
| 19 | +    ;;
 | |
| 20 | +  *)
 | |
| 21 | +    exit_error "Unexpected value for SIGNING_PROJECTNAME: $SIGNING_PROJECTNAME"
 | |
| 22 | +    ;;
 | |
| 23 | +esac
 | |
| 24 | + | |
| 17 | 25 |  android_signing_key_dir=/home/signing-apk/keys
 | 
| 18 | -android_signing_key_path="$android_signing_key_dir/tba_$tbb_version_type.p12"
 | |
| 26 | +android_signing_key_path="$android_signing_key_dir/$pname_$tbb_version_type.p12"
 | |
| 27 | +test -n "$SIGNING_PROJECTNAME" && test "$SIGNING_PROJECTNAME" = 'torvpn' && \
 | |
| 28 | +  android_signing_key_path="$android_signing_key_dir/torvpn.p12"
 | |
| 19 | 29 |  test -f "$android_signing_key_path" || exit_error "$android_signing_key_path is missing"
 | 
| 20 | 30 | |
| 21 | 31 |  setup_build_tools() {
 | 
| 32 | +  abt_version=16
 | |
| 33 | +  # If signing 14.5, keep using android-12 build tools
 | |
| 34 | +  # (we can remove this when 15.0 is the stable release)
 | |
| 35 | +  ( test -z "$tbb_version" || echo "$tbb_version" | grep -q '^14\.5' ) && \
 | |
| 36 | +    abt_version=12
 | |
| 22 | 37 |    build_tools_dir=/signing/android-build-tools
 | 
| 23 | -  test -f "$build_tools_dir"/android-12/apksigner || \
 | |
| 24 | -    exit_error "$build_tools_dir/android-12/apksigner is missing"
 | |
| 25 | -  export PATH="$build_tools_dir/android-12:${PATH}"
 | |
| 38 | +  test -f "$build_tools_dir"/android-$abt_version/apksigner || \
 | |
| 39 | +    exit_error "$build_tools_dir/android-$abt_version/apksigner is missing"
 | |
| 40 | +  export PATH="$build_tools_dir/android-$abt_version:${PATH}"
 | |
| 26 | 41 |  }
 | 
| 27 | 42 | |
| 28 | 43 |  # Sign individual apk
 |