Project import generated by Copybara.

GitOrigin-RevId: 8813500de1b9cbb62fece9bfa293b595b13b17a4
diff --git a/configs/pre-commit/requirements.txt b/configs/pre-commit/requirements.txt
index 450fa14..64167f2 100644
--- a/configs/pre-commit/requirements.txt
+++ b/configs/pre-commit/requirements.txt
@@ -1,9 +1,3 @@
-#
-# This file is autogenerated by pip-compile
-# To update, run:
-#
-#    pip-compile requirements.in
-#
 appdirs==1.4.4
     # via virtualenv
 cfgv==3.2.0
@@ -20,7 +14,7 @@
     # via -r requirements.in
 pyyaml==5.4.1
     # via pre-commit
-six==1.15.0
+six==1.16.0
     # via virtualenv
 toml==0.10.2
     # via pre-commit
diff --git a/cq/landmines/landmine.70 b/cq/landmines/landmine.70
new file mode 100644
index 0000000..d339dc4
--- /dev/null
+++ b/cq/landmines/landmine.70
@@ -0,0 +1,5 @@
+Landmine to clean old toolchain artifacts
+
+b/321703245
+
+To clean JDK 17 built artifacts.
diff --git a/cq/landmines/landmine.71 b/cq/landmines/landmine.71
new file mode 100644
index 0000000..f887a1c
--- /dev/null
+++ b/cq/landmines/landmine.71
@@ -0,0 +1,4 @@
+Landmine to clean old SElinux artifacts
+
+Probably same as b/122370575
+b/316488279
diff --git a/cq/landmines/landmine.72 b/cq/landmines/landmine.72
new file mode 100644
index 0000000..bbc83ff
--- /dev/null
+++ b/cq/landmines/landmine.72
@@ -0,0 +1,8 @@
+Landmine to clean stale headers in OpenThread
+
+b/333479565
+
+CLs:
+- https://nest-internal-review.git.corp.google.com/c/tps/ot-br-posix/+/421875
+- https://nest-internal-review.git.corp.google.com/c/tps/openthread/+/421874
+- https://nest-internal-review.git.corp.google.com/c/tps/ot-nrf528xx/+/421913
diff --git a/cq/landmines/landmine.73 b/cq/landmines/landmine.73
new file mode 100644
index 0000000..9524cf6
--- /dev/null
+++ b/cq/landmines/landmine.73
@@ -0,0 +1,3 @@
+Landmine to clean Prince builders of libassistant prebuilt artifacts.
+
+b/343727187
diff --git a/cq/landmines/landmine.74 b/cq/landmines/landmine.74
new file mode 100644
index 0000000..42ae051
--- /dev/null
+++ b/cq/landmines/landmine.74
@@ -0,0 +1,3 @@
+Landmine to remove subdirectories and there is some $(TOP) problem need to be cleaned
+
+https://eureka-internal-review.git.corp.google.com/c/external/build/+/1017535
diff --git a/cq/landmines/landmine.75 b/cq/landmines/landmine.75
new file mode 100644
index 0000000..091c49a
--- /dev/null
+++ b/cq/landmines/landmine.75
@@ -0,0 +1,3 @@
+Landmine to remove untracked files in third_party/cast_lite.
+
+https://eureka-internal-review.git.corp.google.com/c/eureka/manifest/+/1023132?tab=checks
diff --git a/cq/landmines/landmine.76 b/cq/landmines/landmine.76
new file mode 100644
index 0000000..c5e4a27
--- /dev/null
+++ b/cq/landmines/landmine.76
@@ -0,0 +1,6 @@
+Landmine because BLA4 build fails with out of date arm
+intermediate objects. BLA4 also uses a different x86
+compiler but I don't know if it is related or not.
+
+http://b/335369838
+
diff --git a/cq/scripts/helpers/gn_utils.py b/cq/scripts/helpers/gn_utils.py
index e02fe56..e7e73c8 100644
--- a/cq/scripts/helpers/gn_utils.py
+++ b/cq/scripts/helpers/gn_utils.py
@@ -191,26 +191,3 @@
              '--bucket', 'chromium-gn',
              '-s', sha1_path]
   return executor.exec_subprocess(command)
-
-
-def  is_gn_check_enabled(manifest_branch, product=None):
-  """Returns true if GN check can be used on |manifest_branch|.
-
-  Since `gn check` will not run cleanly only older branches (<m51, <=1.21),
-  do not enable it.
-
-  Args:
-    manifest_branch: The name of the manifest branch.
-    product: Optional product name (e.g. 'android', 'audio', 'chromecast')
-        Defaults to None.
-  Returns:
-    True if GN check can be used, False otherwise.
-  Raises:
-    ValueError: if the branch name is not recognized.
-  """
-  # Development branch 'master' uses gn check.
-  if manifest_branch == 'master':
-    return True
-
-  return branch_utils.is_branch_equal_to_or_later_than(
-      manifest_branch, '1.23' if product in ['android', 'atv'] else '1.22')
diff --git a/cq/scripts/resources/kythe_step/vnames.json b/cq/scripts/resources/kythe_step/vnames.json
deleted file mode 100644
index bf04ad4..0000000
--- a/cq/scripts/resources/kythe_step/vnames.json
+++ /dev/null
@@ -1,24 +0,0 @@
-[
-  {
-    "pattern": "out_fuchsia_arm64_user/Release/gen/(.*)",
-    "vname": {
-      "corpus": "eureka-internal.googlesource.com/codesearch",
-      "root": "out_fuchsia/release/gen",
-      "path": "@1@"
-    }
-  },
-  {
-    "pattern": "chromecast/internal/(.*)",
-    "vname": {
-      "corpus": "eureka-internal.googlesource.com/codesearch",
-      "path": "cast/internal/@1@"
-    }
-  },
-  {
-    "pattern": "(.*)",
-    "vname": {
-      "corpus": "eureka-internal.googlesource.com/codesearch",
-      "path": "@1@"
-    }
-  }
-]
\ No newline at end of file
diff --git a/cq/scripts/slave/recipe/cast_service_builder.py b/cq/scripts/slave/recipe/cast_service_builder.py
index 528f4f6..03edd52 100644
--- a/cq/scripts/slave/recipe/cast_service_builder.py
+++ b/cq/scripts/slave/recipe/cast_service_builder.py
@@ -4,12 +4,11 @@
 from slave import base_recipe
 from slave.step import gn_step
 from slave.step import ninja_step
-from slave.step import sanitizer_unittest_step
 
 BUILD_CONFIGS = {
     'cast_service_x64' : {
-        'build_args_product': 'displayassistant_x64_eng',
-        'build_args': 'enable_standalone_cast_service=true',
+        'build_args_product': 'audioassistant_x64_iot_eng',
+        'build_args': '',
     }
 }
 
diff --git a/cq/scripts/slave/recipe/cast_shell_guitar_e2e_test_runner.py b/cq/scripts/slave/recipe/cast_shell_guitar_e2e_test_runner.py
index fba8d41..7e500ee 100644
--- a/cq/scripts/slave/recipe/cast_shell_guitar_e2e_test_runner.py
+++ b/cq/scripts/slave/recipe/cast_shell_guitar_e2e_test_runner.py
@@ -38,11 +38,7 @@
   def get_steps(self):
     build_shell_config = clang_builder.BUILD_CONFIGS['audioassistant_grte_eng']
 
-    build_branding = build_shell_config.get('build_branding', None)
     build_arch = build_shell_config.get('build_arch', None)
-    build_product = build_shell_config.get('build_product', None)
-    build_flavor = build_shell_config.get('build_flavor', None)
-    enable_assistant = build_shell_config.get('enable_assistant', False)
     build_args_official = build_shell_config.get('build_args_official', None)
     grte_compatible = build_shell_config.get('grte_compatible', False)
     build_args_product = build_shell_config.get('build_args_product', None)
@@ -50,12 +46,10 @@
     steps = []
 
     cast_shell_build_step = cast_shell_step.CastShellStep(
-        build_branding, build_arch, build_product,
-        build_flavor, enable_assistant,
         build_args_official=build_args_official,
         code_coverage=False, grte_compatible=grte_compatible,
         build_args_product=build_args_product, halt_on_failure=True,
-        sanitizer=None, archive_to_tmp=False, skip_create_zip=True,
+        archive_to_tmp=False, skip_create_zip=True,
         strip_binaries=True, **self._step_kwargs)
     steps.append(cast_shell_build_step)
     outdir = cast_shell_build_step.out_dir
diff --git a/cq/scripts/slave/recipe/clang_builder.py b/cq/scripts/slave/recipe/clang_builder.py
index 542367a..bd57f2c 100644
--- a/cq/scripts/slave/recipe/clang_builder.py
+++ b/cq/scripts/slave/recipe/clang_builder.py
@@ -12,88 +12,12 @@
 from slave.test import test_generator
 
 BUILD_CONFIGS = {
-    # TODO(b/73231972) remove after migration to atv_arm_eng
-    'arm_androidtv_debug': {
-        'build_branding': 'chrome',
-        'build_args_product': 'atv_arm_eng',
-        'build_args_official': False,
-        'build_product': 'atv',
-        'build_flavor': 'Debug',
-        'build_arch': 'arm',
-        'run_gtests': False,
-    },
     'asan_x64_eng': {
         'build_args_product': 'asan_x64_eng',
         'build_args_official': False,
         # TODO(b/148885147) Remove params below
-        'build_branding': 'chrome',
-        'build_product': 'chromecast',
-        'build_flavor': 'Eng',
-        'build_arch': 'clang',
         'sanitizer': 'asan',
     },
-    # Replacement of content_shell_androidtv_arm64_debug_gn
-    'atv_arm64_eng': {
-        'build_args_product': 'atv_arm64_eng',
-        'build_args_official': False,
-        'run_gtests': False,
-    },
-    'atv_arm64_emulator_eng': {
-        'build_args_product': 'atv_arm64_emulator_eng',
-        'build_args_official': False,
-        'run_gtests': False,
-    },
-    # Replacement of content_shell_androidtv_arm64_internal_gn
-    'atv_arm64_user': {
-        'build_args_product': 'atv_arm64_user',
-        'build_args_official': True,
-        'run_gtests': False,
-    },
-    # Replacement of content_shell_androidtv_arm_debug_gn, arm_androidtv_debug
-    'atv_arm_eng': {
-        'build_args_product': 'atv_arm_eng',
-        'build_args_official': False,
-        'run_gtests': False,
-    },
-    # Replacement of content_shell_androidtv_arm_internal_gn
-    'atv_arm_user': {
-        'build_args_product': 'atv_arm_user',
-        'build_args_official': True,
-        'run_gtests': False,
-    },
-    # Replacement of x86_androidtv_shell
-    'atv_x86_emulator_eng': {
-        'build_args_product': 'atv_x86_emulator_eng',
-        'build_args_official': False,
-        'run_gtests': False,
-    },
-    # Replacement of content_shell_androidtv_x86_debug_gn
-    'atv_x86_eng': {
-        'build_args_product': 'atv_x86_eng',
-        'build_args_official': False,
-        'run_gtests': False,
-    },
-    # Replacement of content_shell_androidtv_x86_internal_gn
-    'atv_x86_user': {
-        'build_args_product': 'atv_x86_user',
-        'build_args_official': True,
-        'run_gtests': False,
-    },
-    'atv_x64_emulator_eng': {
-        'build_args_product': 'atv_x64_emulator_eng',
-        'build_args_official': False,
-        'run_gtests': False,
-    },
-    'atv_x64_eng': {
-        'build_args_product': 'atv_x64_eng',
-        'build_args_official': False,
-        'run_gtests': False,
-    },
-    'atv_x64_user': {
-        'build_args_product': 'atv_x64_user',
-        'build_args_official': True,
-        'run_gtests': False,
-    },
     # Replacement of content_shell_grte_audio
     'audio_grte_eng': {
         'build_args_product': 'audio_grte_eng',
@@ -105,22 +29,12 @@
         'build_args_product': 'audio_x64_eng',
         'build_args_official': False,
         'timeout_secs_run_gtest': 1 * 60 * 60,  # Limit each test step by 1h
-        # TODO(b/148885147) Remove params below
-        'build_branding': 'chrome',
-        'build_product': 'audio',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
     },
     # Replacement of content_shell_clang_audio_gn
     'audio_x64_user': {
         'build_args_product': 'audio_x64_user',
         'build_args_official': False,
         'timeout_secs_run_gtest': 1 * 60 * 60,  # Limit each test step by 1h
-        # TODO(b/148885147) Remove params below
-        'build_branding': 'chromium',
-        'build_product': 'audio',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
     },
     # Replacement of content_shell_grte_chirp
     'audioassistant_grte_eng': {
@@ -135,12 +49,6 @@
         'timeout_secs_run_gtest': 1 * 60 * 60,  # Limit each test step by 1h
         # TODO(b/145840052): Remove once the build is fast enough.
         'timeout_secs_build_gtests': 5 * 60 * 60,
-        # TODO(b/148885147) Remove params below
-        'build_branding': 'chrome',
-        'build_product': 'audio',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
-        'enable_assistant': True,
     },
     # Replacement of content_shell_cube_arm_debug, arm_cube_debug
     'cube_arm_eng': {
@@ -197,12 +105,6 @@
         'timeout_secs_run_gtest': 1 * 60 * 60,  # Limit each test step by 1h
         # TODO(b/145840052): Remove once the build is fast enough.
         'timeout_secs_build_gtests': 5 * 60 * 60,
-        # TODO(b/148885147) Remove params below
-        'build_branding': 'chrome',
-        'build_product': 'display',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
-        'enable_assistant': True,
     },
     'gabbro_arm_eng': {
         'build_args_product': 'gabbro_arm_debug',
@@ -225,13 +127,8 @@
         'run_gtests': False,
     },
     'grte_opal_selina': {
-        'build_branding': 'chrome',
         'build_args_product': 'grte_opal_selina',
         'build_args_official': False,
-        'build_product': 'display',
-        'build_flavor': 'Eng',
-        'build_arch': 'x86',
-        'enable_assistant': True,
         'build_gtests': False,
     },
     # Replacement of content_shell_desktop_msan, memory_sanitizer
@@ -240,10 +137,6 @@
         'build_args_official': False,
         'timeout_secs_run_gtest': 1 * 60 * 60,  # Limit each test step by 1h
         # TODO(b/148885147) Remove params below
-        'build_branding': 'chrome',
-        'build_product': 'chromecast',
-        'build_flavor': 'Eng',
-        'build_arch': 'clang',
         'sanitizer': 'msan',
     },
     # Replacement of content_shell_soba_arm_debug_gn, arm_soba_debug
