1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2016 The Chromium Authors. All rights reserved. 2*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 4*c8dee2aaSAndroid Build Coastguard Worker 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Worker# Recipe which runs the Skia infra tests. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard WorkerPYTHON_VERSION_COMPATIBILITY = "PY3" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard WorkerDEPS = [ 11*c8dee2aaSAndroid Build Coastguard Worker 'infra', 12*c8dee2aaSAndroid Build Coastguard Worker 'recipe_engine/context', 13*c8dee2aaSAndroid Build Coastguard Worker 'recipe_engine/path', 14*c8dee2aaSAndroid Build Coastguard Worker 'recipe_engine/properties', 15*c8dee2aaSAndroid Build Coastguard Worker 'recipe_engine/step', 16*c8dee2aaSAndroid Build Coastguard Worker 'vars', 17*c8dee2aaSAndroid Build Coastguard Worker] 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Workerdef git_init(api, repo_root, env): 21*c8dee2aaSAndroid Build Coastguard Worker with api.context(cwd=repo_root, env=env): 22*c8dee2aaSAndroid Build Coastguard Worker # Some tests assume that they're being run inside a git repo. 23*c8dee2aaSAndroid Build Coastguard Worker api.step('git init', cmd=['git', 'init']) 24*c8dee2aaSAndroid Build Coastguard Worker api.step('git add .', cmd=['git', 'add', '.']) 25*c8dee2aaSAndroid Build Coastguard Worker api.step('git commit', cmd=['git', 'commit', '-a', '-m', 'initial commit']) 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Workerdef RunSteps(api): 29*c8dee2aaSAndroid Build Coastguard Worker api.vars.setup() 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker # Run the infra tests. 32*c8dee2aaSAndroid Build Coastguard Worker repo_name = api.properties['repository'].split('/')[-1] 33*c8dee2aaSAndroid Build Coastguard Worker if repo_name.endswith('.git'): 34*c8dee2aaSAndroid Build Coastguard Worker repo_name = repo_name[:-len('.git')] 35*c8dee2aaSAndroid Build Coastguard Worker repo_root = api.path.start_dir.joinpath(repo_name) 36*c8dee2aaSAndroid Build Coastguard Worker infra_tests = repo_root.joinpath('infra', 'bots', 'infra_tests.py') 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker # Merge the default environment with the Go environment. 39*c8dee2aaSAndroid Build Coastguard Worker env = {} 40*c8dee2aaSAndroid Build Coastguard Worker env.update(api.infra.go_env) 41*c8dee2aaSAndroid Build Coastguard Worker for k, v in api.vars.default_env.items(): 42*c8dee2aaSAndroid Build Coastguard Worker # The PATH variable gets merged; all others get replaced. 43*c8dee2aaSAndroid Build Coastguard Worker if k == 'PATH': 44*c8dee2aaSAndroid Build Coastguard Worker # This works because the value for PATH in go_env and default_env includes 45*c8dee2aaSAndroid Build Coastguard Worker # the '%(PATH)s' placeholder. 46*c8dee2aaSAndroid Build Coastguard Worker env[k] = env[k] % {k: v} 47*c8dee2aaSAndroid Build Coastguard Worker else: 48*c8dee2aaSAndroid Build Coastguard Worker env[k] = v 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker git_init(api, repo_root, env) 51*c8dee2aaSAndroid Build Coastguard Worker if repo_name != 'skia': 52*c8dee2aaSAndroid Build Coastguard Worker git_init(api, api.path.start_dir.joinpath('skia'), env) 53*c8dee2aaSAndroid Build Coastguard Worker 54*c8dee2aaSAndroid Build Coastguard Worker with api.context(cwd=repo_root, env=env): 55*c8dee2aaSAndroid Build Coastguard Worker # Unfortunately, the recipe tests are flaky due to file removal on Windows. 56*c8dee2aaSAndroid Build Coastguard Worker # Run multiple attempts. 57*c8dee2aaSAndroid Build Coastguard Worker last_exc = None 58*c8dee2aaSAndroid Build Coastguard Worker for _ in range(3): 59*c8dee2aaSAndroid Build Coastguard Worker try: 60*c8dee2aaSAndroid Build Coastguard Worker api.step('infra_tests', cmd=['python3', '-u', infra_tests]) 61*c8dee2aaSAndroid Build Coastguard Worker break 62*c8dee2aaSAndroid Build Coastguard Worker except api.step.StepFailure as e: # pragma: nocover 63*c8dee2aaSAndroid Build Coastguard Worker last_exc = e 64*c8dee2aaSAndroid Build Coastguard Worker else: # pragma: nocover 65*c8dee2aaSAndroid Build Coastguard Worker raise last_exc 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard Workerdef GenTests(api): 68*c8dee2aaSAndroid Build Coastguard Worker yield ( 69*c8dee2aaSAndroid Build Coastguard Worker api.test('infra_tests') + 70*c8dee2aaSAndroid Build Coastguard Worker api.properties(buildername='Housekeeper-PerCommit-InfraTests_Linux', 71*c8dee2aaSAndroid Build Coastguard Worker repository='https://skia.googlesource.com/skia.git', 72*c8dee2aaSAndroid Build Coastguard Worker path_config='kitchen', 73*c8dee2aaSAndroid Build Coastguard Worker swarm_out_dir='[SWARM_OUT_DIR]') 74*c8dee2aaSAndroid Build Coastguard Worker ) 75*c8dee2aaSAndroid Build Coastguard Worker yield ( 76*c8dee2aaSAndroid Build Coastguard Worker api.test('infra_tests_lottie_ci') + 77*c8dee2aaSAndroid Build Coastguard Worker api.properties(buildername='Housekeeper-PerCommit-InfraTests_Linux', 78*c8dee2aaSAndroid Build Coastguard Worker repository='https://skia.googlesource.com/lottie-ci.git', 79*c8dee2aaSAndroid Build Coastguard Worker path_config='kitchen', 80*c8dee2aaSAndroid Build Coastguard Worker swarm_out_dir='[SWARM_OUT_DIR]') 81*c8dee2aaSAndroid Build Coastguard Worker ) 82