xref: /aosp_15_r20/external/perfetto/ui/PRESUBMIT.py (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project
2*6dbdd20aSAndroid Build Coastguard Worker#
3*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*6dbdd20aSAndroid Build Coastguard Worker#
7*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*6dbdd20aSAndroid Build Coastguard Worker#
9*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard Workerfrom __future__ import print_function
16*6dbdd20aSAndroid Build Coastguard Workerimport time
17*6dbdd20aSAndroid Build Coastguard Workerimport subprocess
18*6dbdd20aSAndroid Build Coastguard Workerfrom os.path import relpath, dirname, join
19*6dbdd20aSAndroid Build Coastguard Worker
20*6dbdd20aSAndroid Build Coastguard WorkerUSE_PYTHON3 = True
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard Worker
23*6dbdd20aSAndroid Build Coastguard Workerdef RunAndReportIfLong(func, *args, **kargs):
24*6dbdd20aSAndroid Build Coastguard Worker  start = time.time()
25*6dbdd20aSAndroid Build Coastguard Worker  results = func(*args, **kargs)
26*6dbdd20aSAndroid Build Coastguard Worker  end = time.time()
27*6dbdd20aSAndroid Build Coastguard Worker  limit = 3.0  # seconds
28*6dbdd20aSAndroid Build Coastguard Worker  name = func.__name__
29*6dbdd20aSAndroid Build Coastguard Worker  runtime = end - start
30*6dbdd20aSAndroid Build Coastguard Worker  if runtime > limit:
31*6dbdd20aSAndroid Build Coastguard Worker    print("{} took >{:.2}s ({:.2}s)".format(name, limit, runtime))
32*6dbdd20aSAndroid Build Coastguard Worker  return results
33*6dbdd20aSAndroid Build Coastguard Worker
34*6dbdd20aSAndroid Build Coastguard Worker
35*6dbdd20aSAndroid Build Coastguard Workerdef CheckChange(input, output):
36*6dbdd20aSAndroid Build Coastguard Worker  results = []
37*6dbdd20aSAndroid Build Coastguard Worker  results += RunAndReportIfLong(CheckPrettierAndEslint, input, output)
38*6dbdd20aSAndroid Build Coastguard Worker  results += RunAndReportIfLong(CheckImports, input, output)
39*6dbdd20aSAndroid Build Coastguard Worker  results += RunAndReportIfLong(CheckAnyRachet, input, output)
40*6dbdd20aSAndroid Build Coastguard Worker  return results
41*6dbdd20aSAndroid Build Coastguard Worker
42*6dbdd20aSAndroid Build Coastguard Worker
43*6dbdd20aSAndroid Build Coastguard Workerdef CheckChangeOnUpload(input_api, output_api):
44*6dbdd20aSAndroid Build Coastguard Worker  return CheckChange(input_api, output_api)
45*6dbdd20aSAndroid Build Coastguard Worker
46*6dbdd20aSAndroid Build Coastguard Worker
47*6dbdd20aSAndroid Build Coastguard Workerdef CheckChangeOnCommit(input_api, output_api):
48*6dbdd20aSAndroid Build Coastguard Worker  return CheckChange(input_api, output_api)
49*6dbdd20aSAndroid Build Coastguard Worker
50*6dbdd20aSAndroid Build Coastguard Worker
51*6dbdd20aSAndroid Build Coastguard Workerdef CheckPrettierAndEslint(input_api, output_api):
52*6dbdd20aSAndroid Build Coastguard Worker  ui_path = input_api.PresubmitLocalPath()
53*6dbdd20aSAndroid Build Coastguard Worker  format_sources_path = join(ui_path, 'format-sources')
54*6dbdd20aSAndroid Build Coastguard Worker  cmd = [format_sources_path, '--check-only']
55*6dbdd20aSAndroid Build Coastguard Worker  if subprocess.call(cmd):
56*6dbdd20aSAndroid Build Coastguard Worker    s = ' '.join(cmd)
57*6dbdd20aSAndroid Build Coastguard Worker    return [
58*6dbdd20aSAndroid Build Coastguard Worker        output_api.PresubmitError(f"""Prettier/Eslint errors. To fix, run:
59*6dbdd20aSAndroid Build Coastguard Worker{format_sources_path}""")
60*6dbdd20aSAndroid Build Coastguard Worker    ]
61*6dbdd20aSAndroid Build Coastguard Worker  return []
62*6dbdd20aSAndroid Build Coastguard Worker
63*6dbdd20aSAndroid Build Coastguard Worker
64*6dbdd20aSAndroid Build Coastguard Workerdef CheckImports(input_api, output_api):
65*6dbdd20aSAndroid Build Coastguard Worker  path = input_api.os_path
66*6dbdd20aSAndroid Build Coastguard Worker  ui_path = input_api.PresubmitLocalPath()
67*6dbdd20aSAndroid Build Coastguard Worker  check_imports_path = join(dirname(ui_path), 'tools', 'check_imports')
68*6dbdd20aSAndroid Build Coastguard Worker
69*6dbdd20aSAndroid Build Coastguard Worker  def file_filter(x):
70*6dbdd20aSAndroid Build Coastguard Worker    return input_api.FilterSourceFile(
71*6dbdd20aSAndroid Build Coastguard Worker        x, files_to_check=[r'.*\.ts$', r'.*\.js$'])
72*6dbdd20aSAndroid Build Coastguard Worker
73*6dbdd20aSAndroid Build Coastguard Worker  files = input_api.AffectedSourceFiles(file_filter)
74*6dbdd20aSAndroid Build Coastguard Worker
75*6dbdd20aSAndroid Build Coastguard Worker  if not files:
76*6dbdd20aSAndroid Build Coastguard Worker    return []
77*6dbdd20aSAndroid Build Coastguard Worker
78*6dbdd20aSAndroid Build Coastguard Worker  if subprocess.call([check_imports_path]):
79*6dbdd20aSAndroid Build Coastguard Worker    return [output_api.PresubmitError(f"")]
80*6dbdd20aSAndroid Build Coastguard Worker  return []
81*6dbdd20aSAndroid Build Coastguard Worker
82*6dbdd20aSAndroid Build Coastguard Worker
83*6dbdd20aSAndroid Build Coastguard Workerdef CheckAnyRachet(input_api, output_api):
84*6dbdd20aSAndroid Build Coastguard Worker  path = input_api.os_path
85*6dbdd20aSAndroid Build Coastguard Worker  ui_path = input_api.PresubmitLocalPath()
86*6dbdd20aSAndroid Build Coastguard Worker  check_ratchet_path = join(dirname(ui_path), 'tools', 'check_ratchet')
87*6dbdd20aSAndroid Build Coastguard Worker
88*6dbdd20aSAndroid Build Coastguard Worker  def file_filter(x):
89*6dbdd20aSAndroid Build Coastguard Worker    return input_api.FilterSourceFile(x, files_to_check=[r'.*\.ts$'])
90*6dbdd20aSAndroid Build Coastguard Worker
91*6dbdd20aSAndroid Build Coastguard Worker  files = input_api.AffectedSourceFiles(file_filter)
92*6dbdd20aSAndroid Build Coastguard Worker
93*6dbdd20aSAndroid Build Coastguard Worker  if not files:
94*6dbdd20aSAndroid Build Coastguard Worker    return []
95*6dbdd20aSAndroid Build Coastguard Worker
96*6dbdd20aSAndroid Build Coastguard Worker  if subprocess.call([check_ratchet_path]):
97*6dbdd20aSAndroid Build Coastguard Worker    return [output_api.PresubmitError(f"")]
98*6dbdd20aSAndroid Build Coastguard Worker  return []
99