@@ -400,14 +293,26 @@
         'build_target': 'chromecast/internal/build/packaging:cwr_package_cksum',
         'enable_build_accelerator': False,
     },
+    # CWR for RDK Dunfell, ARMv7a hard, release
+    'cwr_rdk_dunfell_arm-user': {
+        'build_args_product': 'video_cwr_rdk_dunfell_armv7a_user',
+        'build_args_official': False,
+        'build_gtests': False,
+        'build_target': 'chromecast/internal/build/packaging:cwr_package_cksum',
+        'enable_build_accelerator': False,
+    },
+    # CWR for RDK Dunfell, ARMv7a hard, debug
+    'cwr_rdk_dunfell_arm-eng': {
+        'build_args_product': 'video_cwr_rdk_dunfell_armv7a_eng',
+        'build_args_official': False,
+        'build_gtests': False,
+        'build_target': 'chromecast/internal/build/packaging:cwr_package_cksum',
+        'enable_build_accelerator': False,
+    },
     # Replacement of x86_clang_internal_absolute_code_coverage
     'video_x64_absolute_code_coverage_eng': {
-        'build_branding': 'chrome',
         'build_args_product': 'video_x64_eng',
         'build_args_official': False,
-        'build_flavor': 'Debug',  # Must be Debug for code coverage to work.
-        'build_product': 'chromecast',
-        'build_arch': 'clang',
         'code_coverage': True,
         'report_to_zoss': True,
         'absolute_coverage': True,
@@ -419,10 +324,6 @@
         'build_args_official': False,
         'timeout_secs_run_gtest': 1 * 60 * 60,  # Limit each test step by 1h
         # TODO(b/148885147) Remove params below
-        'build_branding': 'chrome',
-        'build_product': 'chromecast',
-        'build_flavor': 'Debug',  # Must be Debug for code coverage to work.
-        'build_arch': 'clang',
         'code_coverage': False,  # TODO(b/33835295): Temporarily disable since
         # code coverage is often causing builds to take
         # an extra hour to complete and not actually
@@ -434,36 +335,17 @@
         'build_args_official': False,
         'timeout_secs_run_gtest': 1 * 60 * 60,  # Limit each test step by 1h
         # TODO(b/148885147) Remove params below
-        'build_branding': 'chromium',
-        'build_product': 'chromecast',
-        'build_flavor': 'Debug',  # Must be Debug for code coverage to work.
-        'build_arch': 'clang',
         'code_coverage': False,  # TODO(b/33835295): Temporarily disable since
         # code coverage is often causing builds to take
         # an extra hour to complete and not actually
         # producing useful coverage results.
     },
