PYTHON_VERSION_COMPATIBILITY = "PY3"

# Reference: https://chromium.googlesource.com/infra/luci/recipes-py/+/HEAD/doc/

# All the deps get combined into an `api` variable passed in to RunSteps and
# GenTests. Versions and urls are specified in `recipes.cfg`.
DEPS = [
  'depot_tools/bot_update',
  'depot_tools/gclient',
  'depot_tools/gsutil',
  'recipe_engine/buildbucket',
  'recipe_engine/context',
  'recipe_engine/file',
  'recipe_engine/nodejs',
  'recipe_engine/path',
  'recipe_engine/step',
  'recipe_engine/platform',
  'zip',
]

# Check out the change and run the tests to verify the change as part of Change
# Verification (ie. CQ label).
def RunSteps(api):
  cl = api.buildbucket.build.input.gerrit_changes[0]

  # Remove "-review" part of host URL
  host = cl.host
  gs_suffix = '-review.googlesource.com'
  if host.endswith(gs_suffix):
    host = '%s.googlesource.com' % host[:-len(gs_suffix)]

  gclient_config = api.gclient.make_config()
  s = gclient_config.solutions.add()
  s.url = 'https://%s/%s' % (host, cl.project)
  # This is the name of the subfolder under api.path['cache'].join('builder')
  # where the repo will be checked out at.
  s.name = 'src'
  gclient_config.got_revision_mapping[s.name] = 'got_revision'

  # Check out the code for the change, this is by default cached between builds
  # for the same builder.
  with api.context(cwd=api.path['cache'].join('builder')):
    update_result = api.bot_update.ensure_checkout(
        gclient_config=gclient_config)
    api.step.raise_on_failure(update_result)

  # Download Chrome and add to the PATH so that the test runner can launch it
  # See https://github.com/GoogleChrome/chrome-launcher#launch-options
  chrome_path = _getChrome(api)
  env = {
    'PATH': api.path.pathsep.join([str(chrome_path), '%(PATH)s']),
  }

  # The chrome-launcher package expects a binary named "google-chrome" rather
  # than "chrome".
  # https://github.com/GoogleChrome/chrome-launcher/blob/c753ba083c43a90d98b682bf9ffdfe21680e6208/src/chrome-finder.ts#L133
  chrome_bin = chrome_path.join('chrome')
  google_chrome_bin = chrome_path.join('google-chrome')
  api.step('rename to google-chrome', ['mv', chrome_bin, google_chrome_bin])

  # Now in the checked out code directory run our verification.
  with api.context(env=env, cwd=api.path['cache'].join('builder').join(s.name)):
    # Current LTS for Node.js
    with api.nodejs(version='18.11.0'):
      # Named steps to test the change
      api.step('install deps', ['npm', 'install'])
      api.step('run tests', ['npm', 'run', 'test'])


# Test the recipe and generate the expect json file.
def GenTests(api):
  yield api.test(
    'basic',
    # Execute RunSteps with test data
    api.buildbucket.try_build(
      project="gerrit",
      git_repo="https://gerrit.googlesource.com/luci-test",
    ),
  )

# Download and unzip Chrome from a cloud storage bucket.
# Copied from https://chromium.googlesource.com/infra/infra/+/refs/heads/main/recipes/recipes/gerrit_plugins.py
def _getChrome(api):
  with api.step.nest('get chrome'):
    chrome = api.path.mkdtemp(prefix='chrome')
    gs_bucket = 'chromium-browser-snapshots'
    gs_path = 'Linux_x64'
    version_file = 'LAST_CHANGE'
    chrome_zip = 'chrome-linux.zip'
    api.gsutil.download(gs_bucket, '%s/%s' % (gs_path, version_file), chrome)
    version = api.file.read_text('read latest chrome version',
                                 chrome.join(version_file))
    api.gsutil.download(gs_bucket, '%s/%s/%s' % (gs_path, version, chrome_zip),
                        chrome)
    api.zip.unzip('unzip chrome', chrome.join(chrome_zip), chrome.join('zip'))
    return chrome.join('zip', 'chrome-linux')
