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