-    # TODO(b/73288720) remove after migration to atv_x64_emulator_eng
-    'x86_androidtv_shell': {
-        'build_branding': 'chrome',
-        'build_args_product': 'atv_x64_emulator_eng',
-        'build_args_official': False,
-        'build_product': 'atv',
-        'build_flavor': 'Debug',
-        'build_arch': 'x86',
-        'run_gtests': False,
-    },
     # This build is only for libassistant code coverage experiment.
     # TODO(mengdi): make sure this build only build and run libassistant
     # unittests with --whitelisted_tests.
     'x86_clang_audio_chirp_libassistant_code_coverage': {
-        'build_branding': 'chrome',
         'build_args_product': 'audioassistant_x64_eng',
         'build_args_official': False,
-        'build_product': 'audio',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
-        'enable_assistant': True,
         'absolute_coverage': True,
         'code_coverage': True,
 
@@ -473,27 +355,18 @@
     # TODO(b/73288720) remove after migration to
     # video_x64_absolute_code_coverage_eng
     'x86_clang_internal_absolute_code_coverage': {
-        'build_branding': 'chrome',
         'build_args_product': 'displayassistant_x64_eng',
         'build_args_official': False,
-        'build_product': 'chromecast',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
         'code_coverage': True,
         'absolute_coverage': True,
-        'enable_assistant': True,
 
         # TODO(b/145840052): Remove once the build is fast enough.
         'timeout_secs_build_gtests': 5 * 60 * 60,
     },
     # TODO(b/73231972) Not used in CQ, to be removed
     'x86_clang_internal_incremental_code_coverage': {
-        'build_branding': 'chrome',
         'build_args_product': 'video_x64_eng',
         'build_args_official': False,
-        'build_product': 'chromecast',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
         'code_coverage': True,
 
         # TODO(b/145840052): Remove once the build is fast enough.
@@ -531,18 +404,13 @@
     self._properties = kwargs.get('properties', {})
 
   def get_steps(self):
-    build_branding = self._config.get('build_branding', None)
     build_args_product = self._config['build_args_product']
-    build_product = self._config.get('build_product', None)
     build_args_official = self._config.get('build_args_official', None)
-    build_arch = self._config.get('build_arch', None)
-    build_flavor = self._config.get('build_flavor', None)
     build_gtests = self._config.get('build_gtests', True)
     run_gtests = self._config.get('run_gtests', True)
     code_coverage = self._config.get('code_coverage', False)
     report_to_zoss = self._config.get('report_to_zoss', False)
     absolute_coverage = self._config.get('absolute_coverage', False)
-    enable_assistant = self._config.get('enable_assistant', False)
     grte_compatible = self._config.get('grte_compatible', False)
     sanitizer = self._config.get('sanitizer', None)
     build_target = self._config.get('build_target', None)
@@ -563,11 +431,6 @@
     if sanitizer is None or self.build_system == 'catabuilder':
       steps += [
           cast_shell_step.CastShellStep(
-              build_branding,
-              build_arch,
-              build_product,
-              build_flavor,
-              enable_assistant,
               build_args_official=build_args_official,
               code_coverage=code_coverage,
               grte_compatible=grte_compatible,
@@ -581,11 +444,6 @@
     if build_gtests:
       steps += [
           unittest_step.BuildAffectedUnitTestsStep(
-              build_branding,
-              build_arch,
-              build_product,
-              build_flavor,
-              enable_assistant,
               build_args_official=build_args_official,
               sanitizer=sanitizer,
               code_coverage=code_coverage,
@@ -608,10 +466,6 @@
 
       steps += [
           unittest_step.RunAffectedUnitTestsStep(
-              build_branding,
-              build_arch,
-              build_product,
-              build_flavor,
               report_url,
               steps,
               sanitizer=sanitizer,
@@ -633,10 +487,6 @@
         ignore_filename_regex = None
 
       coverage_step = code_coverage_step.RunCoverageCommandStep(
-          build_branding,
-          build_arch,
-          build_product,
-          build_flavor,
           sanitizer=sanitizer,
           build_args_product=build_args_product,
           build_args_official=build_args_official,
diff --git a/cq/scripts/slave/recipe/clang_tidy.py b/cq/scripts/slave/recipe/clang_tidy.py
index 48b7e6a..191d814 100644
--- a/cq/scripts/slave/recipe/clang_tidy.py
+++ b/cq/scripts/slave/recipe/clang_tidy.py
@@ -28,16 +28,9 @@
         'build_args_official': False,
         # TODO(b/145840052): Remove once the build is fast enough.
         'timeout_secs_build_gtests': 5 * 60 * 60,
-        # TODO(b/148885147) Remove params below
-        'build_branding': 'chrome',
-        'build_product': 'audio',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
-        'enable_assistant': True,
         'run_gtests': False,
     },
     'nq-eng_clang_tidy': {
-        'build_flavor': 'release',
         'resign': ota_resign_step.NQ_RESIGN,
         'factory': ota_resign_step.NQ_FACTORY,
         'usbstick': ota_resign_step.NQ_USBSTICK,
diff --git a/cq/scripts/slave/recipe/combined_sdk.py b/cq/scripts/slave/recipe/combined_sdk.py
index 0025791..7a8d896 100644
--- a/cq/scripts/slave/recipe/combined_sdk.py
+++ b/cq/scripts/slave/recipe/combined_sdk.py
@@ -137,6 +137,10 @@
         'vendor_config': AMLOGIC,
         'product': 'lumia',
     },
+    'combined-sdk-kernel-bootloader-amlogic-swift': {
+        'vendor_config': AMLOGIC,
+        'product': 'swift',
+    },
     'combined-sdk-kernel-bootloader-amlogic-newman': {
         'vendor_config': AMLOGIC,
         'product': 'newman',
diff --git a/cq/scripts/slave/recipe/container_builder.py b/cq/scripts/slave/recipe/container_builder.py
index 7657cf8..52259ef 100644
--- a/cq/scripts/slave/recipe/container_builder.py
+++ b/cq/scripts/slave/recipe/container_builder.py
@@ -9,8 +9,11 @@
   return [
       'abbey_container',
       'container_building_container',
+      'ghp_partner_container',
       'gotham_container',
       'monotainer',
+      'monotainer_debug',
+      'recipe_bookworm',
       'recipe_bullseye',
   ]
 
@@ -29,7 +32,9 @@
         halt_on_failure=True,
         **self._step_kwargs)]
     if 'container_push_url' in self._properties:
-      steps += [ContainerPushStep(halt_on_failure=True, **self._step_kwargs)]
+      steps += [ContainerPushStep(
+        directory=str(self._eureka_root),
+        halt_on_failure=True, **self._step_kwargs)]
     return steps
 
 
diff --git a/cq/scripts/slave/recipe/eureka_kythe_builder.py b/cq/scripts/slave/recipe/eureka_kythe_builder.py
deleted file mode 100644
index e87ec3f..0000000
--- a/cq/scripts/slave/recipe/eureka_kythe_builder.py
+++ /dev/null
@@ -1,142 +0,0 @@
-"""Recipe to create and publish KZIPs for Kythe.
-
-See go/eureka-cs-indexing for more context.
-"""
-import copy
-import os
-
-from slave import base_recipe
-from slave.step import gcs_upload_step
-from slave.step import gn_step
-from slave.step import kythe_step
-from slave.step import make_clean_step
-from slave.step import ninja_step
-from slave.test import test_generator
-
-
-# WARNING: the build_args_product and build_args_flavor are used to construct
-# the naming of the out folder. As per the vnames.json file, Kythe expects this
-# exact naming in order to properly index and serve generated files.
-BUILD_CONFIGS = {
-    'fuchsia_eureka_kythe_prod': {
-        'build_args_product': 'fuchsia_arm64_user',
-        'build_args_flavor': 'Release',
-        'build_args': ['is_official_build=true'],
-        'build_target': 'cast_agent_exe',
-        'gcs_folder': 'prod'
-    },
-    'fuchsia_eureka_kythe_staging': {
-        'build_args_product': 'fuchsia_arm64_user',
-        'build_args_flavor': 'Release',
-        'build_args': ['is_official_build=true'],
-        'build_target': 'cast_agent_exe',
-        'gcs_folder': 'staging'
-    },
-}
-
-GCS_UPLOAD_BUCKET = 'eureka-kythe'
-
-# Expect that merged KZIPs are at least 1 GB
-MIN_EXPECTED_KZIP_SIZE = 1 * 1024 * 1024 * 1024
-
-
-def GetValidBuildNames():
-  return list(BUILD_CONFIGS.keys())
-
-
-def CreateRecipe(build_name: str, **kwargs):
-  config = BUILD_CONFIGS[build_name]
-  return EurekaKytheRecipe(config, **kwargs)
-
-
-class EurekaKytheRecipe(base_recipe.BaseRecipe):
-
-  def __init__(self, config, **kwargs):
-    base_recipe.BaseRecipe.__init__(
-        self, enable_build_accelerator=True, **kwargs)
-    self._build_config = config
-
-  def get_clean_steps(self):
-    return [make_clean_step.MakeCleanStep(**self._step_kwargs)]
-
-  # Needed so that we can properly mock expectations in test.
-  def get_num_jobs(self):  # pylint:disable=method-hidden
-    """Count of jobs to use."""
-    setup_steps = self.get_setup_steps()
-    return setup_steps[0].get_num_jobs(multiplier=10)
-
-  def get_steps(self):
-    steps = []
-
-    cwd = os.getcwd()
-    continuous_tests_root = os.path.abspath(
-        self.get_setup_steps()[0].get_project_path('continuous-tests'))
-    chromium_root = self.get_setup_steps()[0].get_project_path('chromium/src')
-    build_args = copy.deepcopy(self._build_config.get('build_args'))
-    build_args_product = self._build_config.get('build_args_product')
-    build_args_flavor = self._build_config.get('build_args_flavor')
-    build_target = self._build_config.get('build_target')
-    gcs_folder = self._build_config.get('gcs_folder')
-    out_dir = os.path.join(chromium_root, 'out_{}'.format(build_args_product),
-                           build_args_flavor)
-
-    # STEP: Generate gn gen for build
-    gn_gen_step = gn_step.GnGenStep(
-        build_args_product=build_args_product,
-        build_args=build_args,
-        out_dir=out_dir,
-        halt_on_failure=True,
-        cwd=cwd,
-        **self._step_kwargs)
-    steps.append(gn_gen_step)
-
-    # STEP: List gn args
-    gn_args_step = gn_step.GnArgsStep(
-        out_dir=out_dir, cwd=cwd, halt_on_failure=True, **self._step_kwargs)
-    steps.append(gn_args_step)
-
-    # STEP: Generate ninja build
-    num_jobs = self.get_num_jobs()
-    ninja_build_step = ninja_step.NinjaStep(
-        out_dir=out_dir,
-        target=build_target,
-        cwd=cwd,
-        jobs=num_jobs,
-        halt_on_failure=True,
-        **self._step_kwargs)
-    steps.append(ninja_build_step)
-
-    # STEP: Generate compilation database
-    gn_gen_step = gn_step.GnGenCompilationDBStep(
-        out_dir=out_dir,
-        cwd=cwd,
-        build_args_product=build_args_product,
-        target_name=build_target,
-        halt_on_failure=True,
-        **self._step_kwargs)
-    compdb_file = gn_gen_step.get_compdb_file_location()
-    steps.append(gn_gen_step)
-
-    # STEP: Generate KZIPs
-    kzip_gen_step = kythe_step.GenerateKzipStep(
-        cwd=cwd,
-        tests_root=continuous_tests_root,
-        chromium_root=chromium_root,
-        out_dir=out_dir,
-        compdb_file=compdb_file,
-        min_expected_kzip_bytes=MIN_EXPECTED_KZIP_SIZE,
-        halt_on_failures=True,
-        **self._step_kwargs)
-    kzip_file = kzip_gen_step.get_kythe_output_file()
-    steps.append(kzip_gen_step)
-
-    # STEP: Upload to GCS
-    upload_step = gcs_upload_step.GcsUploadStep(
-        gcs_bucket=GCS_UPLOAD_BUCKET,
-        gcs_path=gcs_folder,
-        src_path=kzip_file,
-        **self._step_kwargs)
-    steps.append(upload_step)
-
-    return steps
-
diff --git a/cq/scripts/slave/recipe/eurtest_e2e_test_runner.py b/cq/scripts/slave/recipe/eurtest_e2e_test_runner.py
index 90ca487..a758ed7 100644
--- a/cq/scripts/slave/recipe/eurtest_e2e_test_runner.py
+++ b/cq/scripts/slave/recipe/eurtest_e2e_test_runner.py
@@ -38,12 +38,6 @@
 
   def get_steps(self):
     build_shell_config = clang_builder.BUILD_CONFIGS['displayassistant_grte_opal_eng']
-
-    build_branding = build_shell_config.get('build_branding', None)
-    build_arch = build_shell_config.get('build_arch', None)
-    build_product = build_shell_config.get('build_product', None)
-    build_flavor = build_shell_config.get('build_flavor', None)
-    enable_assistant = build_shell_config.get('enable_assistant', False)
     build_args_official = build_shell_config.get('build_args_official', None)
     grte_compatible = build_shell_config.get('grte_compatible', False)
     build_args_product = build_shell_config.get('build_args_product', None)
@@ -64,12 +58,10 @@
          )]
     return [
         cast_shell_step.CastShellStep(
-            build_branding, build_arch, build_product,
-            build_flavor, enable_assistant,
             build_args_official=build_args_official,
             code_coverage=False, grte_compatible=grte_compatible,
             build_args_product=build_args_product, halt_on_failure=True,
-            sanitizer=None, archive_to_tmp=True, **self._step_kwargs),
+            archive_to_tmp=True, **self._step_kwargs),
         py_env_setup_step.PyEnvSetupStep(
             additional_import_paths=additional_import_paths,
             local_packages_dir='team-catatester/python_packages',
diff --git a/cq/scripts/slave/recipe/fuchsia_builder.py b/cq/scripts/slave/recipe/fuchsia_builder.py
index 8e70f32..d6b51f1 100644
--- a/cq/scripts/slave/recipe/fuchsia_builder.py
+++ b/cq/scripts/slave/recipe/fuchsia_builder.py
@@ -23,7 +23,6 @@
         'architecture': 'arm64',
         'build_args_product': 'fuchsia_arm64_user',
         'build_args_flavor': 'Release',
-        'build_product': 'display',
         'build_target': 'chromecast/internal/fuchsia:all',
         'test_target': 'chromecast/internal/fuchsia:chromecast_fuchsia_tests',
         'run_gtests': False,
@@ -34,7 +33,6 @@
         'architecture': 'arm64',
         'build_args_product': 'fuchsia_arm64_eng',
         'build_args_flavor': 'Eng',
-        'build_product': 'display',
         'build_target': 'chromecast/internal/fuchsia:all',
         'test_target': 'chromecast/internal/fuchsia:chromecast_fuchsia_tests',
         'run_gtests': False,
@@ -44,7 +42,6 @@
         'architecture': 'arm64',
         'build_args_product': 'fuchsia_arm64_eng_optimized',
         'build_args_flavor': 'EngOptimized',
-        'build_product': 'display',
         'build_target': 'chromecast/internal/fuchsia:all',
         'test_target': 'chromecast/internal/fuchsia:chromecast_fuchsia_tests',
         'run_gtests': False,
@@ -54,7 +51,6 @@
         'architecture': 'amd64',
         'build_args_product': 'fuchsia_x64_user',
         'build_args_flavor': 'Release',
-        'build_product': 'display',
         'build_target': 'chromecast/internal/fuchsia:all',
         'test_target': 'chromecast/internal/fuchsia:chromecast_fuchsia_tests',
         'run_gtests': True,
@@ -64,7 +60,6 @@
         'architecture': 'amd64',
         'build_args_product': 'fuchsia_x64_eng',
         'build_args_flavor': 'Eng',
-        'build_product': 'display',
         'build_target': 'chromecast/internal/fuchsia:all',
         'test_target': 'chromecast/internal/fuchsia:chromecast_fuchsia_tests',
         'run_gtests': True,
@@ -74,7 +69,6 @@
         'architecture': 'amd64',
         'build_args_product': 'fuchsia_x64_eng_optimized',
         'build_args_flavor': 'EngOptimized',
-        'build_product': 'display',
         'build_target': 'chromecast/internal/fuchsia:all',
         'test_target': 'chromecast/internal/fuchsia:chromecast_fuchsia_tests',
         'run_gtests': True,
diff --git a/cq/scripts/slave/recipe/include_what_you_use.py b/cq/scripts/slave/recipe/include_what_you_use.py
index 5205734..e3da9af 100644
--- a/cq/scripts/slave/recipe/include_what_you_use.py
+++ b/cq/scripts/slave/recipe/include_what_you_use.py
@@ -29,12 +29,6 @@
         'build_args_official': False,
         # TODO(b/145840052): Remove once the build is fast enough.
         'timeout_secs_build_gtests': 5 * 60 * 60,
-        # TODO(b/148885147) Remove params below
-        'build_branding': 'chrome',
-        'build_product': 'audio',
-        'build_flavor': 'Debug',
-        'build_arch': 'clang',
-        'enable_assistant': True,
         'run_gtests': False,
     },
 }
diff --git a/cq/scripts/slave/recipe/junit_builder.py b/cq/scripts/slave/recipe/junit_builder.py
index 1380e1c..587754f 100644
--- a/cq/scripts/slave/recipe/junit_builder.py
+++ b/cq/scripts/slave/recipe/junit_builder.py
@@ -2,11 +2,6 @@
 from slave import base_recipe
 from slave.step import unittest_step, jacoco_coverage_processing_step
 
-BUILD_BRANDING = 'chrome'
-BUILD_ARCH = 'x86'
-BUILD_FLAVOR = 'Release'
-BUILD_PRODUCT = 'android'
-
 # This is needed to override the "DEFAULT_MANIFEST_STRING" in test_generator.py
 # by adding the chromium/tools/depot_tools project.
 SAMPLE_MANIFEST_STRING = """
@@ -79,15 +74,12 @@
     steps = []
     steps += [
         unittest_step.BuildAffectedUnitTestsStep(
-            BUILD_BRANDING, BUILD_ARCH, BUILD_PRODUCT,
-            BUILD_FLAVOR, enable_assistant=False, sanitizer=None,
             build_args_product=build_args_product,
             build_args_official=build_args_official,
             halt_on_failure=True, junit=True,
             code_coverage=code_coverage, **self._step_kwargs),
         unittest_step.RunAffectedUnitTestsStep(
-            BUILD_BRANDING, BUILD_ARCH, BUILD_PRODUCT, BUILD_FLAVOR,
-            report_url='', recipe_steps=steps, sanitizer=None,
+            report_url='', recipe_steps=steps,
             build_args_product=build_args_product,
             build_args_official=build_args_official,
             enable_network_service=False, junit=True, **self._step_kwargs),
@@ -98,7 +90,6 @@
     if code_coverage:
       steps.append(
         jacoco_coverage_processing_step.JacocoCoverageProcessingStep(
-          BUILD_BRANDING, BUILD_ARCH, BUILD_PRODUCT, BUILD_FLAVOR,
           'coverage',  build_args_product=build_args_product,
           build_args_official=build_args_official, **self._step_kwargs
         )
diff --git a/cq/scripts/slave/recipe/null.py b/cq/scripts/slave/recipe/null.py
index 44fe16e..fbab6e2 100644
--- a/cq/scripts/slave/recipe/null.py
+++ b/cq/scripts/slave/recipe/null.py
@@ -16,4 +16,4 @@
         self, enable_build_accelerator=False, **kwargs)
 
   def get_steps(self):
-    return []
\ No newline at end of file
+    return []
diff --git a/cq/scripts/slave/recipe/ota_builder.py b/cq/scripts/slave/recipe/ota_builder.py
index 3be023c..0e52850 100644
--- a/cq/scripts/slave/recipe/ota_builder.py
+++ b/cq/scripts/slave/recipe/ota_builder.py
@@ -273,16 +273,6 @@
             'cast-partner-amlogic-internal', 'cast-partner-broadcom-internal'
         ],
     },
-    'elaine-fuchsia-eng': {
-        'build_flavor': 'release',
-        'board_name': 'elaine-b3',
-        'resign': ota_resign_step.ELAINE_FUCHSIA_RESIGN,
-        'clean_steps': [],
-        'default_properties': {
-            'fuchsia_sync': True,
-        },
-        'eng_build': True,
-    },
     'elaine-fuchsia-user': {
         'build_flavor': 'release',
         'board_name': 'elaine-b3',
@@ -373,12 +363,14 @@
     },
     'korlan-user': {
         'build_flavor': 'release',
+        'max_ota_size': 40000000,
         'resign': ota_resign_step.KORLAN_RESIGN,
         'partner_bucket': ['cast-partner-amlogic-internal'],
     },
     'lumia-eng': {
         'build_flavor': 'release',
         'resign': ota_resign_step.LUMIA_RESIGN,
+        'factory': ota_resign_step.LUMIA_FACTORY,
         'partner_bucket': ['cast-partner-amlogic-internal'],
     },
     'lumia-user': {
@@ -386,6 +378,17 @@
         'resign': ota_resign_step.LUMIA_RESIGN,
         'partner_bucket': ['cast-partner-amlogic-internal'],
     },
+    'swift-eng': {
+        'build_flavor': 'release',
+        'board_name': 'swift-p1',
+        'resign': ota_resign_step.SWIFT_RESIGN,
+        'partner_bucket': ['cast-partner-amlogic-internal'],
+    },
+    'swift-user': {
+        'build_flavor': 'release',
+        'resign': ota_resign_step.SWIFT_RESIGN,
+        'partner_bucket': ['cast-partner-amlogic-internal'],
+    },
     'gq-eng': {
         'build_flavor': 'release',
         'resign': ota_resign_step.GQ_RESIGN,
@@ -458,15 +461,6 @@
         ],
         'test_board_name': 'newman-b3',
     },
-    'newman-fuchsia-eng': {
-        'build_flavor': 'release',
-        'board_name': 'newman-b3',
-        'resign': ota_resign_step.NEWMAN_FUCHSIA_RESIGN,
-        'default_properties': {
-            'fuchsia_sync': True,
-        },
-        'test_board_name': 'newman-b3',
-    },
     'newman-fuchsia-user': {
         'build_flavor': 'release',
         'board_name': 'newman-b3',
@@ -619,6 +613,20 @@
             'cast-partner-synaptics-internal',
         ],
     },
+    'prince-iot_cast-user': {
+        'build_flavor':
+            'release',
+        'board_name':
+            'prince-p2',
+        'resign':
+            ota_resign_step.PRINCE_RESIGN,
+        'test_board_name':
+            'prince-p2',
+        'partner_bucket': [
+            'cast-partner-marvell-internal',
+            'cast-partner-synaptics-internal',
+        ],
+    },
     'prince-eng': {
         'build_flavor':
             'release',
@@ -785,6 +793,44 @@
     'tvdefault-user': {
         'build_flavor': 'release',
     },
+    'valens-iot_cast-eng': {
+        'build_flavor':
+            'release',
+        'board_name':
+            'valens-b1',
+        'max_ota_size':
+            155000000,
+        'resign':
+            ota_resign_step.VALENS_RESIGN,
+        'factory':
+            ota_resign_step.VALENS_FACTORY,
+        'unand':
+            ota_resign_step.VALENS_UNAND,
+        'usbstick':
+            ota_resign_step.VALENS_USBSTICK,
+        'test_board_name':
+            'valens-b1',
+        'partner_bucket': [
+            'cast-partner-marvell-internal',
+            'cast-partner-synaptics-internal',
+        ],
+    },
+    'valens-iot_cast-user': {
+        'build_flavor':
+            'release',
+        'board_name':
+            'valens-b1',
+        'max_ota_size':
+            130000000,
+        'resign':
+            ota_resign_step.VALENS_RESIGN,
+        'test_board_name':
+            'valens-b1',
+        'partner_bucket': [
+            'cast-partner-marvell-internal',
+            'cast-partner-synaptics-internal',
+        ],
+    },
     'valens-eng': {
         'build_flavor':
             'release',
@@ -882,6 +928,44 @@
         'partner_bucket': ['cast-partner-amlogic-internal'],
         'check_camera_targets': True,
     },
+    'bsv3-eng': {
+        'build_flavor': 'release',
+        'resign': ota_resign_step.BSV3_RESIGN,
+        'factory': ota_resign_step.BSV3_FACTORY,
+        'factory_tool': ota_resign_step.BSV3_FACTORY_TOOL,
+        'usbstick': ota_resign_step.BSV3_USBSTICK,
+        'partner_bucket': ['cast-partner-amlogic-internal'],
+        'check_camera_targets': True,
+        'eng_build': True,
+    },
+    'bsv3-user': {
+        'build_flavor': 'release',
+        'resign': ota_resign_step.BSV3_RESIGN,
+        'partner_bucket': ['cast-partner-amlogic-internal'],
+        'check_camera_targets': True,
+    },
+    'bla4-partner-eng': {
+        'build_flavor': 'release',
+        'build_extra_params': ['PARTNER_BUILD=true', 'CORE_DEV_BUILD=true'],
+        'resign': ota_resign_step.BLA4_RESIGN,
+        # make clean before build bla4 targets.
+        # It's because the toolchain is different from other products.
+        # Therefore, make clean to avoid using the same intermediate artifacts.
+        'partner_bucket': ['cast-partner-amlogic-internal'],
+        'make_clean': True,
+    },
+    'bla4-eng': {
+        'build_flavor': 'release',
+        'resign': ota_resign_step.BLA4_RESIGN,
+        'partner_bucket': ['cast-partner-amlogic-internal'],
+        'make_clean': True,
+    },
+    'bla4-user': {
+        'build_flavor': 'release',
+        'resign': ota_resign_step.BLA4_RESIGN,
+        'partner_bucket': ['cast-partner-amlogic-internal'],
+        'make_clean': True,
+    },
 }
 
 SKIP_OTA_TESTS_BRANCH = [
@@ -940,6 +1024,8 @@
     self._skip_landmine = self.build_system == 'catabuilder'
     self._skip_gncheck = self.build_system == 'catabuilder'
 
+    self._make_clean = self._build_config.get('make_clean')
+
   def _oss_run_condition(self):
     if self.build_system != 'catabuilder':
       return False
@@ -1032,10 +1118,10 @@
             **self._step_kwargs))
 
     if self._camera_target_check_condition():
-      product_name = self._build_name.split('-')[0]
+      product_name, variant = self._build_name.split('-')
       is_eng_build = BUILD_CONFIGS[self._build_name].get('eng_build', False)
       steps.append(
-          ota_step.OtaCameraTargetsStep(product_name, is_eng_build,
+          ota_step.OtaCameraTargetsStep(product_name, variant, is_eng_build,
                                         **self._step_kwargs))
 
     if self._builds_usonia_daemon():
diff --git a/cq/scripts/slave/recipe/py_test_runner.py b/cq/scripts/slave/recipe/py_test_runner.py
index 9803a33..3e62591 100644
--- a/cq/scripts/slave/recipe/py_test_runner.py
+++ b/cq/scripts/slave/recipe/py_test_runner.py
@@ -16,10 +16,6 @@
 UNIT_TEST_REGEX_SUFFIX = r'.*_test\.py$'
 INTEGRATION_TEST_REGEX_SUFFIX = r'.*_test_integration\.py$'
 E2E_TEST_REGEX_SUFFIX = r'.*_test_case.py$'
-PY3_EXCLUDED_PATH = [
-    'cq/buildbot-masters',
-    'cq/scripts/master',
-]
 
 
 BUILD_CONFIGS = {
@@ -36,28 +32,11 @@
         'test_file_filter_regex': UNIT_TEST_REGEX_SUFFIX,
         'test_timeout_seconds': DEFAULT_UNIT_TEST_TIMEOUT_SECONDS,
     },
-    'py3_unittest_continuous_tests': {
-        'project': 'continuous-tests',
-        'py_requirements_path': 'cq/requirements_recipe3.txt',
-        'py_requirements_project': 'continuous-tests',
-        'py_packages_mirror_dir': 'python_packages',
-        'test_file_filter_regex': UNIT_TEST_REGEX_SUFFIX,
-        'test_timeout_seconds': DEFAULT_UNIT_TEST_TIMEOUT_SECONDS * 2,
-        'module_path_regex': '^((?!{}).)*$'.format('|'.join(PY3_EXCLUDED_PATH)),
-        'py3': True,
-    },
     'py_unittest_test': {
         'project': 'test',
         'test_file_filter_regex': UNIT_TEST_REGEX_SUFFIX,
         'test_timeout_seconds': DEFAULT_UNIT_TEST_TIMEOUT_SECONDS,
     },
-    'py3_unittest_test': {
-        'project': 'test',
-        'test_file_filter_regex': UNIT_TEST_REGEX_SUFFIX,
-        'test_timeout_seconds': DEFAULT_UNIT_TEST_TIMEOUT_SECONDS * 2,
-        'py3': True,
-        'py_requirements_path': os.path.join('lab_system', 'requirements3.txt'),
-    },
     'py_unittest_chromecast_internal': {
         'project': 'chromecast/internal',
         'py_requirements_path': os.path.join('lab_system', 'requirements3.txt'),
diff --git a/cq/scripts/slave/recipe/sprockets_conformance_test_runner.py b/cq/scripts/slave/recipe/sprockets_conformance_test_runner.py
index 940c19f..6029c5f 100644
--- a/cq/scripts/slave/recipe/sprockets_conformance_test_runner.py
+++ b/cq/scripts/slave/recipe/sprockets_conformance_test_runner.py
@@ -6,11 +6,7 @@
 
 _BUILD_ARGS_PRODUCT = 'video_x64_eng'
 _BUILD_ARGS_OFFICIAL = False
-_BUILD_BRANDING = 'chrome'
-_BUILD_ARCH = 'clang'
-_BUILD_PRODUCT = 'chromecast'
 # TODO(mbjorge|seantopping): Change to 'Release' when b/32749161 is resolved.
-_BUILD_FLAVOR = 'Debug'
 _ENABLED_CHIRP = False
 # TODO(b/24062312): 'clang' --> 'x86'
 
@@ -38,9 +34,7 @@
   def get_steps(self):
     return [
         landmine_step.LandmineStep(**self._step_kwargs),
-        cast_shell_step.CastShellStep(_BUILD_BRANDING, _BUILD_ARCH,
-                                      _BUILD_PRODUCT,
-                                      _BUILD_FLAVOR, _ENABLED_CHIRP,
+        cast_shell_step.CastShellStep(_ENABLED_CHIRP,
                                       build_args_product=_BUILD_ARGS_PRODUCT,
                                       build_args_official=_BUILD_ARGS_OFFICIAL,
                                       halt_on_failure=True,
diff --git a/cq/scripts/slave/recipe/x86_integration_test_runner.py b/cq/scripts/slave/recipe/x86_integration_test_runner.py
index 8a85a54..d82ee41 100644
--- a/cq/scripts/slave/recipe/x86_integration_test_runner.py
+++ b/cq/scripts/slave/recipe/x86_integration_test_runner.py
@@ -6,14 +6,8 @@
 from slave.step import py_env_setup_step
 from slave.step import x86_integration_test_step
 
-# TODO(b/24062312): 'clang' --> 'x86'
-BUILD_ARCH = 'clang'
 BUILD_ARGS_PRODUCT = 'video_x64_eng'
 BUILD_ARGS_OFFICIAL = False
-BUILD_BRANDING = 'chrome'
-BUILD_FLAVOR = 'Debug'
-BUILD_PRODUCT = 'chromecast'
-ENABLE_CHIRP = False
 
 BUILD_CONFIGS = {
   'cast_compliance_tests': {
@@ -48,9 +42,7 @@
 
   def get_steps(self):
     steps = [
-        cast_shell_step.CastShellStep(BUILD_BRANDING, BUILD_ARCH,
-                                      BUILD_PRODUCT, BUILD_FLAVOR, ENABLE_CHIRP,
-                                      build_args_product=BUILD_ARGS_PRODUCT,
+        cast_shell_step.CastShellStep(build_args_product=BUILD_ARGS_PRODUCT,
                                       build_args_official=BUILD_ARGS_OFFICIAL,
                                       halt_on_failure=True,
                                       **self._step_kwargs),
diff --git a/cq/scripts/slave/recipe/x86_manhattan_test_integration_runner.py b/cq/scripts/slave/recipe/x86_manhattan_test_integration_runner.py
index 44736d6..6417705 100644
--- a/cq/scripts/slave/recipe/x86_manhattan_test_integration_runner.py
+++ b/cq/scripts/slave/recipe/x86_manhattan_test_integration_runner.py
@@ -3,14 +3,8 @@
 from slave.step import cast_shell_step
 from slave.step import x86_manhattan_test_integration_step
 
-# TODO(b/24062312): 'clang' --> 'x86'
-BUILD_ARCH = 'clang'
 BUILD_ARGS_PRODUCT = 'displayassistant_x64_eng'
 BUILD_ARGS_OFFICIAL = False
-BUILD_BRANDING = 'chrome'
-BUILD_FLAVOR = 'Debug'
-BUILD_PRODUCT = 'display'
-ENABLE_ASSISTANT = True
 
 
 def GetValidBuildNames():
@@ -32,10 +26,7 @@
 
   def get_steps(self):
     steps = [
-        cast_shell_step.CastShellStep(BUILD_BRANDING, BUILD_ARCH,
-                                      BUILD_PRODUCT, BUILD_FLAVOR,
-                                      ENABLE_ASSISTANT,
-                                      build_args_product=BUILD_ARGS_PRODUCT,
+        cast_shell_step.CastShellStep(build_args_product=BUILD_ARGS_PRODUCT,
                                       build_args_official=BUILD_ARGS_OFFICIAL,
                                       halt_on_failure=True,
                                       **self._step_kwargs),
diff --git a/cq/scripts/slave/recipe/x86_nccm_test_runner.py b/cq/scripts/slave/recipe/x86_nccm_test_runner.py
index 8531e4e..109bbe3 100644
--- a/cq/scripts/slave/recipe/x86_nccm_test_runner.py
+++ b/cq/scripts/slave/recipe/x86_nccm_test_runner.py
@@ -6,10 +6,6 @@
 from slave.step import gn_check_step
 from slave.step import x86_camera_step
 
-BUILD_BRANDING = 'chrome'
-BUILD_ARCH = 'x86'
-BUILD_FLAVOR = 'Release'
-BUILD_PRODUCT = 'chromecast'
 BUILD_ARGS_OFFICIAL = False
 BUILD_ARGS_PRODUCT = 'nccm_x86'
 
@@ -41,10 +37,8 @@
     cwd = os.getcwd()
 
     # Output directory for gn gen step must match expected output directory
-    # for RunCoverageCommandStep based on given BUILD_ARCH, BUILD_PRODUCT, etc.
-    out_dir_parts = ['out', BUILD_ARCH, BUILD_PRODUCT, 'gn']
-    out_dir = os.path.join(
-      'chromium/src', '_'.join(out_dir_parts), BUILD_FLAVOR)
+    # for RunCoverageCommandStep.
+    out_dir = os.path.join('chromium', 'src', 'out', BUILD_ARGS_PRODUCT)
 
     build_args = []
     if self._code_coverage:
@@ -67,11 +61,6 @@
       # on the list of executables stored in step data and collects
       # coverage information.
       coverage_step = code_coverage_step.RunCoverageCommandStep(
-          BUILD_BRANDING,
-          BUILD_ARCH,
-          BUILD_PRODUCT,
-          BUILD_FLAVOR,
-          sanitizer=None,
           build_args_product=BUILD_ARGS_PRODUCT,
           build_args_official=BUILD_ARGS_OFFICIAL,
           ignore_filename_regex=COVERAGE_IGNORE_FILENAME_REGEX,
diff --git a/cq/scripts/slave/recipe/x86_photon_test_runner.py b/cq/scripts/slave/recipe/x86_photon_test_runner.py
index 1f29d60..795f955 100644
--- a/cq/scripts/slave/recipe/x86_photon_test_runner.py
+++ b/cq/scripts/slave/recipe/x86_photon_test_runner.py
@@ -6,11 +6,6 @@
 from slave.step import gn_check_step
 from slave.step import x86_camera_step
 
-BUILD_BRANDING = 'chrome'
-BUILD_ARCH = 'x86'
-BUILD_FLAVOR = 'Release'
-BUILD_PRODUCT = 'chromecast'
-BUILD_ARGS_OFFICIAL = False
 BUILD_ARGS_PRODUCT = 'photon_x86'
 
 COVERAGE_IGNORE_FILENAME_REGEX = '.*/gen/.*|.*/third_party/.*'
@@ -41,10 +36,8 @@
     cwd = os.getcwd()
 
     # Output directory for gn gen step must match expected output directory
-    # for RunCoverageCommandStep based on given BUILD_ARCH, BUILD_PRODUCT, etc.
-    out_dir_parts = ['out', BUILD_ARCH, BUILD_PRODUCT, 'gn']
-    out_dir = os.path.join(
-      'chromium/src', '_'.join(out_dir_parts), BUILD_FLAVOR)
+    # for RunCoverageCommandStep.
+    out_dir = os.path.join('chromium', 'src', 'out', BUILD_ARGS_PRODUCT)
 
     build_args = []
 
diff --git a/cq/scripts/slave/recipe/x86_simulator_builder.py b/cq/scripts/slave/recipe/x86_simulator_builder.py
index f413fd8..59e42c8 100644
--- a/cq/scripts/slave/recipe/x86_simulator_builder.py
+++ b/cq/scripts/slave/recipe/x86_simulator_builder.py
@@ -78,11 +78,6 @@
       }
 
       coverage_step = code_coverage_step.RunCoverageCommandStep(
-          None,
-          None,
-          None,
-          None,
-          sanitizer=None,
           build_args_product=self.buildername,
           build_args_official=False,
           ignore_filename_regex=COVERAGE_IGNORE_FILENAME_REGEX,
diff --git a/cq/scripts/slave/recipe/x86_wifi_simulator_builder.py b/cq/scripts/slave/recipe/x86_wifi_simulator_builder.py
index 8da56f3..1094584 100644
--- a/cq/scripts/slave/recipe/x86_wifi_simulator_builder.py
+++ b/cq/scripts/slave/recipe/x86_wifi_simulator_builder.py
@@ -34,6 +34,8 @@
 
     # sirocco_x86_64-eng --> sirocco_x86_64
     self._product = self.buildername[:self.buildername.find('-')]
+    # Hard-code eng since GetValidBuildNames indicates we only ever use the eng variant
+    self._variant = "eng"
     self.out_dir = f'out_chromecast_{self._product}/release'
     self.chromium_out_dir = f'chromium/src/{self.out_dir}'
 
@@ -50,7 +52,7 @@
       test_env = {
         'LD_LIBRARY_PATH': ':'.join([
           self.out_dir,
-          f'../../out/target/product/{self._product}/system/lib',
+          f'../../out/target/product/{self._product}-{self._variant}/system/lib',
         ]),
         'TARGET_PRODUCT': self._product,
       }
@@ -67,8 +69,6 @@
       ])
       if self._code_coverage:
         coverage_step = code_coverage_step.RunCoverageCommandStep(
-            None, None, None,
-            None, sanitizer=None,
             build_args_product=self.buildername,
             build_args_official=False,
             ignore_filename_regex=COVERAGE_IGNORE_FILENAME_REGEX,
diff --git a/cq/scripts/slave/step/cast_shell_step.py b/cq/scripts/slave/step/cast_shell_step.py
index 1e7511c..762fbe4 100644
--- a/cq/scripts/slave/step/cast_shell_step.py
+++ b/cq/scripts/slave/step/cast_shell_step.py
@@ -3,9 +3,7 @@
 import os
 import sys
 
-from helpers import branch_utils
 from helpers import cast_shell_utils
-from helpers import gn_utils
 from helpers import ninja_utils
 from slave import base_step
 from slave.step import gn_check_step
@@ -29,19 +27,13 @@
   instead of the OTA `make` build flow.
   """
 
-  def __init__(self, name, branding, build_type, product, build_flavor,
-      sanitizer=None, build_args_product=None,
+  def __init__(self, name,
+      build_args_product=None,
       build_args_official=None, **kwargs):
     """Creates a UnittestBaseStep instance.
 
     Args:
       name: The name of the step.
-      branding: Build branding (chromium or chrome).
-      build_type: Type of system to build for ('x86', 'clang', or 'arm').
-      product: product to build for (ie. 'chromecast', 'audio').
-      build_flavor: Flavor of build ('Debug', 'Eng', 'Release').
-      build_args_official: Whether to do an official build (disables debugging).
-      sanitizer: Clang saniziter to run with ('asan', 'msan', 'tsan', 'ubsan').
       build_args_product: The build/args/product/*.gn product to build for.
       build_args_official: Whether the build is an official build. MUST be set
         for any build that will ship to users. Disables debugging; do not
@@ -50,72 +42,19 @@
     """
     super().__init__(name=name, **kwargs)
 
-    # TODO(b/73231972) remove branding, build_type, product, build_flavor
-    # after migration to new builds
-    assert branding in ['chromium', 'chrome', None]
-    assert build_type in ['x86', 'clang', 'arm', 'arm64', None]
-    assert product in [
-        'chromecast', 'audio', 'android', 'atv', 'display', None]
-    assert build_flavor in ['Debug', 'Eng', 'Release', None]
-    assert sanitizer in ['asan', 'msan', 'tsan', 'ubsan', None]
     assert build_args_product
     assert build_args_official is not None
 
-    self._branding = branding
-    self._build_type = build_type
-    self._product = product
-    self._build_flavor = build_flavor
     self._build_args_official = build_args_official
-    self._enable_gn_check = gn_utils.is_gn_check_enabled(self.manifest_branch,
-                                                         product)
-    self._sanitizer = sanitizer
+    self._enable_gn_check = True
     self._build_args_product = build_args_product
 
     self._build_target = kwargs.get('build_target')
 
     # Re-calculate the out directory. This mimics the calculation done in
-    # build_chromecast.py because we don't want to just import it and we can't
-    # refactor it because we have old branches we need to be able to build.
+    # build_chromecast.py.
     chrome_root = self.get_project_path('chromium/src')
-    self._outdir = os.path.join(chrome_root, 'out_' + build_args_product)
-    if self._build_flavor is None:
-      return
-    build_out_parts = ['out', build_type, product, 'gn']
-    if sanitizer:
-      build_out_parts.append(sanitizer)
-    self._build_out_dir = os.path.join(chrome_root, '_'.join(build_out_parts))
-    flavor_part = 'Release' if build_flavor == 'Eng' else build_flavor
-    self._outdir = os.path.join(self._build_out_dir, flavor_part)
-
-  @property
-  def build_type_dir(self):
-    # TODO(b/73231972) remove build_type based logic once deprecated
-    if self._build_type is None:
-      if '_arm_' in self._build_args_product:
-        return 'arm'
-      elif '_arm64_' in self._build_args_product:
-        return 'arm64'
-      elif '_x86_' in self._build_args_product:
-        return 'x86'
-      return 'clang'
-    return self._build_type
-
-  @property
-  def build_flavor_dir(self):
-    # TODO(b/73231972) remove build_flavor based logic once deprecated
-    # castshell builds had build_flavor == Debug despite non debug suffix
-    if self._build_flavor is None:
-      return 'Debug' if ('debug' in self._build_args_product or
-                         'castshell' in self._build_args_product
-                         ) else 'Release'
-    return 'Release' if self._build_flavor == 'Eng' else self._build_flavor
-
-  @property
-  def build_product_dir(self):
-    # TODO(b/73231972) remove product based logic once deprecated
-    if self._product is None:
-      return 'chromecast'
-    return self._product
+    self._outdir = os.path.join(chrome_root, 'out', build_args_product)
 
   def _get_minimum_required_argv_for_outdir(self):
     """Returns the arguments needed to get the outdir from build_chromecast.py.
@@ -138,19 +77,6 @@
         '--build_number', self.build_number,
         '--chrome_root', self.get_project_path('chromium/src')]
 
-    # TODO(b/73231972) remove unused flags once migrated to new builds
-    if self._build_flavor:
-      argv += ['--build_flavor', self._build_flavor]
-    if self._build_type:
-      argv += ['--build_type', self._build_type]
-    if self._branding:
-      argv += ['--chromecast_branding', self._branding]
-    if self._product:
-      argv += ['--product_name', self._product]
-
-    if self._sanitizer:
-      argv += ['--sanitizer', self._sanitizer]
-
     if self._build_target:
       argv += ['--build_target', self._build_target]
 
@@ -163,26 +89,18 @@
 class CastShellStep(NonOtaBuildBaseStep, gn_check_step.GnCheckStepBase):
   """Build step class for building cast_shell."""
 
-  def __init__(self, branding, build_type, product, build_flavor,
-      enable_assistant, sanitizer=None, archive_to_tmp=False,
+  def __init__(self,
+      archive_to_tmp=False,
       skip_create_zip=False, strip_binaries=False, **kwargs):
     """Creates a CastShellStep instance.
 
     Args:
-      branding: Build branding ('chromium' or 'chrome').
-      build_type: Type of system to build for ('x86', 'clang', or 'arm').
-      product: product to build for (ie. 'chromecast', 'audio').
-      build_flavor: Flavor of build ('Debug', 'Eng', 'Release').
-      enable_assistant: enable Assistant functionality. Audio products only.
-      sanitizer: Clang saniziter to run with ('asan', 'msan', 'tsan', 'ubsan').
       **kwargs: Any additional args to pass to BaseStep.
     """
     self._enable_code_coverage = kwargs.pop('code_coverage', False)
     gn_check_step.GnCheckStepBase.__init__(self, **kwargs)
-    NonOtaBuildBaseStep.__init__(self, 'build cast_shell', branding,
-                                 build_type, product, build_flavor,
-                                 sanitizer=sanitizer, **kwargs)
-    self._enable_assistant = enable_assistant
+    NonOtaBuildBaseStep.__init__(self, 'build cast_shell',
+                                 **kwargs)
     self._archive_to_tmp = archive_to_tmp
     self._skip_create_zip = skip_create_zip
     self._strip_binaries = strip_binaries
@@ -214,27 +132,12 @@
                '--chrome_root', self.get_project_path('chromium/src')]
     command += self.build_accelerator.build_chromecast_flags
 
-    # TODO(b/73231972) remove unused flags once migrated to new builds
-    if self._build_flavor:
-      command += ['--build_flavor', self._build_flavor]
-    if self._build_type:
-      command += ['--build_type', self._build_type]
-    if self._branding:
-      command += ['--chromecast_branding', self._branding]
-    if self._product:
-      command += ['--product_name', self._product]
     if self._build_args_official:
       command += ['--official']
 
-    if self._enable_assistant:
-      command += ['--enable_assistant']
-
     if self._enable_gn_check:
       command += ['--enable_gn_check']
 
-    if self._sanitizer:
-      command += ['--sanitizer', self._sanitizer]
-
     if self._build_target:
       command += ['--build_target', self._build_target]
 
diff --git a/cq/scripts/slave/step/code_coverage_step.py b/cq/scripts/slave/step/code_coverage_step.py
index 12f16e4..4687358 100644
--- a/cq/scripts/slave/step/code_coverage_step.py
+++ b/cq/scripts/slave/step/code_coverage_step.py
@@ -32,18 +32,13 @@
 class RunCoverageCommandStep(cast_shell_step.NonOtaBuildBaseStep):
   """Build step class generating code coverage data."""
 
-  def __init__(self, branding, build_type, product, build_flavor,
-               sanitizer=None, build_args_product=None, junit=False,
+  def __init__(self,
+              build_args_product=None, junit=False,
                ignore_filename_regex=None, report_format=None,
                build_out_dir=None, test_env=None, **kwargs):
     """Creates a RunCoverageCommandStep instance.
 
     Args:
-      branding: Build branding (chromium or chrome).
-      build_type: Type of system to build for ('x86', 'clang', or 'arm').
-      product: product to build for (ie. 'chromecast', 'audio').
-      build_flavor: Flavor of build ('Debug', 'Eng', 'Release').
-      sanitizer: Clang sanitizer to run with ('asan', 'msan', 'tsan', 'ubsan').
       build_args_product: The name of one of the
         chromecast/internal/build/args/product files to use for the GN args.
       junit: If true, run junit tests, otherwise run gtests (Default False).
@@ -56,29 +51,19 @@
       **kwargs: Any additional args to pass to BaseStep.
     """
     cast_shell_step.NonOtaBuildBaseStep.__init__(
-        self, 'generate coverage data', branding, build_type,
-        product, build_flavor, sanitizer=sanitizer, timeout_secs=0,
+        self, 'generate coverage data',
+        timeout_secs=0,
         build_args_product=build_args_product, **kwargs)
 
     self._junit = junit
     self._ignore_filename_regex = ignore_filename_regex
     self._format = report_format
-    self._build_out_dir = build_out_dir
+    if not any((build_args_product, build_out_dir)):
+      raise ValueError("You must specify at least one of build_args_product "
+        "or build_out_dir")
+    self._build_out_dir = build_out_dir or f'out/{build_args_product}'
     self._test_env = test_env
 
-  def _get_build_out_dir(self, use_flavor=False):
-    if self._build_out_dir:
-      return self._build_out_dir
-
-    out_dir = ['out', self.build_type_dir, self.build_product_dir, 'gn']
-    if self._sanitizer:
-      out_dir.append(self._sanitizer)
-
-    if use_flavor:
-      return os.path.join('_'.join(out_dir), self.build_flavor_dir)
-
-    return '_'.join(out_dir)
-
   def _generate_coverage_args(self, test_list):
     """Generates unit test related arguments for the coverage script.
 
@@ -119,7 +104,7 @@
     Returns:
       String argument representation of test command for the coverage script.
     """
-    test_path = os.path.join(self._get_build_out_dir(use_flavor=True),
+    test_path = os.path.join(self._build_out_dir,
                              test_command[0])
     return '{} {}'.format(test_path, ' '.join(test_command[1:]))
 
@@ -153,7 +138,7 @@
     command = [vpython3_path, coverage_script_path]
     command += test_binary_list
     command += [
-      '-o', report_path, '-b', self._get_build_out_dir(use_flavor=True), '-v']
+      '-o', report_path, '-b', self._build_out_dir, '-v']
     if self._format:
       command += ['--format', self._format]
     if self._ignore_filename_regex:
@@ -181,6 +166,9 @@
         pass  # Ignore the error if the folder hasn't been created yet.
       time.sleep(60)
 
+    if subprocess.returncode != 0:
+      return False
+
     try:
       shutil.copyfile(log_file_path, os.path.join(self.get_gcs_dir(),
                                                   'coverage.py.log'))
diff --git a/cq/scripts/slave/step/fuchsia_emulator_step.py b/cq/scripts/slave/step/fuchsia_emulator_step.py
index 6a22d6b..623bcf7 100644
--- a/cq/scripts/slave/step/fuchsia_emulator_step.py
+++ b/cq/scripts/slave/step/fuchsia_emulator_step.py
@@ -43,7 +43,7 @@
   def __init__(self,
                fuchsia_sdk_root,
                fuchsia_workdir,
-               product='terminal.qemu-x64',
+               product='terminal.x64',
                name='Unknown FEMU step',
                **kwargs):
     """Creates a BaseFuchsiaEmulatorStep instance.
diff --git a/cq/scripts/slave/step/gn_check_step.py b/cq/scripts/slave/step/gn_check_step.py
index bb8fd9e..90497ca 100644
--- a/cq/scripts/slave/step/gn_check_step.py
+++ b/cq/scripts/slave/step/gn_check_step.py
@@ -134,7 +134,7 @@
       **kwargs: Any additional args to pass to BaseStep.
     """
     GnCheckStepBase.__init__(self, **kwargs)
-    self._enable_gn_check = gn_utils.is_gn_check_enabled(self.manifest_branch)
+    self._enable_gn_check = True
     self._product = build_name.split('-')[0]
     self._is_mesh_build = build_name.endswith(_MESH_TAG)
     self._build_name = build_name.replace(_MESH_TAG, '-eng')
diff --git a/cq/scripts/slave/step/jacoco_coverage_processing_step.py b/cq/scripts/slave/step/jacoco_coverage_processing_step.py
index ac4b719..299673f 100644
--- a/cq/scripts/slave/step/jacoco_coverage_processing_step.py
+++ b/cq/scripts/slave/step/jacoco_coverage_processing_step.py
@@ -18,14 +18,9 @@
 
   def __init__(
       self,
-      branding,
-      build_type,
-      product,
-      build_flavor,
       coverage_dir,
       report_out_dir='report',
       report_format='xml',
-      sanitizer=None,
       build_args_product=None,
       build_args_official=None,
       **kwargs,
@@ -33,16 +28,10 @@
     """Creates a JacocoCoverageProcessingStep instance.
 
       Args:
-        branding: Build branding (chromium or chrome).
-        build_type: Type of system to build for ('x86', 'clang', or 'arm').
-        product: product to build for (ie. 'chromecast', 'audio').
-        build_flavor: Flavor of build ('Debug', 'Eng', 'Release').
         coverage_dir: Directory under the build directory that contains the
           jacoco exec files.
         report_out_dir: Directory under the gcs directory, to output coverage
           report.
-        sanitizer: Clang sanitizer to run with
-          ('asan', 'msan', 'tsan', 'ubsan').
         build_args_product: The name of one of the
           chromecast/internal/build/args/product files to use for the GN args.
         report_format: Output format of the jacoco coverage report
@@ -54,11 +43,6 @@
       """
     super().__init__(
         'process jacoco code coverage data.',
-        branding,
-        build_type,
-        product,
-        build_flavor,
-        sanitizer,
         build_args_product,
         build_args_official,
         **kwargs,
diff --git a/cq/scripts/slave/step/kythe_step.py b/cq/scripts/slave/step/kythe_step.py
deleted file mode 100644
index d37d48f..0000000
--- a/cq/scripts/slave/step/kythe_step.py
+++ /dev/null
@@ -1,76 +0,0 @@
-"""Build steps to run Kythe commands on eureka internal."""
-
-import os
-
-from helpers import git_utils
-from slave.step import shell_step
-
-KYTHE_RUN_EXTRACTOR_BINARY = \
-  "chromecast/internal/third_party/kythe/tools/runextractor"
-KYTHE_CXX_EXTRACTOR_BINARY = \
-  "chromecast/internal/third_party/kythe/extractors/cxx_extractor"
-KYTHE_KZIP_BINARY = "chromecast/internal/third_party/kythe/tools/kzip"
-EUREKA_INTERNAL_CORUPUS = "eureka-internal.googlesource.com/codesearch"
-VNAMES_JSON_FILE_LOCATION = \
-  "cq/scripts/resources/kythe_step/vnames.json"
-
-
-class GenerateKzipStep(shell_step.ShellStep):
-
-  def __init__(self, cwd, tests_root, chromium_root, out_dir, compdb_file,
-               min_expected_kzip_bytes, *args, **kwargs):
-    super().__init__(name="kythe_gen", cwd=cwd, *args, **kwargs)
-
-    self._tests_root = tests_root
-    self._chromium_root = chromium_root
-    self._compdb_file = compdb_file
-    self._min_kzip_size = min_expected_kzip_bytes
-
-    self._runextractor_binary = os.path.join(self._chromium_root,
-                                             KYTHE_RUN_EXTRACTOR_BINARY)
-    self._cxx_extractor_binary = os.path.join(self._chromium_root,
-                                              KYTHE_CXX_EXTRACTOR_BINARY)
-    self._kzip_binary = os.path.join(self._chromium_root, KYTHE_KZIP_BINARY)
-    self._kythe_output_directory = os.path.join(out_dir, "kythe-output")
-    head_sha = git_utils.get_head_sha(self, directory=self._chromium_root)
-    if head_sha is None:
-      raise ValueError("Head SHA could not be determined for {}".format(
-          self._chromium_root))
-    self._merged_kzip_file = os.path.join(out_dir, head_sha + ".kzip")
-    self._initialize_env()
-
-  def get_kythe_output_file(self):
-    return self._merged_kzip_file
-
-  def _initialize_env(self):
-    os.environ["KYTHE_ROOT_DIRECTORY"] = os.path.abspath(self._chromium_root)
-    os.environ["KYTHE_CORPUS"] = EUREKA_INTERNAL_CORUPUS
-    os.environ["KYTHE_OUTPUT_DIRECTORY"] = self._kythe_output_directory
-    os.environ["KYTHE_VNAMES"] = os.path.join(self._tests_root,
-                                              VNAMES_JSON_FILE_LOCATION)
-
-  def get_commands(self):
-    cmd_prep_output = ["mkdir", "-p", self._kythe_output_directory]
-    cmd_gen_kzips = [
-        self._runextractor_binary, "compdb", "-extractor",
-        self._cxx_extractor_binary, "-path", self._compdb_file
-    ]
-    cmd_merge_kzips = [
-        self._kzip_binary, "merge", "--output", self._merged_kzip_file,
-        "--recursive", self._kythe_output_directory
-    ]
-    cmd_validate_kzip = ["du", "-b", self._merged_kzip_file]
-    return [
-        self.ShellCommand(cmd_prep_output, validator=self._validator),
-        self.ShellCommand(cmd_gen_kzips, validator=self._validator),
-        self.ShellCommand(cmd_merge_kzips, validator=self._validator),
-        self.ShellCommand(
-            cmd_validate_kzip, validator=self._validate_merged_kzip)
-    ]
-
-  def _validate_merged_kzip(self, returncode, stdout, stderr):
-    if returncode != 0:
-      return False
-
-    byte_size = stdout.split()[0]
-    return byte_size.isdigit() and int(byte_size) > self._min_kzip_size
diff --git a/cq/scripts/slave/step/ota_factory_tool_step.py b/cq/scripts/slave/step/ota_factory_tool_step.py
index 3f116ca..5eee990 100644
--- a/cq/scripts/slave/step/ota_factory_tool_step.py
+++ b/cq/scripts/slave/step/ota_factory_tool_step.py
@@ -52,12 +52,12 @@
 
   def _copy_factory_tool_to_factory(self, factory_tool_types):
     """Copy factory tools to tool_type folder"""
-    product = self._build_name.split('-')[0]
+    product, variant = self._build_name.split('-')
     for factory_tool_type in factory_tool_types:
       # Use BUILD_NUMBER as factory tools version
       target_files_zip = self.factory_config['source_tool_path'].format(
           product=product, tool_type=factory_tool_type,
-          version=self.build_number, ext='zip')
+          variant=variant, version=self.build_number, ext='zip')
       target_files_no_ext, zip_ext = os.path.splitext(
         os.path.basename(target_files_zip))
       dest_file_path = os.path.join(self._ota_archive_output_dir(), 'factory',
@@ -70,7 +70,7 @@
       if factory_tool_type == 'runin2_package':
         runin_sh = self.factory_config['source_tool_path'].format(
           product=product, tool_type=factory_tool_type,
-          version=self.build_number,ext='sh')
+          variant=variant, version=self.build_number,ext='sh')
         runin_sh_dest_path = os.path.join(self._ota_archive_output_dir(),
                     'factory', '{}{}'.format(target_files_no_ext, '.sh'))
         returncode, _, _ = self.exec_subprocess(
@@ -79,7 +79,7 @@
           return False
         # Copy runin profiles and rename with self.BUILD_NUMBER
         runin_profile_path = self.factory_config['runin_profile_path'].format(
-          product=product)
+          product=product, variant=variant)
         returncode, _, _ = self.exec_subprocess(['cp', '-r', runin_profile_path,
                             os.path.join(self._ota_archive_output_dir(),
                                       'factory')])
diff --git a/cq/scripts/slave/step/ota_fct_step.py b/cq/scripts/slave/step/ota_fct_step.py
index 808d57a..ee8b33c 100644
--- a/cq/scripts/slave/step/ota_fct_step.py
+++ b/cq/scripts/slave/step/ota_fct_step.py
@@ -54,10 +54,10 @@
 
   def _copy_factory_target_files_to_out_artifacts(self, factory_image_types):
     """These are used for resigning factory images e.g. prod reflashimage."""
-    product = self._build_name.split('-')[0]
+    product, variant = self._build_name.split('-')
     for image_type in factory_image_types:
       target_files_zip = self.factory_config['source_binary_path'].format(
-          product=product, image_type=image_type)
+          product=product, variant=variant, image_type=image_type)
       target_files_no_ext, zip_ext = os.path.splitext(
         os.path.basename(target_files_zip))
       dest_file_path = os.path.join(self._ota_archive_output_dir(), 'factory',
diff --git a/cq/scripts/slave/step/ota_resign_step.py b/cq/scripts/slave/step/ota_resign_step.py
index 16e0983..216f8da 100644
--- a/cq/scripts/slave/step/ota_resign_step.py
+++ b/cq/scripts/slave/step/ota_resign_step.py
@@ -5,26 +5,26 @@
 from slave import base_step
 from slave.step import ota_step
 
-SOURCE_BINARY_PATH = ('out/target/product/{product}/obj/PACKAGING/'
+SOURCE_BINARY_PATH = ('out/target/product/{product}-{variant}/obj/PACKAGING/'
                       'target_files_intermediates/'
                       '{product}-target_files-{buildset}.zip')
 
-SOURCE_FACTORY_PATH = ('out/target/product/{product}/factory/'
+SOURCE_FACTORY_PATH = ('out/target/product/{product}-{variant}/factory/'
                        '{image_type}/hostboot-target-files.zip')
 
-SOURCE_USBSTICK_PATH = ('out/target/product/{product}/factory/'
+SOURCE_USBSTICK_PATH = ('out/target/product/{product}-{variant}/factory/'
                         '{image_type}/usbstick-target-files.zip')
 
 DESTINATION_USBSTICK_IMAGE_PATH = ('{output_dir}/factory/{product}-'
                                    '{image_type}-{variant}-{buildset}.img')
 
-SOURCE_FACTORY_TOOL_PATH = ('out/target/product/{product}/'
+SOURCE_FACTORY_TOOL_PATH = ('out/target/product/{product}-{variant}/'
                             'factory-{tool_type}-{product}-{version}.{ext}')
 
-RUNIN2_PROFILE_PATH = ('out/target/product/{product}/'
+RUNIN2_PROFILE_PATH = ('out/target/product/{product}-{variant}/'
                         'factory/profile/')
 
-FCT_ZIP_PATH = ('out/target/product/{product}/factory/'
+FCT_ZIP_PATH = ('out/target/product/{product}-{variant}/factory/'
                 '{product}-fct-{buildset}.zip')
 
 AMLOGIC_RESIGN_COMMAND = [
@@ -58,6 +58,11 @@
     '-v',
 ]
 
+SWIFT_RESIGN_COMMAND = [
+    './vendor/amlogic/swift/build/tools/releasetools/ota_from_target_files',
+    '-v',
+]
+
 GQ_RESIGN_COMMAND = [
     './vendor/amlogic/gq/build/tools/releasetools/ota_from_target_files',
     '-v',
@@ -116,6 +121,16 @@
     '-v',
 ]
 
+BSV3_RESIGN_COMMAND = [
+    './vendor/amlogic/bsv3/build/tools/releasetools/ota_from_target_files',
+    '-v',
+]
+
+BLA4_RESIGN_COMMAND = [
+    './vendor/amlogic/bla4/build/tools/releasetools/ota_from_target_files',
+    '-v',
+]
+
 ASSISTANTDEFAULT_RESIGN = {
     'command': ['cp'],
     'source_binary_path': '{dist_dir}/{product}-ota-{buildset}.zip',
@@ -414,6 +429,25 @@
     ],
 }
 
+LUMIA_FACTORY = {
+    'command': LUMIA_RESIGN_COMMAND,
+    'factory_image_types': ['fct'],
+    'source_binary_path': SOURCE_FACTORY_PATH,
+    'variants': [
+        {'board': 'lumia-p0', 'usb_host_package': None},
+    ],
+}
+
+SWIFT_RESIGN = {
+    'command': SWIFT_RESIGN_COMMAND,
+    'variants': [
+        {'board': 'swift-p0'},
+        {'board': 'swift-p0', 'omaha_channel': 'beta-channel'},
+        {'board': 'swift-p1'},
+        {'board': 'swift-p1', 'omaha_channel': 'beta-channel'},
+    ],
+}
+
 GQ_RESIGN = {
     'command': GQ_RESIGN_COMMAND,
     'variants': [
@@ -690,6 +724,13 @@
     'runin_profile_path': RUNIN2_PROFILE_PATH
 }
 
+BSV3_FACTORY_TOOL = {
+    'command':['make'],
+    'factory_tool_types': ['provision_package'],
+    'source_tool_path': SOURCE_FACTORY_TOOL_PATH,
+    'runin_profile_path': RUNIN2_PROFILE_PATH
+}
+
 A049_FACTORY_TOOL = {
     'command':['make'],
     'factory_tool_types': ['provision_package', 'runin2_package'],
@@ -1028,6 +1069,39 @@
     ],
 }
 
+BSV3_RESIGN = {
+    'command': BSV3_RESIGN_COMMAND,
+    'variants': [
+        {'board': 'bsv3-p1'},
+    ],
+}
+
+BSV3_FACTORY = {
+    'command': BSV3_RESIGN_COMMAND,
+    'factory_image_types': ['fct'],
+    'source_binary_path': SOURCE_FACTORY_PATH,
+    'variants': [
+        {'board': 'bsv3-p1', 'usb_host_package': None},
+    ],
+}
+
+BSV3_USBSTICK = {
+    'command': BSV3_RESIGN_COMMAND,
+    'factory_image_types': ['reflash', 'partdump', 'fctsecure'],
+    'source_binary_path': SOURCE_USBSTICK_PATH,
+    'destination_path_template': DESTINATION_USBSTICK_IMAGE_PATH,
+    'variants': [
+        {'board': 'bsv3-p1', 'usb_stick_image': None},
+    ],
+}
+
+BLA4_RESIGN = {
+    'command': BLA4_RESIGN_COMMAND,
+    'variants': [
+        {'board': 'bla4-p0'},
+    ],
+}
+
 def get_resign_steps(build_name, resign_config, build_branch,
                      apply_dev_signing, **step_kwargs):
   """Returns list of resign steps if any.
@@ -1126,7 +1200,7 @@
       channel = ''
 
     ota_step.OtaStep.__init__(self, build_name=build_name, name=name, **kwargs)
-    product = self._build_name.split('-')[0]
+    product, variant = self._build_name.split('-')
 
     if destination_path_template is None:
       if factory_image_type:
@@ -1147,6 +1221,7 @@
     self._resign_command.append(source_binary_path.format(
         dist_dir=self._dist_dir(),
         product=product,
+        variant=variant,
         image_type=factory_image_type,
         buildset=self.build_number))
 
@@ -1188,12 +1263,13 @@
     # pylint: disable=non-parent-init-called
     ota_step.OtaStep.__init__(self, build_name=build_name, name=name, **kwargs)
 
-    product = self._build_name.split('-')[0]
+    product, variant = self._build_name.split('-')
     self._resign_command = command[:]
     self._resign_command.append(params['board'])
     self._resign_command.append(source_binary_path.format(
         dist_dir=self._dist_dir(),
         product=product,
+        variant=variant,
         buildset=self.build_number))
     self._resign_command.append('{output_dir}/factory'.format(
         output_dir=self._ota_archive_output_dir()))
diff --git a/cq/scripts/slave/step/ota_step.py b/cq/scripts/slave/step/ota_step.py
index d50b68d..1ce772c 100644
--- a/cq/scripts/slave/step/ota_step.py
+++ b/cq/scripts/slave/step/ota_step.py
@@ -407,6 +407,8 @@
     ota_files = [f for f in dist_files if archive_pattern.match(f)]
     self._log_ota_size(ota_files)
     if not self._max_ota_size:
+      sys.stdout.write("No max_ota_size defined for this build")
+      sys.stdout.flush()
       return True
 
     for ota_file in ota_files:
@@ -418,6 +420,15 @@
         sys.stdout.flush()
         self.add_review({'message': message})
         return False
+      else:
+        sys.stdout.write(
+          "OTA file {} size: {} bytes out of {} maximum ({}%)".format(
+            ota_file,
+            ota_size,
+            self._max_ota_size,
+            round((ota_size / self._max_ota_size) * 100, 2),
+        ))
+        sys.stdout.flush()
     return True
 
   def _log_ota_size(self, ota_files):
@@ -490,12 +501,13 @@
 class OtaCameraTargetsStep(base_step.BaseStep):
   """Ota Property file step class for generating repo.prop."""
 
-  def __init__(self, product_name, is_eng_build, name='camera targets check',
+  def __init__(self, product_name, variant, is_eng_build, name='camera targets check',
                **kwargs):
     """Creates a OtaCameraTargets instance.
 
     Args:
       product_name: product name without variant, e.g. spencer, venus
+      variant: either 'eng' or 'user'
       is_eng_build: if this build is eng build
       name: user-visible name of this step.
       **kwargs: Any additional args to pass to BaseStep.
@@ -503,6 +515,7 @@
     base_step.BaseStep.__init__(self, name='camera targets check', **kwargs)
     self._is_eng_build = is_eng_build
     self._product_name = product_name
+    self._variant = variant
 
   def run(self):
     eng_targets = [
@@ -514,12 +527,12 @@
     general_targets = [ '/obj/lib/libcast_camera_hal.so' ]
     if self._is_eng_build:
       for t in eng_targets:
-        abs_path = 'out/target/product/' + self._product_name + t
+        abs_path = f'out/target/product/{self._product_name}-{self._variant}{t}'
         if not os.path.exists(abs_path):
           logging.error('Missing binary %s' % abs_path)
           return False
     for b in general_targets:
-      abs_path = 'out/target/product/' + self._product_name + b
+      abs_path = f'out/target/product/{self._product_name}-{self._variant}{b}'
       if not os.path.exists(abs_path):
         logging.error('Missing binary %s' % abs_path)
         return False
@@ -547,8 +560,9 @@
     chromium_src = 'chromium/src'
     usonia_tarball = os.path.join(chromium_src,
                                   'usonia-{}.tar.gz'.format(self.build_number))
+    variant = self._build_name.split('-')[-1]
     command = ['chromecast/internal/usonia/package_wifi.py', '-o',
-               '-f', '.', self.build_number]
+               '-f', '.', self.build_number, variant]
     returncode, stdout, stderr = self.exec_subprocess(
       command, env=self.make_command_env(), cwd=chromium_src)
     if returncode != 0:
@@ -580,11 +594,13 @@
     tarball = os.path.join(chromium_src,
                            'thread_telemetry_service-{}.tar.gz'.format(
                              self.build_number))
+    variant = self._build_name.split('-')[-1]
     command = [
       'chromecast/internal/device/thread/'
       'build_thread_telemetry_service_cros.py',
       '-o',
       '-f',
+      variant,
       '.',
       self.build_number,
     ]
diff --git a/cq/scripts/slave/step/unittest_step.py b/cq/scripts/slave/step/unittest_step.py
index d7bc89c..6e13dfa 100644
--- a/cq/scripts/slave/step/unittest_step.py
+++ b/cq/scripts/slave/step/unittest_step.py
@@ -54,11 +54,6 @@
   """Build step class for building unit tests."""
 
   def __init__(self,
-               branding,
-               build_type,
-               product,
-               build_flavor,
-               enable_assistant,
                sanitizer=None,
                code_coverage=False,
                absolute_coverage=False,
@@ -69,11 +64,6 @@
     """Instantiate the class.
 
     Args:
-      branding: Build branding (chromium or chrome).
-      build_type: Type of system to build for ('x86', 'clang', or 'arm').
-      product: product to build for (ie. 'chromecast', 'audio').
-      build_flavor: Flavor of build ('Debug', 'Eng', 'Release').
-      enable_assistant: enable Assistant functionality. Audio products only.
       sanitizer: Clang saniziter to run with ('asan', 'msan', 'tsan', 'ubsan').
       code_coverage: True if code coverage is enabled for this build.
       absolute_coverage: True if you want to run coverage for all unit tests.
@@ -92,15 +82,9 @@
     cast_shell_step.NonOtaBuildBaseStep.__init__(
         self,
         step_name,
-        branding,
-        build_type,
-        product,
-        build_flavor,
-        sanitizer=sanitizer,
         build_args_product=build_args_product,
         build_args_official=build_args_official,
         **kwargs)
-    self._enable_assistant = enable_assistant
     self._code_coverage = code_coverage
     self._absolute_coverage = absolute_coverage
     self._junit = junit
@@ -124,14 +108,6 @@
     command += self.build_accelerator.build_chromecast_flags
 
     # TODO(b/73231972) remove unused flags once migrated to new builds
-    if self._build_flavor:
-      command += ['--build_flavor', self._build_flavor]
-    if self._build_type:
-      command += ['--build_type', self._build_type]
-    if self._branding:
-      command += ['--chromecast_branding', self._branding]
-    if self._product:
-      command += ['--product_name', self._product]
     if self._build_args_official:
       command += ['--official']
 
@@ -140,12 +116,6 @@
     if self.get_property('build_system') == 'catabuilder':
       command += ['--enable_gn_check']
 
-    if self._enable_assistant:
-      command += ['--enable_assistant']
-
-    if self._sanitizer:
-      command += ['--sanitizer', self._sanitizer]
-
     if self._junit:
       command += ['--use_junit']
 
@@ -184,17 +154,14 @@
   def _get_unit_test_out_dir(self):
     """Generate build-specific out dir name.
 
-      Out dir created by _BUILD_CHROMECAST_SCRIPT in format below:
-      out_<build_type>_<product>_<gn>[_<sanitizer>]
-      e.g. out_arm_android_gn for content_shell_udon_arm_debug_gn build.
+      The out_dir needs to match the name of the build_args_product.
+    
+      E.g. out/atv_arm_eng for Android eng builds.
 
     Returns:
       Path to UnittestStep out dir
     """
-    out_dir = ['out', self.build_type_dir, self.build_product_dir, 'gn']
-    if self._sanitizer:
-      out_dir.append(self._sanitizer)
-    return '_'.join(out_dir)
+    return os.path.join(['out', self._build_args_product])
 
   def ArchiveUnitTests(self, dest_name='test_deps.zip'):  # pylint: disable=method-hidden
     """Saving build_tests_android.zip to gcs_dir.
@@ -215,7 +182,7 @@
     out_dir = self._get_unit_test_out_dir()
 
     archive_path = 'chromium/src/{}/{}/tests/build_tests_android.zip'.format(
-        out_dir, self.build_flavor_dir)
+        out_dir)
 
     # Archive only if build_tests_android.zip was generated
     if not os.path.isfile(archive_path):
@@ -406,10 +373,6 @@
   """Build step class for running x86 unit tests, if any."""
 
   def __init__(self,
-               branding,
-               build_type,
-               product,
-               build_flavor,
                report_url,
                recipe_steps,
                sanitizer=None,
@@ -421,10 +384,6 @@
     """Instantiate the class.
 
     Args:
-      branding: Build branding (chromium or chrome).
-      build_type: Type of system to build for ('x86', 'clang', or 'arm').
-      product: product to build for (ie. 'chromecast', 'audio').
-      build_flavor: Flavor of build ('Debug', 'Eng', 'Release').
       report_url: The URL the code coverage report can be accessed at.
       recipe_steps: Reference to the list of steps for this recipe.
       sanitizer: Clang saniziter to run with ('asan', 'msan', 'tsan', 'ubsan').
@@ -441,11 +400,6 @@
     cast_shell_step.NonOtaBuildBaseStep.__init__(
         self,
         step_name,
-        branding,
-        build_type,
-        product,
-        build_flavor,
-        sanitizer=sanitizer,
         build_args_product=build_args_product,
         build_args_official=build_args_official,
         **kwargs)
@@ -456,6 +410,7 @@
 
     self._report_url = report_url
     self._recipe_steps = recipe_steps
+    self._sanitizer = sanitizer
     self._junit = junit
     self._enable_network_service = enable_network_service
     self._step_kwargs = kwargs
@@ -531,19 +486,10 @@
         self.manifest_branch, '--build_number', self.build_number,
         '--test_name', test_name
     ]
-    # TODO(b/73231972) remove unused flags once migrated to new builds
-    if self._build_flavor and self._product:
-      wrapper_command += [
-          '--build_flavor',
-          self._build_flavor,
-          '--product_name',
-          self._product,
-      ]
-    else:
-      wrapper_command += [
-          '--build_args_product',
-          self._build_args_product,
-      ]
+    wrapper_command += [
+        '--build_args_product',
+        self._build_args_product,
+    ]
     return shell_step.ShellStep(
         name='summary json for {}'.format(test_name),
         command=wrapper_command,
diff --git a/cq/scripts/slave/step/x86_camera_step.py b/cq/scripts/slave/step/x86_camera_step.py
index c065d1b..f1ab6a0 100644
--- a/cq/scripts/slave/step/x86_camera_step.py
+++ b/cq/scripts/slave/step/x86_camera_step.py
@@ -259,11 +259,12 @@
 
   def run(self):
     commands = self.get_commands()
+    target_product = TARGET_PRODUCT[self.product]
     env = {
         'LD_LIBRARY_PATH': ":".join(
             ['../../../../prebuilt/toolchain/x86_64/usr/lib64',
              os.path.join('../../../../out/target/product',
-                          '{}/system/lib'.format(TARGET_PRODUCT[self.product]))
+                          f'{target_product}-{BUILD_VARIANT}/system/lib')
             ])
     }
     for command in commands:
diff --git a/cq/scripts/tools/run_recipe.py b/cq/scripts/tools/run_recipe.py
index 7f2cbe3..8cd403c 100755
--- a/cq/scripts/tools/run_recipe.py
+++ b/cq/scripts/tools/run_recipe.py
@@ -152,10 +152,9 @@
   build_name = properties['buildername']
   eureka_root_abs = os.path.abspath(eureka_root)
 
+  # manifest file name refer to http://google3/nest/engprod/devinfra/cast/austin/agent/source.py;l=190-191;rcl=628961120
   manifest_output_path = (
       pathlib.Path(executor.get_gcs_dir()) / repo_utils.MANIFEST_OVERRIDE_XML)
-  manifest_output_path.write_text(
-      repo_utils.get_manifest(executor, cwd=eureka_root_abs, quiet=True))
   properties['manifest_override_path'] = str(manifest_output_path)
   annotator.set_build_property(
       'manifest_override_path', str(manifest_output_path))
diff --git a/ruff.toml b/ruff.toml
new file mode 100644
index 0000000..b420ede
--- /dev/null
+++ b/ruff.toml
@@ -0,0 +1,3 @@
+# While this is in contradiction to PEP-8 it is
+# in line with go/pystyle#indentation
+indent-width = 2