1*90c8c64dSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*90c8c64dSAndroid Build Coastguard Worker# 3*90c8c64dSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project 4*90c8c64dSAndroid Build Coastguard Worker# 5*90c8c64dSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 6*90c8c64dSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 7*90c8c64dSAndroid Build Coastguard Worker# You may obtain a copy of the License at 8*90c8c64dSAndroid Build Coastguard Worker# 9*90c8c64dSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 10*90c8c64dSAndroid Build Coastguard Worker# 11*90c8c64dSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 12*90c8c64dSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 13*90c8c64dSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*90c8c64dSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 15*90c8c64dSAndroid Build Coastguard Worker# limitations under the License. 16*90c8c64dSAndroid Build Coastguard Worker# 17*90c8c64dSAndroid Build Coastguard Worker"""Installs VNDK snapshot under prebuilts/vndk/v{version}.""" 18*90c8c64dSAndroid Build Coastguard Worker 19*90c8c64dSAndroid Build Coastguard Workerimport argparse 20*90c8c64dSAndroid Build Coastguard Workerimport glob 21*90c8c64dSAndroid Build Coastguard Workerimport logging 22*90c8c64dSAndroid Build Coastguard Workerimport os 23*90c8c64dSAndroid Build Coastguard Workerimport re 24*90c8c64dSAndroid Build Coastguard Workerimport shutil 25*90c8c64dSAndroid Build Coastguard Workerimport subprocess 26*90c8c64dSAndroid Build Coastguard Workerimport sys 27*90c8c64dSAndroid Build Coastguard Workerimport tempfile 28*90c8c64dSAndroid Build Coastguard Workerimport textwrap 29*90c8c64dSAndroid Build Coastguard Worker 30*90c8c64dSAndroid Build Coastguard Workerimport utils 31*90c8c64dSAndroid Build Coastguard Worker 32*90c8c64dSAndroid Build Coastguard Workerfrom check_gpl_license import GPLChecker 33*90c8c64dSAndroid Build Coastguard Workerfrom gen_buildfiles import GenBuildFile 34*90c8c64dSAndroid Build Coastguard Worker 35*90c8c64dSAndroid Build Coastguard WorkerANDROID_BUILD_TOP = utils.get_android_build_top() 36*90c8c64dSAndroid Build Coastguard WorkerPREBUILTS_VNDK_DIR = utils.join_realpath(ANDROID_BUILD_TOP, 'prebuilts/vndk') 37*90c8c64dSAndroid Build Coastguard Worker 38*90c8c64dSAndroid Build Coastguard Worker 39*90c8c64dSAndroid Build Coastguard Workerdef start_branch(build): 40*90c8c64dSAndroid Build Coastguard Worker branch_name = 'update-' + (build or 'local') 41*90c8c64dSAndroid Build Coastguard Worker logging.info('Creating branch {branch} in {dir}'.format( 42*90c8c64dSAndroid Build Coastguard Worker branch=branch_name, dir=os.getcwd())) 43*90c8c64dSAndroid Build Coastguard Worker utils.check_call(['repo', 'start', branch_name, '.']) 44*90c8c64dSAndroid Build Coastguard Worker 45*90c8c64dSAndroid Build Coastguard Worker 46*90c8c64dSAndroid Build Coastguard Workerdef remove_old_snapshot(install_dir): 47*90c8c64dSAndroid Build Coastguard Worker logging.info('Removing any old files in {}'.format(install_dir)) 48*90c8c64dSAndroid Build Coastguard Worker for file in glob.glob('{}/*'.format(install_dir)): 49*90c8c64dSAndroid Build Coastguard Worker try: 50*90c8c64dSAndroid Build Coastguard Worker if os.path.isfile(file): 51*90c8c64dSAndroid Build Coastguard Worker os.unlink(file) 52*90c8c64dSAndroid Build Coastguard Worker elif os.path.isdir(file): 53*90c8c64dSAndroid Build Coastguard Worker shutil.rmtree(file) 54*90c8c64dSAndroid Build Coastguard Worker except Exception as error: 55*90c8c64dSAndroid Build Coastguard Worker logging.error('Error: {}'.format(error)) 56*90c8c64dSAndroid Build Coastguard Worker sys.exit(1) 57*90c8c64dSAndroid Build Coastguard Worker 58*90c8c64dSAndroid Build Coastguard Worker 59*90c8c64dSAndroid Build Coastguard Workerdef install_snapshot(branch, build, local_dir, install_dir, temp_artifact_dir): 60*90c8c64dSAndroid Build Coastguard Worker """Installs VNDK snapshot build artifacts to prebuilts/vndk/v{version}. 61*90c8c64dSAndroid Build Coastguard Worker 62*90c8c64dSAndroid Build Coastguard Worker 1) Fetch build artifacts from Android Build server or from local_dir 63*90c8c64dSAndroid Build Coastguard Worker 2) Unzip build artifacts 64*90c8c64dSAndroid Build Coastguard Worker 65*90c8c64dSAndroid Build Coastguard Worker Args: 66*90c8c64dSAndroid Build Coastguard Worker branch: string or None, branch name of build artifacts 67*90c8c64dSAndroid Build Coastguard Worker build: string or None, build number of build artifacts 68*90c8c64dSAndroid Build Coastguard Worker local_dir: string or None, local dir to pull artifacts from 69*90c8c64dSAndroid Build Coastguard Worker install_dir: string, directory to install VNDK snapshot 70*90c8c64dSAndroid Build Coastguard Worker temp_artifact_dir: string, temp directory to hold build artifacts fetched 71*90c8c64dSAndroid Build Coastguard Worker from Android Build server. For 'local' option, is set to None. 72*90c8c64dSAndroid Build Coastguard Worker """ 73*90c8c64dSAndroid Build Coastguard Worker artifact_pattern = 'android-vndk-*.zip' 74*90c8c64dSAndroid Build Coastguard Worker 75*90c8c64dSAndroid Build Coastguard Worker if branch and build: 76*90c8c64dSAndroid Build Coastguard Worker artifact_dir = temp_artifact_dir 77*90c8c64dSAndroid Build Coastguard Worker os.chdir(temp_artifact_dir) 78*90c8c64dSAndroid Build Coastguard Worker logging.info('Fetching {pattern} from {branch} (bid: {build})'.format( 79*90c8c64dSAndroid Build Coastguard Worker pattern=artifact_pattern, branch=branch, build=build)) 80*90c8c64dSAndroid Build Coastguard Worker utils.fetch_artifact(branch, build, artifact_pattern) 81*90c8c64dSAndroid Build Coastguard Worker 82*90c8c64dSAndroid Build Coastguard Worker manifest_pattern = 'manifest_{}.xml'.format(build) 83*90c8c64dSAndroid Build Coastguard Worker logging.info('Fetching {file} from {branch} (bid: {build})'.format( 84*90c8c64dSAndroid Build Coastguard Worker file=manifest_pattern, branch=branch, build=build)) 85*90c8c64dSAndroid Build Coastguard Worker utils.fetch_artifact(branch, build, manifest_pattern, 86*90c8c64dSAndroid Build Coastguard Worker utils.MANIFEST_FILE_NAME) 87*90c8c64dSAndroid Build Coastguard Worker 88*90c8c64dSAndroid Build Coastguard Worker os.chdir(install_dir) 89*90c8c64dSAndroid Build Coastguard Worker elif local_dir: 90*90c8c64dSAndroid Build Coastguard Worker logging.info('Fetching local VNDK snapshot from {}'.format(local_dir)) 91*90c8c64dSAndroid Build Coastguard Worker artifact_dir = local_dir 92*90c8c64dSAndroid Build Coastguard Worker 93*90c8c64dSAndroid Build Coastguard Worker artifacts = glob.glob(os.path.join(artifact_dir, artifact_pattern)) 94*90c8c64dSAndroid Build Coastguard Worker for artifact in artifacts: 95*90c8c64dSAndroid Build Coastguard Worker logging.info('Unzipping VNDK snapshot: {}'.format(artifact)) 96*90c8c64dSAndroid Build Coastguard Worker utils.check_call(['unzip', '-qn', artifact, '-d', install_dir]) 97*90c8c64dSAndroid Build Coastguard Worker 98*90c8c64dSAndroid Build Coastguard Worker # rename {install_dir}/{arch}/include/out/soong/.intermediates 99*90c8c64dSAndroid Build Coastguard Worker for soong_intermediates_dir in glob.glob(install_dir + '/*/include/' + utils.SOONG_INTERMEDIATES_DIR): 100*90c8c64dSAndroid Build Coastguard Worker generated_headers_dir = soong_intermediates_dir.replace( 101*90c8c64dSAndroid Build Coastguard Worker utils.SOONG_INTERMEDIATES_DIR, 102*90c8c64dSAndroid Build Coastguard Worker utils.GENERATED_HEADERS_DIR 103*90c8c64dSAndroid Build Coastguard Worker ) 104*90c8c64dSAndroid Build Coastguard Worker os.rename(soong_intermediates_dir, generated_headers_dir) 105*90c8c64dSAndroid Build Coastguard Worker 106*90c8c64dSAndroid Build Coastguard Workerdef gather_notice_files(install_dir): 107*90c8c64dSAndroid Build Coastguard Worker """Gathers all NOTICE files to a common NOTICE_FILES directory.""" 108*90c8c64dSAndroid Build Coastguard Worker 109*90c8c64dSAndroid Build Coastguard Worker common_notices_dir = utils.NOTICE_FILES_DIR_PATH 110*90c8c64dSAndroid Build Coastguard Worker logging.info('Creating {} directory to gather all NOTICE files...'.format( 111*90c8c64dSAndroid Build Coastguard Worker common_notices_dir)) 112*90c8c64dSAndroid Build Coastguard Worker os.makedirs(common_notices_dir) 113*90c8c64dSAndroid Build Coastguard Worker for arch in utils.get_snapshot_archs(install_dir): 114*90c8c64dSAndroid Build Coastguard Worker notices_dir_per_arch = os.path.join(arch, utils.NOTICE_FILES_DIR_NAME) 115*90c8c64dSAndroid Build Coastguard Worker if os.path.isdir(notices_dir_per_arch): 116*90c8c64dSAndroid Build Coastguard Worker for notice_file in glob.glob( 117*90c8c64dSAndroid Build Coastguard Worker '{}/**'.format(notices_dir_per_arch), recursive=True): 118*90c8c64dSAndroid Build Coastguard Worker if os.path.isfile(notice_file): 119*90c8c64dSAndroid Build Coastguard Worker rel_path = os.path.relpath(notice_file, notices_dir_per_arch) 120*90c8c64dSAndroid Build Coastguard Worker target_path = os.path.join(common_notices_dir, rel_path) 121*90c8c64dSAndroid Build Coastguard Worker if not os.path.isfile(target_path): 122*90c8c64dSAndroid Build Coastguard Worker os.makedirs(os.path.dirname(target_path), exist_ok=True) 123*90c8c64dSAndroid Build Coastguard Worker shutil.copy(notice_file, target_path) 124*90c8c64dSAndroid Build Coastguard Worker shutil.rmtree(notices_dir_per_arch) 125*90c8c64dSAndroid Build Coastguard Worker 126*90c8c64dSAndroid Build Coastguard Worker 127*90c8c64dSAndroid Build Coastguard Workerdef post_processe_files_if_needed(vndk_version): 128*90c8c64dSAndroid Build Coastguard Worker """Renames vndkcore.libraries.txt and vndksp.libraries.txt 129*90c8c64dSAndroid Build Coastguard Worker files to have version suffix. 130*90c8c64dSAndroid Build Coastguard Worker Create empty vndkproduct.libraries.txt file if not exist. 131*90c8c64dSAndroid Build Coastguard Worker 132*90c8c64dSAndroid Build Coastguard Worker Args: 133*90c8c64dSAndroid Build Coastguard Worker vndk_version: int, version of VNDK snapshot 134*90c8c64dSAndroid Build Coastguard Worker """ 135*90c8c64dSAndroid Build Coastguard Worker def add_version_suffix(file_name): 136*90c8c64dSAndroid Build Coastguard Worker logging.info('Rename {} to have version suffix'.format(file_name)) 137*90c8c64dSAndroid Build Coastguard Worker target_files = glob.glob( 138*90c8c64dSAndroid Build Coastguard Worker os.path.join(utils.CONFIG_DIR_PATH_PATTERN, file_name)) 139*90c8c64dSAndroid Build Coastguard Worker for target_file in target_files: 140*90c8c64dSAndroid Build Coastguard Worker name, ext = os.path.splitext(target_file) 141*90c8c64dSAndroid Build Coastguard Worker os.rename(target_file, name + '.' + str(vndk_version) + ext) 142*90c8c64dSAndroid Build Coastguard Worker def create_empty_file_if_not_exist(file_name): 143*90c8c64dSAndroid Build Coastguard Worker target_dirs = glob.glob(utils.CONFIG_DIR_PATH_PATTERN) 144*90c8c64dSAndroid Build Coastguard Worker for dir in target_dirs: 145*90c8c64dSAndroid Build Coastguard Worker path = os.path.join(dir, file_name) 146*90c8c64dSAndroid Build Coastguard Worker if os.path.isfile(path): 147*90c8c64dSAndroid Build Coastguard Worker continue 148*90c8c64dSAndroid Build Coastguard Worker logging.info('Creating empty file: {}'.format(path)) 149*90c8c64dSAndroid Build Coastguard Worker open(path, 'a').close() 150*90c8c64dSAndroid Build Coastguard Worker 151*90c8c64dSAndroid Build Coastguard Worker files_to_add_version_suffix = ('vndkcore.libraries.txt', 152*90c8c64dSAndroid Build Coastguard Worker 'vndkprivate.libraries.txt') 153*90c8c64dSAndroid Build Coastguard Worker files_to_create_if_not_exist = ('vndkproduct.libraries.txt',) 154*90c8c64dSAndroid Build Coastguard Worker for file_to_rename in files_to_add_version_suffix: 155*90c8c64dSAndroid Build Coastguard Worker add_version_suffix(file_to_rename) 156*90c8c64dSAndroid Build Coastguard Worker for file_to_create in files_to_create_if_not_exist: 157*90c8c64dSAndroid Build Coastguard Worker create_empty_file_if_not_exist(file_to_create) 158*90c8c64dSAndroid Build Coastguard Worker 159*90c8c64dSAndroid Build Coastguard Worker 160*90c8c64dSAndroid Build Coastguard Workerdef update_buildfiles(buildfile_generator): 161*90c8c64dSAndroid Build Coastguard Worker # To parse json information, read and generate arch android.bp using 162*90c8c64dSAndroid Build Coastguard Worker # generate_android_bp() first. 163*90c8c64dSAndroid Build Coastguard Worker logging.info('Generating Android.bp files...') 164*90c8c64dSAndroid Build Coastguard Worker buildfile_generator.generate_android_bp() 165*90c8c64dSAndroid Build Coastguard Worker 166*90c8c64dSAndroid Build Coastguard Worker logging.info('Generating root Android.bp file...') 167*90c8c64dSAndroid Build Coastguard Worker buildfile_generator.generate_root_android_bp() 168*90c8c64dSAndroid Build Coastguard Worker 169*90c8c64dSAndroid Build Coastguard Worker logging.info('Generating common/Android.bp file...') 170*90c8c64dSAndroid Build Coastguard Worker buildfile_generator.generate_common_android_bp() 171*90c8c64dSAndroid Build Coastguard Worker 172*90c8c64dSAndroid Build Coastguard Workerdef copy_owners(root_dir, install_dir): 173*90c8c64dSAndroid Build Coastguard Worker path = os.path.dirname(__file__) 174*90c8c64dSAndroid Build Coastguard Worker shutil.copy(os.path.join(root_dir, path, 'OWNERS'), install_dir) 175*90c8c64dSAndroid Build Coastguard Worker 176*90c8c64dSAndroid Build Coastguard Workerdef check_gpl_license(license_checker): 177*90c8c64dSAndroid Build Coastguard Worker try: 178*90c8c64dSAndroid Build Coastguard Worker license_checker.check_gpl_projects() 179*90c8c64dSAndroid Build Coastguard Worker except ValueError as error: 180*90c8c64dSAndroid Build Coastguard Worker logging.error('***CANNOT INSTALL VNDK SNAPSHOT***: {}'.format(error)) 181*90c8c64dSAndroid Build Coastguard Worker raise 182*90c8c64dSAndroid Build Coastguard Worker 183*90c8c64dSAndroid Build Coastguard Worker 184*90c8c64dSAndroid Build Coastguard Workerdef commit(branch, build, version): 185*90c8c64dSAndroid Build Coastguard Worker logging.info('Making commit...') 186*90c8c64dSAndroid Build Coastguard Worker utils.check_call(['git', 'add', '.']) 187*90c8c64dSAndroid Build Coastguard Worker message = textwrap.dedent("""\ 188*90c8c64dSAndroid Build Coastguard Worker Update VNDK snapshot v{version} to build {build}. 189*90c8c64dSAndroid Build Coastguard Worker 190*90c8c64dSAndroid Build Coastguard Worker Taken from branch {branch}.""").format( 191*90c8c64dSAndroid Build Coastguard Worker version=version, branch=branch, build=build) 192*90c8c64dSAndroid Build Coastguard Worker utils.check_call(['git', 'commit', '-m', message]) 193*90c8c64dSAndroid Build Coastguard Worker 194*90c8c64dSAndroid Build Coastguard Worker 195*90c8c64dSAndroid Build Coastguard Workerdef run(vndk_version, branch, build_id, local, use_current_branch, remote, 196*90c8c64dSAndroid Build Coastguard Worker verbose): 197*90c8c64dSAndroid Build Coastguard Worker ''' Fetch and updtate the VNDK snapshots 198*90c8c64dSAndroid Build Coastguard Worker 199*90c8c64dSAndroid Build Coastguard Worker Args: 200*90c8c64dSAndroid Build Coastguard Worker vndk_version: int, VNDK snapshot version to install. 201*90c8c64dSAndroid Build Coastguard Worker branch: string, Branch to pull build from. 202*90c8c64dSAndroid Build Coastguard Worker build: string, Build number to pull. 203*90c8c64dSAndroid Build Coastguard Worker local: string, Fetch local VNDK snapshot artifacts from specified local 204*90c8c64dSAndroid Build Coastguard Worker directory instead of Android Build server. 205*90c8c64dSAndroid Build Coastguard Worker use-current-branch: boolean, Perform the update in the current branch. 206*90c8c64dSAndroid Build Coastguard Worker Do not repo start. 207*90c8c64dSAndroid Build Coastguard Worker remote: string, Remote name to fetch and check if the revision of VNDK 208*90c8c64dSAndroid Build Coastguard Worker snapshot is included in the source to conform GPL license. 209*90c8c64dSAndroid Build Coastguard Worker verbose: int, Increase log output verbosity. 210*90c8c64dSAndroid Build Coastguard Worker ''' 211*90c8c64dSAndroid Build Coastguard Worker local_path = None 212*90c8c64dSAndroid Build Coastguard Worker if local: 213*90c8c64dSAndroid Build Coastguard Worker local_path = os.path.abspath(os.path.expanduser(local)) 214*90c8c64dSAndroid Build Coastguard Worker 215*90c8c64dSAndroid Build Coastguard Worker if local_path: 216*90c8c64dSAndroid Build Coastguard Worker if build_id or branch: 217*90c8c64dSAndroid Build Coastguard Worker raise ValueError( 218*90c8c64dSAndroid Build Coastguard Worker 'When --local option is set, --branch or --build cannot be ' 219*90c8c64dSAndroid Build Coastguard Worker 'specified.') 220*90c8c64dSAndroid Build Coastguard Worker elif not os.path.isdir(local_path): 221*90c8c64dSAndroid Build Coastguard Worker raise RuntimeError( 222*90c8c64dSAndroid Build Coastguard Worker 'The specified local directory, {}, does not exist.'.format( 223*90c8c64dSAndroid Build Coastguard Worker local_path)) 224*90c8c64dSAndroid Build Coastguard Worker else: 225*90c8c64dSAndroid Build Coastguard Worker if not (build_id and branch): 226*90c8c64dSAndroid Build Coastguard Worker raise ValueError( 227*90c8c64dSAndroid Build Coastguard Worker 'Please provide both --branch and --build or set --local ' 228*90c8c64dSAndroid Build Coastguard Worker 'option.') 229*90c8c64dSAndroid Build Coastguard Worker 230*90c8c64dSAndroid Build Coastguard Worker install_dir = os.path.join(PREBUILTS_VNDK_DIR, 'v{}'.format(vndk_version)) 231*90c8c64dSAndroid Build Coastguard Worker if not os.path.isdir(install_dir): 232*90c8c64dSAndroid Build Coastguard Worker raise RuntimeError( 233*90c8c64dSAndroid Build Coastguard Worker 'The directory for VNDK snapshot version {ver} does not exist.\n' 234*90c8c64dSAndroid Build Coastguard Worker 'Please request a new git project for prebuilts/vndk/v{ver} ' 235*90c8c64dSAndroid Build Coastguard Worker 'before installing new snapshot.'.format(ver=vndk_version)) 236*90c8c64dSAndroid Build Coastguard Worker 237*90c8c64dSAndroid Build Coastguard Worker utils.set_logging_config(verbose) 238*90c8c64dSAndroid Build Coastguard Worker root_dir = os.getcwd() 239*90c8c64dSAndroid Build Coastguard Worker os.chdir(install_dir) 240*90c8c64dSAndroid Build Coastguard Worker 241*90c8c64dSAndroid Build Coastguard Worker if not use_current_branch: 242*90c8c64dSAndroid Build Coastguard Worker start_branch(build_id) 243*90c8c64dSAndroid Build Coastguard Worker 244*90c8c64dSAndroid Build Coastguard Worker remove_old_snapshot(install_dir) 245*90c8c64dSAndroid Build Coastguard Worker os.makedirs(utils.COMMON_DIR_PATH) 246*90c8c64dSAndroid Build Coastguard Worker 247*90c8c64dSAndroid Build Coastguard Worker temp_artifact_dir = None 248*90c8c64dSAndroid Build Coastguard Worker if not local_path: 249*90c8c64dSAndroid Build Coastguard Worker temp_artifact_dir = tempfile.mkdtemp() 250*90c8c64dSAndroid Build Coastguard Worker 251*90c8c64dSAndroid Build Coastguard Worker try: 252*90c8c64dSAndroid Build Coastguard Worker install_snapshot(branch, build_id, local_path, install_dir, 253*90c8c64dSAndroid Build Coastguard Worker temp_artifact_dir) 254*90c8c64dSAndroid Build Coastguard Worker gather_notice_files(install_dir) 255*90c8c64dSAndroid Build Coastguard Worker post_processe_files_if_needed(vndk_version) 256*90c8c64dSAndroid Build Coastguard Worker 257*90c8c64dSAndroid Build Coastguard Worker buildfile_generator = GenBuildFile(install_dir, vndk_version) 258*90c8c64dSAndroid Build Coastguard Worker update_buildfiles(buildfile_generator) 259*90c8c64dSAndroid Build Coastguard Worker 260*90c8c64dSAndroid Build Coastguard Worker copy_owners(root_dir, install_dir) 261*90c8c64dSAndroid Build Coastguard Worker 262*90c8c64dSAndroid Build Coastguard Worker if not local_path and not branch.startswith('android'): 263*90c8c64dSAndroid Build Coastguard Worker license_checker = GPLChecker(install_dir, ANDROID_BUILD_TOP, 264*90c8c64dSAndroid Build Coastguard Worker buildfile_generator.modules_with_restricted_lic, 265*90c8c64dSAndroid Build Coastguard Worker temp_artifact_dir, remote) 266*90c8c64dSAndroid Build Coastguard Worker check_gpl_license(license_checker) 267*90c8c64dSAndroid Build Coastguard Worker logging.info( 268*90c8c64dSAndroid Build Coastguard Worker 'Successfully updated VNDK snapshot v{}'.format(vndk_version)) 269*90c8c64dSAndroid Build Coastguard Worker except Exception as error: 270*90c8c64dSAndroid Build Coastguard Worker logging.error('FAILED TO INSTALL SNAPSHOT: {}'.format(error)) 271*90c8c64dSAndroid Build Coastguard Worker raise 272*90c8c64dSAndroid Build Coastguard Worker finally: 273*90c8c64dSAndroid Build Coastguard Worker if temp_artifact_dir: 274*90c8c64dSAndroid Build Coastguard Worker logging.info( 275*90c8c64dSAndroid Build Coastguard Worker 'Deleting temp_artifact_dir: {}'.format(temp_artifact_dir)) 276*90c8c64dSAndroid Build Coastguard Worker shutil.rmtree(temp_artifact_dir) 277*90c8c64dSAndroid Build Coastguard Worker 278*90c8c64dSAndroid Build Coastguard Worker if not local_path: 279*90c8c64dSAndroid Build Coastguard Worker commit(branch, build_id, vndk_version) 280*90c8c64dSAndroid Build Coastguard Worker logging.info( 281*90c8c64dSAndroid Build Coastguard Worker 'Successfully created commit for VNDK snapshot v{}'.format( 282*90c8c64dSAndroid Build Coastguard Worker vndk_version)) 283*90c8c64dSAndroid Build Coastguard Worker 284*90c8c64dSAndroid Build Coastguard Worker logging.info('Done.') 285*90c8c64dSAndroid Build Coastguard Worker 286*90c8c64dSAndroid Build Coastguard Worker 287*90c8c64dSAndroid Build Coastguard Workerdef get_args(): 288*90c8c64dSAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 289*90c8c64dSAndroid Build Coastguard Worker parser.add_argument( 290*90c8c64dSAndroid Build Coastguard Worker 'vndk_version', 291*90c8c64dSAndroid Build Coastguard Worker type=utils.vndk_version_int, 292*90c8c64dSAndroid Build Coastguard Worker help='VNDK snapshot version to install, e.g. "{}".'.format( 293*90c8c64dSAndroid Build Coastguard Worker utils.MINIMUM_VNDK_VERSION)) 294*90c8c64dSAndroid Build Coastguard Worker parser.add_argument('-b', '--branch', help='Branch to pull build from.') 295*90c8c64dSAndroid Build Coastguard Worker parser.add_argument('--build', help='Build number to pull.') 296*90c8c64dSAndroid Build Coastguard Worker parser.add_argument( 297*90c8c64dSAndroid Build Coastguard Worker '--local', 298*90c8c64dSAndroid Build Coastguard Worker help=('Fetch local VNDK snapshot artifacts from specified local ' 299*90c8c64dSAndroid Build Coastguard Worker 'directory instead of Android Build server. ' 300*90c8c64dSAndroid Build Coastguard Worker 'Example: --local=/path/to/local/dir')) 301*90c8c64dSAndroid Build Coastguard Worker parser.add_argument( 302*90c8c64dSAndroid Build Coastguard Worker '--use-current-branch', 303*90c8c64dSAndroid Build Coastguard Worker action='store_true', 304*90c8c64dSAndroid Build Coastguard Worker help='Perform the update in the current branch. Do not repo start.') 305*90c8c64dSAndroid Build Coastguard Worker parser.add_argument( 306*90c8c64dSAndroid Build Coastguard Worker '--remote', 307*90c8c64dSAndroid Build Coastguard Worker default='aosp', 308*90c8c64dSAndroid Build Coastguard Worker help=('Remote name to fetch and check if the revision of VNDK snapshot ' 309*90c8c64dSAndroid Build Coastguard Worker 'is included in the source to conform GPL license. default=aosp')) 310*90c8c64dSAndroid Build Coastguard Worker parser.add_argument( 311*90c8c64dSAndroid Build Coastguard Worker '-v', 312*90c8c64dSAndroid Build Coastguard Worker '--verbose', 313*90c8c64dSAndroid Build Coastguard Worker action='count', 314*90c8c64dSAndroid Build Coastguard Worker default=0, 315*90c8c64dSAndroid Build Coastguard Worker help='Increase output verbosity, e.g. "-v", "-vv".') 316*90c8c64dSAndroid Build Coastguard Worker return parser.parse_args() 317*90c8c64dSAndroid Build Coastguard Worker 318*90c8c64dSAndroid Build Coastguard Worker 319*90c8c64dSAndroid Build Coastguard Workerdef main(): 320*90c8c64dSAndroid Build Coastguard Worker """Program entry point.""" 321*90c8c64dSAndroid Build Coastguard Worker args = get_args() 322*90c8c64dSAndroid Build Coastguard Worker run(args.vndk_version, args.branch, args.build, args.local, 323*90c8c64dSAndroid Build Coastguard Worker args.use_current_branch, args.remote, args.verbose) 324*90c8c64dSAndroid Build Coastguard Worker 325*90c8c64dSAndroid Build Coastguard Worker 326*90c8c64dSAndroid Build Coastguard Workerif __name__ == '__main__': 327*90c8c64dSAndroid Build Coastguard Worker main() 328