| # Copyright 2019 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 building Fuchsia SDKs.""" |
| |
| from recipe_engine.config import List |
| from recipe_engine.recipe_api import Property |
| |
| DEPS = [ |
| 'fuchsia/build', |
| 'fuchsia/buildbucket_util', |
| 'fuchsia/checkout', |
| 'fuchsia/fuchsia', |
| 'fuchsia/gsutil', |
| 'fuchsia/jiri', |
| 'recipe_engine/buildbucket', |
| 'recipe_engine/isolated', |
| 'recipe_engine/path', |
| 'recipe_engine/properties', |
| 'recipe_engine/step', |
| ] |
| |
| # These represent the location of the isolated hash in the output of this |
| # recipe. They need to be kept in sync with sdk.py |
| ISOLATE_STEP_NAME = 'isolate artifacts' |
| ISOLATED_OUTPUT_KEY = 'isolated_output_hash' |
| |
| PROPERTIES = { |
| 'manifest': |
| Property(kind=str, help='Jiri manifest to use'), |
| 'remote': |
| Property(kind=str, help='Remote manifest repository'), |
| 'checkout_snapshot': |
| Property( |
| kind=bool, |
| help='Whether or not to checkout from a Jiri snapshot.' |
| ' Snapshot is expected to be found at the location specified by' |
| ' BuildBucket input.', |
| default=False), |
| 'ninja_targets': |
| Property( |
| kind=List(basestring), |
| help='Ninja targets to build', |
| default=[ |
| 'sdk/archive/core.tar.gz', |
| 'sdk/archive/fuchsia_dart.tar.gz', |
| ]), |
| 'packages': |
| Property( |
| kind=List(basestring), |
| help='Packages to build', |
| default=['//topaz/packages/sdk:topaz']), |
| 'sdk_id': |
| Property(kind=str, help='SDK version id'), |
| 'target': |
| Property(kind=str, help='target CPU architecture'), |
| } |
| |
| |
| def RunSteps(api, manifest, remote, checkout_snapshot, ninja_targets, packages, |
| sdk_id, target): |
| build = api.buildbucket.build |
| |
| checkout_root = api.path['start_dir'].join('fuchsia') |
| if checkout_snapshot: |
| if api.buildbucket_util.is_tryjob: |
| assert len(build.input.gerrit_changes) == 1 |
| checkout = api.checkout.from_patchset_snapshot( |
| path=checkout_root, gerrit_change=build.input.gerrit_changes[0]) |
| else: |
| checkout = api.checkout.from_commit_snapshot( |
| path=checkout_root, gitiles_commit=build.input.gitiles_commit) |
| else: |
| assert manifest |
| assert remote |
| checkout = api.checkout.fuchsia_with_options( |
| path=checkout_root, |
| build=build, |
| manifest=manifest, |
| remote=remote, |
| ) |
| |
| build_output = api.build.with_options( |
| build_dir=checkout.root_dir.join('out'), |
| build_images=False, |
| checkout=checkout, |
| target=target, |
| build_type='release', |
| product='products/core.gni', |
| # TODO(DX-1415): move SDK tools back to universe_packages. |
| packages=packages + ['//sdk/bundles:tools'], |
| gn_args=['build_sdk_archives=true', |
| 'sdk_id="%s"' % sdk_id], |
| ninja_targets=ninja_targets, |
| ) |
| |
| sdk_archive_path = build_output.fuchsia_build_dir.join('sdk', 'archive') |
| isolated = api.isolated.isolated(sdk_archive_path) |
| |
| for ninja_target in ninja_targets: |
| isolated.add_file( |
| path=build_output.fuchsia_build_dir.join(*ninja_target.split('/'))) |
| |
| # Archive the isolated. |
| sdk_archive_isolated_hash = isolated.archive(ISOLATE_STEP_NAME) |
| |
| api.step.active_result.presentation.properties[ |
| ISOLATED_OUTPUT_KEY] = sdk_archive_isolated_hash |
| |
| |
| def GenTests(api): |
| topaz_properties = api.properties( |
| project='integration', |
| manifest='fuchsia/topaz/topaz', |
| remote='https://fuchsia.googlesource.com/integration', |
| sdk_id='###SDK_ID###', |
| target='x64') |
| |
| yield (api.test('basic') + topaz_properties) |
| yield (api.test('snapshot') + topaz_properties + |
| api.properties(checkout_snapshot=True) + api.buildbucket.ci_build()) |
| yield (api.test('snapshot_cq') + topaz_properties + |
| api.properties(checkout_snapshot=True) + api.buildbucket.try_build()) |