blob: 486be5c677adf6e273e266a3942d12c4083f2fe0 [file] [log] [blame]
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Recipe for rolling chromium prebuilts into Fuchsia."""
import re
from recipe_engine.config import Enum, Single
from recipe_engine.recipe_api import Property
DEPS = [
'infra/auto_roller',
'infra/git',
'recipe_engine/cipd',
'recipe_engine/context',
'recipe_engine/file',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/properties',
'recipe_engine/raw_io',
'recipe_engine/step',
]
PROPERTIES = {
'dry_run':
Property(
kind=bool,
default=False,
help=
'Whether to dry-run the auto-roller (CQ+1 and abandon the change)'),
}
COMMIT_MESSAGE = """[roll] Roll chromium {version}
Test: CQ
"""
def GetVersionsFromCIPD(api, cipd_pkg):
return set([
getattr(tag, 'tag')
for tag in getattr(
api.cipd.describe(cipd_pkg, 'latest'), 'tags')
if getattr(tag, 'tag').startswith('version:')
])
def RunSteps(api, dry_run):
topaz_path = api.path['start_dir'].join('topaz')
with api.context(infra_steps=True):
api.git.checkout(
url='https://fuchsia.googlesource.com/topaz',
path=topaz_path,
ref='master',
)
chromium_cipd_pkgs = [
'chromium/fuchsia/webrunner-arm64',
'chromium/fuchsia/webrunner-amd64',
'chromium/fuchsia/fidl'
]
# Populate the set of versions
versions = GetVersionsFromCIPD(api, chromium_cipd_pkgs[0])
# Get the intersection of all 'version' tags
for cipd_pkg in chromium_cipd_pkgs[1:]:
versions = versions.intersection(GetVersionsFromCIPD(api, cipd_pkg))
# Check if the intersection of 'version' tags exists
if not versions:
return
# All the 'version' tags point to the same 'instance_id'
# Take the first 'version'
version = list(versions)[0]
pins = dict()
# Query CIPD for the Pin for each 'version' and extract the 'instance_id'
for cipd_pkg in chromium_cipd_pkgs:
pins[cipd_pkg] = getattr(
api.cipd.search(cipd_pkg, version)[0], 'instance_id')
ensure_file = topaz_path.join('tools', 'cipd.ensure')
ensure_contents = api.file.read_text(
name='read cipd.ensure', source=ensure_file)
cipd_api_ensure_file = api.cipd.EnsureFile()
for cipd_pkg in chromium_cipd_pkgs:
with api.step.nest('update %s' % cipd_pkg):
# Extract 'subdir' for each package
subdir_pattern = re.compile(
r'@Subdir (?P<subdir>[A-Za-z0-9\.\/\_]+)\n' + re.escape(cipd_pkg), re.MULTILINE)
subdir = re.search(subdir_pattern, ensure_contents).group('subdir')
# Replace the CIPD instance_id for each package
version_instance_id = pins[cipd_pkg]
version_pattern = re.compile(
re.escape(cipd_pkg) + r' [A-Za-z0-9_\-]+', re.MULTILINE)
repl = cipd_pkg + ' ' + version_instance_id
ensure_contents = re.sub(version_pattern, repl, ensure_contents)
# Add each package to CipdApi EnsureFile object
cipd_api_ensure_file.add_package(name=cipd_pkg, version=version_instance_id, subdir=subdir)
api.file.write_text(
name='write cipd.ensure',
dest=ensure_file,
text_data=ensure_contents)
# Ensure packages
api.cipd.ensure(topaz_path, cipd_api_ensure_file)
# Update //topaz/runtime/chromium/chromium_web_sources.gni
update_web_sources_path = topaz_path.join(
'runtime', 'chromium', 'update_chromium_web_sources.py')
api.step('update chromium_websources.gni', [update_web_sources_path])
message = COMMIT_MESSAGE.format(version=version)
# Land the changes.
api.auto_roller.attempt_roll(
gerrit_project='topaz',
repo_dir=topaz_path,
commit_message=message,
dry_run=dry_run,
)
ENSURE_FILE_TEST = """
# Chromium fidl
@Subdir third_party/chromium/fidl/chromium.web
chromium/fuchsia/fidl EOsmhnsgGIcps05Hs4hEf9-BHp4z8pATEdrheLPYUKsC
# Chromium amd64 / x64 implementation
@Subdir third_party/chromium/arch/x64
chromium/fuchsia/webrunner-amd64 3vLSLn5TGO2xs9yJsrFKu_zV6ymZUsSf9vsoKia8hLYC
# Chromium arm64 / aarch64 implementation
@Subdir third_party/chromium/arch/arm64
chromium/fuchsia/webrunner-arm64 MJ7UtEYtf-TrPBUAQ_xM0MKgzxM4ZAwYas-Uw-AfGW4C
"""
def GenTests(api):
yield api.test('default') + api.step_data(
'cipd describe chromium/fuchsia/fidl',
api.json.output({
"result": {
"pin": {
"package": "chromium/fuchsia/fidl",
"instance_id": "GDGGW7Xs89z2apGaYf1mDvbQuHfYIoPexfedNzvKodUC"
},
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537235671,
"refs": [{
"ref":
"latest",
"instance_id":
"GDGGW7Xs89z2apGaYf1mDvbQuHfYIoPexfedNzvKodUC",
"modified_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"modified_ts":
1537667650
}],
"tags": [{
"tag":
"version:70.0.3538.30",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667650
}, {
"tag":
"version:70.0.3538.29",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537581345
}, {
"tag":
"version:70.0.3538.28",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537494981
}, {
"tag":
"version:70.0.3538.27",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537410782
}, {
"tag":
"version:70.0.3538.25",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537322098
}, {
"tag":
"version:70.0.3538.22",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537235671
}]
}
}),
) + api.step_data(
'cipd describe chromium/fuchsia/webrunner-amd64',
api.json.output({
"result": {
"pin": {
"package": "chromium/fuchsia/webrunner-amd64",
"instance_id": "r2S5xldLzzfJa2VzOYgoC6TsIWePSDLBI5FRywd_gHAC"
},
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667675,
"refs": [{
"ref":
"latest",
"instance_id":
"r2S5xldLzzfJa2VzOYgoC6TsIWePSDLBI5FRywd_gHAC",
"modified_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"modified_ts":
1537667675
}],
"tags": [{
"tag":
"version:70.0.3538.30",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667675
}]
}
}),
) + api.step_data(
'cipd describe chromium/fuchsia/webrunner-arm64',
api.json.output({
"result": {
"pin": {
"package": "chromium/fuchsia/webrunner-arm64",
"instance_id": "mKI1nni0SW4F1cQAuYnkYU_RtDv47noSKO9vGHJVjzYC"
},
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667742,
"refs": [{
"ref":
"latest",
"instance_id":
"mKI1nni0SW4F1cQAuYnkYU_RtDv47noSKO9vGHJVjzYC",
"modified_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"modified_ts":
1537667742
}],
"tags": [{
"tag":
"version:70.0.3538.30",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667742
}]
}
}),
) + api.step_data(
'cipd search chromium/fuchsia/webrunner-arm64 version:70.0.3538.30',
api.json.output({
"result": [{
"package": "chromium/fuchsia/webrunner-arm64",
"instance_id": "mKI1nni0SW4F1cQAuYnkYU_RtDv47noSKO9vGHJVjzYC"
}]
}),
) + api.step_data(
'cipd search chromium/fuchsia/webrunner-amd64 version:70.0.3538.30',
api.json.output({
"result": [{
"package": "chromium/fuchsia/webrunner-amd64",
"instance_id": "r2S5xldLzzfJa2VzOYgoC6TsIWePSDLBI5FRywd_gHAC"
}]
}),
) + api.step_data(
'cipd search chromium/fuchsia/fidl version:70.0.3538.30',
api.json.output({
"result": [{
"package": "chromium/fuchsia/fidl",
"instance_id": "GDGGW7Xs89z2apGaYf1mDvbQuHfYIoPexfedNzvKodUC"
}]
}),
) + api.step_data(
'read cipd.ensure',
api.raw_io.output_text(ENSURE_FILE_TEST),
) + api.step_data('check if done (0)', api.auto_roller.dry_run())
yield api.test('no latest version match') + api.step_data(
'cipd describe chromium/fuchsia/fidl',
api.json.output({
"result": {
"pin": {
"package": "chromium/fuchsia/fidl",
"instance_id": "GDGGW7Xs89z2apGaYf1mDvbQuHfYIoPexfedNzvKodUC"
},
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537235671,
"refs": [{
"ref":
"latest",
"instance_id":
"GDGGW7Xs89z2apGaYf1mDvbQuHfYIoPexfedNzvKodUC",
"modified_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"modified_ts":
1537667650
}],
"tags": [{
"tag":
"version:70.0.3538.30",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667650
}]
}
}),
) + api.step_data(
'cipd describe chromium/fuchsia/webrunner-amd64',
api.json.output({
"result": {
"pin": {
"package": "chromium/fuchsia/webrunner-amd64",
"instance_id": "r2S5xldLzzfJa2VzOYgoC6TsIWePSDLBI5FRywd_gHAC"
},
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667675,
"refs": [{
"ref":
"latest",
"instance_id":
"r2S5xldLzzfJa2VzOYgoC6TsIWePSDLBI5FRywd_gHAC",
"modified_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"modified_ts":
1537667675
}],
"tags": [{
"tag":
"version:70.0.3538.30",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667675
}]
}
}),
) + api.step_data(
'cipd describe chromium/fuchsia/webrunner-arm64',
api.json.output({
"result": {
"pin": {
"package": "chromium/fuchsia/webrunner-arm64",
"instance_id": "mKI1nni0SW4F1cQAuYnkYU_RtDv47noSKO9vGHJVjzYC"
},
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667742,
"refs": [{
"ref":
"latest",
"instance_id":
"mKI1nni0SW4F1cQAuYnkYU_RtDv47noSKO9vGHJVjzYC",
"modified_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"modified_ts":
1537667742
}],
"tags": [{
"tag":
"version:70.0.3538.29",
"registered_by":
"user:official-cipd-upload@chops-service-accounts.iam.gserviceaccount.com",
"registered_ts":
1537667742
}]
}
}),
)