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