code: def cli():
      parser = argparse.ArgumentParser(
          prog="dash-update-components",
          formatter_class=_CombinedFormatter,
          description="Update the specified subcomponent libraries within Dash"
          " by copying over build artifacts, dependencies, and dependency metadata.",
      )
      parser.add_argument(
          "components_source",
          help="A glob string that matches the Dash component libraries to be updated"
          " (eg.'dash-table' // 'dash-core-components|dash-html-components' // 'all')."
          " The default argument is 'all'.",
          default="all",
      )
      parser.add_argument(
          "--concurrency",
          type=int,
          default=3,
          help="Maximum concurrent steps, up to 3 (ie all components in parallel)",
      )
      parser.add_argument(
          "--ci",
          help="For clean-install use '--ci True'",
          default="False",
      )
  
      args = parser.parse_args()
  
      bootstrap_components(
          args.components_source,
          args.concurrency,
          "ci" if args.ci == "True" else "i",
      )
      build_components(args.components_source, args.concurrency)
  
file_path: dash/dash/development/update_components.py
imports: import sys
  import subprocess
  import shlex
  import os
  import argparse
  import shutil
  import logging
  import coloredlogs
label_desc: Use image node_id 3 for calling a global function with example usage: cli() without return types