# # Copyright (C) 2017 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import logging import os from host_controller.build import build_provider from vts.utils.python.build.api import artifact_fetcher class BuildProviderAB(build_provider.BuildProvider): """A build provider for Android Build (AB).""" def __init__(self): super(BuildProviderAB, self).__init__() if 'run_ab_key' in os.environ: logging.info( "For AB, use the key at %s", os.environ['run_ab_key']) self._artifact_fetcher = artifact_fetcher.AndroidBuildClient( os.environ['run_ab_key']) else: self._artifact_fetcher = None def GetLatestBuildId(self, branch, target): """Get the latest build id. Args: branch: string, android branch to pull resource from. target: string, build target name. Returns: string, latest build id. None if _artifact_fetcher is not initialized. """ if not self._artifact_fetcher: return None recent_build_ids = self._artifact_fetcher.ListBuildIds( branch, target) return recent_build_ids[0] def Fetch(self, branch, target, artifact_name, build_id="latest", full_device_images=False): """Fetches Android device artifact file(s) from Android Build. Args: branch: string, android branch to pull resource from. target: string, build target name. artifact_name: string, file name. build_id: string, ID of the build or latest. Returns: a dict containing the device image info. a dict containing the test suite package info. a dict containing the artifact info. """ fetch_info = {} fetch_info["build_id"] = None if not self._artifact_fetcher: return self.GetDeviceImage(), self.GetTestSuitePackage(), fetch_info if build_id == "latest": build_id = self.GetLatestBuildId(branch, target) fetch_info["build_id"] = build_id if "{build_id}" in artifact_name: artifact_name = artifact_name.replace("{build_id}", build_id) dest_filepath = os.path.join(self.tmp_dirpath, artifact_name) self._artifact_fetcher.DownloadArtifactToFile( branch, target, build_id, artifact_name, dest_filepath=dest_filepath) self.SetFetchedFile(dest_filepath, full_device_images) return self.GetDeviceImage(), self.GetTestSuitePackage(), fetch_info