scripts: update_chroot: start moving the tool from src/scripts/
Add a python entry point so we can migrate the src/scripts/ version.
BUG=b:298249751
TEST=CQ passes
Change-Id: I46827e8aec3fb6985048a6cc4c3e40a086089d5b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/4831960
Reviewed-by: Cindy Lin <xcl@google.com>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
diff --git a/scripts/update_chroot.py b/scripts/update_chroot.py
new file mode 100644
index 0000000..9f83f35
--- /dev/null
+++ b/scripts/update_chroot.py
@@ -0,0 +1,114 @@
+# Copyright 2023 The ChromiumOS Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Update the SDK.
+
+Performs an update of the chroot. This script is called as part of
+build_packages, so there is typically no need to call this script directly.
+"""
+
+import argparse
+from typing import List, Optional
+
+from chromite.lib import commandline
+from chromite.service import sdk as sdk_service
+from chromite.service import sysroot
+
+
+def get_parser() -> commandline.ArgumentParser:
+ """Build the argument parser."""
+ # TODO(vapier): Remove underscore separated arguments and the deprecated
+ # message after Jun 2024.
+ deprecated = "Argument will be removed Jun 2024. Use %s instead."
+
+ parser = commandline.ArgumentParser(description=__doc__)
+
+ parser.add_bool_argument(
+ "--usepkg",
+ True,
+ "Use binary packages to bootstrap.",
+ "Do not use binary packages to bootstrap.",
+ )
+ parser.add_argument(
+ "--nousepkg",
+ dest="usepkg",
+ action="store_false",
+ deprecated=deprecated % "--no-usepkg",
+ help=argparse.SUPPRESS,
+ )
+
+ # Not really a common argument, but argument_group doesn't have our custom
+ # bool extension yet.
+ parser.add_bool_argument(
+ "--eclean",
+ True,
+ "Clean out old SDK binpkgs.",
+ "Do not clean out SDK binpkgs.",
+ )
+ parser.add_argument(
+ "--noeclean",
+ dest="eclean",
+ action="store_false",
+ deprecated=deprecated % "--no-eclean",
+ help=argparse.SUPPRESS,
+ )
+
+ group = parser.add_argument_group("Advanced Build Modification Options")
+ group.add_argument(
+ "--jobs",
+ type=int,
+ help="Maximum number of packages to build in parallel.",
+ )
+ group.add_argument(
+ "--skip-toolchain-update",
+ dest="update_toolchain",
+ action="store_true",
+ default=False,
+ help="Don't update toolchain automatically.",
+ )
+ group.add_argument(
+ "--skip_toolchain_update",
+ dest="update_toolchain",
+ action="store_true",
+ default=False,
+ deprecated=deprecated % "--skip-toolchain-update",
+ help=argparse.SUPPRESS,
+ )
+ group.add_argument(
+ "--toolchain-boards",
+ default="",
+ help="Extra toolchains to setup for the specified boards.",
+ )
+ group.add_argument(
+ "--toolchain_boards",
+ deprecated=deprecated % "--toolchain-boards",
+ help=argparse.SUPPRESS,
+ )
+ group.add_argument(
+ "--backtrack",
+ type=int,
+ default=sysroot.BACKTRACK_DEFAULT,
+ help="See emerge --backtrack.",
+ )
+
+ return parser
+
+
+def main(argv: Optional[List[str]] = None) -> Optional[int]:
+ commandline.RunInsideChroot()
+
+ parser = get_parser()
+ opts = parser.parse_args(argv)
+ opts.Freeze()
+
+ update_args = sdk_service.UpdateArguments(
+ build_source=not opts.usepkg,
+ toolchain_targets=opts.toolchain_boards,
+ jobs=opts.jobs,
+ backtrack=opts.backtrack,
+ update_toolchain=opts.update_toolchain,
+ eclean=opts.eclean,
+ )
+ result = sdk_service.Update(update_args)
+ return result.return_code