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