cbuildbot.py: refactor SimpleBuilder.RunStages for readability
This CL pulls the various builder-type runs in RunStages into their
own private functions.
BUG=None
TEST=None
Change-Id: I4bde16f25dfd48db59b43c225e93fe0faf3caeb0
Reviewed-on: https://chromium-review.googlesource.com/172840
Tested-by: Aviv Keshet <akeshet@chromium.org>
Reviewed-by: David James <davidjames@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Aviv Keshet <akeshet@chromium.org>
Reviewed-by: Matt Tennant <mtennant@chromium.org>
diff --git a/scripts/cbuildbot.py b/scripts/cbuildbot.py
index 6a98812..e8ecae9 100644
--- a/scripts/cbuildbot.py
+++ b/scripts/cbuildbot.py
@@ -445,6 +445,76 @@
stage_objs = [self._GetStageInstance(*x, config=config) for x in stage_list]
self._RunParallelStages(stage_objs + [archive_stage])
+ def _RunChrootBuilderTypeBuild(self):
+ """Runs through stages of a CHROOT_BUILDER_TYPE build."""
+ self._RunStage(stages.UprevStage, boards=[], enter_chroot=False)
+ self._RunStage(stages.InitSDKStage)
+ self._RunStage(stages.SetupBoardStage, [constants.CHROOT_BUILDER_BOARD])
+ self._RunStage(stages.SyncChromeStage)
+ self._RunStage(stages.PatchChromeStage)
+ self._RunStage(stages.SDKPackageStage)
+ self._RunStage(stages.SDKTestStage)
+ self._RunStage(stages.UploadPrebuiltsStage,
+ constants.CHROOT_BUILDER_BOARD, None)
+
+ def _RunRefreshPackagesTypeBuild(self):
+ """Runs through the stages of a REFRESH_PACKAGES_TYPE build."""
+ self._RunStage(stages.InitSDKStage)
+ self._RunStage(stages.SetupBoardStage)
+ self._RunStage(stages.RefreshPackageStatusStage)
+
+ def _RunDefaultTypeBuild(self):
+ """Runs through the stages of a non-special-type build."""
+ self._RunStage(stages.InitSDKStage)
+ self._RunStage(stages.UprevStage)
+ self._RunStage(stages.SetupBoardStage)
+
+ # We need a handle to this stage to extract info from it.
+ # TODO(mtennant): Just have _RunStage return the stage object, since
+ # nothing uses the return value of _RunStage now, and the Run method
+ # of stage objects does not appear to return anything, either.
+ sync_chrome_stage = self._GetStageInstance(stages.SyncChromeStage)
+ sync_chrome_stage.Run()
+ self._RunStage(stages.PatchChromeStage)
+
+ # Prepare stages to run in background.
+ configs = self.build_config['child_configs'] or [self.build_config]
+ tasks = []
+ for config in configs:
+ for board in config['boards']:
+ archive_stage = self._GetStageInstance(
+ stages.ArchiveStage, board, self.release_tag, config=config,
+ chrome_version=sync_chrome_stage.chrome_version)
+ board_config = BoardConfig(board, config['name'])
+ self.archive_stages[board_config] = archive_stage
+ tasks.append((config, board, archive_stage))
+
+ # Set up a process pool to run test/archive stages in the background.
+ # This process runs task(board) for each board added to the queue.
+ task_runner = self._RunBackgroundStagesForBoard
+ with parallel.BackgroundTaskRunner(task_runner) as queue:
+ for config, board, archive_stage in tasks:
+ compilecheck = config['compilecheck'] or self.options.compilecheck
+ if not compilecheck:
+ # Run BuildPackages and BuildImage in the foreground, generating
+ # or using PGO data if requested.
+ kwargs = {'archive_stage': archive_stage, 'config': config}
+ if config['pgo_generate']:
+ kwargs['pgo_generate'] = True
+ elif config['pgo_use']:
+ kwargs['pgo_use'] = True
+
+ self._RunStage(stages.BuildPackagesStage, board, **kwargs)
+ self._RunStage(stages.BuildImageStage, board, **kwargs)
+
+ if config['pgo_generate']:
+ suite = cbuildbot_config.PGORecordTest()
+ self._RunStage(stages.HWTestStage, board, archive_stage, suite,
+ config=config)
+
+ # Kick off our background stages.
+ queue.put([config, board, compilecheck])
+
def RunStages(self):
"""Runs through build process."""
# TODO(sosa): Split these out into classes.
@@ -453,69 +523,11 @@
elif self.build_config['build_type'] == constants.CREATE_BRANCH_TYPE:
self._RunStage(stages.BranchUtilStage)
elif self.build_config['build_type'] == constants.CHROOT_BUILDER_TYPE:
- self._RunStage(stages.UprevStage, boards=[], enter_chroot=False)
- self._RunStage(stages.InitSDKStage)
- self._RunStage(stages.SetupBoardStage, [constants.CHROOT_BUILDER_BOARD])
- self._RunStage(stages.SyncChromeStage)
- self._RunStage(stages.PatchChromeStage)
- self._RunStage(stages.SDKPackageStage)
- self._RunStage(stages.SDKTestStage)
- self._RunStage(stages.UploadPrebuiltsStage,
- constants.CHROOT_BUILDER_BOARD, None)
+ self._RunChrootBuilderTypeBuild()
elif self.build_config['build_type'] == constants.REFRESH_PACKAGES_TYPE:
- self._RunStage(stages.InitSDKStage)
- self._RunStage(stages.SetupBoardStage)
- self._RunStage(stages.RefreshPackageStatusStage)
+ self._RunRefreshPackagesTypeBuild()
else:
- self._RunStage(stages.InitSDKStage)
- self._RunStage(stages.UprevStage)
- self._RunStage(stages.SetupBoardStage)
-
- # We need a handle to this stage to extract info from it.
- # TODO(mtennant): Just have _RunStage return the stage object, since
- # nothing uses the return value of _RunStage now, and the Run method
- # of stage objects does not appear to return anything, either.
- sync_chrome_stage = self._GetStageInstance(stages.SyncChromeStage)
- sync_chrome_stage.Run()
- self._RunStage(stages.PatchChromeStage)
-
- # Prepare stages to run in background.
- configs = self.build_config['child_configs'] or [self.build_config]
- tasks = []
- for config in configs:
- for board in config['boards']:
- archive_stage = self._GetStageInstance(
- stages.ArchiveStage, board, self.release_tag, config=config,
- chrome_version=sync_chrome_stage.chrome_version)
- board_config = BoardConfig(board, config['name'])
- self.archive_stages[board_config] = archive_stage
- tasks.append((config, board, archive_stage))
-
- # Set up a process pool to run test/archive stages in the background.
- # This process runs task(board) for each board added to the queue.
- task_runner = self._RunBackgroundStagesForBoard
- with parallel.BackgroundTaskRunner(task_runner) as queue:
- for config, board, archive_stage in tasks:
- compilecheck = config['compilecheck'] or self.options.compilecheck
- if not compilecheck:
- # Run BuildPackages and BuildImage in the foreground, generating
- # or using PGO data if requested.
- kwargs = {'archive_stage': archive_stage, 'config': config}
- if config['pgo_generate']:
- kwargs['pgo_generate'] = True
- elif config['pgo_use']:
- kwargs['pgo_use'] = True
-
- self._RunStage(stages.BuildPackagesStage, board, **kwargs)
- self._RunStage(stages.BuildImageStage, board, **kwargs)
-
- if config['pgo_generate']:
- suite = cbuildbot_config.PGORecordTest()
- self._RunStage(stages.HWTestStage, board, archive_stage, suite,
- config=config)
-
- # Kick off our background stages.
- queue.put([config, board, compilecheck])
+ self._RunDefaultTypeBuild()
class DistributedBuilder(SimpleBuilder):