code: def build_anyscale(
      image_type: str,
      python_version: str,
      build_type: str,
      platform: List[str],
      architecture: str,
      canonical_tag: str,
      upload: bool,
  ) -> None:
      """
      Build an anyscale container artifact.
      """
      BuilderContainer(python_version, build_type, architecture).run()
      for p in platform:
          RayDockerContainer(
              python_version,
              p,
              image_type,
              architecture,
              canonical_tag,
              upload=False,
          ).run()
          AnyscaleDockerContainer(
              python_version,
              p,
              image_type,
              architecture,
              canonical_tag,
              upload,
          ).run()
  
file_path: ray/ci/ray_ci/builder.py
imports: from typing import List
  import click
  from ci.ray_ci.builder_container import DEFAULT_PYTHON_VERSION, PYTHON_VERSIONS, BUILD_TYPES, ARCHITECTURE, BuilderContainer
  from ci.ray_ci.forge_container import ForgeContainer
  from ci.ray_ci.docker_container import PLATFORM
  from ci.ray_ci.ray_docker_container import RayDockerContainer
  from ci.ray_ci.anyscale_docker_container import AnyscaleDockerContainer
  from ci.ray_ci.container import _DOCKER_ECR_REPO
  from ci.ray_ci.utils import logger, docker_login
label_desc: Use image node_id 4 for calling a global function with example usage: build_anyscale(image_type, python_version, build_type, platform, architecture, canonical_tag, upload) without return types