# -*- coding: utf-8 -*-
# Copyright 2015 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Module containing SDK builders."""

from __future__ import print_function

import datetime

from chromite.lib import constants
from chromite.lib import parallel
from chromite.cbuildbot.builders import simple_builders
from chromite.cbuildbot.stages import artifact_stages
from chromite.cbuildbot.stages import build_stages
from chromite.cbuildbot.stages import chrome_stages
from chromite.cbuildbot.stages import sdk_stages


class ChrootSdkBuilder(simple_builders.SimpleBuilder):
  """Build the SDK chroot."""

  def RunStages(self):
    """Runs through build process."""
    # Unlike normal CrOS builds, the SDK has no concept of pinned CrOS manifest
    # or specific Chrome version.  Use a datestamp instead.
    version = datetime.datetime.now().strftime('%Y.%m.%d.%H%M%S')
    self._RunStage(build_stages.UprevStage, boards=[])
    self._RunStage(build_stages.InitSDKStage)

    # We don't need the Chrome source until SDKTestStage.  Syncing it should
    # take less time than BuildSDKBoardStage, so lets run in parallel with it.
    parallel_stages = [
        lambda: self._RunStage(chrome_stages.SyncChromeStage),
        lambda: self._RunStage(build_stages.BuildSDKBoardStage,
                               constants.CHROOT_BUILDER_BOARD),
    ]
    parallel.RunParallelSteps(parallel_stages)

    self._RunStage(sdk_stages.SDKBuildToolchainsStage)

    self._RunStage(sdk_stages.SDKPackageStage, version=version)
    # Note: This produces badly named toolchain tarballs.  Before
    # we re-enable it, make sure we fix that first.  For example:
    # gs://chromiumos-sdk/2015/06/...
    #   .../cros-sdk-overlay-toolchains-aarch64-cros-linux-gnu-$VER.tar.xz
    #self._RunStage(sdk_stages.SDKPackageToolchainOverlaysStage,
    #               version=version)

    self._RunStage(sdk_stages.SDKTestStage)
    # manojgupta: The comment in para below is not valid right now. Need to
    # test SDK before making artifacts available to users because of
    # https://crbug.com/798617.
    # Move it after UploadPrebuilts again once the bug is fixed.
    #
    # Upload artifacts before tests. Testing takes several hours, so during
    # that, goma server will find the new archive and stage it. So that,
    # goma can be used on bots just after uprev.
    # TODO(hidehiko): We may want to run upload prebuilts and test in
    # parallel in future, if it becomes performance bottleneck.
    self._RunStage(artifact_stages.UploadPrebuiltsStage,
                   constants.CHROOT_BUILDER_BOARD, version=version)

    self._RunStage(sdk_stages.SDKUprevStage, version=version)
