blob: ce0ffe1bd64e420edd1d21543c4f56e3ff0ca8ff [file]
# Copyright 2022 The Dart Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import datetime, json
from recipe_engine.post_process import (MustRun, DoesNotRunRE, DropExpectation)
from PB.recipe_modules.dart.build.build import Build
from PB.recipes.dart.release.sdk import BuildOptions
DEPS = [
'dart',
'dart/build',
'depot_tools/bot_update',
'depot_tools/gclient',
'depot_tools/git',
'depot_tools/gsutil',
'depot_tools/osx_sdk',
'recipe_engine/archive',
'recipe_engine/context',
'recipe_engine/cipd',
'recipe_engine/buildbucket',
'recipe_engine/bcid_reporter',
'recipe_engine/file',
'recipe_engine/path',
'recipe_engine/platform',
'recipe_engine/properties',
'recipe_engine/raw_io',
'recipe_engine/runtime',
'recipe_engine/scheduler',
'recipe_engine/step',
'recipe_engine/time',
'safe_cipd',
]
DARTDOC_BASE_URL = 'gs://dart-api-documentation'
PYTHON_VERSION_COMPATIBILITY = 'PY3'
PROPERTIES = BuildOptions
DART_ARCH_TO_DEBIAN_ARCH = {
'ia32': 'i386',
'x64': 'amd64',
'arm': 'armhf',
'arm64': 'arm64',
'riscv32': 'riscv32',
'riscv64': 'riscv64',
}
def _is_cross(api, arch):
archs = {'ia32', 'x64'} if api.platform.arch == 'intel' else \
{'arm64'} if api.platform.arch == 'arm' else \
{api.platform.arch}
if api.platform.name == 'mac' and api.platform.arch == 'arm':
archs.add('x64')
return not arch in archs
def _build_root(api):
if api.platform.name == 'mac':
return 'xcodebuild'
return 'out'
def _build_conf(api, arch):
mode = 'Release'
cross = 'X' if _is_cross(api, arch) else ''
return f'{mode}{cross}{arch.upper()}'
def _build(api, properties, commit, os, sdk_dir, version):
# Build the Dart SDK.
args = ['--sanitizer=none', '--mode=release', '--check-clean']
args.append('--arch=' + ','.join(properties.archs))
if properties.args:
args.extend(properties.args)
args.append('create_sdk')
if os == 'linux':
args.append('debian_package')
api.build.build(sdk_dir, args=args)
for arch in properties.archs:
out_path = sdk_dir / _build_root(api) / _build_conf(api, arch)
dart_sdk_path = out_path / 'dart-sdk'
zip_name = f'dartsdk-{os}-{arch}-release.zip'
zip_path = out_path / zip_name
(api.archive.package(out_path).with_dir(dart_sdk_path).archive(
f'zip {zip_name}', zip_path))
sha256 = api.file.file_hash(zip_path)
sha256_name = zip_name + '.sha256sum'
sha256_path = out_path / sha256_name
api.file.write_text(f'write {sha256_name}', sha256_path,
f'{sha256} *{zip_name}\n')
# Build dartdocs.
if properties.dartdoc_arch:
arch = properties.dartdoc_arch
out_path = sdk_dir / _build_root(api) / _build_conf(api, arch)
dart_exe = 'dart.exe' if os == 'windows' else 'dart'
dart_path = out_path / f'dart-sdk/bin/{dart_exe}'
dartdocs_path = out_path / 'gen-dartdocs'
dartdocs_zip_path = out_path / 'dartdocs-gen-api.zip'
api.step('build api_docs', [
dart_path,
sdk_dir / 'third_party/pkg/dartdoc/bin/dartdoc.dart',
'--sdk-docs',
f'--output={dartdocs_path}',
'--rel-canonical-prefix=https://api.dart.dev',
])
api.archive.package(out_path).with_dir(dartdocs_path).archive(
'zip dartdocs', dartdocs_zip_path)
# Create VERSION file for the release archive.
commit_date = api.git(
'show',
'-s',
'--date=format:%Y-%m-%d',
'--format=format:%cd',
name='read commit date',
stdout=api.raw_io.output_text(add_output_log=True)).stdout.rstrip()
gcs_version_path = sdk_dir / 'VERSION'
gcs_version_text = json.dumps(
{
'date': commit_date,
'version': str(version),
'revision': commit,
},
indent=2)
api.file.write_text('write gcs VERSION', gcs_version_path, gcs_version_text)
def _upload_build(api, properties, os, out_path, bucket, topdir, subdir, arch):
# Upload the Dart SDK zip.
zip_name = f'dartsdk-{os}-{arch}-release.zip'
zip_path = out_path / zip_name
object_path = f'{topdir}/{subdir}/sdk/{zip_name}'
api.gsutil.upload(
zip_path, bucket, object_path, name=f'upload {zip_name} ({subdir})')
# Report the cloud storage object to snoopy and get the provenance.
if not properties.disable_bcid:
sha256 = api.file.file_hash(zip_path)
api.bcid_reporter.report_gcs(sha256, f'gs://{bucket}/{object_path}')
# Upload the Dart SDK zip sha256sum.
sha256_name = zip_name + '.sha256sum'
sha256_path = out_path / sha256_name
api.gsutil.upload(
sha256_path,
bucket,
object_path + '.sha256sum',
name=f'upload {sha256_name} ({subdir})')
_upload_unstripped(api, 'dart', os, out_path, bucket, topdir, subdir, arch)
_upload_unstripped(api, 'dartaotruntime', os, out_path, bucket, topdir, subdir, arch)
def _upload_unstripped(api, executable_name, os, out_path, bucket, topdir, subdir, arch):
executable = f'{executable_name}.exe' if os == 'windows' else executable_name
# Upload the unstripped dart executable for debugging.
unstripped_path = out_path / executable
upstripped_object_path = f'{topdir}/{subdir}/unstripped/{os}/{arch}/{executable}'
api.gsutil.upload(
unstripped_path,
bucket,
upstripped_object_path,
name=f'upload unstripped {executable} ({subdir})')
def _test_deb(api, sdk_dir, version, arch):
out_path = sdk_dir / _build_root(api) / _build_conf(api, arch)
deb_arch = DART_ARCH_TO_DEBIAN_ARCH[arch]
deb_name = f'dart_{version}-1_{deb_arch}.deb'
deb_path = out_path / deb_name
api.step('test debian package',
['tools/debian_package/test_debian_package.sh', deb_path, arch])
def _upload_deb(api, properties, os, out_path, bucket, topdir, subdir, arch,
version):
deb_arch = DART_ARCH_TO_DEBIAN_ARCH[arch]
deb_name = f'dart_{version}-1_{deb_arch}.deb'
deb_path = out_path / deb_name
deb_object_path = f'{topdir}/{subdir}/linux_packages/{deb_name}'
api.gsutil.upload(
deb_path, bucket, deb_object_path, name=f'upload {deb_name} ({subdir})')
# Report the cloud storage object to snoopy and get the provenance.
if not properties.disable_bcid:
sha256 = api.file.file_hash(deb_path)
api.bcid_reporter.report_gcs(sha256, f'gs://{bucket}/{deb_object_path}')
CROSS_COMPILE_HOST_OSES = ['linux', 'macos', 'windows']
CROSS_COMPILE_HOST_ARCHS = ['arm64', 'x64']
CROSS_COMPILE_TARGET_OSES = ['linux']
CROSS_COMPILE_TARGET_ARCHS = ['arm', 'arm64', 'riscv64', 'x64']
def _upload_cross_compile_support(api, properties, os, out_path, bucket, topdir,
subdir, arch):
files_and_paths = []
ext = '.exe' if os == 'windows' else ''
# Where the stripped binaries live. Note that not all builds use this for
# stripped binaries (e.g., MSVC-based Windows builds), so we need to check
# and fall back to out_path if there isn't a binary there.
stripped_path = out_path / 'exe.stripped'
# upload dartaotruntime binaries for cross compilation targets.
if os in CROSS_COMPILE_TARGET_OSES and arch in CROSS_COMPILE_TARGET_ARCHS:
dartaotruntime_binary = f'dartaotruntime_product{ext}'
dartaotruntime_path = stripped_path / dartaotruntime_binary
if not api.path.exists(dartaotruntime_path):
dartaotruntime_path = out_path / dartaotruntime_binary
if api.path.exists(dartaotruntime_path):
object_path = f'{topdir}/{subdir}/sdk/dartaotruntime_{os}_{arch}{ext}'
api.gsutil.upload(
dartaotruntime_path,
bucket,
object_path,
name=f'upload dartaotruntime_{os}_{arch}{ext} ({subdir})')
files_and_paths.append((dartaotruntime_path, object_path))
# upload gen_snapshot binaries for cross compilation targets.
if os in CROSS_COMPILE_HOST_OSES and arch in CROSS_COMPILE_HOST_ARCHS:
for target_os in CROSS_COMPILE_TARGET_OSES:
for target_arch in CROSS_COMPILE_TARGET_ARCHS:
# skip gen_snapshot upload when host == target.
if not (os == target_os and arch == target_arch):
gen_snapshot_binary = f'gen_snapshot_product_{target_os}_{target_arch}{ext}'
gen_snapshot_path = stripped_path / gen_snapshot_binary
if not api.path.exists(gen_snapshot_path):
gen_snapshot_path = out_path / gen_snapshot_binary
if api.path.exists(gen_snapshot_path):
object_path = f'{topdir}/{subdir}/sdk/gen_snapshot_{os}_{arch}_{target_os}_{target_arch}{ext}'
api.gsutil.upload(
gen_snapshot_path,
bucket,
object_path,
name=f'upload gen_snapshot_{os}_{arch}_{target_os}_{target_arch}{ext} ({subdir})'
)
files_and_paths.append((gen_snapshot_path, object_path))
# Report the uploaded files to snoopy and get the provenance.
if not properties.disable_bcid:
for file_path, object_path in files_and_paths:
sha256 = api.file.file_hash(file_path)
api.bcid_reporter.report_gcs(sha256, f'gs://{bucket}/{object_path}')
def _upload_dartdoc(api, properties, out_path, bucket, topdir, subdir):
dartdocs_zip_path = out_path / 'dartdocs-gen-api.zip'
dartdoc_object_path = f'{topdir}/{subdir}/api-docs/dartdocs-gen-api.zip'
if not properties.disable_bcid:
sha256 = api.file.file_hash(dartdocs_zip_path)
api.bcid_reporter.report_gcs(sha256, f'gs://{bucket}/{dartdoc_object_path}')
api.gsutil.upload(
dartdocs_zip_path,
bucket,
dartdoc_object_path,
name=f'upload dartdocs ({subdir})')
if not properties.disable_bcid:
sha256 = api.file.file_hash(dartdocs_zip_path)
api.bcid_reporter.report_gcs(sha256,
f'gs://{bucket}/{dartdoc_object_path}')
def _upload_cipd(api, properties, commit, out_path, arch):
dart_sdk_path = out_path / 'dart-sdk'
cipd_os = api.dart.platform_to_cipd_os(api.platform.name)
cipd_arch = api.dart.arch_to_cipd_arch(arch)
cipd_platform = cipd_os + '-' + cipd_arch
cipd_file = out_path / f'{cipd_platform}.zip'
for prefix in ['flutter', 'dart']:
# Signed cipd packages are made on the sign-mac builder.
if prefix == 'dart' and cipd_os == 'mac':
continue
package_name = f'{prefix}/dart-sdk/{cipd_platform}'
pkg = api.cipd.PackageDefinition(
package_name, dart_sdk_path, 'copy', preserve_writable=True)
pkg.add_dir(dart_sdk_path)
report_bcid = (not properties.disable_bcid and prefix == 'dart')
api.safe_cipd.register(
package_name,
pkg,
cipd_file,
unique_tags={'git_revision': commit},
report_bcid=report_bcid)
def _upload_version(api, sdk_dir, bucket, topdir, subdir):
gcs_version_path = sdk_dir / 'VERSION'
gcs_version_object_path = f'{topdir}/{subdir}/VERSION'
api.gsutil.upload(
gcs_version_path,
bucket,
gcs_version_object_path,
name=f'upload VERSION ({subdir})')
def _publish_main_dartdoc(api, commit, dartdocs_path, base):
assert (commit)
dartdocs_gs_dir = f'{base}/main/{commit}'
api.gsutil(['-m', 'rsync', '-d', '-r', dartdocs_path, dartdocs_gs_dir],
name='publish dartdoc')
def _sign_mac(api, commit, version, arch):
trigger = api.scheduler.GitilesTrigger(
repo='https://dart.googlesource.com/sdk',
ref=f'refs/heads/{version.channel}',
revision=commit,
properties={'archs': [arch]})
api.scheduler.emit_trigger(trigger, 'dart-internal',
[f'sign-mac-{arch}-{version.channel}'])
def _upload(api, properties, commit, os, sdk_dir, version):
channel = version.channel
is_new_version = channel == 'main' or api.git(
'diff',
'--name-only',
'HEAD~1',
'tools/VERSION',
name='check for updated tools/VERSION',
stdout=api.raw_io.output_text(add_output_log=True)).stdout.rstrip() != ''
bucket = 'dart-archive'
topdir = f'channels/{channel}/raw'
subdirs = [f'hash/{commit}']
if is_new_version:
subdirs.append('latest')
for subdir in subdirs:
for arch in properties.archs:
out_path = sdk_dir / _build_root(api) / _build_conf(api, arch)
_upload_build(api, properties, os, out_path, bucket, topdir, subdir, arch)
# Upload extra binaries to support dartdev compile exe for
# different targets.
if channel == 'main':
# Mock paths for tests.
ext = '.exe' if os == "windows" else ''
stripped_path = out_path if os == "windows" else out_path / 'exe.stripped'
api.path.mock_add_file(stripped_path / f'dartaotruntime_product{ext}')
for target_os in CROSS_COMPILE_TARGET_OSES:
for target_arch in CROSS_COMPILE_TARGET_ARCHS:
api.path.mock_add_file(
stripped_path /
f'gen_snapshot_product_{target_os}_{target_arch}{ext}')
_upload_cross_compile_support(api, properties, os, out_path, bucket,
topdir, subdir, arch)
# Upload Debian binary package.
if os == 'linux':
_upload_deb(api, properties, os, out_path, bucket, topdir, subdir, arch,
version)
# Upload the dartdocs.
if properties.dartdoc_arch:
out_path = sdk_dir / _build_root(api) / _build_conf(
api, properties.dartdoc_arch)
_upload_dartdoc(api, properties, out_path, bucket, topdir, subdir)
# Upload the VERSION file with release metadata.
_upload_version(api, sdk_dir, bucket, topdir, subdir)
# Upload the SDK to cipd.
if version.channel != 'main':
for arch in properties.archs:
out_path = sdk_dir / _build_root(api) / _build_conf(api, arch)
_upload_cipd(api, properties, commit, out_path, arch)
# Publish the main channel dartdocs immediately since they are not promoted.
arch = properties.dartdoc_arch
out_path = sdk_dir / _build_root(api) / _build_conf(api, arch)
dartdocs_path = out_path / 'gen-dartdocs'
if properties.dartdoc_arch and version.channel == 'main':
_publish_main_dartdoc(api, commit, dartdocs_path, DARTDOC_BASE_URL)
_publish_main_dartdoc(api, 'latest', dartdocs_path, DARTDOC_BASE_URL)
if os == 'macos' and version.channel != 'main':
for arch in properties.archs:
_sign_mac(api, commit, version, arch)
def _report_stage(api, properties, stage):
if not properties.disable_bcid:
api.bcid_reporter.report_stage(stage)
def RunSteps(api, properties):
assert properties.archs, 'the recipe requires archs to be specified'
_report_stage(api, properties, 'start')
with api.osx_sdk('mac'):
# Fetch the Dart SDK source code while Snoopy keeps track of dependencies.
_report_stage(api, properties, 'fetch')
api.gclient.set_config('dart')
sdk_dir = api.bot_update.ensure_checkout(timeout=35 * 60).source_root.path
api.gclient.runhooks()
with api.context(cwd=sdk_dir):
# Build the Dart SDKs.
_report_stage(api, properties, 'compile')
commit = api.buildbucket.gitiles_commit.id
os = api.dart.platform_to_os(api.platform.name)
version_path = sdk_dir / 'tools/VERSION'
version_contents = api.file.read_text('read tools/VERSION', version_path)
version = api.dart.Version(text=version_contents, git_revision=commit)
_build(api, properties, commit, os, sdk_dir, version)
# Test Debian binary package. We only have a Docker working for x64 and arm64.
if os == 'linux':
if 'x64' in properties.archs:
_test_deb(api, sdk_dir, version, 'x64')
if 'arm64' in properties.archs:
_test_deb(api, sdk_dir, version, 'arm64')
# Upload the built Dart SDKs to cloud storage.
_report_stage(api, properties, 'upload')
builder_name = api.buildbucket.builder_name
if (not api.runtime.is_experimental and
not builder_name.endswith('-try') and
not builder_name.endswith('-experimental')):
_upload(api, properties, commit, os, sdk_dir, version)
_report_stage(api, properties, 'upload-complete')
def GenTests(api):
yield api.test(
'dart-sdk-linux-main',
api.platform.name('linux'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-linux-main',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/main',
revision='bb0184365d4dc4ace67914a0e1fc6ac3b052cefe'),
api.properties(
BuildOptions(
archs=['ia32', 'x64', 'arm', 'arm64'], dartdoc_arch='x64')),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL main
MAJOR 2
MINOR 17
PATCH 3
PRERELEASE 0
PRERELEASE_PATCH 0
''')),
api.step_data(
'read commit date', stdout=api.raw_io.output_text('2025-03-19\n')),
api.post_process(
MustRun,
'gsutil upload dartsdk-linux-x64-release.zip (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload dartaotruntime_linux_arm (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload dartaotruntime_linux_arm64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload dartaotruntime_linux_x64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_linux_arm64_linux_arm (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_linux_arm64_linux_riscv64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_linux_arm64_linux_x64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_linux_x64_linux_arm (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_linux_x64_linux_arm64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_linux_x64_linux_riscv64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
)
yield api.test(
'dart-sdk-linux-stable',
api.platform.name('linux'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-linux-stable',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/stable',
revision='abfdc3d50f6cf66165767da8df4f681a68467178'),
api.properties(
BuildOptions(
archs=['ia32', 'x64', 'arm', 'arm64'], dartdoc_arch='x64')),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL stable
MAJOR 2
MINOR 17
PATCH 3
PRERELEASE 0
PRERELEASE_PATCH 0
''')),
api.step_data(
'read commit date', stdout=api.raw_io.output_text('2022-06-01\n')),
api.step_data(
'check for updated tools/VERSION',
stdout=api.raw_io.output_text('tools/VERSION\n')),
api.post_process(
MustRun,
'gsutil upload dartsdk-linux-x64-release.zip (hash/abfdc3d50f6cf66165767da8df4f681a68467178)'
),
api.post_process(MustRun, 'register dart/dart-sdk/linux-amd64'),
api.post_process(MustRun, 'snoop: report_stage (5)'),
)
yield api.test(
'dart-sdk-linux-riscv64-dev',
api.platform.name('linux'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-linux-dev',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/dev',
revision='da07db8582242af643370cc866b5eed357367e83'),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL dev
MAJOR 2
MINOR 17
PATCH 0
PRERELEASE 158
PRERELEASE_PATCH 0
''')),
api.properties(BuildOptions(archs=['riscv64'], args=['--no-clang'])),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.step_data(
'check for updated tools/VERSION',
stdout=api.raw_io.output_text('tools/VERSION\n')),
api.post_process(
MustRun,
'gsutil upload dartsdk-linux-riscv64-release.zip (hash/da07db8582242af643370cc866b5eed357367e83)'
),
api.post_process(MustRun, 'register dart/dart-sdk/linux-riscv64'),
api.post_process(MustRun, 'snoop: report_stage (5)'),
)
yield api.test(
'dart-sdk-linux-riscv64-main',
api.platform.name('linux'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-linux-main',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/dev',
revision='bb0184365d4dc4ace67914a0e1fc6ac3b052cefe'),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL main
MAJOR 2
MINOR 17
PATCH 3
PRERELEASE 0
PRERELEASE_PATCH 0
''')),
api.properties(BuildOptions(archs=['riscv64'], args=['--no-clang'])),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.post_process(
MustRun,
'gsutil upload dartaotruntime_linux_riscv64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload dartsdk-linux-riscv64-release.zip (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(DoesNotRunRE, 'register dart/dart-sdk/linux-riscv64'),
api.post_process(MustRun, 'snoop: report_stage (5)'),
)
yield api.test(
'dart-sdk-mac-beta',
api.platform.name('mac'),
api.step_data(
'find macOS version', stdout=api.raw_io.output_text('10.15.7')),
api.platform.arch('arm'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-mac-beta',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/beta',
revision='a6465a49920e649938df378684d75df2aca56ccf'),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL beta
MAJOR 2
MINOR 18
PATCH 0
PRERELEASE 44
PRERELEASE_PATCH 1
''')),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.properties(BuildOptions(archs=['x64'])),
api.step_data(
'check for updated tools/VERSION',
stdout=api.raw_io.output_text('tools/VERSION\n')),
api.post_process(
MustRun,
'gsutil upload dartsdk-macos-x64-release.zip (hash/a6465a49920e649938df378684d75df2aca56ccf)'
),
api.post_process(DoesNotRunRE, 'register dart/dart-sdk/.*'),
api.post_process(MustRun, 'snoop: report_stage (5)'),
)
yield api.test(
'dart-sdk-mac-arm64-main',
api.platform.name('mac'),
api.step_data(
'find macOS version', stdout=api.raw_io.output_text('11.6.2')),
api.platform.arch('arm'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-linux-main',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/dev',
revision='bb0184365d4dc4ace67914a0e1fc6ac3b052cefe'),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.properties(BuildOptions(archs=['arm64'])),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL main
MAJOR 2
MINOR 17
PATCH 3
PRERELEASE 0
PRERELEASE_PATCH 0
''')),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_macos_arm64_linux_arm (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_macos_arm64_linux_arm64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_macos_arm64_linux_riscv64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_macos_arm64_linux_x64 (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(
MustRun,
'gsutil upload dartsdk-macos-arm64-release.zip (hash/bb0184365d4dc4ace67914a0e1fc6ac3b052cefe)'
),
api.post_process(DoesNotRunRE, 'register dart/dart-sdk/.*'),
api.post_process(MustRun, 'snoop: report_stage (5)'),
)
yield api.test(
'dart-sdk-mac-arm64-stable',
api.platform.name('mac'),
api.step_data(
'find macOS version', stdout=api.raw_io.output_text('11.6.2')),
api.platform.arch('arm'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-mac-arm64-stable',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/stable',
revision='18df0aae67183931b1b6d5d12cc04d89f7137919'),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.properties(BuildOptions(archs=['arm64'])),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL stable
MAJOR 2
MINOR 17
PATCH 3
PRERELEASE 0
PRERELEASE_PATCH 0
''')),
api.step_data(
'check for updated tools/VERSION',
stdout=api.raw_io.output_text('tools/VERSION\n')),
api.post_process(
MustRun,
'gsutil upload dartsdk-macos-arm64-release.zip (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(DoesNotRunRE, 'register dart/dart-sdk/.*'),
api.post_process(MustRun, 'snoop: report_stage (5)'),
)
yield api.test(
'dart-sdk-win-main',
api.platform.name('win'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-win-main',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/main',
revision='18df0aae67183931b1b6d5d12cc04d89f7137919'),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.properties(
BuildOptions(archs=['ia32', 'x64', 'arm64'], dartdoc_arch='x64')),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL main
MAJOR 2
MINOR 17
PATCH 0
PRERELEASE 0
PRERELEASE_PATCH 0
''')),
api.post_process(
MustRun, 'gsutil upload dartsdk-windows-x64-release.zip (latest)'),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_x64_linux_arm64.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_arm64_linux_arm.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_arm64_linux_arm64.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_arm64_linux_riscv64.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_arm64_linux_x64.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_x64_linux_arm.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_x64_linux_arm64.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_x64_linux_riscv64.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(
MustRun,
'gsutil upload gen_snapshot_windows_x64_linux_x64.exe (hash/18df0aae67183931b1b6d5d12cc04d89f7137919)'
),
api.post_process(DoesNotRunRE, 'register dart/dart-sdk/.*'),
api.post_process(MustRun, 'snoop: report_stage (5)'),
)
yield api.test(
'already-exists-but-matches',
api.platform.name('win'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-win-stable',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/stable',
revision='18df0aae67183931b1b6d5d12cc04d89f7137919'),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.properties(BuildOptions(archs=['ia32', 'arm64'])),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL stable
MAJOR 2
MINOR 17
PATCH 0
PRERELEASE 0
PRERELEASE_PATCH 0
''')),
api.step_data(
'check for updated tools/VERSION',
stdout=api.raw_io.output_text('tools/VERSION\n')),
api.step_data(
'cipd search dart/dart-sdk/windows-arm64 git_revision:18df0aae67183931b1b6d5d12cc04d89f7137919',
api.cipd.example_search(
'dart/dart-sdk/windows-arm64',
instances=['40-chars-fake-of-the-package-instance_id'],
)),
api.post_process(
MustRun,
"upload skipped: dart/dart-sdk/windows-arm64 already exists for unique tags: ['git_revision:18df0aae67183931b1b6d5d12cc04d89f7137919']"
),
api.post_process(DoesNotRunRE, 'register dart/dart-sdk/windows-arm64'),
api.post_process(DropExpectation),
)
yield api.test(
'already-exists-but-mismatches',
api.platform.name('win'),
api.buildbucket.ci_build(
project='dart-internal',
builder='dart-sdk-win-stable',
git_repo='https://dart.googlesource.com/sdk',
git_ref='refs/heads/stable',
revision='18df0aae67183931b1b6d5d12cc04d89f7137919'),
api.properties(**{'$dart/build': Build(disable_rbe=True)}),
api.properties(BuildOptions(archs=['ia32', 'arm64'])),
api.step_data(
'read tools/VERSION',
api.file.read_text('''
CHANNEL stable
MAJOR 2
MINOR 17
PATCH 0
PRERELEASE 0
PRERELEASE_PATCH 0
''')),
api.step_data(
'check for updated tools/VERSION',
stdout=api.raw_io.output_text('tools/VERSION\n')),
api.step_data(
'cipd search dart/dart-sdk/windows-arm64 git_revision:18df0aae67183931b1b6d5d12cc04d89f7137919',
api.cipd.example_search(
'dart/dart-sdk/windows-arm64',
instances=['mismatching_instance_id'],
)),
api.post_process(DoesNotRunRE, 'register dart/dart-sdk/windows-arm64'),
api.post_process(DropExpectation),
status='FAILURE',
)