1[ 2 { 3 "cmd": [ 4 "python", 5 "-u", 6 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 7 "--json-output", 8 "/path/to/tmp/json", 9 "ensure-directory", 10 "--mode", 11 "0777", 12 "[START_DIR]/tmp" 13 ], 14 "infra_step": true, 15 "name": "makedirs tmp_dir" 16 }, 17 { 18 "cmd": [ 19 "python", 20 "-u", 21 "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" 22 ], 23 "name": "get swarming bot id", 24 "stdout": "/path/to/tmp/", 25 "~followup_annotations": [ 26 "@@@STEP_LOG_LINE@python.inline@import os@@@", 27 "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", 28 "@@@STEP_LOG_END@python.inline@@@" 29 ] 30 }, 31 { 32 "cmd": [ 33 "/usr/bin/adb.1.0.35", 34 "shell", 35 "mkdir", 36 "-p", 37 "/sdcard/revenge_of_the_skiabot/resources" 38 ], 39 "cwd": "[START_DIR]/skia", 40 "env": { 41 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 42 "CHROME_HEADLESS": "1", 43 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 44 }, 45 "infra_step": true, 46 "name": "mkdir /sdcard/revenge_of_the_skiabot/resources" 47 }, 48 { 49 "cmd": [ 50 "python", 51 "-u", 52 "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',\n os.path.realpath(os.path.join(host, p, f)),\n os.path.join(device, p, f)])\n", 53 "[START_DIR]/skia/resources", 54 "/sdcard/revenge_of_the_skiabot/resources" 55 ], 56 "env": { 57 "CHROME_HEADLESS": "1", 58 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 59 }, 60 "infra_step": true, 61 "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources", 62 "~followup_annotations": [ 63 "@@@STEP_LOG_LINE@python.inline@@@@", 64 "@@@STEP_LOG_LINE@python.inline@import os@@@", 65 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 66 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 67 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 68 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 69 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 70 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 71 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 72 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 73 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 74 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 75 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 76 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 77 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 78 "@@@STEP_LOG_END@python.inline@@@" 79 ] 80 }, 81 { 82 "cmd": [ 83 "python", 84 "-u", 85 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 86 "--json-output", 87 "/path/to/tmp/json", 88 "copy", 89 "[START_DIR]/skia/infra/bots/assets/skp/VERSION", 90 "/path/to/tmp/" 91 ], 92 "infra_step": true, 93 "name": "Get skp VERSION" 94 }, 95 { 96 "cmd": [ 97 "python", 98 "-u", 99 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 100 "--json-output", 101 "/path/to/tmp/json", 102 "copy", 103 "42", 104 "[START_DIR]/tmp/SKP_VERSION" 105 ], 106 "infra_step": true, 107 "name": "write SKP_VERSION" 108 }, 109 { 110 "cmd": [ 111 "/usr/bin/adb.1.0.35", 112 "shell", 113 "cat", 114 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 115 ], 116 "cwd": "[START_DIR]/skia", 117 "env": { 118 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 119 "CHROME_HEADLESS": "1", 120 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 121 }, 122 "infra_step": true, 123 "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION", 124 "stdout": "/path/to/tmp/" 125 }, 126 { 127 "cmd": [ 128 "/usr/bin/adb.1.0.35", 129 "shell", 130 "rm", 131 "-f", 132 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 133 ], 134 "cwd": "[START_DIR]/skia", 135 "env": { 136 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 137 "CHROME_HEADLESS": "1", 138 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 139 }, 140 "infra_step": true, 141 "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION" 142 }, 143 { 144 "cmd": [ 145 "/usr/bin/adb.1.0.35", 146 "shell", 147 "rm", 148 "-rf", 149 "/sdcard/revenge_of_the_skiabot/skps" 150 ], 151 "cwd": "[START_DIR]/skia", 152 "env": { 153 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 154 "CHROME_HEADLESS": "1", 155 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 156 }, 157 "infra_step": true, 158 "name": "rm /sdcard/revenge_of_the_skiabot/skps" 159 }, 160 { 161 "cmd": [ 162 "/usr/bin/adb.1.0.35", 163 "shell", 164 "mkdir", 165 "-p", 166 "/sdcard/revenge_of_the_skiabot/skps" 167 ], 168 "cwd": "[START_DIR]/skia", 169 "env": { 170 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 171 "CHROME_HEADLESS": "1", 172 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 173 }, 174 "infra_step": true, 175 "name": "mkdir /sdcard/revenge_of_the_skiabot/skps" 176 }, 177 { 178 "cmd": [ 179 "python", 180 "-u", 181 "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',\n os.path.realpath(os.path.join(host, p, f)),\n os.path.join(device, p, f)])\n", 182 "[START_DIR]/skp", 183 "/sdcard/revenge_of_the_skiabot/skps" 184 ], 185 "env": { 186 "CHROME_HEADLESS": "1", 187 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 188 }, 189 "infra_step": true, 190 "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps", 191 "~followup_annotations": [ 192 "@@@STEP_LOG_LINE@python.inline@@@@", 193 "@@@STEP_LOG_LINE@python.inline@import os@@@", 194 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 195 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 196 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 197 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 198 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 199 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 200 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 201 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 202 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 203 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 204 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 205 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 206 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 207 "@@@STEP_LOG_END@python.inline@@@" 208 ] 209 }, 210 { 211 "cmd": [ 212 "/usr/bin/adb.1.0.35", 213 "push", 214 "[START_DIR]/tmp/SKP_VERSION", 215 "/sdcard/revenge_of_the_skiabot/SKP_VERSION" 216 ], 217 "cwd": "[START_DIR]/skia", 218 "env": { 219 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 220 "CHROME_HEADLESS": "1", 221 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 222 }, 223 "infra_step": true, 224 "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION" 225 }, 226 { 227 "cmd": [ 228 "python", 229 "-u", 230 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 231 "--json-output", 232 "/path/to/tmp/json", 233 "copy", 234 "[START_DIR]/skia/infra/bots/assets/skimage/VERSION", 235 "/path/to/tmp/" 236 ], 237 "infra_step": true, 238 "name": "Get skimage VERSION" 239 }, 240 { 241 "cmd": [ 242 "python", 243 "-u", 244 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 245 "--json-output", 246 "/path/to/tmp/json", 247 "copy", 248 "42", 249 "[START_DIR]/tmp/SK_IMAGE_VERSION" 250 ], 251 "infra_step": true, 252 "name": "write SK_IMAGE_VERSION" 253 }, 254 { 255 "cmd": [ 256 "/usr/bin/adb.1.0.35", 257 "shell", 258 "cat", 259 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 260 ], 261 "cwd": "[START_DIR]/skia", 262 "env": { 263 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 264 "CHROME_HEADLESS": "1", 265 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 266 }, 267 "infra_step": true, 268 "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION", 269 "stdout": "/path/to/tmp/" 270 }, 271 { 272 "cmd": [ 273 "/usr/bin/adb.1.0.35", 274 "shell", 275 "rm", 276 "-f", 277 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 278 ], 279 "cwd": "[START_DIR]/skia", 280 "env": { 281 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 282 "CHROME_HEADLESS": "1", 283 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 284 }, 285 "infra_step": true, 286 "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 287 }, 288 { 289 "cmd": [ 290 "/usr/bin/adb.1.0.35", 291 "shell", 292 "rm", 293 "-rf", 294 "/sdcard/revenge_of_the_skiabot/images" 295 ], 296 "cwd": "[START_DIR]/skia", 297 "env": { 298 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 299 "CHROME_HEADLESS": "1", 300 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 301 }, 302 "infra_step": true, 303 "name": "rm /sdcard/revenge_of_the_skiabot/images" 304 }, 305 { 306 "cmd": [ 307 "/usr/bin/adb.1.0.35", 308 "shell", 309 "mkdir", 310 "-p", 311 "/sdcard/revenge_of_the_skiabot/images" 312 ], 313 "cwd": "[START_DIR]/skia", 314 "env": { 315 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 316 "CHROME_HEADLESS": "1", 317 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 318 }, 319 "infra_step": true, 320 "name": "mkdir /sdcard/revenge_of_the_skiabot/images" 321 }, 322 { 323 "cmd": [ 324 "python", 325 "-u", 326 "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',\n os.path.realpath(os.path.join(host, p, f)),\n os.path.join(device, p, f)])\n", 327 "[START_DIR]/skimage", 328 "/sdcard/revenge_of_the_skiabot/images" 329 ], 330 "env": { 331 "CHROME_HEADLESS": "1", 332 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 333 }, 334 "infra_step": true, 335 "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images", 336 "~followup_annotations": [ 337 "@@@STEP_LOG_LINE@python.inline@@@@", 338 "@@@STEP_LOG_LINE@python.inline@import os@@@", 339 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 340 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 341 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 342 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 343 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 344 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 345 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 346 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 347 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 348 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 349 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 350 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 351 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 352 "@@@STEP_LOG_END@python.inline@@@" 353 ] 354 }, 355 { 356 "cmd": [ 357 "/usr/bin/adb.1.0.35", 358 "push", 359 "[START_DIR]/tmp/SK_IMAGE_VERSION", 360 "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 361 ], 362 "cwd": "[START_DIR]/skia", 363 "env": { 364 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 365 "CHROME_HEADLESS": "1", 366 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 367 }, 368 "infra_step": true, 369 "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION" 370 }, 371 { 372 "cmd": [ 373 "python", 374 "-u", 375 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 376 "--json-output", 377 "/path/to/tmp/json", 378 "copy", 379 "[START_DIR]/skia/infra/bots/assets/svg/VERSION", 380 "/path/to/tmp/" 381 ], 382 "infra_step": true, 383 "name": "Get svg VERSION" 384 }, 385 { 386 "cmd": [ 387 "python", 388 "-u", 389 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 390 "--json-output", 391 "/path/to/tmp/json", 392 "copy", 393 "42", 394 "[START_DIR]/tmp/SVG_VERSION" 395 ], 396 "infra_step": true, 397 "name": "write SVG_VERSION" 398 }, 399 { 400 "cmd": [ 401 "/usr/bin/adb.1.0.35", 402 "shell", 403 "cat", 404 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 405 ], 406 "cwd": "[START_DIR]/skia", 407 "env": { 408 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 409 "CHROME_HEADLESS": "1", 410 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 411 }, 412 "infra_step": true, 413 "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION", 414 "stdout": "/path/to/tmp/" 415 }, 416 { 417 "cmd": [ 418 "/usr/bin/adb.1.0.35", 419 "shell", 420 "rm", 421 "-f", 422 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 423 ], 424 "cwd": "[START_DIR]/skia", 425 "env": { 426 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 427 "CHROME_HEADLESS": "1", 428 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 429 }, 430 "infra_step": true, 431 "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION" 432 }, 433 { 434 "cmd": [ 435 "/usr/bin/adb.1.0.35", 436 "shell", 437 "rm", 438 "-rf", 439 "/sdcard/revenge_of_the_skiabot/svgs" 440 ], 441 "cwd": "[START_DIR]/skia", 442 "env": { 443 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 444 "CHROME_HEADLESS": "1", 445 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 446 }, 447 "infra_step": true, 448 "name": "rm /sdcard/revenge_of_the_skiabot/svgs" 449 }, 450 { 451 "cmd": [ 452 "/usr/bin/adb.1.0.35", 453 "shell", 454 "mkdir", 455 "-p", 456 "/sdcard/revenge_of_the_skiabot/svgs" 457 ], 458 "cwd": "[START_DIR]/skia", 459 "env": { 460 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 461 "CHROME_HEADLESS": "1", 462 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 463 }, 464 "infra_step": true, 465 "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs" 466 }, 467 { 468 "cmd": [ 469 "python", 470 "-u", 471 "\nimport os\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n p = os.path.relpath(d, host)\n if p != '.' and p.startswith('.'):\n continue\n for f in fs:\n print os.path.join(p,f)\n subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',\n os.path.realpath(os.path.join(host, p, f)),\n os.path.join(device, p, f)])\n", 472 "[START_DIR]/svg", 473 "/sdcard/revenge_of_the_skiabot/svgs" 474 ], 475 "env": { 476 "CHROME_HEADLESS": "1", 477 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 478 }, 479 "infra_step": true, 480 "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs", 481 "~followup_annotations": [ 482 "@@@STEP_LOG_LINE@python.inline@@@@", 483 "@@@STEP_LOG_LINE@python.inline@import os@@@", 484 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 485 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 486 "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@", 487 "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@", 488 "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@", 489 "@@@STEP_LOG_LINE@python.inline@ p = os.path.relpath(d, host)@@@", 490 "@@@STEP_LOG_LINE@python.inline@ if p != '.' and p.startswith('.'):@@@", 491 "@@@STEP_LOG_LINE@python.inline@ continue@@@", 492 "@@@STEP_LOG_LINE@python.inline@ for f in fs:@@@", 493 "@@@STEP_LOG_LINE@python.inline@ print os.path.join(p,f)@@@", 494 "@@@STEP_LOG_LINE@python.inline@ subprocess.check_call(['/usr/bin/adb.1.0.35', 'push',@@@", 495 "@@@STEP_LOG_LINE@python.inline@ os.path.realpath(os.path.join(host, p, f)),@@@", 496 "@@@STEP_LOG_LINE@python.inline@ os.path.join(device, p, f)])@@@", 497 "@@@STEP_LOG_END@python.inline@@@" 498 ] 499 }, 500 { 501 "cmd": [ 502 "/usr/bin/adb.1.0.35", 503 "push", 504 "[START_DIR]/tmp/SVG_VERSION", 505 "/sdcard/revenge_of_the_skiabot/SVG_VERSION" 506 ], 507 "cwd": "[START_DIR]/skia", 508 "env": { 509 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 510 "CHROME_HEADLESS": "1", 511 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 512 }, 513 "infra_step": true, 514 "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION" 515 }, 516 { 517 "cmd": [ 518 "python", 519 "-u", 520 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 521 "--json-output", 522 "/path/to/tmp/json", 523 "rmtree", 524 "[START_DIR]/test" 525 ], 526 "infra_step": true, 527 "name": "rmtree test" 528 }, 529 { 530 "cmd": [ 531 "python", 532 "-u", 533 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 534 "--json-output", 535 "/path/to/tmp/json", 536 "ensure-directory", 537 "--mode", 538 "0777", 539 "[START_DIR]/test" 540 ], 541 "infra_step": true, 542 "name": "makedirs test" 543 }, 544 { 545 "cmd": [ 546 "/usr/bin/adb.1.0.35", 547 "shell", 548 "rm", 549 "-rf", 550 "/sdcard/revenge_of_the_skiabot/dm_out" 551 ], 552 "cwd": "[START_DIR]/skia", 553 "env": { 554 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 555 "CHROME_HEADLESS": "1", 556 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 557 }, 558 "infra_step": true, 559 "name": "rm /sdcard/revenge_of_the_skiabot/dm_out" 560 }, 561 { 562 "cmd": [ 563 "/usr/bin/adb.1.0.35", 564 "shell", 565 "mkdir", 566 "-p", 567 "/sdcard/revenge_of_the_skiabot/dm_out" 568 ], 569 "cwd": "[START_DIR]/skia", 570 "env": { 571 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 572 "CHROME_HEADLESS": "1", 573 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 574 }, 575 "infra_step": true, 576 "name": "mkdir /sdcard/revenge_of_the_skiabot/dm_out" 577 }, 578 { 579 "cmd": [ 580 "python", 581 "-u", 582 "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = sys.argv[1]\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n try:\n with contextlib.closing(\n urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n hashes = w.read()\n with open(sys.argv[2], 'w') as f:\n f.write(hashes)\n break\n except Exception as e:\n print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n print e\n if retry == RETRIES:\n raise\n waittime = WAIT_BASE * math.pow(2, retry)\n print 'Retry in %d seconds.' % waittime\n time.sleep(waittime)\n", 583 "https://example.com/hashes.txt", 584 "[START_DIR]/tmp/uninteresting_hashes.txt" 585 ], 586 "env": { 587 "CHROME_HEADLESS": "1", 588 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 589 }, 590 "infra_step": true, 591 "name": "get uninteresting hashes", 592 "~followup_annotations": [ 593 "@@@STEP_LOG_LINE@python.inline@@@@", 594 "@@@STEP_LOG_LINE@python.inline@import contextlib@@@", 595 "@@@STEP_LOG_LINE@python.inline@import math@@@", 596 "@@@STEP_LOG_LINE@python.inline@import socket@@@", 597 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 598 "@@@STEP_LOG_LINE@python.inline@import time@@@", 599 "@@@STEP_LOG_LINE@python.inline@import urllib2@@@", 600 "@@@STEP_LOG_LINE@python.inline@@@@", 601 "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@", 602 "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@", 603 "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@", 604 "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@", 605 "@@@STEP_LOG_LINE@python.inline@@@@", 606 "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@", 607 "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@", 608 "@@@STEP_LOG_LINE@python.inline@ try:@@@", 609 "@@@STEP_LOG_LINE@python.inline@ with contextlib.closing(@@@", 610 "@@@STEP_LOG_LINE@python.inline@ urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@", 611 "@@@STEP_LOG_LINE@python.inline@ hashes = w.read()@@@", 612 "@@@STEP_LOG_LINE@python.inline@ with open(sys.argv[2], 'w') as f:@@@", 613 "@@@STEP_LOG_LINE@python.inline@ f.write(hashes)@@@", 614 "@@@STEP_LOG_LINE@python.inline@ break@@@", 615 "@@@STEP_LOG_LINE@python.inline@ except Exception as e:@@@", 616 "@@@STEP_LOG_LINE@python.inline@ print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@", 617 "@@@STEP_LOG_LINE@python.inline@ print e@@@", 618 "@@@STEP_LOG_LINE@python.inline@ if retry == RETRIES:@@@", 619 "@@@STEP_LOG_LINE@python.inline@ raise@@@", 620 "@@@STEP_LOG_LINE@python.inline@ waittime = WAIT_BASE * math.pow(2, retry)@@@", 621 "@@@STEP_LOG_LINE@python.inline@ print 'Retry in %d seconds.' % waittime@@@", 622 "@@@STEP_LOG_LINE@python.inline@ time.sleep(waittime)@@@", 623 "@@@STEP_LOG_END@python.inline@@@" 624 ] 625 }, 626 { 627 "cmd": [ 628 "/usr/bin/adb.1.0.35", 629 "push", 630 "[START_DIR]/tmp/uninteresting_hashes.txt", 631 "/sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt" 632 ], 633 "cwd": "[START_DIR]/skia", 634 "env": { 635 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 636 "CHROME_HEADLESS": "1", 637 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 638 }, 639 "infra_step": true, 640 "name": "push [START_DIR]/tmp/uninteresting_hashes.txt /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt" 641 }, 642 { 643 "cmd": [ 644 "python", 645 "-u", 646 "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" 647 ], 648 "name": "get swarming task id", 649 "stdout": "/path/to/tmp/", 650 "~followup_annotations": [ 651 "@@@STEP_LOG_LINE@python.inline@import os@@@", 652 "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", 653 "@@@STEP_LOG_END@python.inline@@@" 654 ] 655 }, 656 { 657 "cmd": [ 658 "/usr/bin/adb.1.0.35", 659 "push", 660 "[START_DIR]/build/dm", 661 "/data/local/tmp/" 662 ], 663 "cwd": "[START_DIR]/skia", 664 "env": { 665 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 666 "CHROME_HEADLESS": "1", 667 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 668 }, 669 "infra_step": true, 670 "name": "push dm" 671 }, 672 { 673 "cmd": [ 674 "python", 675 "-u", 676 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 677 "--json-output", 678 "/path/to/tmp/json", 679 "copy", 680 "set -x; /data/local/tmp/dm --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 --nameByHash --properties gitHash abc123 builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android buildbucket_build_id 123454321 swarming_bot_id skia-bot-123 swarming_task_id 123456 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android model GalaxyS6 os Android --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --dont_write pdf --nocpu --config gles glesdft glessrgb glesmsaa4 --src tests gm image colorImage svg --blacklist _ svg _ svgparse_ glessrgb image _ _ _ image gen_platf error _ test _ GrShape _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ image _ .pef _ image _ .srw _ image _ .ARW _ image _ .CR2 _ image _ .DNG _ image _ .NEF _ image _ .NRW _ image _ .ORF _ image _ .RAF _ image _ .RW2 _ image _ .PEF _ image _ .SRW --match ~SpecialImage ~skbug6653 --nonativeFonts --reduceOpListSplitting --verbose; echo $? >/data/local/tmp/rc", 681 "[START_DIR]/tmp/dm.sh" 682 ], 683 "env": { 684 "CHROME_HEADLESS": "1", 685 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 686 }, 687 "infra_step": true, 688 "name": "write dm.sh" 689 }, 690 { 691 "cmd": [ 692 "/usr/bin/adb.1.0.35", 693 "push", 694 "[START_DIR]/tmp/dm.sh", 695 "/data/local/tmp/" 696 ], 697 "cwd": "[START_DIR]/skia", 698 "env": { 699 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 700 "CHROME_HEADLESS": "1", 701 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 702 }, 703 "infra_step": true, 704 "name": "push dm.sh" 705 }, 706 { 707 "cmd": [ 708 "/usr/bin/adb.1.0.35", 709 "logcat", 710 "-c" 711 ], 712 "cwd": "[START_DIR]/skia", 713 "env": { 714 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 715 "CHROME_HEADLESS": "1", 716 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 717 }, 718 "infra_step": true, 719 "name": "clear log" 720 }, 721 { 722 "cmd": [ 723 "python", 724 "-u", 725 "\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", 726 "/data/local/tmp/", 727 "dm.sh" 728 ], 729 "env": { 730 "CHROME_HEADLESS": "1", 731 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 732 }, 733 "name": "dm", 734 "~followup_annotations": [ 735 "@@@STEP_LOG_LINE@python.inline@@@@", 736 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 737 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 738 "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@", 739 "@@@STEP_LOG_LINE@python.inline@sh = sys.argv[2]@@@", 740 "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])@@@", 741 "@@@STEP_LOG_LINE@python.inline@try:@@@", 742 "@@@STEP_LOG_LINE@python.inline@ sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', 'shell', 'cat',@@@", 743 "@@@STEP_LOG_LINE@python.inline@ bin_dir + 'rc'])))@@@", 744 "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@", 745 "@@@STEP_LOG_LINE@python.inline@ print \"Couldn't read the return code. Probably killed for OOM.\"@@@", 746 "@@@STEP_LOG_LINE@python.inline@ sys.exit(1)@@@", 747 "@@@STEP_LOG_END@python.inline@@@" 748 ] 749 }, 750 { 751 "cmd": [], 752 "name": "adb pull" 753 }, 754 { 755 "cmd": [ 756 "/usr/bin/adb.1.0.35", 757 "pull", 758 "/sdcard/revenge_of_the_skiabot/dm_out", 759 "[CLEANUP]/adb_pull_tmp_1" 760 ], 761 "cwd": "[START_DIR]/skia", 762 "env": { 763 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 764 "CHROME_HEADLESS": "1", 765 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 766 }, 767 "infra_step": true, 768 "name": "adb pull.pull /sdcard/revenge_of_the_skiabot/dm_out", 769 "~followup_annotations": [ 770 "@@@STEP_NEST_LEVEL@1@@@" 771 ] 772 }, 773 { 774 "cmd": [ 775 "python", 776 "-u", 777 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 778 "--json-output", 779 "/path/to/tmp/json", 780 "glob", 781 "[CLEANUP]/adb_pull_tmp_1", 782 "dm_out/*" 783 ], 784 "infra_step": true, 785 "name": "adb pull.list pulled files", 786 "stdout": "/path/to/tmp/", 787 "~followup_annotations": [ 788 "@@@STEP_NEST_LEVEL@1@@@", 789 "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/1.png@@@", 790 "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/2.png@@@", 791 "@@@STEP_LOG_END@glob@@@" 792 ] 793 }, 794 { 795 "cmd": [ 796 "python", 797 "-u", 798 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 799 "--json-output", 800 "/path/to/tmp/json", 801 "copy", 802 "[CLEANUP]/adb_pull_tmp_1/1.png", 803 "[START_DIR]/[SWARM_OUT_DIR]" 804 ], 805 "infra_step": true, 806 "name": "adb pull.copy 1.png", 807 "~followup_annotations": [ 808 "@@@STEP_NEST_LEVEL@1@@@" 809 ] 810 }, 811 { 812 "cmd": [ 813 "python", 814 "-u", 815 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 816 "--json-output", 817 "/path/to/tmp/json", 818 "copy", 819 "[CLEANUP]/adb_pull_tmp_1/2.png", 820 "[START_DIR]/[SWARM_OUT_DIR]" 821 ], 822 "infra_step": true, 823 "name": "adb pull.copy 2.png", 824 "~followup_annotations": [ 825 "@@@STEP_NEST_LEVEL@1@@@" 826 ] 827 }, 828 { 829 "cmd": [ 830 "python", 831 "-u", 832 "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", 833 "--json-output", 834 "/path/to/tmp/json", 835 "rmtree", 836 "[CLEANUP]/adb_pull_tmp_1" 837 ], 838 "infra_step": true, 839 "name": "adb pull.rmtree [CLEANUP]/adb_pull_tmp_1", 840 "~followup_annotations": [ 841 "@@@STEP_NEST_LEVEL@1@@@" 842 ] 843 }, 844 { 845 "cmd": [ 846 "python", 847 "-u", 848 "\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 sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n line = line.replace(addr, addr + ' ' + sym.strip())\n print line\n", 849 "[START_DIR]/build" 850 ], 851 "env": { 852 "CHROME_HEADLESS": "1", 853 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 854 }, 855 "infra_step": true, 856 "name": "dump log", 857 "timeout": 300, 858 "~followup_annotations": [ 859 "@@@STEP_LOG_LINE@python.inline@@@@", 860 "@@@STEP_LOG_LINE@python.inline@import os@@@", 861 "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", 862 "@@@STEP_LOG_LINE@python.inline@import sys@@@", 863 "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@", 864 "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])@@@", 865 "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@", 866 "@@@STEP_LOG_LINE@python.inline@ tokens = line.split()@@@", 867 "@@@STEP_LOG_LINE@python.inline@ if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@", 868 "@@@STEP_LOG_LINE@python.inline@ addr, path = tokens[-2:]@@@", 869 "@@@STEP_LOG_LINE@python.inline@ local = os.path.join(out, os.path.basename(path))@@@", 870 "@@@STEP_LOG_LINE@python.inline@ if os.path.exists(local):@@@", 871 "@@@STEP_LOG_LINE@python.inline@ sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@", 872 "@@@STEP_LOG_LINE@python.inline@ line = line.replace(addr, addr + ' ' + sym.strip())@@@", 873 "@@@STEP_LOG_LINE@python.inline@ print line@@@", 874 "@@@STEP_LOG_END@python.inline@@@" 875 ] 876 }, 877 { 878 "cmd": [ 879 "/usr/bin/adb.1.0.35", 880 "kill-server" 881 ], 882 "cwd": "[START_DIR]/skia", 883 "env": { 884 "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey", 885 "CHROME_HEADLESS": "1", 886 "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]" 887 }, 888 "infra_step": true, 889 "name": "kill adb server" 890 }, 891 { 892 "jsonResult": null, 893 "name": "$result" 894 } 895]