# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

PYTHON_VERSION_COMPATIBILITY = "PY3"

DEPS = [
  'build',
  'recipe_engine/path',
  'recipe_engine/platform',
  'recipe_engine/properties',
  'recipe_engine/raw_io',
  'run',
  'vars',
]


def RunSteps(api):
  api.vars.setup()
  checkout_root = api.vars.cache_dir.join('work')
  out_dir = checkout_root.join(
      'skia', 'out', api.vars.builder_name, api.vars.configuration)
  api.build(checkout_root=checkout_root, out_dir=out_dir)
  dst = api.vars.swarming_out_dir.join('out', api.vars.configuration)
  api.build.copy_build_products(out_dir=out_dir, dst=dst)
  api.run.check_failure()


TEST_BUILDERS = [
  'Build-Debian10-GCC-x86-Debug-Docker',
  'Build-Debian10-GCC-x86_64-Debug-Docker',
  'Build-Debian10-GCC-x86_64-Release-NoGPU_Docker',
  'Build-Debian10-GCC-x86_64-Release-Shared_Docker',
  'Build-Debian10-Clang-arm-Release-Android_API26',
  'Build-Debian10-Clang-arm-Release-Android_ASAN',
  'Build-Debian10-Clang-arm-OptimizeForSize-Android_NoPatch',
  'Build-Debian10-Clang-arm-Release-Chromebook_GLES',
  'Build-Debian10-Clang-arm64-Debug-Android_FrameworkWorkarounds',
  'Build-Debian10-Clang-arm64-Debug-Android_Graphite_Vulkan',
  'Build-Debian10-Clang-arm64-Debug-Android_HWASAN',
  'Build-Debian10-Clang-arm64-Release-Android_Graphite_Dawn',
  'Build-Debian10-Clang-arm64-Release-Android_Wuffs',
  'Build-Debian10-Clang-x86_64-Debug-ASAN_Graphite_Vulkan',
  'Build-Debian10-Clang-x86_64-Debug-AVIF',
  'Build-Debian10-Clang-x86_64-Debug-Chromebook_GLES',
  'Build-Debian10-Clang-x86_64-Debug-Coverage',
  'Build-Debian10-Clang-x86_64-Debug-MSAN',
  'Build-Debian10-Clang-x86_64-Debug-SK_CPU_LIMIT_SSE41',
  'Build-Debian10-Clang-x86_64-Debug-SafeStack',
  'Build-Debian10-Clang-x86_64-Debug-SwiftShader_Graphite',
  'Build-Debian10-Clang-x86_64-Debug-SwiftShader_MSAN',
  'Build-Debian10-Clang-x86_64-Debug-TSAN',
  'Build-Debian10-Clang-x86_64-Debug-Tidy',
  'Build-Debian10-Clang-x86_64-Debug-Vulkan_TSAN',
  'Build-Debian10-Clang-x86_64-Debug-Wuffs',
  'Build-Debian10-Clang-x86_64-OptimizeForSize',
  'Build-Debian10-Clang-x86_64-Release-ANGLE',
  'Build-Debian10-Clang-x86_64-Release-ASAN',
  'Build-Debian10-Clang-x86_64-Release-AVIF',
  'Build-Debian10-Clang-x86_64-Release-CMake',
  'Build-Debian10-Clang-x86_64-Release-Fast',
  'Build-Debian10-Clang-x86_64-Release-NoDEPS',
  'Build-Debian10-Clang-x86_64-Release-Static',
  'Build-Debian10-Clang-x86_64-Release-SwiftShader',
  'Build-Debian10-Clang-x86_64-Release-Vulkan',
  'Build-Debian10-EMCC-asmjs-Debug-PathKit',
  'Build-Debian10-EMCC-asmjs-Release-PathKit',
  'Build-Debian10-EMCC-wasm-Debug-CanvasKit',
  'Build-Debian10-EMCC-wasm-Debug-PathKit',
  'Build-Debian10-EMCC-wasm-Release-CanvasKit_CPU',
  'Build-Debian10-EMCC-wasm-Release-PathKit',
  'Build-Mac-Clang-arm64-Debug-Android_Vulkan',
  'Build-Mac-Clang-arm64-Debug-iOS',
  "Build-Mac-Clang-arm64-Debug-Graphite_Dawn",
  "Build-Mac-Clang-arm64-Debug-Graphite_Dawn_NoGpu",
  "Build-Mac-Clang-arm64-Debug-Graphite_Dawn_NoPrecompile",
  "Build-Mac-Clang-arm64-Debug-Graphite_Metal",
  "Build-Mac-Clang-arm64-Debug-Graphite_Metal_NoGpu",
  "Build-Mac-Clang-arm64-Debug-Graphite_Metal_NoPrecompile",
  "Build-Mac-Clang-arm64-Release-Graphite_Metal",
  "Build-Mac-Clang-arm64-Release-Graphite_Dawn",
  'Build-Mac-Xcode11.4.1-arm64-Debug-iOS',
  'Build-Mac-Clang-x86_64-Debug-ASAN',
  'Build-Mac-Clang-x86_64-Debug-Metal',
  'Build-Win-Clang-arm64-Release-Android',
  'Build-Win-Clang-x86-Debug-Exceptions',
  'Build-Win-Clang-x86_64-Debug-ANGLE',
  'Build-Win-Clang-x86_64-Release-Graphite_Vulkan',
  'Build-Win-Clang-x86_64-Release-Direct3D',
  'Build-Win-Clang-x86_64-Release-Shared',
  "Build-Win-Clang-x86_64-Release-Dawn",
  'Build-Win-Clang-x86_64-Release-Vulkan',
]

# Default properties used for TEST_BUILDERS.
defaultProps = lambda buildername: dict(
  buildername=buildername,
  repository='https://skia.googlesource.com/skia.git',
  revision='abc123',
  path_config='kitchen',
  patch_set=2,
  swarm_out_dir='[SWARM_OUT_DIR]'
)

def GenTests(api):
  for buildername in TEST_BUILDERS:
    test = (
      api.test(buildername) +
      api.properties(**defaultProps(buildername))
    )
    if 'Win' in buildername:
      test += api.platform('win', 64)
    yield test

  yield (
      api.test('unknown-docker-image') +
      api.properties(**defaultProps('Build-Unix-GCC-x86_64-Release-Docker')) +
      api.expect_exception('Exception')
  )
