blob: a14198ef434f9ad0a9e99658383798d7b1407576 [file] [log] [blame]
# Copyright (c) 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
DEPS = [
'depot_tools/cipd',
'depot_tools/git',
'depot_tools/tryserver',
'recipe_engine/buildbucket',
'recipe_engine/context',
'recipe_engine/path',
'recipe_engine/platform',
'recipe_engine/runtime',
'recipe_engine/step',
]
GO_VERSION = 'version:1.12.5'
PROTOC_VERSION = 'protobuf_version:v3.6.1'
# TODO(yyanagisawa): install go and protoc from the script in source.
# The compiler should be matched with the source, and the
# script in the source code should install them like clang in
# Chromium build.
def SetupExecutables(api, pkg_dir):
"""Set up go and protoc to run the script.
Args:
pkg_dir: a root directory to install cipd packages.
Returns:
a list of paths.
"""
api.cipd.ensure(pkg_dir, {
'infra/go/${platform}': GO_VERSION,
'infra/tools/protoc/${platform}': PROTOC_VERSION,
})
return [pkg_dir, api.path.join(pkg_dir, 'bin')]
def RunSteps(api):
repository = 'https://chromium.googlesource.com/infra/goma/server'
package_base = 'go.chromium.org/goma/server'
build_root = api.path['cache'].join('builder')
goma_src_dir = build_root.join('goma_src')
gopath_dir = build_root.join('go')
# TODO(yyanagisawa): move cipd to cached directory when we confirm it works.
cipd_root = api.path['start_dir'].join('packages')
env_prefixes = {
'GOPATH': [gopath_dir],
'PATH': SetupExecutables(api, cipd_root) + [gopath_dir.join('bin')],
}
env = {
'GO111MODULE': 'on',
}
# Checkout
# We do not have CI builder, but let me confirm.
assert api.tryserver.is_tryserver
ref = api.tryserver.gerrit_change_fetch_ref
api.git.checkout(repository, ref=ref, dir_path=goma_src_dir)
with api.context(cwd=api.path['checkout'],
env_prefixes=env_prefixes,
env=env):
# Set up modules.
api.step('list modules',
['go', 'list', '-m', 'all'])
# Generate proto
api.step('generate proto',
['go', 'generate', api.path.join(package_base, 'proto', '...')])
# Build
api.step('build',
['go', 'install', api.path.join(package_base, 'cmd', '...')])
# Test
api.step('test',
['go', 'test', '-race', '-cover',
api.path.join(package_base, '...')])
# Vet
api.step('go vet',
['go', 'vet', api.path.join(package_base, '...')])
# Go fmt
api.step('go fmt',
['go', 'fmt', api.path.join(package_base, '...')])
# Check diff
# TODO(yyanagisawa): add --exit-code in the future.
# There is known difference, and we cannot enforce the
# step.
api.git('diff', name='check git diff')
def GenTests(api):
yield (api.test('goma_server_presubmit') +
api.platform('linux', 64) +
api.runtime(is_luci=True, is_experimental=False) +
api.buildbucket.try_build(
builder='Goma Server Presubmit',
change_number=4840,
patch_set=2))