xref: /aosp_15_r20/external/perfetto/infra/ci/config.py (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker#!/usr/bin/env python3
2*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2019 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker#
4*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker#
8*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker#
10*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Worker'''Project-wide configuration
16*6dbdd20aSAndroid Build Coastguard Worker
17*6dbdd20aSAndroid Build Coastguard WorkerThis file is either imported from other python scripts or executed to generate
18*6dbdd20aSAndroid Build Coastguard Workermakefile dumps of the variables. This is so all vars can live in one place.
19*6dbdd20aSAndroid Build Coastguard Worker'''
20*6dbdd20aSAndroid Build Coastguard Worker
21*6dbdd20aSAndroid Build Coastguard Workerimport os
22*6dbdd20aSAndroid Build Coastguard Workerimport sys
23*6dbdd20aSAndroid Build Coastguard Worker
24*6dbdd20aSAndroid Build Coastguard Worker# Gerrit config
25*6dbdd20aSAndroid Build Coastguard WorkerGERRIT_HOST = 'android-review.googlesource.com'
26*6dbdd20aSAndroid Build Coastguard WorkerGERRIT_PROJECT = 'platform/external/perfetto'
27*6dbdd20aSAndroid Build Coastguard WorkerGERRIT_REVIEW_URL = ('https://android-review.googlesource.com/c/' +
28*6dbdd20aSAndroid Build Coastguard Worker                     GERRIT_PROJECT)
29*6dbdd20aSAndroid Build Coastguard WorkerREPO_URL = 'https://android.googlesource.com/' + GERRIT_PROJECT
30*6dbdd20aSAndroid Build Coastguard WorkerGERRIT_VOTING_ENABLED = True
31*6dbdd20aSAndroid Build Coastguard WorkerLOGLEVEL = 'info'
32*6dbdd20aSAndroid Build Coastguard Worker
33*6dbdd20aSAndroid Build Coastguard Worker# Cloud config (GCE = Google Compute Engine, GAE = Google App Engine)
34*6dbdd20aSAndroid Build Coastguard WorkerPROJECT = 'perfetto-ci'
35*6dbdd20aSAndroid Build Coastguard Worker
36*6dbdd20aSAndroid Build Coastguard WorkerGAE_VERSION = 'prod'
37*6dbdd20aSAndroid Build Coastguard WorkerDB_ROOT = 'https://%s.firebaseio.com' % PROJECT
38*6dbdd20aSAndroid Build Coastguard WorkerDB = DB_ROOT + '/ci'
39*6dbdd20aSAndroid Build Coastguard WorkerSANDBOX_IMG = 'us-docker.pkg.dev/%s/containers/sandbox' % PROJECT
40*6dbdd20aSAndroid Build Coastguard WorkerWORKER_IMG = 'us-docker.pkg.dev/%s/containers/worker' % PROJECT
41*6dbdd20aSAndroid Build Coastguard WorkerCI_SITE = 'https://ci.perfetto.dev'
42*6dbdd20aSAndroid Build Coastguard WorkerGCS_ARTIFACTS = 'perfetto-ci-artifacts'
43*6dbdd20aSAndroid Build Coastguard Worker
44*6dbdd20aSAndroid Build Coastguard WorkerJOB_TIMEOUT_SEC = 45 * 60  # 45 min
45*6dbdd20aSAndroid Build Coastguard WorkerCL_TIMEOUT_SEC = 60 * 60 * 3  # 3 hours
46*6dbdd20aSAndroid Build Coastguard WorkerLOGS_TTL_DAYS = 15
47*6dbdd20aSAndroid Build Coastguard WorkerTRUSTED_EMAILS = '^.*@google.com$'
48*6dbdd20aSAndroid Build Coastguard Worker
49*6dbdd20aSAndroid Build Coastguard WorkerGCE_REGIONS = 'us-west1'
50*6dbdd20aSAndroid Build Coastguard WorkerGCE_VM_NAME = 'ci-worker'
51*6dbdd20aSAndroid Build Coastguard WorkerGCE_VM_TYPE = 'c2d-standard-32'
52*6dbdd20aSAndroid Build Coastguard WorkerGCE_TEMPLATE = 'ci-worker-template'
53*6dbdd20aSAndroid Build Coastguard WorkerGCE_GROUP_NAME = 'ci'
54*6dbdd20aSAndroid Build Coastguard WorkerMAX_VMS_PER_REGION = 8
55*6dbdd20aSAndroid Build Coastguard WorkerNUM_WORKERS_PER_VM = 4
56*6dbdd20aSAndroid Build Coastguard Worker
57*6dbdd20aSAndroid Build Coastguard WorkerGCE_SCOPES = [
58*6dbdd20aSAndroid Build Coastguard Worker    'https://www.googleapis.com/auth/cloud-platform',
59*6dbdd20aSAndroid Build Coastguard Worker    'https://www.googleapis.com/auth/devstorage.read_write',
60*6dbdd20aSAndroid Build Coastguard Worker    'https://www.googleapis.com/auth/firebase.database',
61*6dbdd20aSAndroid Build Coastguard Worker    'https://www.googleapis.com/auth/logging.write',
62*6dbdd20aSAndroid Build Coastguard Worker    'https://www.googleapis.com/auth/monitoring.write',
63*6dbdd20aSAndroid Build Coastguard Worker    'https://www.googleapis.com/auth/trace.append',
64*6dbdd20aSAndroid Build Coastguard Worker    'https://www.googleapis.com/auth/userinfo.email',
65*6dbdd20aSAndroid Build Coastguard Worker]
66*6dbdd20aSAndroid Build Coastguard Worker
67*6dbdd20aSAndroid Build Coastguard Worker# Only variables starting with PERFETTO_ are propagated into the sandbox.
68*6dbdd20aSAndroid Build Coastguard WorkerJOB_CONFIGS = {
69*6dbdd20aSAndroid Build Coastguard Worker    'linux-clang-x86_64-debug': {
70*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS': 'is_debug=true is_hermetic_clang=false '
71*6dbdd20aSAndroid Build Coastguard Worker                                 'non_hermetic_clang_stdlib="libc++" '
72*6dbdd20aSAndroid Build Coastguard Worker                                 'enable_perfetto_merged_protos_check=true',
73*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/linux_tests.sh',
74*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '',
75*6dbdd20aSAndroid Build Coastguard Worker    },
76*6dbdd20aSAndroid Build Coastguard Worker    'linux-clang-x86_64-tsan': {
77*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS': 'is_debug=false is_tsan=true',
78*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/linux_tests.sh',
79*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '',
80*6dbdd20aSAndroid Build Coastguard Worker    },
81*6dbdd20aSAndroid Build Coastguard Worker    'linux-clang-x86_64-msan': {
82*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS': 'is_debug=false is_msan=true',
83*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/linux_tests.sh',
84*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '',
85*6dbdd20aSAndroid Build Coastguard Worker    },
86*6dbdd20aSAndroid Build Coastguard Worker    'linux-clang-x86_64-asan_lsan': {
87*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS': 'is_debug=false is_asan=true is_lsan=true',
88*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/linux_tests.sh',
89*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '',
90*6dbdd20aSAndroid Build Coastguard Worker    },
91*6dbdd20aSAndroid Build Coastguard Worker    'linux-clang-x86-release': {
92*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS': 'is_debug=false target_cpu="x86"',
93*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/linux_tests.sh',
94*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '',
95*6dbdd20aSAndroid Build Coastguard Worker    },
96*6dbdd20aSAndroid Build Coastguard Worker    'linux-gcc8-x86_64-release': {
97*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS':
98*6dbdd20aSAndroid Build Coastguard Worker            'is_debug=false is_clang=false enable_perfetto_grpc=true '
99*6dbdd20aSAndroid Build Coastguard Worker            'cc="gcc-8" cxx="g++-8"',
100*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/linux_tests.sh',
101*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '--grpc',
102*6dbdd20aSAndroid Build Coastguard Worker    },
103*6dbdd20aSAndroid Build Coastguard Worker    'android-clang-arm-release': {
104*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS':
105*6dbdd20aSAndroid Build Coastguard Worker            'is_debug=false target_os="android" target_cpu="arm"',
106*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT':
107*6dbdd20aSAndroid Build Coastguard Worker            'test/ci/android_tests.sh',
108*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS':
109*6dbdd20aSAndroid Build Coastguard Worker            '--android',
110*6dbdd20aSAndroid Build Coastguard Worker    },
111*6dbdd20aSAndroid Build Coastguard Worker    'linux-clang-x86_64-libfuzzer': {
112*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS': 'is_debug=false is_fuzzer=true is_asan=true',
113*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/fuzzer_tests.sh',
114*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '',
115*6dbdd20aSAndroid Build Coastguard Worker    },
116*6dbdd20aSAndroid Build Coastguard Worker    'linux-clang-x86_64-bazel': {
117*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS': '',
118*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/bazel_tests.sh',
119*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '',
120*6dbdd20aSAndroid Build Coastguard Worker    },
121*6dbdd20aSAndroid Build Coastguard Worker    'ui-clang-x86_64-release': {
122*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_GN_ARGS': 'is_debug=false',
123*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_TEST_SCRIPT': 'test/ci/ui_tests.sh',
124*6dbdd20aSAndroid Build Coastguard Worker        'PERFETTO_INSTALL_BUILD_DEPS_ARGS': '--ui',
125*6dbdd20aSAndroid Build Coastguard Worker    },
126*6dbdd20aSAndroid Build Coastguard Worker}
127*6dbdd20aSAndroid Build Coastguard Worker
128*6dbdd20aSAndroid Build Coastguard Workerif __name__ == '__main__':
129*6dbdd20aSAndroid Build Coastguard Worker  import os
130*6dbdd20aSAndroid Build Coastguard Worker  import json
131*6dbdd20aSAndroid Build Coastguard Worker  import re
132*6dbdd20aSAndroid Build Coastguard Worker  import sys
133*6dbdd20aSAndroid Build Coastguard Worker  vars = dict(kv for kv in locals().items() if re.match('^[A-Z0-9_]+$', kv[0]))
134*6dbdd20aSAndroid Build Coastguard Worker
135*6dbdd20aSAndroid Build Coastguard Worker  if len(sys.argv) > 1 and sys.argv[1] == 'makefile':
136*6dbdd20aSAndroid Build Coastguard Worker    deps_path = os.path.join(os.path.dirname(__file__), '.deps')
137*6dbdd20aSAndroid Build Coastguard Worker    if not os.path.exists(deps_path):
138*6dbdd20aSAndroid Build Coastguard Worker      os.mkdir(deps_path)
139*6dbdd20aSAndroid Build Coastguard Worker    gen_file = os.path.join(deps_path, 'config.mk')
140*6dbdd20aSAndroid Build Coastguard Worker
141*6dbdd20aSAndroid Build Coastguard Worker    try:
142*6dbdd20aSAndroid Build Coastguard Worker      literals = (int, long, basestring)
143*6dbdd20aSAndroid Build Coastguard Worker    except NameError:
144*6dbdd20aSAndroid Build Coastguard Worker      literals = (int, str)
145*6dbdd20aSAndroid Build Coastguard Worker
146*6dbdd20aSAndroid Build Coastguard Worker    with open(gen_file, 'w') as f:
147*6dbdd20aSAndroid Build Coastguard Worker      for k, v in vars.items():
148*6dbdd20aSAndroid Build Coastguard Worker        if isinstance(v, literals):
149*6dbdd20aSAndroid Build Coastguard Worker          f.write('override %s=%s\n' % (k, v))
150*6dbdd20aSAndroid Build Coastguard Worker        elif isinstance(v, list):
151*6dbdd20aSAndroid Build Coastguard Worker          f.write('override %s=%s\n' % (k, ','.join(v)))
152*6dbdd20aSAndroid Build Coastguard Worker
153*6dbdd20aSAndroid Build Coastguard Worker    print(gen_file)
154*6dbdd20aSAndroid Build Coastguard Worker
155*6dbdd20aSAndroid Build Coastguard Worker  if len(sys.argv) > 1 and sys.argv[1] == 'js':
156*6dbdd20aSAndroid Build Coastguard Worker    jsn = json.dumps(vars, indent=2)
157*6dbdd20aSAndroid Build Coastguard Worker    print('// Auto-generated by %s, do not edit.\n' %
158*6dbdd20aSAndroid Build Coastguard Worker          os.path.basename(__file__))
159*6dbdd20aSAndroid Build Coastguard Worker    print('\'use strict\';\n')
160*6dbdd20aSAndroid Build Coastguard Worker    print('const cfg = JSON.parse(`%s`);\n' % jsn.replace(r'\"', r'\\\"'))
161