Chromium Code Reviews| Index: recipes/recipes/infra_continuous.py |
| diff --git a/recipes/recipes/infra_continuous.py b/recipes/recipes/infra_continuous.py |
| index e585408e13a95ffe11a7b4330a00577d0a59c1c2..6982a8648d5b4f2a60ab1769f0d4f54f00b56bd5 100644 |
| --- a/recipes/recipes/infra_continuous.py |
| +++ b/recipes/recipes/infra_continuous.py |
| @@ -20,17 +20,36 @@ DEPS = [ |
| ] |
| -def build_cipd_packages(api, repo, rev, mastername, buildername, buildnumber): |
| - # Build packages locally. |
| +# Builder name => [{GOOS: ..., GOARCH: ...}]. |
| +CROSS_COMPILING_BUILDERS = { |
| + 'infra-continuous-precise-64': [{'GOOS': 'linux', 'GOARCH': 'arm'}], |
| +} |
| + |
| + |
| +def build_cipd_packages(api, repo, rev, mastername, buildername, buildnumber, |
| + goos, goarch): |
| + # 'goos' and 'goarch' used for cross-compilation of Go code. |
| + step_suffix = '' |
| + env = {} |
|
nodir
2016/06/27 23:46:51
is it ok to exclude all existing vars?
Vadim Sh.
2016/06/27 23:48:25
I think recipe engine merges env dicts, not replac
|
| + if goos or goarch: |
| + assert goos and goarch, 'Both GOOS and GOARCH should be set' |
| + step_suffix = ' [GOOS:%s GOARCH:%s]' % (goos, goarch) |
| + env = {'GOOS': goos, 'GOARCH': goarch} |
| + |
| + # Build packages (don't upload them yet). |
| api.python( |
| - 'cipd - build packages', |
| + 'cipd - build packages' + step_suffix, |
| api.path['checkout'].join('build', 'build.py'), |
| - ['--builder', api.properties.get('buildername')]) |
| + ['--builder', api.properties.get('buildername')], |
| + env=env) |
| - # Verify they are good. |
| - api.python( |
| - 'cipd - test packages integrity', |
| - api.path['checkout'].join('build', 'test_packages.py')) |
| + # Verify they are good. Run tests only when building packages for the host |
| + # platform, since the host can't run binaries build with cross-compilation |
| + # enabled. |
| + if not goos and not goarch: |
| + api.python( |
| + 'cipd - test packages integrity', |
| + api.path['checkout'].join('build', 'test_packages.py')) |
| # Upload them, attach tags. |
| tags = [ |
| @@ -40,7 +59,7 @@ def build_cipd_packages(api, repo, rev, mastername, buildername, buildnumber): |
| ] |
| try: |
| return api.python( |
| - 'cipd - upload packages', |
| + 'cipd - upload packages' + step_suffix, |
| api.path['checkout'].join('build', 'build.py'), |
| [ |
| '--no-rebuild', |
| @@ -49,7 +68,8 @@ def build_cipd_packages(api, repo, rev, mastername, buildername, buildnumber): |
| api.cipd.default_bot_service_account_credentials, |
| '--json-output', api.json.output(), |
| '--builder', api.properties.get('buildername'), |
| - ] + ['--tags'] + tags) |
| + ] + ['--tags'] + tags, |
| + env=env) |
| finally: |
| step_result = api.step.active_result |
| output = step_result.json.output or {} |
| @@ -140,7 +160,10 @@ def RunSteps(api, mastername, buildername, buildnumber): |
| if buildnumber != -1: |
| build_cipd_packages(api, repo_name, rev, mastername, buildername, |
| - buildnumber) |
| + buildnumber, None, None) |
| + for spec in CROSS_COMPILING_BUILDERS.get(buildername, []): |
| + build_cipd_packages(api, repo_name, rev, mastername, buildername, |
| + buildnumber, spec['GOOS'], spec['GOARCH']) |
| else: |
| result = api.step('cipd - not building packages', None) |
| result.presentation.status = api.step.WARNING |
| @@ -212,6 +235,22 @@ def GenTests(api): |
| ) |
| yield ( |
| + api.test('infra-cross-compile') + |
| + api.properties.git_scheduled( |
| + path_config='kitchen', |
| + buildername='infra-continuous-precise-64', |
| + buildnumber=123, |
| + mastername='chromium.infra', |
| + repository='https://chromium.googlesource.com/infra/infra', |
| + ) + |
| + api.override_step_data( |
| + 'cipd - upload packages', api.json.output(cipd_json_output)) + |
| + api.override_step_data( |
| + 'cipd - upload packages [GOOS:linux GOARCH:arm]', |
| + api.json.output(cipd_json_output)) |
| + ) |
| + |
| + yield ( |
| api.test('infra_swarming') + |
| api.properties.git_scheduled( |
| path_config='kitchen', |