1cb93a386Sopenharmony_ci[
2cb93a386Sopenharmony_ci  {
3cb93a386Sopenharmony_ci    "cmd": [
4cb93a386Sopenharmony_ci      "vpython",
5cb93a386Sopenharmony_ci      "-u",
6cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
7cb93a386Sopenharmony_ci      "--json-output",
8cb93a386Sopenharmony_ci      "/path/to/tmp/json",
9cb93a386Sopenharmony_ci      "ensure-directory",
10cb93a386Sopenharmony_ci      "--mode",
11cb93a386Sopenharmony_ci      "0777",
12cb93a386Sopenharmony_ci      "[START_DIR]/tmp"
13cb93a386Sopenharmony_ci    ],
14cb93a386Sopenharmony_ci    "infra_step": true,
15cb93a386Sopenharmony_ci    "name": "makedirs tmp_dir"
16cb93a386Sopenharmony_ci  },
17cb93a386Sopenharmony_ci  {
18cb93a386Sopenharmony_ci    "cmd": [
19cb93a386Sopenharmony_ci      "python",
20cb93a386Sopenharmony_ci      "-u",
21cb93a386Sopenharmony_ci      "import os\nprint(os.environ.get('SWARMING_BOT_ID', ''))\n"
22cb93a386Sopenharmony_ci    ],
23cb93a386Sopenharmony_ci    "name": "get swarming bot id",
24cb93a386Sopenharmony_ci    "~followup_annotations": [
25cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
26cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_BOT_ID', ''))@@@",
27cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
28cb93a386Sopenharmony_ci    ]
29cb93a386Sopenharmony_ci  },
30cb93a386Sopenharmony_ci  {
31cb93a386Sopenharmony_ci    "cmd": [
32cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
33cb93a386Sopenharmony_ci      "shell",
34cb93a386Sopenharmony_ci      "mkdir",
35cb93a386Sopenharmony_ci      "-p",
36cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/resources"
37cb93a386Sopenharmony_ci    ],
38cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
39cb93a386Sopenharmony_ci    "env": {
40cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
41cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
42cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
43cb93a386Sopenharmony_ci    },
44cb93a386Sopenharmony_ci    "infra_step": true,
45cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/resources"
46cb93a386Sopenharmony_ci  },
47cb93a386Sopenharmony_ci  {
48cb93a386Sopenharmony_ci    "cmd": [
49cb93a386Sopenharmony_ci      "python",
50cb93a386Sopenharmony_ci      "-u",
51cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\nASAN_SETUP = sys.argv[2]\n\ndef wait_for_device():\n  while True:\n    time.sleep(5)\n    print('Waiting for device')\n    subprocess.check_output([ADB, 'wait-for-device'])\n    bit1 = subprocess.check_output([ADB, 'shell', 'getprop',\n                                   'dev.bootcomplete'])\n    bit2 = subprocess.check_output([ADB, 'shell', 'getprop',\n                                   'sys.boot_completed'])\n    if '1' in bit1 and '1' in bit2:\n      print('Device detected')\n      break\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\noutput = subprocess.check_output([ADB, 'disable-verity'])\nprint(output)\n\nif 'already disabled' not in output:\n  print('Rebooting device')\n  subprocess.check_output([ADB, 'reboot'])\n  wait_for_device()\n\ndef installASAN(revert=False):\n  # ASAN setup script is idempotent, either it installs it or\n  # says it's installed.  Returns True on success, false otherwise.\n  out = subprocess.check_output([ADB, 'wait-for-device'])\n  print(out)\n  cmd = [ASAN_SETUP]\n  if revert:\n    cmd = [ASAN_SETUP, '--revert']\n  process = subprocess.Popen(cmd, env={'ADB': ADB},\n                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n\n  # this also blocks until command finishes\n  (stdout, stderr) = process.communicate()\n  print(stdout)\n  print('Stderr: %s' % stderr)\n  return process.returncode == 0\n\nif not installASAN():\n  print('Trying to revert the ASAN install and then re-install')\n  # ASAN script sometimes has issues if it was interrupted or partially applied\n  # Try reverting it, then re-enabling it\n  if not installASAN(revert=True):\n    raise Exception('reverting ASAN install failed')\n\n  # Sleep because device does not reboot instantly\n  time.sleep(10)\n\n  if not installASAN():\n    raise Exception('Tried twice to setup ASAN and failed.')\n\n# Sleep because device does not reboot instantly\ntime.sleep(10)\nwait_for_device()\n# Sleep again to hopefully avoid error \"secure_mkdirs failed: No such file or\n# directory\" when pushing resources to the device.\ntime.sleep(60)\n",
52cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
53cb93a386Sopenharmony_ci      "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/bin/asan_device_setup"
54cb93a386Sopenharmony_ci    ],
55cb93a386Sopenharmony_ci    "env": {
56cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
57cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
58cb93a386Sopenharmony_ci    },
59cb93a386Sopenharmony_ci    "infra_step": true,
60cb93a386Sopenharmony_ci    "name": "Setting up device to run ASAN",
61cb93a386Sopenharmony_ci    "timeout": 300,
62cb93a386Sopenharmony_ci    "~followup_annotations": [
63cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
64cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
65cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
66cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
67cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
68cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
69cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ASAN_SETUP = sys.argv[2]@@@",
70cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
71cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@def wait_for_device():@@@",
72cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  while True:@@@",
73cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    time.sleep(5)@@@",
74cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    print('Waiting for device')@@@",
75cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    subprocess.check_output([ADB, 'wait-for-device'])@@@",
76cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    bit1 = subprocess.check_output([ADB, 'shell', 'getprop',@@@",
77cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                                   'dev.bootcomplete'])@@@",
78cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    bit2 = subprocess.check_output([ADB, 'shell', 'getprop',@@@",
79cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                                   'sys.boot_completed'])@@@",
80cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if '1' in bit1 and '1' in bit2:@@@",
81cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      print('Device detected')@@@",
82cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      break@@@",
83cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
84cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
85cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
86cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
87cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
88cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
89cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
90cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@output = subprocess.check_output([ADB, 'disable-verity'])@@@",
91cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
92cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
93cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'already disabled' not in output:@@@",
94cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('Rebooting device')@@@",
95cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  subprocess.check_output([ADB, 'reboot'])@@@",
96cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  wait_for_device()@@@",
97cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
98cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@def installASAN(revert=False):@@@",
99cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  # ASAN setup script is idempotent, either it installs it or@@@",
100cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  # says it's installed.  Returns True on success, false otherwise.@@@",
101cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  out = subprocess.check_output([ADB, 'wait-for-device'])@@@",
102cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print(out)@@@",
103cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  cmd = [ASAN_SETUP]@@@",
104cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  if revert:@@@",
105cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    cmd = [ASAN_SETUP, '--revert']@@@",
106cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  process = subprocess.Popen(cmd, env={'ADB': ADB},@@@",
107cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)@@@",
108cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
109cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  # this also blocks until command finishes@@@",
110cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  (stdout, stderr) = process.communicate()@@@",
111cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print(stdout)@@@",
112cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('Stderr: %s' % stderr)@@@",
113cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  return process.returncode == 0@@@",
114cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
115cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if not installASAN():@@@",
116cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('Trying to revert the ASAN install and then re-install')@@@",
117cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  # ASAN script sometimes has issues if it was interrupted or partially applied@@@",
118cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  # Try reverting it, then re-enabling it@@@",
119cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  if not installASAN(revert=True):@@@",
120cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    raise Exception('reverting ASAN install failed')@@@",
121cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
122cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  # Sleep because device does not reboot instantly@@@",
123cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  time.sleep(10)@@@",
124cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
125cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  if not installASAN():@@@",
126cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    raise Exception('Tried twice to setup ASAN and failed.')@@@",
127cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
128cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Sleep because device does not reboot instantly@@@",
129cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@time.sleep(10)@@@",
130cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@wait_for_device()@@@",
131cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Sleep again to hopefully avoid error \"secure_mkdirs failed: No such file or@@@",
132cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# directory\" when pushing resources to the device.@@@",
133cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@time.sleep(60)@@@",
134cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
135cb93a386Sopenharmony_ci    ]
136cb93a386Sopenharmony_ci  },
137cb93a386Sopenharmony_ci  {
138cb93a386Sopenharmony_ci    "cmd": [
139cb93a386Sopenharmony_ci      "python",
140cb93a386Sopenharmony_ci      "-u",
141cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n  print('CPU %d online already %d' % (cpu, value))\n  sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_status, value))\n",
142cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
143cb93a386Sopenharmony_ci      "0",
144cb93a386Sopenharmony_ci      "1"
145cb93a386Sopenharmony_ci    ],
146cb93a386Sopenharmony_ci    "env": {
147cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
148cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
149cb93a386Sopenharmony_ci    },
150cb93a386Sopenharmony_ci    "infra_step": true,
151cb93a386Sopenharmony_ci    "name": "Enabling CPU 0",
152cb93a386Sopenharmony_ci    "timeout": 30,
153cb93a386Sopenharmony_ci    "~followup_annotations": [
154cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
155cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
156cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
157cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
158cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
159cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
160cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
161cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@",
162cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
163cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
164cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
165cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
166cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
167cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
168cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
169cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
170cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@",
171cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
172cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
173cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@",
174cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('CPU %d online already %d' % (cpu, value))@@@",
175cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit()@@@",
176cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
177cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
178cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
179cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
180cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
181cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@",
182cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
183cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_status, value))@@@",
184cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
185cb93a386Sopenharmony_ci    ]
186cb93a386Sopenharmony_ci  },
187cb93a386Sopenharmony_ci  {
188cb93a386Sopenharmony_ci    "cmd": [
189cb93a386Sopenharmony_ci      "python",
190cb93a386Sopenharmony_ci      "-u",
191cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n  print('CPU %d online already %d' % (cpu, value))\n  sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_status, value))\n",
192cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
193cb93a386Sopenharmony_ci      "1",
194cb93a386Sopenharmony_ci      "1"
195cb93a386Sopenharmony_ci    ],
196cb93a386Sopenharmony_ci    "env": {
197cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
198cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
199cb93a386Sopenharmony_ci    },
200cb93a386Sopenharmony_ci    "infra_step": true,
201cb93a386Sopenharmony_ci    "name": "Enabling CPU 1",
202cb93a386Sopenharmony_ci    "timeout": 30,
203cb93a386Sopenharmony_ci    "~followup_annotations": [
204cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
205cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
206cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
207cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
208cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
209cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
210cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
211cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@",
212cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
213cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
214cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
215cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
216cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
217cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
218cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
219cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
220cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@",
221cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
222cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
223cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@",
224cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('CPU %d online already %d' % (cpu, value))@@@",
225cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit()@@@",
226cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
227cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
228cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
229cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
230cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
231cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@",
232cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
233cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_status, value))@@@",
234cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
235cb93a386Sopenharmony_ci    ]
236cb93a386Sopenharmony_ci  },
237cb93a386Sopenharmony_ci  {
238cb93a386Sopenharmony_ci    "cmd": [
239cb93a386Sopenharmony_ci      "python",
240cb93a386Sopenharmony_ci      "-u",
241cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n  print('CPU %d online already %d' % (cpu, value))\n  sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_status, value))\n",
242cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
243cb93a386Sopenharmony_ci      "2",
244cb93a386Sopenharmony_ci      "1"
245cb93a386Sopenharmony_ci    ],
246cb93a386Sopenharmony_ci    "env": {
247cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
248cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
249cb93a386Sopenharmony_ci    },
250cb93a386Sopenharmony_ci    "infra_step": true,
251cb93a386Sopenharmony_ci    "name": "Enabling CPU 2",
252cb93a386Sopenharmony_ci    "timeout": 30,
253cb93a386Sopenharmony_ci    "~followup_annotations": [
254cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
255cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
256cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
257cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
258cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
259cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
260cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
261cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@",
262cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
263cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
264cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
265cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
266cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
267cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
268cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
269cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
270cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@",
271cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
272cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
273cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@",
274cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('CPU %d online already %d' % (cpu, value))@@@",
275cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit()@@@",
276cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
277cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
278cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
279cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
280cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
281cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@",
282cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
283cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_status, value))@@@",
284cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
285cb93a386Sopenharmony_ci    ]
286cb93a386Sopenharmony_ci  },
287cb93a386Sopenharmony_ci  {
288cb93a386Sopenharmony_ci    "cmd": [
289cb93a386Sopenharmony_ci      "python",
290cb93a386Sopenharmony_ci      "-u",
291cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n  print('CPU %d online already %d' % (cpu, value))\n  sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_status, value))\n",
292cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
293cb93a386Sopenharmony_ci      "3",
294cb93a386Sopenharmony_ci      "1"
295cb93a386Sopenharmony_ci    ],
296cb93a386Sopenharmony_ci    "env": {
297cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
298cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
299cb93a386Sopenharmony_ci    },
300cb93a386Sopenharmony_ci    "infra_step": true,
301cb93a386Sopenharmony_ci    "name": "Enabling CPU 3",
302cb93a386Sopenharmony_ci    "timeout": 30,
303cb93a386Sopenharmony_ci    "~followup_annotations": [
304cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
305cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
306cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
307cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
308cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
309cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
310cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
311cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@",
312cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
313cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
314cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
315cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
316cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
317cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
318cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
319cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
320cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@",
321cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
322cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
323cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@",
324cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('CPU %d online already %d' % (cpu, value))@@@",
325cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit()@@@",
326cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
327cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
328cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
329cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
330cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
331cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@",
332cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
333cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_status, value))@@@",
334cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
335cb93a386Sopenharmony_ci    ]
336cb93a386Sopenharmony_ci  },
337cb93a386Sopenharmony_ci  {
338cb93a386Sopenharmony_ci    "cmd": [
339cb93a386Sopenharmony_ci      "python",
340cb93a386Sopenharmony_ci      "-u",
341cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n  raise Exception('(actual, expected) (%s, %s)'\n                  % (actual_gov, gov))\n",
342cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
343cb93a386Sopenharmony_ci      "4",
344cb93a386Sopenharmony_ci      "ondemand"
345cb93a386Sopenharmony_ci    ],
346cb93a386Sopenharmony_ci    "env": {
347cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
348cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
349cb93a386Sopenharmony_ci    },
350cb93a386Sopenharmony_ci    "infra_step": true,
351cb93a386Sopenharmony_ci    "name": "Set CPU 4's governor to ondemand",
352cb93a386Sopenharmony_ci    "timeout": 30,
353cb93a386Sopenharmony_ci    "~followup_annotations": [
354cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
355cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
356cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
357cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
358cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
359cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
360cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
361cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@",
362cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
363cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
364cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
365cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
366cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
367cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
368cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
369cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@",
370cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@",
371cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@",
372cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@",
373cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@",
374cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %s)'@@@",
375cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_gov, gov))@@@",
376cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
377cb93a386Sopenharmony_ci    ]
378cb93a386Sopenharmony_ci  },
379cb93a386Sopenharmony_ci  {
380cb93a386Sopenharmony_ci    "cmd": [
381cb93a386Sopenharmony_ci      "python",
382cb93a386Sopenharmony_ci      "-u",
383cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint(log)\nif 'cannot' in log:\n  raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n  raise Exception('(actual, expected) (%s, %s)'\n                  % (actual_gov, gov))\n",
384cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
385cb93a386Sopenharmony_ci      "0",
386cb93a386Sopenharmony_ci      "ondemand"
387cb93a386Sopenharmony_ci    ],
388cb93a386Sopenharmony_ci    "env": {
389cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
390cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
391cb93a386Sopenharmony_ci    },
392cb93a386Sopenharmony_ci    "infra_step": true,
393cb93a386Sopenharmony_ci    "name": "Set CPU 0's governor to ondemand",
394cb93a386Sopenharmony_ci    "timeout": 30,
395cb93a386Sopenharmony_ci    "~followup_annotations": [
396cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
397cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
398cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
399cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
400cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
401cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
402cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
403cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@",
404cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
405cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
406cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
407cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
408cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
409cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
410cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
411cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@",
412cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@",
413cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@",
414cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@",
415cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@",
416cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %s)'@@@",
417cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_gov, gov))@@@",
418cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
419cb93a386Sopenharmony_ci    ]
420cb93a386Sopenharmony_ci  },
421cb93a386Sopenharmony_ci  {
422cb93a386Sopenharmony_ci    "cmd": [
423cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
424cb93a386Sopenharmony_ci      "push",
425cb93a386Sopenharmony_ci      "[START_DIR]/build/dm",
426cb93a386Sopenharmony_ci      "/data/local/tmp/"
427cb93a386Sopenharmony_ci    ],
428cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
429cb93a386Sopenharmony_ci    "env": {
430cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
431cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
432cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
433cb93a386Sopenharmony_ci    },
434cb93a386Sopenharmony_ci    "infra_step": true,
435cb93a386Sopenharmony_ci    "name": "push dm"
436cb93a386Sopenharmony_ci  },
437cb93a386Sopenharmony_ci  {
438cb93a386Sopenharmony_ci    "cmd": [
439cb93a386Sopenharmony_ci      "vpython",
440cb93a386Sopenharmony_ci      "-u",
441cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
442cb93a386Sopenharmony_ci      "--json-output",
443cb93a386Sopenharmony_ci      "/path/to/tmp/json",
444cb93a386Sopenharmony_ci      "glob",
445cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources",
446cb93a386Sopenharmony_ci      "*"
447cb93a386Sopenharmony_ci    ],
448cb93a386Sopenharmony_ci    "infra_step": true,
449cb93a386Sopenharmony_ci    "name": "ls [START_DIR]/skia/resources/*",
450cb93a386Sopenharmony_ci    "~followup_annotations": [
451cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skia/resources/bar.jpg@@@",
452cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skia/resources/foo.png@@@",
453cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
454cb93a386Sopenharmony_ci    ]
455cb93a386Sopenharmony_ci  },
456cb93a386Sopenharmony_ci  {
457cb93a386Sopenharmony_ci    "cmd": [
458cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
459cb93a386Sopenharmony_ci      "push",
460cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources/bar.jpg",
461cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources/foo.png",
462cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/resources"
463cb93a386Sopenharmony_ci    ],
464cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
465cb93a386Sopenharmony_ci    "env": {
466cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
467cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
468cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
469cb93a386Sopenharmony_ci    },
470cb93a386Sopenharmony_ci    "infra_step": true,
471cb93a386Sopenharmony_ci    "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources"
472cb93a386Sopenharmony_ci  },
473cb93a386Sopenharmony_ci  {
474cb93a386Sopenharmony_ci    "cmd": [
475cb93a386Sopenharmony_ci      "vpython",
476cb93a386Sopenharmony_ci      "-u",
477cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
478cb93a386Sopenharmony_ci      "--json-output",
479cb93a386Sopenharmony_ci      "/path/to/tmp/json",
480cb93a386Sopenharmony_ci      "copy",
481cb93a386Sopenharmony_ci      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
482cb93a386Sopenharmony_ci      "/path/to/tmp/"
483cb93a386Sopenharmony_ci    ],
484cb93a386Sopenharmony_ci    "infra_step": true,
485cb93a386Sopenharmony_ci    "name": "Get skp VERSION",
486cb93a386Sopenharmony_ci    "~followup_annotations": [
487cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@VERSION@42@@@",
488cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@VERSION@@@"
489cb93a386Sopenharmony_ci    ]
490cb93a386Sopenharmony_ci  },
491cb93a386Sopenharmony_ci  {
492cb93a386Sopenharmony_ci    "cmd": [
493cb93a386Sopenharmony_ci      "vpython",
494cb93a386Sopenharmony_ci      "-u",
495cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
496cb93a386Sopenharmony_ci      "--json-output",
497cb93a386Sopenharmony_ci      "/path/to/tmp/json",
498cb93a386Sopenharmony_ci      "copy",
499cb93a386Sopenharmony_ci      "42",
500cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SKP_VERSION"
501cb93a386Sopenharmony_ci    ],
502cb93a386Sopenharmony_ci    "infra_step": true,
503cb93a386Sopenharmony_ci    "name": "write SKP_VERSION",
504cb93a386Sopenharmony_ci    "~followup_annotations": [
505cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
506cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@SKP_VERSION@@@"
507cb93a386Sopenharmony_ci    ]
508cb93a386Sopenharmony_ci  },
509cb93a386Sopenharmony_ci  {
510cb93a386Sopenharmony_ci    "cmd": [
511cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
512cb93a386Sopenharmony_ci      "shell",
513cb93a386Sopenharmony_ci      "cat",
514cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
515cb93a386Sopenharmony_ci    ],
516cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
517cb93a386Sopenharmony_ci    "env": {
518cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
519cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
520cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
521cb93a386Sopenharmony_ci    },
522cb93a386Sopenharmony_ci    "infra_step": true,
523cb93a386Sopenharmony_ci    "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION"
524cb93a386Sopenharmony_ci  },
525cb93a386Sopenharmony_ci  {
526cb93a386Sopenharmony_ci    "cmd": [
527cb93a386Sopenharmony_ci      "python",
528cb93a386Sopenharmony_ci      "-u",
529cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
530cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
531cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
532cb93a386Sopenharmony_ci    ],
533cb93a386Sopenharmony_ci    "env": {
534cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
535cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
536cb93a386Sopenharmony_ci    },
537cb93a386Sopenharmony_ci    "infra_step": true,
538cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION",
539cb93a386Sopenharmony_ci    "~followup_annotations": [
540cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
541cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
542cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
543cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
544cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
545cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
546cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
547cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
548cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
549cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
550cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
551cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
552cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
553cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
554cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
555cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
556cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
557cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
558cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
559cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
560cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
561cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
562cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
563cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
564cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
565cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
566cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
567cb93a386Sopenharmony_ci    ]
568cb93a386Sopenharmony_ci  },
569cb93a386Sopenharmony_ci  {
570cb93a386Sopenharmony_ci    "cmd": [
571cb93a386Sopenharmony_ci      "python",
572cb93a386Sopenharmony_ci      "-u",
573cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
574cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
575cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/skps"
576cb93a386Sopenharmony_ci    ],
577cb93a386Sopenharmony_ci    "env": {
578cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
579cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
580cb93a386Sopenharmony_ci    },
581cb93a386Sopenharmony_ci    "infra_step": true,
582cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/skps",
583cb93a386Sopenharmony_ci    "~followup_annotations": [
584cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
585cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
586cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
587cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
588cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
589cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
590cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
591cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
592cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
593cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
594cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
595cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
596cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
597cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
598cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
599cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
600cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
601cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
602cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
603cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
604cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
605cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
606cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
607cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
608cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
609cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
610cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
611cb93a386Sopenharmony_ci    ]
612cb93a386Sopenharmony_ci  },
613cb93a386Sopenharmony_ci  {
614cb93a386Sopenharmony_ci    "cmd": [
615cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
616cb93a386Sopenharmony_ci      "shell",
617cb93a386Sopenharmony_ci      "mkdir",
618cb93a386Sopenharmony_ci      "-p",
619cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/skps"
620cb93a386Sopenharmony_ci    ],
621cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
622cb93a386Sopenharmony_ci    "env": {
623cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
624cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
625cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
626cb93a386Sopenharmony_ci    },
627cb93a386Sopenharmony_ci    "infra_step": true,
628cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/skps"
629cb93a386Sopenharmony_ci  },
630cb93a386Sopenharmony_ci  {
631cb93a386Sopenharmony_ci    "cmd": [
632cb93a386Sopenharmony_ci      "vpython",
633cb93a386Sopenharmony_ci      "-u",
634cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
635cb93a386Sopenharmony_ci      "--json-output",
636cb93a386Sopenharmony_ci      "/path/to/tmp/json",
637cb93a386Sopenharmony_ci      "glob",
638cb93a386Sopenharmony_ci      "[START_DIR]/skp",
639cb93a386Sopenharmony_ci      "*"
640cb93a386Sopenharmony_ci    ],
641cb93a386Sopenharmony_ci    "infra_step": true,
642cb93a386Sopenharmony_ci    "name": "ls [START_DIR]/skp/*",
643cb93a386Sopenharmony_ci    "~followup_annotations": [
644cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skp/bar.jpg@@@",
645cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skp/foo.png@@@",
646cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
647cb93a386Sopenharmony_ci    ]
648cb93a386Sopenharmony_ci  },
649cb93a386Sopenharmony_ci  {
650cb93a386Sopenharmony_ci    "cmd": [
651cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
652cb93a386Sopenharmony_ci      "push",
653cb93a386Sopenharmony_ci      "[START_DIR]/skp/bar.jpg",
654cb93a386Sopenharmony_ci      "[START_DIR]/skp/foo.png",
655cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/skps"
656cb93a386Sopenharmony_ci    ],
657cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
658cb93a386Sopenharmony_ci    "env": {
659cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
660cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
661cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
662cb93a386Sopenharmony_ci    },
663cb93a386Sopenharmony_ci    "infra_step": true,
664cb93a386Sopenharmony_ci    "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps"
665cb93a386Sopenharmony_ci  },
666cb93a386Sopenharmony_ci  {
667cb93a386Sopenharmony_ci    "cmd": [
668cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
669cb93a386Sopenharmony_ci      "push",
670cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SKP_VERSION",
671cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
672cb93a386Sopenharmony_ci    ],
673cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
674cb93a386Sopenharmony_ci    "env": {
675cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
676cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
677cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
678cb93a386Sopenharmony_ci    },
679cb93a386Sopenharmony_ci    "infra_step": true,
680cb93a386Sopenharmony_ci    "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION"
681cb93a386Sopenharmony_ci  },
682cb93a386Sopenharmony_ci  {
683cb93a386Sopenharmony_ci    "cmd": [
684cb93a386Sopenharmony_ci      "vpython",
685cb93a386Sopenharmony_ci      "-u",
686cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
687cb93a386Sopenharmony_ci      "--json-output",
688cb93a386Sopenharmony_ci      "/path/to/tmp/json",
689cb93a386Sopenharmony_ci      "copy",
690cb93a386Sopenharmony_ci      "[START_DIR]/skia/infra/bots/assets/skimage/VERSION",
691cb93a386Sopenharmony_ci      "/path/to/tmp/"
692cb93a386Sopenharmony_ci    ],
693cb93a386Sopenharmony_ci    "infra_step": true,
694cb93a386Sopenharmony_ci    "name": "Get skimage VERSION",
695cb93a386Sopenharmony_ci    "~followup_annotations": [
696cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@VERSION@42@@@",
697cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@VERSION@@@"
698cb93a386Sopenharmony_ci    ]
699cb93a386Sopenharmony_ci  },
700cb93a386Sopenharmony_ci  {
701cb93a386Sopenharmony_ci    "cmd": [
702cb93a386Sopenharmony_ci      "vpython",
703cb93a386Sopenharmony_ci      "-u",
704cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
705cb93a386Sopenharmony_ci      "--json-output",
706cb93a386Sopenharmony_ci      "/path/to/tmp/json",
707cb93a386Sopenharmony_ci      "copy",
708cb93a386Sopenharmony_ci      "42",
709cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SK_IMAGE_VERSION"
710cb93a386Sopenharmony_ci    ],
711cb93a386Sopenharmony_ci    "infra_step": true,
712cb93a386Sopenharmony_ci    "name": "write SK_IMAGE_VERSION",
713cb93a386Sopenharmony_ci    "~followup_annotations": [
714cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@",
715cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@"
716cb93a386Sopenharmony_ci    ]
717cb93a386Sopenharmony_ci  },
718cb93a386Sopenharmony_ci  {
719cb93a386Sopenharmony_ci    "cmd": [
720cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
721cb93a386Sopenharmony_ci      "shell",
722cb93a386Sopenharmony_ci      "cat",
723cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
724cb93a386Sopenharmony_ci    ],
725cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
726cb93a386Sopenharmony_ci    "env": {
727cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
728cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
729cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
730cb93a386Sopenharmony_ci    },
731cb93a386Sopenharmony_ci    "infra_step": true,
732cb93a386Sopenharmony_ci    "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
733cb93a386Sopenharmony_ci  },
734cb93a386Sopenharmony_ci  {
735cb93a386Sopenharmony_ci    "cmd": [
736cb93a386Sopenharmony_ci      "python",
737cb93a386Sopenharmony_ci      "-u",
738cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
739cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
740cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
741cb93a386Sopenharmony_ci    ],
742cb93a386Sopenharmony_ci    "env": {
743cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
744cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
745cb93a386Sopenharmony_ci    },
746cb93a386Sopenharmony_ci    "infra_step": true,
747cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION",
748cb93a386Sopenharmony_ci    "~followup_annotations": [
749cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
750cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
751cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
752cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
753cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
754cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
755cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
756cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
757cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
758cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
759cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
760cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
761cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
762cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
763cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
764cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
765cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
766cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
767cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
768cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
769cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
770cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
771cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
772cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
773cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
774cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
775cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
776cb93a386Sopenharmony_ci    ]
777cb93a386Sopenharmony_ci  },
778cb93a386Sopenharmony_ci  {
779cb93a386Sopenharmony_ci    "cmd": [
780cb93a386Sopenharmony_ci      "python",
781cb93a386Sopenharmony_ci      "-u",
782cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
783cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
784cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/images"
785cb93a386Sopenharmony_ci    ],
786cb93a386Sopenharmony_ci    "env": {
787cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
788cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
789cb93a386Sopenharmony_ci    },
790cb93a386Sopenharmony_ci    "infra_step": true,
791cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/images",
792cb93a386Sopenharmony_ci    "~followup_annotations": [
793cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
794cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
795cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
796cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
797cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
798cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
799cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
800cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
801cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
802cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
803cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
804cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
805cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
806cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
807cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
808cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
809cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
810cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
811cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
812cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
813cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
814cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
815cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
816cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
817cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
818cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
819cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
820cb93a386Sopenharmony_ci    ]
821cb93a386Sopenharmony_ci  },
822cb93a386Sopenharmony_ci  {
823cb93a386Sopenharmony_ci    "cmd": [
824cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
825cb93a386Sopenharmony_ci      "shell",
826cb93a386Sopenharmony_ci      "mkdir",
827cb93a386Sopenharmony_ci      "-p",
828cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/images"
829cb93a386Sopenharmony_ci    ],
830cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
831cb93a386Sopenharmony_ci    "env": {
832cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
833cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
834cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
835cb93a386Sopenharmony_ci    },
836cb93a386Sopenharmony_ci    "infra_step": true,
837cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/images"
838cb93a386Sopenharmony_ci  },
839cb93a386Sopenharmony_ci  {
840cb93a386Sopenharmony_ci    "cmd": [
841cb93a386Sopenharmony_ci      "vpython",
842cb93a386Sopenharmony_ci      "-u",
843cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
844cb93a386Sopenharmony_ci      "--json-output",
845cb93a386Sopenharmony_ci      "/path/to/tmp/json",
846cb93a386Sopenharmony_ci      "glob",
847cb93a386Sopenharmony_ci      "[START_DIR]/skimage",
848cb93a386Sopenharmony_ci      "*"
849cb93a386Sopenharmony_ci    ],
850cb93a386Sopenharmony_ci    "infra_step": true,
851cb93a386Sopenharmony_ci    "name": "ls [START_DIR]/skimage/*",
852cb93a386Sopenharmony_ci    "~followup_annotations": [
853cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skimage/bar.jpg@@@",
854cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skimage/foo.png@@@",
855cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
856cb93a386Sopenharmony_ci    ]
857cb93a386Sopenharmony_ci  },
858cb93a386Sopenharmony_ci  {
859cb93a386Sopenharmony_ci    "cmd": [
860cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
861cb93a386Sopenharmony_ci      "push",
862cb93a386Sopenharmony_ci      "[START_DIR]/skimage/bar.jpg",
863cb93a386Sopenharmony_ci      "[START_DIR]/skimage/foo.png",
864cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/images"
865cb93a386Sopenharmony_ci    ],
866cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
867cb93a386Sopenharmony_ci    "env": {
868cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
869cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
870cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
871cb93a386Sopenharmony_ci    },
872cb93a386Sopenharmony_ci    "infra_step": true,
873cb93a386Sopenharmony_ci    "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images"
874cb93a386Sopenharmony_ci  },
875cb93a386Sopenharmony_ci  {
876cb93a386Sopenharmony_ci    "cmd": [
877cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
878cb93a386Sopenharmony_ci      "push",
879cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SK_IMAGE_VERSION",
880cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
881cb93a386Sopenharmony_ci    ],
882cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
883cb93a386Sopenharmony_ci    "env": {
884cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
885cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
886cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
887cb93a386Sopenharmony_ci    },
888cb93a386Sopenharmony_ci    "infra_step": true,
889cb93a386Sopenharmony_ci    "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
890cb93a386Sopenharmony_ci  },
891cb93a386Sopenharmony_ci  {
892cb93a386Sopenharmony_ci    "cmd": [
893cb93a386Sopenharmony_ci      "vpython",
894cb93a386Sopenharmony_ci      "-u",
895cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
896cb93a386Sopenharmony_ci      "--json-output",
897cb93a386Sopenharmony_ci      "/path/to/tmp/json",
898cb93a386Sopenharmony_ci      "copy",
899cb93a386Sopenharmony_ci      "[START_DIR]/skia/infra/bots/assets/svg/VERSION",
900cb93a386Sopenharmony_ci      "/path/to/tmp/"
901cb93a386Sopenharmony_ci    ],
902cb93a386Sopenharmony_ci    "infra_step": true,
903cb93a386Sopenharmony_ci    "name": "Get svg VERSION",
904cb93a386Sopenharmony_ci    "~followup_annotations": [
905cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@VERSION@42@@@",
906cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@VERSION@@@"
907cb93a386Sopenharmony_ci    ]
908cb93a386Sopenharmony_ci  },
909cb93a386Sopenharmony_ci  {
910cb93a386Sopenharmony_ci    "cmd": [
911cb93a386Sopenharmony_ci      "vpython",
912cb93a386Sopenharmony_ci      "-u",
913cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
914cb93a386Sopenharmony_ci      "--json-output",
915cb93a386Sopenharmony_ci      "/path/to/tmp/json",
916cb93a386Sopenharmony_ci      "copy",
917cb93a386Sopenharmony_ci      "42",
918cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SVG_VERSION"
919cb93a386Sopenharmony_ci    ],
920cb93a386Sopenharmony_ci    "infra_step": true,
921cb93a386Sopenharmony_ci    "name": "write SVG_VERSION",
922cb93a386Sopenharmony_ci    "~followup_annotations": [
923cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@SVG_VERSION@42@@@",
924cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@SVG_VERSION@@@"
925cb93a386Sopenharmony_ci    ]
926cb93a386Sopenharmony_ci  },
927cb93a386Sopenharmony_ci  {
928cb93a386Sopenharmony_ci    "cmd": [
929cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
930cb93a386Sopenharmony_ci      "shell",
931cb93a386Sopenharmony_ci      "cat",
932cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
933cb93a386Sopenharmony_ci    ],
934cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
935cb93a386Sopenharmony_ci    "env": {
936cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
937cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
938cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
939cb93a386Sopenharmony_ci    },
940cb93a386Sopenharmony_ci    "infra_step": true,
941cb93a386Sopenharmony_ci    "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION"
942cb93a386Sopenharmony_ci  },
943cb93a386Sopenharmony_ci  {
944cb93a386Sopenharmony_ci    "cmd": [
945cb93a386Sopenharmony_ci      "python",
946cb93a386Sopenharmony_ci      "-u",
947cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
948cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
949cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
950cb93a386Sopenharmony_ci    ],
951cb93a386Sopenharmony_ci    "env": {
952cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
953cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
954cb93a386Sopenharmony_ci    },
955cb93a386Sopenharmony_ci    "infra_step": true,
956cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION",
957cb93a386Sopenharmony_ci    "~followup_annotations": [
958cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
959cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
960cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
961cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
962cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
963cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
964cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
965cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
966cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
967cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
968cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
969cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
970cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
971cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
972cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
973cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
974cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
975cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
976cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
977cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
978cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
979cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
980cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
981cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
982cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
983cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
984cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
985cb93a386Sopenharmony_ci    ]
986cb93a386Sopenharmony_ci  },
987cb93a386Sopenharmony_ci  {
988cb93a386Sopenharmony_ci    "cmd": [
989cb93a386Sopenharmony_ci      "python",
990cb93a386Sopenharmony_ci      "-u",
991cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
992cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
993cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/svgs"
994cb93a386Sopenharmony_ci    ],
995cb93a386Sopenharmony_ci    "env": {
996cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
997cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
998cb93a386Sopenharmony_ci    },
999cb93a386Sopenharmony_ci    "infra_step": true,
1000cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/svgs",
1001cb93a386Sopenharmony_ci    "~followup_annotations": [
1002cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1003cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1004cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1005cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1006cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
1007cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
1008cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
1009cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
1010cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
1011cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
1012cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
1013cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1014cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
1015cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
1016cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
1017cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
1018cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
1019cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
1020cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
1021cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
1022cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
1023cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
1024cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
1025cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
1026cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
1027cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
1028cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1029cb93a386Sopenharmony_ci    ]
1030cb93a386Sopenharmony_ci  },
1031cb93a386Sopenharmony_ci  {
1032cb93a386Sopenharmony_ci    "cmd": [
1033cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1034cb93a386Sopenharmony_ci      "shell",
1035cb93a386Sopenharmony_ci      "mkdir",
1036cb93a386Sopenharmony_ci      "-p",
1037cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/svgs"
1038cb93a386Sopenharmony_ci    ],
1039cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1040cb93a386Sopenharmony_ci    "env": {
1041cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1042cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1043cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1044cb93a386Sopenharmony_ci    },
1045cb93a386Sopenharmony_ci    "infra_step": true,
1046cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs"
1047cb93a386Sopenharmony_ci  },
1048cb93a386Sopenharmony_ci  {
1049cb93a386Sopenharmony_ci    "cmd": [
1050cb93a386Sopenharmony_ci      "vpython",
1051cb93a386Sopenharmony_ci      "-u",
1052cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1053cb93a386Sopenharmony_ci      "--json-output",
1054cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1055cb93a386Sopenharmony_ci      "glob",
1056cb93a386Sopenharmony_ci      "[START_DIR]/svg",
1057cb93a386Sopenharmony_ci      "*"
1058cb93a386Sopenharmony_ci    ],
1059cb93a386Sopenharmony_ci    "infra_step": true,
1060cb93a386Sopenharmony_ci    "name": "ls [START_DIR]/svg/*",
1061cb93a386Sopenharmony_ci    "~followup_annotations": [
1062cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/svg/bar.jpg@@@",
1063cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/svg/foo.png@@@",
1064cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
1065cb93a386Sopenharmony_ci    ]
1066cb93a386Sopenharmony_ci  },
1067cb93a386Sopenharmony_ci  {
1068cb93a386Sopenharmony_ci    "cmd": [
1069cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1070cb93a386Sopenharmony_ci      "push",
1071cb93a386Sopenharmony_ci      "[START_DIR]/svg/bar.jpg",
1072cb93a386Sopenharmony_ci      "[START_DIR]/svg/foo.png",
1073cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/svgs"
1074cb93a386Sopenharmony_ci    ],
1075cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1076cb93a386Sopenharmony_ci    "env": {
1077cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1078cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1079cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1080cb93a386Sopenharmony_ci    },
1081cb93a386Sopenharmony_ci    "infra_step": true,
1082cb93a386Sopenharmony_ci    "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs"
1083cb93a386Sopenharmony_ci  },
1084cb93a386Sopenharmony_ci  {
1085cb93a386Sopenharmony_ci    "cmd": [
1086cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1087cb93a386Sopenharmony_ci      "push",
1088cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SVG_VERSION",
1089cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
1090cb93a386Sopenharmony_ci    ],
1091cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1092cb93a386Sopenharmony_ci    "env": {
1093cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1094cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1095cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1096cb93a386Sopenharmony_ci    },
1097cb93a386Sopenharmony_ci    "infra_step": true,
1098cb93a386Sopenharmony_ci    "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION"
1099cb93a386Sopenharmony_ci  },
1100cb93a386Sopenharmony_ci  {
1101cb93a386Sopenharmony_ci    "cmd": [
1102cb93a386Sopenharmony_ci      "python",
1103cb93a386Sopenharmony_ci      "-u",
1104cb93a386Sopenharmony_ci      "import os\nprint(os.environ.get('SWARMING_TASK_ID', ''))\n"
1105cb93a386Sopenharmony_ci    ],
1106cb93a386Sopenharmony_ci    "name": "get swarming task id",
1107cb93a386Sopenharmony_ci    "~followup_annotations": [
1108cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
1109cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_TASK_ID', ''))@@@",
1110cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1111cb93a386Sopenharmony_ci    ]
1112cb93a386Sopenharmony_ci  },
1113cb93a386Sopenharmony_ci  {
1114cb93a386Sopenharmony_ci    "cmd": [
1115cb93a386Sopenharmony_ci      "vpython",
1116cb93a386Sopenharmony_ci      "-u",
1117cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1118cb93a386Sopenharmony_ci      "--json-output",
1119cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1120cb93a386Sopenharmony_ci      "copy",
1121cb93a386Sopenharmony_ci      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --example --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs/svg; echo $? >/data/local/tmp/rc",
1122cb93a386Sopenharmony_ci      "[START_DIR]/tmp/dm.sh"
1123cb93a386Sopenharmony_ci    ],
1124cb93a386Sopenharmony_ci    "env": {
1125cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1126cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1127cb93a386Sopenharmony_ci    },
1128cb93a386Sopenharmony_ci    "infra_step": true,
1129cb93a386Sopenharmony_ci    "name": "write dm.sh",
1130cb93a386Sopenharmony_ci    "~followup_annotations": [
1131cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --example --flags --properties bot skia-bot-123 key1 value1 task 123456 --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --svgs /sdcard/revenge_of_the_skiabot/svgs/svg; echo $? >/data/local/tmp/rc@@@",
1132cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@dm.sh@@@"
1133cb93a386Sopenharmony_ci    ]
1134cb93a386Sopenharmony_ci  },
1135cb93a386Sopenharmony_ci  {
1136cb93a386Sopenharmony_ci    "cmd": [
1137cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1138cb93a386Sopenharmony_ci      "push",
1139cb93a386Sopenharmony_ci      "[START_DIR]/tmp/dm.sh",
1140cb93a386Sopenharmony_ci      "/data/local/tmp/"
1141cb93a386Sopenharmony_ci    ],
1142cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1143cb93a386Sopenharmony_ci    "env": {
1144cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1145cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1146cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1147cb93a386Sopenharmony_ci    },
1148cb93a386Sopenharmony_ci    "infra_step": true,
1149cb93a386Sopenharmony_ci    "name": "push dm.sh"
1150cb93a386Sopenharmony_ci  },
1151cb93a386Sopenharmony_ci  {
1152cb93a386Sopenharmony_ci    "cmd": [
1153cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1154cb93a386Sopenharmony_ci      "logcat",
1155cb93a386Sopenharmony_ci      "-c"
1156cb93a386Sopenharmony_ci    ],
1157cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1158cb93a386Sopenharmony_ci    "env": {
1159cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1160cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1161cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1162cb93a386Sopenharmony_ci    },
1163cb93a386Sopenharmony_ci    "infra_step": true,
1164cb93a386Sopenharmony_ci    "name": "clear log"
1165cb93a386Sopenharmony_ci  },
1166cb93a386Sopenharmony_ci  {
1167cb93a386Sopenharmony_ci    "cmd": [
1168cb93a386Sopenharmony_ci      "python",
1169cb93a386Sopenharmony_ci      "-u",
1170cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\nbin_dir = sys.argv[1]\nsh      = sys.argv[2]\nsubprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])\ntry:\n  sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', 'shell', 'cat',\n                                        bin_dir + 'rc'])))\nexcept ValueError:\n  print(\"Couldn't read the return code.  Probably killed for OOM.\")\n  sys.exit(1)\n",
1171cb93a386Sopenharmony_ci      "/data/local/tmp/",
1172cb93a386Sopenharmony_ci      "dm.sh"
1173cb93a386Sopenharmony_ci    ],
1174cb93a386Sopenharmony_ci    "env": {
1175cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1176cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1177cb93a386Sopenharmony_ci    },
1178cb93a386Sopenharmony_ci    "name": "dm",
1179cb93a386Sopenharmony_ci    "~followup_annotations": [
1180cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1181cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1182cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1183cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@",
1184cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@sh      = sys.argv[2]@@@",
1185cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])@@@",
1186cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
1187cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', 'shell', 'cat',@@@",
1188cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                                        bin_dir + 'rc'])))@@@",
1189cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@",
1190cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print(\"Couldn't read the return code.  Probably killed for OOM.\")@@@",
1191cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit(1)@@@",
1192cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1193cb93a386Sopenharmony_ci    ]
1194cb93a386Sopenharmony_ci  },
1195cb93a386Sopenharmony_ci  {
1196cb93a386Sopenharmony_ci    "cmd": [
1197cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1198cb93a386Sopenharmony_ci      "wait-for-device"
1199cb93a386Sopenharmony_ci    ],
1200cb93a386Sopenharmony_ci    "env": {
1201cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1202cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1203cb93a386Sopenharmony_ci    },
1204cb93a386Sopenharmony_ci    "infra_step": true,
1205cb93a386Sopenharmony_ci    "name": "wait for device before uninstalling ASAN",
1206cb93a386Sopenharmony_ci    "timeout": 180
1207cb93a386Sopenharmony_ci  },
1208cb93a386Sopenharmony_ci  {
1209cb93a386Sopenharmony_ci    "cmd": [
1210cb93a386Sopenharmony_ci      "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/bin/asan_device_setup",
1211cb93a386Sopenharmony_ci      "--revert"
1212cb93a386Sopenharmony_ci    ],
1213cb93a386Sopenharmony_ci    "env": {
1214cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1215cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1216cb93a386Sopenharmony_ci    },
1217cb93a386Sopenharmony_ci    "infra_step": true,
1218cb93a386Sopenharmony_ci    "name": "uninstall ASAN",
1219cb93a386Sopenharmony_ci    "timeout": 300
1220cb93a386Sopenharmony_ci  },
1221cb93a386Sopenharmony_ci  {
1222cb93a386Sopenharmony_ci    "cmd": [
1223cb93a386Sopenharmony_ci      "python",
1224cb93a386Sopenharmony_ci      "-u",
1225cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nout = sys.argv[1]\nlog = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])\nfor line in log.split('\\n'):\n  tokens = line.split()\n  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':\n    addr, path = tokens[-2:]\n    local = os.path.join(out, os.path.basename(path))\n    if os.path.exists(local):\n      try:\n        sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n        line = line.replace(addr, addr + ' ' + sym.strip())\n      except subprocess.CalledProcessError:\n        pass\n  print(line)\n",
1226cb93a386Sopenharmony_ci      "[START_DIR]/build"
1227cb93a386Sopenharmony_ci    ],
1228cb93a386Sopenharmony_ci    "env": {
1229cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1230cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1231cb93a386Sopenharmony_ci    },
1232cb93a386Sopenharmony_ci    "infra_step": true,
1233cb93a386Sopenharmony_ci    "name": "dump log",
1234cb93a386Sopenharmony_ci    "timeout": 300,
1235cb93a386Sopenharmony_ci    "~followup_annotations": [
1236cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1237cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
1238cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1239cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1240cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@",
1241cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])@@@",
1242cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@",
1243cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  tokens = line.split()@@@",
1244cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@",
1245cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    addr, path = tokens[-2:]@@@",
1246cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    local = os.path.join(out, os.path.basename(path))@@@",
1247cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if os.path.exists(local):@@@",
1248cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      try:@@@",
1249cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@",
1250cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        line = line.replace(addr, addr + ' ' + sym.strip())@@@",
1251cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      except subprocess.CalledProcessError:@@@",
1252cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        pass@@@",
1253cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print(line)@@@",
1254cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1255cb93a386Sopenharmony_ci    ]
1256cb93a386Sopenharmony_ci  },
1257cb93a386Sopenharmony_ci  {
1258cb93a386Sopenharmony_ci    "cmd": [
1259cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1260cb93a386Sopenharmony_ci      "kill-server"
1261cb93a386Sopenharmony_ci    ],
1262cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1263cb93a386Sopenharmony_ci    "env": {
1264cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1265cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1266cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1267cb93a386Sopenharmony_ci    },
1268cb93a386Sopenharmony_ci    "infra_step": true,
1269cb93a386Sopenharmony_ci    "name": "kill adb server"
1270cb93a386Sopenharmony_ci  },
1271cb93a386Sopenharmony_ci  {
1272cb93a386Sopenharmony_ci    "name": "$result"
1273cb93a386Sopenharmony_ci  }
1274cb93a386Sopenharmony_ci]