Anuj Jamwal | 643bf5c | 2023-08-02 18:14:20 +0000 | [diff] [blame] | 1 | # Copyright 2023 The ChromiumOS Authors |
| 2 | # Use of this source code is governed by a BSD-style license that can be |
| 3 | # found in the LICENSE file. |
| 4 | |
| 5 | """Build cros_workon package incrementally. |
| 6 | |
| 7 | Simple wrapper script to build a cros_workon package incrementally. You |
| 8 | must already be cros_workon'ing the package in question. This had been |
| 9 | migrated to python from chromiumos/src/scripts/cros_workon_make. |
| 10 | """ |
| 11 | |
| 12 | import logging |
| 13 | from typing import List, Optional |
| 14 | |
Anuj Jamwal | 6c13887 | 2023-08-03 02:21:26 +0000 | [diff] [blame^] | 15 | from chromite.third_party.opentelemetry import trace |
| 16 | |
Anuj Jamwal | 643bf5c | 2023-08-02 18:14:20 +0000 | [diff] [blame] | 17 | from chromite.lib import build_target_lib |
Anuj Jamwal | 6c13887 | 2023-08-03 02:21:26 +0000 | [diff] [blame^] | 18 | from chromite.lib import chromite_config |
Anuj Jamwal | 643bf5c | 2023-08-02 18:14:20 +0000 | [diff] [blame] | 19 | from chromite.lib import commandline |
| 20 | from chromite.lib import cros_build_lib |
| 21 | from chromite.lib import workon_helper |
Anuj Jamwal | 6c13887 | 2023-08-03 02:21:26 +0000 | [diff] [blame^] | 22 | from chromite.utils import telemetry |
| 23 | |
| 24 | |
| 25 | tracer = trace.get_tracer(__name__) |
Anuj Jamwal | 643bf5c | 2023-08-02 18:14:20 +0000 | [diff] [blame] | 26 | |
| 27 | |
| 28 | def GetParser() -> commandline.ArgumentParser: |
| 29 | """Get a CLI parser.""" |
| 30 | parser = commandline.ArgumentParser(description=__doc__) |
| 31 | parser.add_argument( |
| 32 | "-b", |
| 33 | "--board", |
| 34 | "--build-target", |
| 35 | default=cros_build_lib.GetDefaultBoard(), |
| 36 | required=True, |
| 37 | help="The board to set package keywords for.", |
| 38 | ) |
| 39 | parser.add_argument( |
| 40 | "--test", |
| 41 | default=False, |
| 42 | action="store_true", |
| 43 | help="Compile and run tests as well", |
| 44 | ) |
| 45 | parser.add_argument( |
| 46 | "--reconf", |
| 47 | default=False, |
| 48 | action="store_true", |
| 49 | help="Re-run configure and prepare steps", |
| 50 | ) |
| 51 | parser.add_argument( |
| 52 | "--install", |
| 53 | default=False, |
| 54 | action="store_true", |
| 55 | help="Incrementally build and install your package", |
| 56 | ) |
| 57 | parser.add_argument( |
| 58 | "--scrub", |
| 59 | default=False, |
| 60 | action="store_true", |
| 61 | help="Blow away all in-tree files not managed by git", |
| 62 | ) |
| 63 | parser.add_argument( |
| 64 | "package", |
| 65 | help="Package to build.", |
| 66 | ) |
| 67 | return parser |
| 68 | |
| 69 | |
| 70 | def main(argv: Optional[List[str]]) -> Optional[int]: |
| 71 | commandline.RunInsideChroot() |
| 72 | |
Anuj Jamwal | 6c13887 | 2023-08-03 02:21:26 +0000 | [diff] [blame^] | 73 | chromite_config.initialize() |
| 74 | telemetry.initialize(chromite_config.TELEMETRY_CONFIG) |
| 75 | DoMain(argv) |
| 76 | |
| 77 | |
| 78 | @tracer.start_as_current_span("scripts.cros_workon_make") |
| 79 | def DoMain(argv: Optional[List[str]]) -> Optional[int]: |
Anuj Jamwal | 643bf5c | 2023-08-02 18:14:20 +0000 | [diff] [blame] | 80 | parser = GetParser() |
| 81 | options = parser.parse_args(argv) |
| 82 | options.Freeze() |
| 83 | |
| 84 | board = options.board |
| 85 | sysroot = build_target_lib.get_default_sysroot_path(board) |
| 86 | helper = workon_helper.WorkonHelper(sysroot, board) |
| 87 | |
| 88 | pkg = options.package |
Anuj Jamwal | 6c13887 | 2023-08-03 02:21:26 +0000 | [diff] [blame^] | 89 | span = trace.get_current_span() |
| 90 | span.set_attribute("package", pkg) |
Anuj Jamwal | 643bf5c | 2023-08-02 18:14:20 +0000 | [diff] [blame] | 91 | |
| 92 | if options.scrub: |
| 93 | logging.warning("--scrub will destroy ALL FILES unknown to git!") |
| 94 | if cros_build_lib.BooleanPrompt(): |
| 95 | helper.ScrubPackage(pkg) |
| 96 | else: |
| 97 | logging.info("Not scrubbing; exiting gracefully") |
| 98 | elif options.install: |
| 99 | helper.InstallPackage(pkg) |
| 100 | else: |
| 101 | helper.BuildPackage( |
| 102 | pkg, |
| 103 | clean=options.reconf, |
| 104 | test=options.test, |
| 105 | ) |