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