#!/usr/bin/python

# Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
"""
Pub buildbot steps.

Runs tests for pub and the pub packages that are hosted in the main Dart repo.
"""

import os
import re

import bot

PUB_BUILDER = r'pub-(linux|mac|win)'


def PubConfig(name, is_buildbot):
    """Returns info for the current buildbot based on the name of the builder.

  Currently, this is just:
  - mode: always release, we don't run pub in debug mode
  - system: "linux", "mac", or "win"
  - checked: always true
  """
    pub_pattern = re.match(PUB_BUILDER, name)
    if not pub_pattern:
        return None

    system = pub_pattern.group(1)
    mode = 'release'
    if system == 'win': system = 'windows'

    return bot.BuildInfo('none', 'vm', mode, system, checked=True, arch='x64')


def PubSteps(build_info):
    pub_location = os.path.join('third_party', 'pkg', 'pub')
    with bot.BuildStep('Running pub tests'):
        bot.RunTestRunner(build_info, pub_location)

    dartdoc_location = os.path.join('third_party', 'pkg', 'dartdoc')
    with bot.BuildStep('Running dartdoc tests'):
        bot.RunTestRunner(build_info, dartdoc_location)


if __name__ == '__main__':
    bot.RunBot(PubConfig, PubSteps)
