1[
2  {
3    "cmd": [
4      "python",
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      "\nimport os\nSSH_MACHINE_FILE = os.path.expanduser('~/ssh_machine.json')\nwith open(SSH_MACHINE_FILE, 'r') as f:\n  print f.read()\n"
22    ],
23    "env": {
24      "CHROME_HEADLESS": "1",
25      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
26    },
27    "infra_step": true,
28    "name": "read chromeos ip",
29    "stdout": "/path/to/tmp/",
30    "~followup_annotations": [
31      "@@@STEP_LOG_LINE@python.inline@@@@",
32      "@@@STEP_LOG_LINE@python.inline@import os@@@",
33      "@@@STEP_LOG_LINE@python.inline@SSH_MACHINE_FILE = os.path.expanduser('~/ssh_machine.json')@@@",
34      "@@@STEP_LOG_LINE@python.inline@with open(SSH_MACHINE_FILE, 'r') as f:@@@",
35      "@@@STEP_LOG_LINE@python.inline@  print f.read()@@@",
36      "@@@STEP_LOG_END@python.inline@@@"
37    ]
38  },
39  {
40    "cmd": [
41      "ssh",
42      "-oConnectTimeout=15",
43      "-oBatchMode=yes",
44      "-t",
45      "-t",
46      "foo@127.0.0.1",
47      "mkdir",
48      "-p",
49      "/home/chronos/user/resources"
50    ],
51    "env": {
52      "CHROME_HEADLESS": "1",
53      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
54    },
55    "infra_step": true,
56    "name": "mkdir /home/chronos/user/resources"
57  },
58  {
59    "cmd": [
60      "ssh",
61      "-oConnectTimeout=15",
62      "-oBatchMode=yes",
63      "-t",
64      "-t",
65      "foo@127.0.0.1",
66      "sudo",
67      "mount",
68      "-i",
69      "-o",
70      "remount,exec",
71      "/home/chronos"
72    ],
73    "env": {
74      "CHROME_HEADLESS": "1",
75      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
76    },
77    "infra_step": true,
78    "name": "remount /home/chronos/user/ as exec"
79  },
80  {
81    "cmd": [
82      "ssh",
83      "-oConnectTimeout=15",
84      "-oBatchMode=yes",
85      "-t",
86      "-t",
87      "foo@127.0.0.1",
88      "rm",
89      "-rf",
90      "/home/chronos/user/bin"
91    ],
92    "env": {
93      "CHROME_HEADLESS": "1",
94      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
95    },
96    "infra_step": true,
97    "name": "rm /home/chronos/user/bin"
98  },
99  {
100    "cmd": [
101      "ssh",
102      "-oConnectTimeout=15",
103      "-oBatchMode=yes",
104      "-t",
105      "-t",
106      "foo@127.0.0.1",
107      "mkdir",
108      "-p",
109      "/home/chronos/user/bin"
110    ],
111    "env": {
112      "CHROME_HEADLESS": "1",
113      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
114    },
115    "infra_step": true,
116    "name": "mkdir /home/chronos/user/bin"
117  },
118  {
119    "cmd": [
120      "python",
121      "-u",
122      "\nimport subprocess\nimport sys\nsrc = sys.argv[1] + '/*'\ndest   = sys.argv[2]\nprint subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)\n",
123      "[START_DIR]/skia/resources",
124      "foo@127.0.0.1:/home/chronos/user/resources"
125    ],
126    "infra_step": true,
127    "name": "scp -r [START_DIR]/skia/resources foo@127.0.0.1:/home/chronos/user/resources",
128    "~followup_annotations": [
129      "@@@STEP_LOG_LINE@python.inline@@@@",
130      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
131      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
132      "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1] + '/*'@@@",
133      "@@@STEP_LOG_LINE@python.inline@dest   = sys.argv[2]@@@",
134      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)@@@",
135      "@@@STEP_LOG_END@python.inline@@@"
136    ]
137  },
138  {
139    "cmd": [
140      "python",
141      "-u",
142      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
143      "--json-output",
144      "/path/to/tmp/json",
145      "copy",
146      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
147      "/path/to/tmp/"
148    ],
149    "infra_step": true,
150    "name": "Get skp VERSION"
151  },
152  {
153    "cmd": [
154      "python",
155      "-u",
156      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
157      "--json-output",
158      "/path/to/tmp/json",
159      "copy",
160      "42",
161      "[START_DIR]/tmp/SKP_VERSION"
162    ],
163    "infra_step": true,
164    "name": "write SKP_VERSION"
165  },
166  {
167    "cmd": [
168      "ssh",
169      "-oConnectTimeout=15",
170      "-oBatchMode=yes",
171      "-t",
172      "-t",
173      "foo@127.0.0.1",
174      "cat",
175      "/home/chronos/user/SKP_VERSION"
176    ],
177    "env": {
178      "CHROME_HEADLESS": "1",
179      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
180    },
181    "infra_step": true,
182    "name": "read /home/chronos/user/SKP_VERSION",
183    "stdout": "/path/to/tmp/"
184  },
185  {
186    "cmd": [
187      "ssh",
188      "-oConnectTimeout=15",
189      "-oBatchMode=yes",
190      "-t",
191      "-t",
192      "foo@127.0.0.1",
193      "rm",
194      "-f",
195      "/home/chronos/user/SKP_VERSION"
196    ],
197    "env": {
198      "CHROME_HEADLESS": "1",
199      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
200    },
201    "infra_step": true,
202    "name": "rm /home/chronos/user/SKP_VERSION"
203  },
204  {
205    "cmd": [
206      "ssh",
207      "-oConnectTimeout=15",
208      "-oBatchMode=yes",
209      "-t",
210      "-t",
211      "foo@127.0.0.1",
212      "rm",
213      "-rf",
214      "/home/chronos/user/skps"
215    ],
216    "env": {
217      "CHROME_HEADLESS": "1",
218      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
219    },
220    "infra_step": true,
221    "name": "rm /home/chronos/user/skps"
222  },
223  {
224    "cmd": [
225      "ssh",
226      "-oConnectTimeout=15",
227      "-oBatchMode=yes",
228      "-t",
229      "-t",
230      "foo@127.0.0.1",
231      "mkdir",
232      "-p",
233      "/home/chronos/user/skps"
234    ],
235    "env": {
236      "CHROME_HEADLESS": "1",
237      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
238    },
239    "infra_step": true,
240    "name": "mkdir /home/chronos/user/skps"
241  },
242  {
243    "cmd": [
244      "python",
245      "-u",
246      "\nimport subprocess\nimport sys\nsrc = sys.argv[1] + '/*'\ndest   = sys.argv[2]\nprint subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)\n",
247      "[START_DIR]/skp",
248      "foo@127.0.0.1:/home/chronos/user/skps"
249    ],
250    "infra_step": true,
251    "name": "scp -r [START_DIR]/skp foo@127.0.0.1:/home/chronos/user/skps",
252    "~followup_annotations": [
253      "@@@STEP_LOG_LINE@python.inline@@@@",
254      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
255      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
256      "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1] + '/*'@@@",
257      "@@@STEP_LOG_LINE@python.inline@dest   = sys.argv[2]@@@",
258      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)@@@",
259      "@@@STEP_LOG_END@python.inline@@@"
260    ]
261  },
262  {
263    "cmd": [
264      "python",
265      "-u",
266      "\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice   = sys.argv[2]\nprint subprocess.check_output(['scp', host, device])\n",
267      "[START_DIR]/tmp/SKP_VERSION",
268      "foo@127.0.0.1:/home/chronos/user/SKP_VERSION"
269    ],
270    "infra_step": true,
271    "name": "scp [START_DIR]/tmp/SKP_VERSION foo@127.0.0.1:/home/chronos/user/SKP_VERSION",
272    "~followup_annotations": [
273      "@@@STEP_LOG_LINE@python.inline@@@@",
274      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
275      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
276      "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
277      "@@@STEP_LOG_LINE@python.inline@device   = sys.argv[2]@@@",
278      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output(['scp', host, device])@@@",
279      "@@@STEP_LOG_END@python.inline@@@"
280    ]
281  },
282  {
283    "cmd": [
284      "python",
285      "-u",
286      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
287      "--json-output",
288      "/path/to/tmp/json",
289      "copy",
290      "[START_DIR]/skia/infra/bots/assets/skimage/VERSION",
291      "/path/to/tmp/"
292    ],
293    "infra_step": true,
294    "name": "Get skimage VERSION"
295  },
296  {
297    "cmd": [
298      "python",
299      "-u",
300      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
301      "--json-output",
302      "/path/to/tmp/json",
303      "copy",
304      "42",
305      "[START_DIR]/tmp/SK_IMAGE_VERSION"
306    ],
307    "infra_step": true,
308    "name": "write SK_IMAGE_VERSION"
309  },
310  {
311    "cmd": [
312      "ssh",
313      "-oConnectTimeout=15",
314      "-oBatchMode=yes",
315      "-t",
316      "-t",
317      "foo@127.0.0.1",
318      "cat",
319      "/home/chronos/user/SK_IMAGE_VERSION"
320    ],
321    "env": {
322      "CHROME_HEADLESS": "1",
323      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
324    },
325    "infra_step": true,
326    "name": "read /home/chronos/user/SK_IMAGE_VERSION",
327    "stdout": "/path/to/tmp/"
328  },
329  {
330    "cmd": [
331      "ssh",
332      "-oConnectTimeout=15",
333      "-oBatchMode=yes",
334      "-t",
335      "-t",
336      "foo@127.0.0.1",
337      "rm",
338      "-f",
339      "/home/chronos/user/SK_IMAGE_VERSION"
340    ],
341    "env": {
342      "CHROME_HEADLESS": "1",
343      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
344    },
345    "infra_step": true,
346    "name": "rm /home/chronos/user/SK_IMAGE_VERSION"
347  },
348  {
349    "cmd": [
350      "ssh",
351      "-oConnectTimeout=15",
352      "-oBatchMode=yes",
353      "-t",
354      "-t",
355      "foo@127.0.0.1",
356      "rm",
357      "-rf",
358      "/home/chronos/user/images"
359    ],
360    "env": {
361      "CHROME_HEADLESS": "1",
362      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
363    },
364    "infra_step": true,
365    "name": "rm /home/chronos/user/images"
366  },
367  {
368    "cmd": [
369      "ssh",
370      "-oConnectTimeout=15",
371      "-oBatchMode=yes",
372      "-t",
373      "-t",
374      "foo@127.0.0.1",
375      "mkdir",
376      "-p",
377      "/home/chronos/user/images"
378    ],
379    "env": {
380      "CHROME_HEADLESS": "1",
381      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
382    },
383    "infra_step": true,
384    "name": "mkdir /home/chronos/user/images"
385  },
386  {
387    "cmd": [
388      "python",
389      "-u",
390      "\nimport subprocess\nimport sys\nsrc = sys.argv[1] + '/*'\ndest   = sys.argv[2]\nprint subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)\n",
391      "[START_DIR]/skimage",
392      "foo@127.0.0.1:/home/chronos/user/images"
393    ],
394    "infra_step": true,
395    "name": "scp -r [START_DIR]/skimage foo@127.0.0.1:/home/chronos/user/images",
396    "~followup_annotations": [
397      "@@@STEP_LOG_LINE@python.inline@@@@",
398      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
399      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
400      "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1] + '/*'@@@",
401      "@@@STEP_LOG_LINE@python.inline@dest   = sys.argv[2]@@@",
402      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)@@@",
403      "@@@STEP_LOG_END@python.inline@@@"
404    ]
405  },
406  {
407    "cmd": [
408      "python",
409      "-u",
410      "\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice   = sys.argv[2]\nprint subprocess.check_output(['scp', host, device])\n",
411      "[START_DIR]/tmp/SK_IMAGE_VERSION",
412      "foo@127.0.0.1:/home/chronos/user/SK_IMAGE_VERSION"
413    ],
414    "infra_step": true,
415    "name": "scp [START_DIR]/tmp/SK_IMAGE_VERSION foo@127.0.0.1:/home/chronos/user/SK_IMAGE_VERSION",
416    "~followup_annotations": [
417      "@@@STEP_LOG_LINE@python.inline@@@@",
418      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
419      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
420      "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
421      "@@@STEP_LOG_LINE@python.inline@device   = sys.argv[2]@@@",
422      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output(['scp', host, device])@@@",
423      "@@@STEP_LOG_END@python.inline@@@"
424    ]
425  },
426  {
427    "cmd": [
428      "python",
429      "-u",
430      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
431      "--json-output",
432      "/path/to/tmp/json",
433      "copy",
434      "[START_DIR]/skia/infra/bots/assets/svg/VERSION",
435      "/path/to/tmp/"
436    ],
437    "infra_step": true,
438    "name": "Get svg VERSION"
439  },
440  {
441    "cmd": [
442      "python",
443      "-u",
444      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
445      "--json-output",
446      "/path/to/tmp/json",
447      "copy",
448      "42",
449      "[START_DIR]/tmp/SVG_VERSION"
450    ],
451    "infra_step": true,
452    "name": "write SVG_VERSION"
453  },
454  {
455    "cmd": [
456      "ssh",
457      "-oConnectTimeout=15",
458      "-oBatchMode=yes",
459      "-t",
460      "-t",
461      "foo@127.0.0.1",
462      "cat",
463      "/home/chronos/user/SVG_VERSION"
464    ],
465    "env": {
466      "CHROME_HEADLESS": "1",
467      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
468    },
469    "infra_step": true,
470    "name": "read /home/chronos/user/SVG_VERSION",
471    "stdout": "/path/to/tmp/"
472  },
473  {
474    "cmd": [
475      "ssh",
476      "-oConnectTimeout=15",
477      "-oBatchMode=yes",
478      "-t",
479      "-t",
480      "foo@127.0.0.1",
481      "rm",
482      "-f",
483      "/home/chronos/user/SVG_VERSION"
484    ],
485    "env": {
486      "CHROME_HEADLESS": "1",
487      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
488    },
489    "infra_step": true,
490    "name": "rm /home/chronos/user/SVG_VERSION"
491  },
492  {
493    "cmd": [
494      "ssh",
495      "-oConnectTimeout=15",
496      "-oBatchMode=yes",
497      "-t",
498      "-t",
499      "foo@127.0.0.1",
500      "rm",
501      "-rf",
502      "/home/chronos/user/svgs"
503    ],
504    "env": {
505      "CHROME_HEADLESS": "1",
506      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
507    },
508    "infra_step": true,
509    "name": "rm /home/chronos/user/svgs"
510  },
511  {
512    "cmd": [
513      "ssh",
514      "-oConnectTimeout=15",
515      "-oBatchMode=yes",
516      "-t",
517      "-t",
518      "foo@127.0.0.1",
519      "mkdir",
520      "-p",
521      "/home/chronos/user/svgs"
522    ],
523    "env": {
524      "CHROME_HEADLESS": "1",
525      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
526    },
527    "infra_step": true,
528    "name": "mkdir /home/chronos/user/svgs"
529  },
530  {
531    "cmd": [
532      "python",
533      "-u",
534      "\nimport subprocess\nimport sys\nsrc = sys.argv[1] + '/*'\ndest   = sys.argv[2]\nprint subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)\n",
535      "[START_DIR]/svg",
536      "foo@127.0.0.1:/home/chronos/user/svgs"
537    ],
538    "infra_step": true,
539    "name": "scp -r [START_DIR]/svg foo@127.0.0.1:/home/chronos/user/svgs",
540    "~followup_annotations": [
541      "@@@STEP_LOG_LINE@python.inline@@@@",
542      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
543      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
544      "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1] + '/*'@@@",
545      "@@@STEP_LOG_LINE@python.inline@dest   = sys.argv[2]@@@",
546      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)@@@",
547      "@@@STEP_LOG_END@python.inline@@@"
548    ]
549  },
550  {
551    "cmd": [
552      "python",
553      "-u",
554      "\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice   = sys.argv[2]\nprint subprocess.check_output(['scp', host, device])\n",
555      "[START_DIR]/tmp/SVG_VERSION",
556      "foo@127.0.0.1:/home/chronos/user/SVG_VERSION"
557    ],
558    "infra_step": true,
559    "name": "scp [START_DIR]/tmp/SVG_VERSION foo@127.0.0.1:/home/chronos/user/SVG_VERSION",
560    "~followup_annotations": [
561      "@@@STEP_LOG_LINE@python.inline@@@@",
562      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
563      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
564      "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
565      "@@@STEP_LOG_LINE@python.inline@device   = sys.argv[2]@@@",
566      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output(['scp', host, device])@@@",
567      "@@@STEP_LOG_END@python.inline@@@"
568    ]
569  },
570  {
571    "cmd": [
572      "python",
573      "-u",
574      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
575      "--json-output",
576      "/path/to/tmp/json",
577      "rmtree",
578      "[START_DIR]/test"
579    ],
580    "infra_step": true,
581    "name": "rmtree test"
582  },
583  {
584    "cmd": [
585      "python",
586      "-u",
587      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
588      "--json-output",
589      "/path/to/tmp/json",
590      "ensure-directory",
591      "--mode",
592      "0777",
593      "[START_DIR]/test"
594    ],
595    "infra_step": true,
596    "name": "makedirs test"
597  },
598  {
599    "cmd": [
600      "ssh",
601      "-oConnectTimeout=15",
602      "-oBatchMode=yes",
603      "-t",
604      "-t",
605      "foo@127.0.0.1",
606      "rm",
607      "-rf",
608      "/home/chronos/user/dm_out"
609    ],
610    "env": {
611      "CHROME_HEADLESS": "1",
612      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
613    },
614    "infra_step": true,
615    "name": "rm /home/chronos/user/dm_out"
616  },
617  {
618    "cmd": [
619      "ssh",
620      "-oConnectTimeout=15",
621      "-oBatchMode=yes",
622      "-t",
623      "-t",
624      "foo@127.0.0.1",
625      "mkdir",
626      "-p",
627      "/home/chronos/user/dm_out"
628    ],
629    "env": {
630      "CHROME_HEADLESS": "1",
631      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
632    },
633    "infra_step": true,
634    "name": "mkdir /home/chronos/user/dm_out"
635  },
636  {
637    "cmd": [
638      "python",
639      "-u",
640      "\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",
641      "https://example.com/hashes.txt",
642      "[START_DIR]/tmp/uninteresting_hashes.txt"
643    ],
644    "env": {
645      "CHROME_HEADLESS": "1",
646      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
647    },
648    "infra_step": true,
649    "name": "get uninteresting hashes",
650    "~followup_annotations": [
651      "@@@STEP_LOG_LINE@python.inline@@@@",
652      "@@@STEP_LOG_LINE@python.inline@import contextlib@@@",
653      "@@@STEP_LOG_LINE@python.inline@import math@@@",
654      "@@@STEP_LOG_LINE@python.inline@import socket@@@",
655      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
656      "@@@STEP_LOG_LINE@python.inline@import time@@@",
657      "@@@STEP_LOG_LINE@python.inline@import urllib2@@@",
658      "@@@STEP_LOG_LINE@python.inline@@@@",
659      "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@",
660      "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@",
661      "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@",
662      "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@",
663      "@@@STEP_LOG_LINE@python.inline@@@@",
664      "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@",
665      "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@",
666      "@@@STEP_LOG_LINE@python.inline@  try:@@@",
667      "@@@STEP_LOG_LINE@python.inline@    with contextlib.closing(@@@",
668      "@@@STEP_LOG_LINE@python.inline@        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@",
669      "@@@STEP_LOG_LINE@python.inline@      hashes = w.read()@@@",
670      "@@@STEP_LOG_LINE@python.inline@      with open(sys.argv[2], 'w') as f:@@@",
671      "@@@STEP_LOG_LINE@python.inline@        f.write(hashes)@@@",
672      "@@@STEP_LOG_LINE@python.inline@        break@@@",
673      "@@@STEP_LOG_LINE@python.inline@  except Exception as e:@@@",
674      "@@@STEP_LOG_LINE@python.inline@    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@",
675      "@@@STEP_LOG_LINE@python.inline@    print e@@@",
676      "@@@STEP_LOG_LINE@python.inline@    if retry == RETRIES:@@@",
677      "@@@STEP_LOG_LINE@python.inline@      raise@@@",
678      "@@@STEP_LOG_LINE@python.inline@    waittime = WAIT_BASE * math.pow(2, retry)@@@",
679      "@@@STEP_LOG_LINE@python.inline@    print 'Retry in %d seconds.' % waittime@@@",
680      "@@@STEP_LOG_LINE@python.inline@    time.sleep(waittime)@@@",
681      "@@@STEP_LOG_END@python.inline@@@"
682    ]
683  },
684  {
685    "cmd": [
686      "python",
687      "-u",
688      "\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice   = sys.argv[2]\nprint subprocess.check_output(['scp', host, device])\n",
689      "[START_DIR]/tmp/uninteresting_hashes.txt",
690      "foo@127.0.0.1:/home/chronos/user/uninteresting_hashes.txt"
691    ],
692    "infra_step": true,
693    "name": "scp [START_DIR]/tmp/uninteresting_hashes.txt foo@127.0.0.1:/home/chronos/user/uninteresting_hashes.txt",
694    "~followup_annotations": [
695      "@@@STEP_LOG_LINE@python.inline@@@@",
696      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
697      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
698      "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
699      "@@@STEP_LOG_LINE@python.inline@device   = sys.argv[2]@@@",
700      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output(['scp', host, device])@@@",
701      "@@@STEP_LOG_END@python.inline@@@"
702    ]
703  },
704  {
705    "cmd": [
706      "python",
707      "-u",
708      "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n"
709    ],
710    "name": "get swarming bot id",
711    "stdout": "/path/to/tmp/",
712    "~followup_annotations": [
713      "@@@STEP_LOG_LINE@python.inline@import os@@@",
714      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@",
715      "@@@STEP_LOG_END@python.inline@@@"
716    ]
717  },
718  {
719    "cmd": [
720      "python",
721      "-u",
722      "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n"
723    ],
724    "name": "get swarming task id",
725    "stdout": "/path/to/tmp/",
726    "~followup_annotations": [
727      "@@@STEP_LOG_LINE@python.inline@import os@@@",
728      "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@",
729      "@@@STEP_LOG_END@python.inline@@@"
730    ]
731  },
732  {
733    "cmd": [
734      "python",
735      "-u",
736      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
737      "--json-output",
738      "/path/to/tmp/json",
739      "rmtree",
740      "[START_DIR]/[SWARM_OUT_DIR]"
741    ],
742    "env": {
743      "CHROME_HEADLESS": "1",
744      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
745    },
746    "infra_step": true,
747    "name": "rmtree [SWARM_OUT_DIR]"
748  },
749  {
750    "cmd": [
751      "python",
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]/[SWARM_OUT_DIR]"
760    ],
761    "env": {
762      "CHROME_HEADLESS": "1",
763      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
764    },
765    "infra_step": true,
766    "name": "makedirs [SWARM_OUT_DIR]"
767  },
768  {
769    "cmd": [
770      "python",
771      "-u",
772      "\nimport subprocess\nimport sys\nhost = sys.argv[1]\ndevice   = sys.argv[2]\nprint subprocess.check_output(['scp', host, device])\n",
773      "[START_DIR]/build/dm",
774      "foo@127.0.0.1:/home/chronos/user/bin/dm"
775    ],
776    "env": {
777      "CHROME_HEADLESS": "1",
778      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
779    },
780    "infra_step": true,
781    "name": "scp [START_DIR]/build/dm foo@127.0.0.1:/home/chronos/user/bin/dm",
782    "~followup_annotations": [
783      "@@@STEP_LOG_LINE@python.inline@@@@",
784      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
785      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
786      "@@@STEP_LOG_LINE@python.inline@host = sys.argv[1]@@@",
787      "@@@STEP_LOG_LINE@python.inline@device   = sys.argv[2]@@@",
788      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output(['scp', host, device])@@@",
789      "@@@STEP_LOG_END@python.inline@@@"
790    ]
791  },
792  {
793    "cmd": [
794      "ssh",
795      "-oConnectTimeout=15",
796      "-oBatchMode=yes",
797      "-t",
798      "-t",
799      "foo@127.0.0.1",
800      "chmod",
801      "+x",
802      "/home/chronos/user/bin/dm"
803    ],
804    "env": {
805      "CHROME_HEADLESS": "1",
806      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
807    },
808    "infra_step": true,
809    "name": "chmod dm"
810  },
811  {
812    "cmd": [
813      "ssh",
814      "-oConnectTimeout=15",
815      "-oBatchMode=yes",
816      "-t",
817      "-t",
818      "foo@127.0.0.1",
819      "/home/chronos/user/bin/dm",
820      "--resourcePath",
821      "/home/chronos/user/resources",
822      "--skps",
823      "/home/chronos/user/skps",
824      "--images",
825      "/home/chronos/user/images/dm",
826      "--colorImages",
827      "/home/chronos/user/images/colorspace",
828      "--nameByHash",
829      "--properties",
830      "gitHash",
831      "abc123",
832      "builder",
833      "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All",
834      "buildbucket_build_id",
835      "123454321",
836      "task_id",
837      "task_12345",
838      "swarming_bot_id",
839      "skia-bot-123",
840      "swarming_task_id",
841      "123456",
842      "--svgs",
843      "/home/chronos/user/svgs",
844      "--key",
845      "arch",
846      "arm",
847      "compiler",
848      "Clang",
849      "configuration",
850      "Debug",
851      "cpu_or_gpu",
852      "GPU",
853      "cpu_or_gpu_value",
854      "PowerVRGX6250",
855      "model",
856      "AcerChromebookR13Convertible",
857      "os",
858      "ChromeOS",
859      "style",
860      "default",
861      "--uninterestingHashesFile",
862      "/home/chronos/user/uninteresting_hashes.txt",
863      "--writePath",
864      "/home/chronos/user/dm_out",
865      "--dont_write",
866      "pdf",
867      "--randomProcessorTest",
868      "--nocpu",
869      "--config",
870      "gles",
871      "--src",
872      "tests",
873      "gm",
874      "image",
875      "colorImage",
876      "svg",
877      "--blacklist",
878      "_",
879      "svg",
880      "_",
881      "svgparse_",
882      "_",
883      "image",
884      "gen_platf",
885      "error",
886      "_",
887      "image",
888      "_",
889      "interlaced1.png",
890      "_",
891      "image",
892      "_",
893      "interlaced2.png",
894      "_",
895      "image",
896      "_",
897      "interlaced3.png",
898      "_",
899      "image",
900      "_",
901      ".arw",
902      "_",
903      "image",
904      "_",
905      ".cr2",
906      "_",
907      "image",
908      "_",
909      ".dng",
910      "_",
911      "image",
912      "_",
913      ".nef",
914      "_",
915      "image",
916      "_",
917      ".nrw",
918      "_",
919      "image",
920      "_",
921      ".orf",
922      "_",
923      "image",
924      "_",
925      ".raf",
926      "_",
927      "image",
928      "_",
929      ".rw2",
930      "_",
931      "image",
932      "_",
933      ".pef",
934      "_",
935      "image",
936      "_",
937      ".srw",
938      "_",
939      "image",
940      "_",
941      ".ARW",
942      "_",
943      "image",
944      "_",
945      ".CR2",
946      "_",
947      "image",
948      "_",
949      ".DNG",
950      "_",
951      "image",
952      "_",
953      ".NEF",
954      "_",
955      "image",
956      "_",
957      ".NRW",
958      "_",
959      "image",
960      "_",
961      ".ORF",
962      "_",
963      "image",
964      "_",
965      ".RAF",
966      "_",
967      "image",
968      "_",
969      ".RW2",
970      "_",
971      "image",
972      "_",
973      ".PEF",
974      "_",
975      "image",
976      "_",
977      ".SRW",
978      "--match",
979      "~gradients_view_perspective_nodither",
980      "--nonativeFonts",
981      "--verbose"
982    ],
983    "env": {
984      "CHROME_HEADLESS": "1",
985      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
986    },
987    "infra_step": true,
988    "name": "dm"
989  },
990  {
991    "cmd": [
992      "python",
993      "-u",
994      "\nimport subprocess\nimport sys\nsrc = sys.argv[1] + '/*'\ndest   = sys.argv[2]\nprint subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)\n",
995      "foo@127.0.0.1:/home/chronos/user/dm_out",
996      "[START_DIR]/[SWARM_OUT_DIR]"
997    ],
998    "infra_step": true,
999    "name": "scp -r foo@127.0.0.1:/home/chronos/user/dm_out [START_DIR]/[SWARM_OUT_DIR]",
1000    "~followup_annotations": [
1001      "@@@STEP_LOG_LINE@python.inline@@@@",
1002      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1003      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1004      "@@@STEP_LOG_LINE@python.inline@src = sys.argv[1] + '/*'@@@",
1005      "@@@STEP_LOG_LINE@python.inline@dest   = sys.argv[2]@@@",
1006      "@@@STEP_LOG_LINE@python.inline@print subprocess.check_output('scp -r %s %s' % (src, dest), shell=True)@@@",
1007      "@@@STEP_LOG_END@python.inline@@@"
1008    ]
1009  },
1010  {
1011    "jsonResult": null,
1012    "name": "$result"
1013  }
1014]