# Copyright 2016 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Module containing config related builders."""

from chromite.cbuildbot.builders import simple_builders
from chromite.cbuildbot.stages import build_stages
from chromite.cbuildbot.stages import config_stages


class UpdateConfigBuilder(simple_builders.SimpleBuilder):
    """Create config updater builders."""

    def RunStages(self) -> None:
        """Run through the stages of a config-updater build."""
        self._RunStage(build_stages.InitSDKStage)
        self._RunStage(config_stages.CheckTemplateStage)


class LuciSchedulerBuilder(simple_builders.SimpleBuilder):
    """Create config updater builders."""

    def RunStages(self) -> None:
        """Run through the stages of a luci-scheduler-updater build."""
        self._RunStage(build_stages.InitSDKStage)
        self._RunStage(config_stages.DeployLuciSchedulerStage)
