xref: /aosp_15_r20/external/skia/infra/bots/recipes/infra.py (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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