blob: 3e7f305ad544d62063eadeb99b07665cc89f13d2 [file] [log] [blame]
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):
# The code for the change will be checked out into a special folder that is
# cached between builds.
checkout_root = api.path['cache'].join('builder')
# This is the name of the subfolder under checkout_root where the change will
# be checked out at.
checkout_dir = 'src'
_downloadGerritChange(api, checkout_root, checkout_dir)
env = _downloadChromeAndAddToPath(api)
# Now run our verification in the checked out code directory.
with api.context(env=env, cwd=checkout_root.join(checkout_dir)):
# Current LTS for Node.js. Version must be in CIPD packages:
# https://chrome-infra-packages.appspot.com/p/infra/3pp/tools/nodejs/linux-amd64/+/bfm5RWHxZDS1NBdMuNLvXZUq4ULnf_Ho5OzhI3jL_14C
with api.nodejs(version='18.11.0'):
# Named steps to test the change.
api.step('install yarn', ['npm', 'install', '-g', 'yarn'])
api.step('install deps', ['yarn', 'setup'])
api.step('run tests', ['yarn', 'test'])
# Create `checkout_dir` inside the existing `checkout_root` and checks out the
# change there.
def _downloadGerritChange(api, checkout_root, checkout_dir):
# https://chromium.googlesource.com/chromium/tools/depot_tools/+/refs/heads/main/README.gclient.md
gclient_config = api.gclient.make_config()
gclient_config.got_revision_mapping[checkout_dir] = 'got_revision'
solution = gclient_config.solutions.add()
solution.url = 'https://gerrit.googlesource.com/gerrit'
solution.name = checkout_dir
with api.context(cwd=checkout_root):
# https://chromium.googlesource.com/chromium/tools/depot_tools/+/refs/heads/main/recipes/recipe_modules/bot_update/api.py#81
api.bot_update.ensure_checkout(gclient_config=gclient_config)
# Download and unzip Chrome from a cloud storage bucket, then add it to the PATH
# and rename it for compatibility with our test runner:
# https://github.com/GoogleChrome/chrome-launcher#launch-options
# Adapted from:
# https://chromium.googlesource.com/infra/infra/+/refs/heads/main/recipes/recipes/gerrit_plugins.py
def _downloadChromeAndAddToPath(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'))
chrome_path = chrome.join('zip', 'chrome-linux')
# 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])
env = {
'PATH': api.path.pathsep.join([str(chrome_path), '%(PATH)s']),
}
return env
# 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/gerrit",
),
)