blob: b54cacc7c3f5747afbf63fd5b06c604f36ccfe3a [file] [log] [blame]
Kuang-che Wu708310b2018-03-28 17:24:34 +08001#!/usr/bin/env python2
Kuang-che Wu6e4beca2018-06-27 17:45:02 +08002# -*- coding: utf-8 -*-
Kuang-che Wu708310b2018-03-28 17:24:34 +08003# Copyright 2018 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6"""Switcher for ChromeOS ARC container prebuilt.
7
8Typical usage:
9 $ bisect_android_build_id.py config switch ./switch_arc_prebuilt.py
10
Kuang-che Wuacb6efd2018-04-25 18:52:58 +080011It is implemented by calling Android's push_to_device.py.
Kuang-che Wu708310b2018-03-28 17:24:34 +080012"""
13
14from __future__ import print_function
15import argparse
16import logging
Kuang-che Wud18cd5b2019-08-20 14:14:21 +080017import sys
Kuang-che Wu708310b2018-03-28 17:24:34 +080018
19from bisect_kit import android_util
20from bisect_kit import arc_util
21from bisect_kit import cli
22from bisect_kit import common
23from bisect_kit import configure
Kuang-che Wud18cd5b2019-08-20 14:14:21 +080024from bisect_kit import cros_lab_util
Kuang-che Wu708310b2018-03-28 17:24:34 +080025from bisect_kit import cros_util
Kuang-che Wue121fae2018-11-09 16:18:39 +080026from bisect_kit import errors
Kuang-che Wu708310b2018-03-28 17:24:34 +080027
28logger = logging.getLogger(__name__)
29
30
31def create_argument_parser():
32 parser = argparse.ArgumentParser(description=__doc__)
33 common.add_common_arguments(parser)
34 parser.add_argument(
35 'dut',
36 nargs='?',
37 type=cli.argtype_notempty,
38 metavar='DUT',
39 default=configure.get('DUT', ''))
40 parser.add_argument(
41 'build_id',
42 nargs='?',
43 type=android_util.argtype_android_build_id,
44 metavar='ANDROID_BUILD_ID',
45 default=configure.get('ANDROID_BUILD_ID', ''))
46 parser.add_argument(
47 '--flavor',
48 metavar='ANDROID_FLAVOR',
49 default=configure.get('ANDROID_FLAVOR'),
50 help='example: cheets_x86-user')
Kuang-che Wu708310b2018-03-28 17:24:34 +080051
52 return parser
53
54
55def main(args=None):
56 common.init()
57 parser = create_argument_parser()
58 opts = parser.parse_args(args)
59 common.config_logging(opts)
60
61 if not opts.flavor:
62 opts.flavor = arc_util.query_flavor(opts.dut)
63 assert opts.flavor
64 logger.info('use flavor=%s', opts.flavor)
65
Kuang-che Wud18cd5b2019-08-20 14:14:21 +080066 if not cros_util.is_good_dut(opts.dut):
67 logger.fatal('%r is not a good DUT', opts.dut)
68 if not cros_lab_util.repair(opts.dut):
69 sys.exit(cli.EXIT_CODE_FATAL)
70
Kuang-che Wu94ef56e2019-01-15 21:17:42 +080071 arc_util.push_prebuilt_to_device(opts.dut, opts.flavor, opts.build_id)
Kuang-che Wu708310b2018-03-28 17:24:34 +080072
73 arc_version = cros_util.query_dut_lsb_release(
74 opts.dut).get('CHROMEOS_ARC_VERSION')
75 if str(opts.build_id) in arc_version:
76 logger.info('updated to "%s", done', arc_version)
77 else:
Kuang-che Wue121fae2018-11-09 16:18:39 +080078 raise errors.ExecutionFatalError(
Kuang-che Wu708310b2018-03-28 17:24:34 +080079 'arc version is expected matching "%s" but actual "%s"' %
80 (opts.build_id, arc_version))
81
82
83if __name__ == '__main__':
84 main()