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