# 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):
        """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):
        """Run through the stages of a luci-scheduler-updater build."""
        self._RunStage(build_stages.InitSDKStage)
        self._RunStage(config_stages.DeployLuciSchedulerStage)
