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