diff options
author | Bill Strathearn <bills@google.com> | 2021-09-02 23:35:07 +0000 |
---|---|---|
committer | Bill Strathearn <bills@google.com> | 2021-09-03 16:54:26 +0000 |
commit | ad6a990678dd5cdd35ed369288da31d33abc450f (patch) | |
tree | 82f2e062a6ff558c64fcce69b3205d39ae07f251 | |
parent | 8ab66269b7c01414852a552578e01062a329515f (diff) | |
download | camera-ad6a990678dd5cdd35ed369288da31d33abc450f.tar.gz |
Convert the version script into py
And update it to follow the new two-part version scheme
Bug: 198094685
Test: Make the apex, deapex the apex and check the version info
Change-Id: I6b8f1eab3713f7b191beddeaa0701601acfa07c0
-rw-r--r-- | common/hal/hidl_service/Android.bp | 23 | ||||
-rw-r--r-- | common/hal/hidl_service/version_script.py | 121 | ||||
-rwxr-xr-x | common/hal/hidl_service/version_script.sh | 36 |
3 files changed, 133 insertions, 47 deletions
diff --git a/common/hal/hidl_service/Android.bp b/common/hal/hidl_service/Android.bp index 29f7203..f10d6ef 100644 --- a/common/hal/hidl_service/Android.bp +++ b/common/hal/hidl_service/Android.bp @@ -46,21 +46,22 @@ gch_lazy_hal_cc_defaults { }, } -sh_binary_host { +// Exported for use in vendor/google/services/LyricCameraHAL/src/ +python_binary_host { name: "camera_hal_version_script", - src: "version_script.sh", - filename_from_src: true, + main: "version_script.py", + srcs: ["version_script.py"], } cc_genrule { - name: "hidl_camera_build_version", - tools: [":camera_hal_version_script"], - cmd: "$(location :camera_hal_version_script) $(in) $(out)", - vendor: true, - srcs: [ - "hidl_camera_build_version.inl", - ], - out: ["hidl_camera_build_version.h"], + name: "hidl_camera_build_version", + tool_files: ["version_script.py"], + cmd: "python3 $(location version_script.py) $(in) $(out)", + vendor: true, + srcs: [ + "hidl_camera_build_version.inl", + ], + out: ["hidl_camera_build_version.h"], } cc_defaults { diff --git a/common/hal/hidl_service/version_script.py b/common/hal/hidl_service/version_script.py new file mode 100644 index 0000000..a5bb167 --- /dev/null +++ b/common/hal/hidl_service/version_script.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +# +# See: go/camera-sideline#versions for more context +# +# This script generates the apex manifest version number (which is also used for +# the outer aab/jar object's version available to PackageManager). +# +# That version is limited to INT_MAX +# Strategy: +# if(local eng build) +# version = 2147480000 +# else +# version = brach specific code + padding + numeric part of build number +# +# 2147480000 is chosen as being a value that can install over any expected build +# server build number that is still a little smaller than INT_MAX to leave room +# for maneuvering + +import os +import re +import sys + +BRANCH_SPECIFIC_VERSION_IDENTIFIER = 2 # sc-qpr1-dev +DEFAULT_ENG_BUILD_NUMBER = 2147480000 +DEFAULT_BAD_BUILD_NUMBER = DEFAULT_ENG_BUILD_NUMBER - 1 + + +def tame_box(numeric_build_number): + # Box the regex extracted value to a min and a max, just in case. Should not + # be needed ever. + if numeric_build_number < 1: + numeric_build_number = 1 + if numeric_build_number > DEFAULT_ENG_BUILD_NUMBER: + numeric_build_number = DEFAULT_BAD_BUILD_NUMBER + return numeric_build_number + + +def get_version(input_path, output_path): + + soong_build_number = DEFAULT_BAD_BUILD_NUMBER + numeric_build_number = DEFAULT_BAD_BUILD_NUMBER + + # Extract the Android Build ID from the build products + out_dir = os.getenv('OUT_DIR') + with open('%s/soong/build_number.txt' % out_dir, 'r') as file: + soong_build_number = file.read().replace('\n', '') + + # Eng builds all have a default very high version number to permit for local + # builds to ovewrite whatever else is installed on the OS. + if soong_build_number.startswith('eng.'): # eng.bills.20210901.235403 + numeric_build_number = DEFAULT_ENG_BUILD_NUMBER + else: + # We only want the numeric part of the Android Build ID + match = re.search(r'([0-9]+)', soong_build_number) + if match: + numeric_build_number = int(match.group(0)) + else: + numeric_build_number = DEFAULT_BAD_BUILD_NUMBER + + # Tame the inputs into a reasonable box, just in case + numeric_build_number = tame_box(numeric_build_number) + # print('numeric_build_number: %s' % str(numeric_build_number)) + + # With the numeric build number as a starting point, let's augment it with + # the BRANCH_SPECIFIC_VERSION_IDENTIFIER to differentiate build products from + # this branch according to: go/camera-sideline#versions + branched_build_number = numeric_build_number + if numeric_build_number == DEFAULT_ENG_BUILD_NUMBER: + # High default eng numbers can't really be multiplied so we add our branch + # specific number instead + branched_build_number = numeric_build_number + BRANCH_SPECIFIC_VERSION_IDENTIFIER + else: + # Two cases to consider: + # 1. A "regular" Android Build ID like: 7699287 + # 2. A pending Android Build ID like: P25748464 + + # "It's just string concatenation" + string_build_number = '%s%s' % (BRANCH_SPECIFIC_VERSION_IDENTIFIER, + str(numeric_build_number).zfill(8)) + # Ints in python3 are long + branched_build_number = int(string_build_number) + # Tame the result into a reasonable box, just in case + branched_build_number = tame_box(branched_build_number) + + # print('soong_build_number: %s' % soong_build_number) + # print('branched_build_number: %s' % str(branched_build_number)) + + # Bash version: + # cat $1 | \ + # sed -E "s/\{BUILD_NUMBER\}/$numeric_build_number/g" | \ + # sed -E "s/\{BUILD_ID\}/$soong_build_number/g" > $2 + try: + if os.path.exists(input_path): + input_fh = open(input_path, 'r') + contents = input_fh.readlines() + # print('Read: %s' % input_path) + new_contents = [] + input_fh.close() + for line in contents: + line = line.replace('{BUILD_ID}', soong_build_number) + line = line.replace('{BUILD_NUMBER}', str(branched_build_number)) + new_contents.append(line) + # print(new_contents) + output_fh = open(output_path, 'w') + output_fh.write(''.join(new_contents)) + output_fh.close() + # print('Wrote: %s' % output_path) + except IOError: + print(f'error occurred trying to read the file {input_path}') + return 1 + + return 0 + + +def main(): + return get_version(*sys.argv[1:]) + + +if __name__ == '__main__': + sys.exit(main()) + diff --git a/common/hal/hidl_service/version_script.sh b/common/hal/hidl_service/version_script.sh deleted file mode 100755 index 2ab4e2b..0000000 --- a/common/hal/hidl_service/version_script.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -# -# This script generates the apex manifest version number (which is also used for -# the outer aab/jar object's version available to PackageManager). -# -# That version is limited to INT_MAX -# Strategy: -# if(local eng build) -# version = 2147480000 -# else -# version = numeric part of build number -# -# 2147480000 is chosen as being a value that can install over any expected build -# server build number that is still a little smaller than INT_MAX to leave room -# for maneuvering - -default_eng_build_number=2147480000 - -build_number=$(cat $OUT_DIR/soong/build_number.txt) -if [[ "$build_number" == "eng."* ]]; then - numeric_build_number=$default_eng_build_number -else - numeric_build_number=$(cat $OUT_DIR/soong/build_number.txt | tr -d -c 0-9) - if [[ -z "$numeric_build_number" ]]; then - numeric_build_number=$default_eng_build_number - fi - if ((numeric_build_number < 1)); then - numeric_build_number=1 - fi - if ((numeric_build_number >= default_eng_build_number)); then - numeric_build_number=$((default_eng_build_number-1)) - fi -fi - -cat $1 | sed -E "s/\{BUILD_NUMBER\}/$numeric_build_number/g" | sed -E "s/\{BUILD_ID\}/$build_number/g" > $2 - |