# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Recipe for triggering buildbucket builds."""

from recipe_engine.config import List
from recipe_engine.recipe_api import Property

DEPS = [
    'recipe_engine/buildbucket',
    'recipe_engine/properties',
    'recipe_engine/raw_io',
    'recipe_engine/step',
    'recipe_engine/swarming',
]

PROPERTIES = {
    'builders':
        Property(
            kind=List(basestring),
            help='List of builders to trigger',
            default=[]),
    'interval':
        Property(
            kind=int, help='Delay between requests when waiting', default=None),
    'timeout':
        Property(
            kind=int, help='Time to wait for the builds to end', default=None),
}


def RunSteps(api, builders, interval, timeout):
  api.buildbucket.run(
      [
          api.buildbucket.schedule_request(
              builder, swarming_parent_run_id=api.swarming.task_id)
          for builder in builders
      ],
      collect_interval=interval,
      timeout=timeout,
  )


def GenTests(api):
  yield (api.test('default') + api.buildbucket.ci_build(
      bucket='ci',
      git_repo='https://fuchsia.googlesource.com/example',
      revision='a' * 40,
  ) + api.properties(builders=['builder']))
