e6a521368543dec83eb1d8b0dd3b58f311ecb542
[platform/upstream/libSkiaSharp.git] /
1 [
2   {
3     "cmd": [
4       "adb",
5       "shell",
6       "mkdir",
7       "-p",
8       "/sdcard/revenge_of_the_skiabot/resources"
9     ],
10     "cwd": "[START_DIR]/skia",
11     "infra_step": true,
12     "name": "mkdir /sdcard/revenge_of_the_skiabot/resources"
13   },
14   {
15     "cmd": [
16       "python",
17       "-u",
18       "\nimport os\nimport subprocess\nimport sys\nhost   = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n  p = os.path.relpath(d, host)\n  if p != '.' and p.startswith('.'):\n    continue\n  for f in fs:\n    print os.path.join(p,f)\n    subprocess.check_call(['adb', 'push',\n                           os.path.realpath(os.path.join(host, p, f)),\n                           os.path.join(device, p, f)])\n",
19       "[START_DIR]/skia/resources",
20       "/sdcard/revenge_of_the_skiabot/resources"
21     ],
22     "infra_step": true,
23     "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources",
24     "~followup_annotations": [
25       "@@@STEP_LOG_LINE@python.inline@@@@",
26       "@@@STEP_LOG_LINE@python.inline@import os@@@",
27       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
28       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
29       "@@@STEP_LOG_LINE@python.inline@host   = sys.argv[1]@@@",
30       "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
31       "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
32       "@@@STEP_LOG_LINE@python.inline@  p = os.path.relpath(d, host)@@@",
33       "@@@STEP_LOG_LINE@python.inline@  if p != '.' and p.startswith('.'):@@@",
34       "@@@STEP_LOG_LINE@python.inline@    continue@@@",
35       "@@@STEP_LOG_LINE@python.inline@  for f in fs:@@@",
36       "@@@STEP_LOG_LINE@python.inline@    print os.path.join(p,f)@@@",
37       "@@@STEP_LOG_LINE@python.inline@    subprocess.check_call(['adb', 'push',@@@",
38       "@@@STEP_LOG_LINE@python.inline@                           os.path.realpath(os.path.join(host, p, f)),@@@",
39       "@@@STEP_LOG_LINE@python.inline@                           os.path.join(device, p, f)])@@@",
40       "@@@STEP_LOG_END@python.inline@@@"
41     ]
42   },
43   {
44     "cmd": [
45       "python",
46       "-u",
47       "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
48       "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
49       "/path/to/tmp/"
50     ],
51     "infra_step": true,
52     "name": "Get downloaded SKP VERSION"
53   },
54   {
55     "cmd": [
56       "python",
57       "-u",
58       "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
59       "42",
60       "[START_DIR]/tmp/SKP_VERSION"
61     ],
62     "infra_step": true,
63     "name": "write SKP_VERSION"
64   },
65   {
66     "cmd": [
67       "adb",
68       "shell",
69       "cat",
70       "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
71     ],
72     "cwd": "[START_DIR]/skia",
73     "infra_step": true,
74     "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION",
75     "stdout": "/path/to/tmp/"
76   },
77   {
78     "cmd": [
79       "adb",
80       "shell",
81       "rm",
82       "-f",
83       "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
84     ],
85     "cwd": "[START_DIR]/skia",
86     "infra_step": true,
87     "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION"
88   },
89   {
90     "cmd": [
91       "adb",
92       "shell",
93       "rm",
94       "-rf",
95       "/sdcard/revenge_of_the_skiabot/skps"
96     ],
97     "cwd": "[START_DIR]/skia",
98     "infra_step": true,
99     "name": "rm /sdcard/revenge_of_the_skiabot/skps"
100   },
101   {
102     "cmd": [
103       "adb",
104       "shell",
105       "mkdir",
106       "-p",
107       "/sdcard/revenge_of_the_skiabot/skps"
108     ],
109     "cwd": "[START_DIR]/skia",
110     "infra_step": true,
111     "name": "mkdir /sdcard/revenge_of_the_skiabot/skps"
112   },
113   {
114     "cmd": [
115       "python",
116       "-u",
117       "\nimport os\nimport subprocess\nimport sys\nhost   = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n  p = os.path.relpath(d, host)\n  if p != '.' and p.startswith('.'):\n    continue\n  for f in fs:\n    print os.path.join(p,f)\n    subprocess.check_call(['adb', 'push',\n                           os.path.realpath(os.path.join(host, p, f)),\n                           os.path.join(device, p, f)])\n",
118       "[START_DIR]/skp",
119       "/sdcard/revenge_of_the_skiabot/skps"
120     ],
121     "infra_step": true,
122     "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps",
123     "~followup_annotations": [
124       "@@@STEP_LOG_LINE@python.inline@@@@",
125       "@@@STEP_LOG_LINE@python.inline@import os@@@",
126       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
127       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
128       "@@@STEP_LOG_LINE@python.inline@host   = sys.argv[1]@@@",
129       "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
130       "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
131       "@@@STEP_LOG_LINE@python.inline@  p = os.path.relpath(d, host)@@@",
132       "@@@STEP_LOG_LINE@python.inline@  if p != '.' and p.startswith('.'):@@@",
133       "@@@STEP_LOG_LINE@python.inline@    continue@@@",
134       "@@@STEP_LOG_LINE@python.inline@  for f in fs:@@@",
135       "@@@STEP_LOG_LINE@python.inline@    print os.path.join(p,f)@@@",
136       "@@@STEP_LOG_LINE@python.inline@    subprocess.check_call(['adb', 'push',@@@",
137       "@@@STEP_LOG_LINE@python.inline@                           os.path.realpath(os.path.join(host, p, f)),@@@",
138       "@@@STEP_LOG_LINE@python.inline@                           os.path.join(device, p, f)])@@@",
139       "@@@STEP_LOG_END@python.inline@@@"
140     ]
141   },
142   {
143     "cmd": [
144       "adb",
145       "push",
146       "[START_DIR]/tmp/SKP_VERSION",
147       "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
148     ],
149     "cwd": "[START_DIR]/skia",
150     "infra_step": true,
151     "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION"
152   },
153   {
154     "cmd": [
155       "python",
156       "-u",
157       "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
158       "[START_DIR]/skia/infra/bots/assets/skimage/VERSION",
159       "/path/to/tmp/"
160     ],
161     "infra_step": true,
162     "name": "Get downloaded skimage VERSION"
163   },
164   {
165     "cmd": [
166       "python",
167       "-u",
168       "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
169       "42",
170       "[START_DIR]/tmp/SK_IMAGE_VERSION"
171     ],
172     "infra_step": true,
173     "name": "write SK_IMAGE_VERSION"
174   },
175   {
176     "cmd": [
177       "adb",
178       "shell",
179       "cat",
180       "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
181     ],
182     "cwd": "[START_DIR]/skia",
183     "infra_step": true,
184     "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION",
185     "stdout": "/path/to/tmp/"
186   },
187   {
188     "cmd": [
189       "adb",
190       "shell",
191       "rm",
192       "-f",
193       "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
194     ],
195     "cwd": "[START_DIR]/skia",
196     "infra_step": true,
197     "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
198   },
199   {
200     "cmd": [
201       "adb",
202       "shell",
203       "rm",
204       "-rf",
205       "/sdcard/revenge_of_the_skiabot/images"
206     ],
207     "cwd": "[START_DIR]/skia",
208     "infra_step": true,
209     "name": "rm /sdcard/revenge_of_the_skiabot/images"
210   },
211   {
212     "cmd": [
213       "adb",
214       "shell",
215       "mkdir",
216       "-p",
217       "/sdcard/revenge_of_the_skiabot/images"
218     ],
219     "cwd": "[START_DIR]/skia",
220     "infra_step": true,
221     "name": "mkdir /sdcard/revenge_of_the_skiabot/images"
222   },
223   {
224     "cmd": [
225       "python",
226       "-u",
227       "\nimport os\nimport subprocess\nimport sys\nhost   = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n  p = os.path.relpath(d, host)\n  if p != '.' and p.startswith('.'):\n    continue\n  for f in fs:\n    print os.path.join(p,f)\n    subprocess.check_call(['adb', 'push',\n                           os.path.realpath(os.path.join(host, p, f)),\n                           os.path.join(device, p, f)])\n",
228       "[START_DIR]/skimage",
229       "/sdcard/revenge_of_the_skiabot/images"
230     ],
231     "infra_step": true,
232     "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images",
233     "~followup_annotations": [
234       "@@@STEP_LOG_LINE@python.inline@@@@",
235       "@@@STEP_LOG_LINE@python.inline@import os@@@",
236       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
237       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
238       "@@@STEP_LOG_LINE@python.inline@host   = sys.argv[1]@@@",
239       "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
240       "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
241       "@@@STEP_LOG_LINE@python.inline@  p = os.path.relpath(d, host)@@@",
242       "@@@STEP_LOG_LINE@python.inline@  if p != '.' and p.startswith('.'):@@@",
243       "@@@STEP_LOG_LINE@python.inline@    continue@@@",
244       "@@@STEP_LOG_LINE@python.inline@  for f in fs:@@@",
245       "@@@STEP_LOG_LINE@python.inline@    print os.path.join(p,f)@@@",
246       "@@@STEP_LOG_LINE@python.inline@    subprocess.check_call(['adb', 'push',@@@",
247       "@@@STEP_LOG_LINE@python.inline@                           os.path.realpath(os.path.join(host, p, f)),@@@",
248       "@@@STEP_LOG_LINE@python.inline@                           os.path.join(device, p, f)])@@@",
249       "@@@STEP_LOG_END@python.inline@@@"
250     ]
251   },
252   {
253     "cmd": [
254       "adb",
255       "push",
256       "[START_DIR]/tmp/SK_IMAGE_VERSION",
257       "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
258     ],
259     "cwd": "[START_DIR]/skia",
260     "infra_step": true,
261     "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
262   },
263   {
264     "cmd": [
265       "python",
266       "-u",
267       "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
268       "[START_DIR]/skia/infra/bots/assets/svg/VERSION",
269       "/path/to/tmp/"
270     ],
271     "infra_step": true,
272     "name": "Get downloaded SVG VERSION"
273   },
274   {
275     "cmd": [
276       "python",
277       "-u",
278       "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
279       "42",
280       "[START_DIR]/tmp/SVG_VERSION"
281     ],
282     "infra_step": true,
283     "name": "write SVG_VERSION"
284   },
285   {
286     "cmd": [
287       "adb",
288       "shell",
289       "cat",
290       "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
291     ],
292     "cwd": "[START_DIR]/skia",
293     "infra_step": true,
294     "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION",
295     "stdout": "/path/to/tmp/"
296   },
297   {
298     "cmd": [
299       "adb",
300       "shell",
301       "rm",
302       "-f",
303       "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
304     ],
305     "cwd": "[START_DIR]/skia",
306     "infra_step": true,
307     "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION"
308   },
309   {
310     "cmd": [
311       "adb",
312       "shell",
313       "rm",
314       "-rf",
315       "/sdcard/revenge_of_the_skiabot/svgs"
316     ],
317     "cwd": "[START_DIR]/skia",
318     "infra_step": true,
319     "name": "rm /sdcard/revenge_of_the_skiabot/svgs"
320   },
321   {
322     "cmd": [
323       "adb",
324       "shell",
325       "mkdir",
326       "-p",
327       "/sdcard/revenge_of_the_skiabot/svgs"
328     ],
329     "cwd": "[START_DIR]/skia",
330     "infra_step": true,
331     "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs"
332   },
333   {
334     "cmd": [
335       "python",
336       "-u",
337       "\nimport os\nimport subprocess\nimport sys\nhost   = sys.argv[1]\ndevice = sys.argv[2]\nfor d, _, fs in os.walk(host):\n  p = os.path.relpath(d, host)\n  if p != '.' and p.startswith('.'):\n    continue\n  for f in fs:\n    print os.path.join(p,f)\n    subprocess.check_call(['adb', 'push',\n                           os.path.realpath(os.path.join(host, p, f)),\n                           os.path.join(device, p, f)])\n",
338       "[START_DIR]/svg",
339       "/sdcard/revenge_of_the_skiabot/svgs"
340     ],
341     "infra_step": true,
342     "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs",
343     "~followup_annotations": [
344       "@@@STEP_LOG_LINE@python.inline@@@@",
345       "@@@STEP_LOG_LINE@python.inline@import os@@@",
346       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
347       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
348       "@@@STEP_LOG_LINE@python.inline@host   = sys.argv[1]@@@",
349       "@@@STEP_LOG_LINE@python.inline@device = sys.argv[2]@@@",
350       "@@@STEP_LOG_LINE@python.inline@for d, _, fs in os.walk(host):@@@",
351       "@@@STEP_LOG_LINE@python.inline@  p = os.path.relpath(d, host)@@@",
352       "@@@STEP_LOG_LINE@python.inline@  if p != '.' and p.startswith('.'):@@@",
353       "@@@STEP_LOG_LINE@python.inline@    continue@@@",
354       "@@@STEP_LOG_LINE@python.inline@  for f in fs:@@@",
355       "@@@STEP_LOG_LINE@python.inline@    print os.path.join(p,f)@@@",
356       "@@@STEP_LOG_LINE@python.inline@    subprocess.check_call(['adb', 'push',@@@",
357       "@@@STEP_LOG_LINE@python.inline@                           os.path.realpath(os.path.join(host, p, f)),@@@",
358       "@@@STEP_LOG_LINE@python.inline@                           os.path.join(device, p, f)])@@@",
359       "@@@STEP_LOG_END@python.inline@@@"
360     ]
361   },
362   {
363     "cmd": [
364       "adb",
365       "push",
366       "[START_DIR]/tmp/SVG_VERSION",
367       "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
368     ],
369     "cwd": "[START_DIR]/skia",
370     "infra_step": true,
371     "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION"
372   },
373   {
374     "cmd": [
375       "python",
376       "-u",
377       "RECIPE_MODULE[build::file]/resources/fileutil.py",
378       "rmtree",
379       "[CUSTOM_[SWARM_OUT_DIR]]/dm"
380     ],
381     "env": {
382       "PYTHONPATH": "[START_DIR]/skia/infra/bots/.recipe_deps/build/scripts"
383     },
384     "infra_step": true,
385     "name": "rmtree dm"
386   },
387   {
388     "cmd": [
389       "python",
390       "-u",
391       "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n  if os.path.exists(path):\n    print \"%s exists but is not a dir\" % path\n    sys.exit(1)\n  os.makedirs(path, mode)\n",
392       "[CUSTOM_[SWARM_OUT_DIR]]/dm",
393       "511"
394     ],
395     "infra_step": true,
396     "name": "makedirs dm",
397     "~followup_annotations": [
398       "@@@STEP_LOG_LINE@python.inline@@@@",
399       "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
400       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
401       "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
402       "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
403       "@@@STEP_LOG_LINE@python.inline@  if os.path.exists(path):@@@",
404       "@@@STEP_LOG_LINE@python.inline@    print \"%s exists but is not a dir\" % path@@@",
405       "@@@STEP_LOG_LINE@python.inline@    sys.exit(1)@@@",
406       "@@@STEP_LOG_LINE@python.inline@  os.makedirs(path, mode)@@@",
407       "@@@STEP_LOG_END@python.inline@@@"
408     ]
409   },
410   {
411     "cmd": [
412       "adb",
413       "shell",
414       "rm",
415       "-rf",
416       "/sdcard/revenge_of_the_skiabot/dm_out"
417     ],
418     "cwd": "[START_DIR]/skia",
419     "infra_step": true,
420     "name": "rm /sdcard/revenge_of_the_skiabot/dm_out"
421   },
422   {
423     "cmd": [
424       "adb",
425       "shell",
426       "mkdir",
427       "-p",
428       "/sdcard/revenge_of_the_skiabot/dm_out"
429     ],
430     "cwd": "[START_DIR]/skia",
431     "infra_step": true,
432     "name": "mkdir /sdcard/revenge_of_the_skiabot/dm_out"
433   },
434   {
435     "cmd": [
436       "python",
437       "-u",
438       "\nimport sys, os\npath = sys.argv[1]\nmode = int(sys.argv[2])\nif not os.path.isdir(path):\n  if os.path.exists(path):\n    print \"%s exists but is not a dir\" % path\n    sys.exit(1)\n  os.makedirs(path, mode)\n",
439       "[START_DIR]/tmp",
440       "511"
441     ],
442     "infra_step": true,
443     "name": "makedirs tmp_dir",
444     "~followup_annotations": [
445       "@@@STEP_LOG_LINE@python.inline@@@@",
446       "@@@STEP_LOG_LINE@python.inline@import sys, os@@@",
447       "@@@STEP_LOG_LINE@python.inline@path = sys.argv[1]@@@",
448       "@@@STEP_LOG_LINE@python.inline@mode = int(sys.argv[2])@@@",
449       "@@@STEP_LOG_LINE@python.inline@if not os.path.isdir(path):@@@",
450       "@@@STEP_LOG_LINE@python.inline@  if os.path.exists(path):@@@",
451       "@@@STEP_LOG_LINE@python.inline@    print \"%s exists but is not a dir\" % path@@@",
452       "@@@STEP_LOG_LINE@python.inline@    sys.exit(1)@@@",
453       "@@@STEP_LOG_LINE@python.inline@  os.makedirs(path, mode)@@@",
454       "@@@STEP_LOG_END@python.inline@@@"
455     ]
456   },
457   {
458     "cmd": [
459       "python",
460       "-u",
461       "\nimport contextlib\nimport math\nimport socket\nimport sys\nimport time\nimport urllib2\n\nHASHES_URL = 'https://gold.skia.org/_/hashes'\nRETRIES = 5\nTIMEOUT = 60\nWAIT_BASE = 15\n\nsocket.setdefaulttimeout(TIMEOUT)\nfor retry in range(RETRIES):\n  try:\n    with contextlib.closing(\n        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:\n      hashes = w.read()\n      with open(sys.argv[1], 'w') as f:\n        f.write(hashes)\n        break\n  except Exception as e:\n    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL\n    print e\n    if retry == RETRIES:\n      raise\n    waittime = WAIT_BASE * math.pow(2, retry)\n    print 'Retry in %d seconds.' % waittime\n    time.sleep(waittime)\n",
462       "[START_DIR]/tmp/uninteresting_hashes.txt"
463     ],
464     "infra_step": true,
465     "name": "get uninteresting hashes",
466     "~followup_annotations": [
467       "@@@STEP_LOG_LINE@python.inline@@@@",
468       "@@@STEP_LOG_LINE@python.inline@import contextlib@@@",
469       "@@@STEP_LOG_LINE@python.inline@import math@@@",
470       "@@@STEP_LOG_LINE@python.inline@import socket@@@",
471       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
472       "@@@STEP_LOG_LINE@python.inline@import time@@@",
473       "@@@STEP_LOG_LINE@python.inline@import urllib2@@@",
474       "@@@STEP_LOG_LINE@python.inline@@@@",
475       "@@@STEP_LOG_LINE@python.inline@HASHES_URL = 'https://gold.skia.org/_/hashes'@@@",
476       "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@",
477       "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@",
478       "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@",
479       "@@@STEP_LOG_LINE@python.inline@@@@",
480       "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@",
481       "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@",
482       "@@@STEP_LOG_LINE@python.inline@  try:@@@",
483       "@@@STEP_LOG_LINE@python.inline@    with contextlib.closing(@@@",
484       "@@@STEP_LOG_LINE@python.inline@        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@",
485       "@@@STEP_LOG_LINE@python.inline@      hashes = w.read()@@@",
486       "@@@STEP_LOG_LINE@python.inline@      with open(sys.argv[1], 'w') as f:@@@",
487       "@@@STEP_LOG_LINE@python.inline@        f.write(hashes)@@@",
488       "@@@STEP_LOG_LINE@python.inline@        break@@@",
489       "@@@STEP_LOG_LINE@python.inline@  except Exception as e:@@@",
490       "@@@STEP_LOG_LINE@python.inline@    print 'Failed to get uninteresting hashes from %s:' % HASHES_URL@@@",
491       "@@@STEP_LOG_LINE@python.inline@    print e@@@",
492       "@@@STEP_LOG_LINE@python.inline@    if retry == RETRIES:@@@",
493       "@@@STEP_LOG_LINE@python.inline@      raise@@@",
494       "@@@STEP_LOG_LINE@python.inline@    waittime = WAIT_BASE * math.pow(2, retry)@@@",
495       "@@@STEP_LOG_LINE@python.inline@    print 'Retry in %d seconds.' % waittime@@@",
496       "@@@STEP_LOG_LINE@python.inline@    time.sleep(waittime)@@@",
497       "@@@STEP_LOG_END@python.inline@@@"
498     ]
499   },
500   {
501     "cmd": [
502       "adb",
503       "push",
504       "[START_DIR]/tmp/uninteresting_hashes.txt",
505       "/sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt"
506     ],
507     "cwd": "[START_DIR]/skia",
508     "infra_step": true,
509     "name": "push [START_DIR]/tmp/uninteresting_hashes.txt /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt"
510   },
511   {
512     "cmd": [
513       "adb",
514       "push",
515       "[START_DIR]/out/Debug/dm",
516       "/data/local/tmp/"
517     ],
518     "cwd": "[START_DIR]/skia",
519     "infra_step": true,
520     "name": "push dm"
521   },
522   {
523     "cmd": [
524       "python",
525       "-u",
526       "\nimport shutil\nimport sys\nshutil.copy(sys.argv[1], sys.argv[2])\n",
527       "set -x; /data/local/tmp/dm --undefok --resourcePath /sdcard/revenge_of_the_skiabot/resources --skps /sdcard/revenge_of_the_skiabot/skps --images /sdcard/revenge_of_the_skiabot/images/dm --colorImages /sdcard/revenge_of_the_skiabot/images/colorspace --nameByHash --properties gitHash abc123 master client.skia builder Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-Android build_number 5 --svgs /sdcard/revenge_of_the_skiabot/svgs --key arch arm64 compiler Clang configuration Debug cpu_or_gpu GPU cpu_or_gpu_value MaliT760 extra_config Android model GalaxyS6 os Android --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out --nocpu --config 8888 srgb gles glesdft glessrgb glesmsaa4 serialize-8888 tiles_rt-8888 pic-8888 --src tests gm image colorImage svg --blacklist glessrgb image _ _ 8888 image _ _ _ test _ GrShape serialize-8888 gm _ bleed_image serialize-8888 gm _ c_gms serialize-8888 gm _ colortype serialize-8888 gm _ colortype_xfermodes serialize-8888 gm _ drawfilter serialize-8888 gm _ fontmgr_bounds_0.75_0 serialize-8888 gm _ fontmgr_bounds_1_-0.25 serialize-8888 gm _ fontmgr_bounds serialize-8888 gm _ fontmgr_match serialize-8888 gm _ fontmgr_iter serialize-8888 gm _ imagemasksubset serialize-8888 gm _ bitmapfilters serialize-8888 gm _ bitmapshaders serialize-8888 gm _ bleed serialize-8888 gm _ bleed_alpha_bmp serialize-8888 gm _ bleed_alpha_bmp_shader serialize-8888 gm _ convex_poly_clip serialize-8888 gm _ extractalpha serialize-8888 gm _ filterbitmap_checkerboard_32_32_g8 serialize-8888 gm _ filterbitmap_image_mandrill_64 serialize-8888 gm _ shadows serialize-8888 gm _ simpleaaclip_aaclip serialize-8888 gm _ composeshader_bitmap serialize-8888 gm _ scaled_tilemodes_npot serialize-8888 gm _ scaled_tilemodes serialize-8888 gm _ typefacerendering_pfaMac serialize-8888 gm _ parsedpaths serialize-8888 gm _ ImageGeneratorExternal_rect serialize-8888 gm _ ImageGeneratorExternal_shader serialize-8888 gm _ shadow_utils serialize-8888 gm _ bleed_alpha_image serialize-8888 gm _ bleed_alpha_image_shader serialize-8888 gm _ verylargebitmap serialize-8888 gm _ verylarge_picture_image pic-8888 gm _ drawfilter pic-8888 gm _ image-cacherator-from-picture serialize-8888 gm _ image-cacherator-from-picture pic-8888 gm _ image-cacherator-from-raster serialize-8888 gm _ image-cacherator-from-raster pic-8888 gm _ image-cacherator-from-ctable serialize-8888 gm _ image-cacherator-from-ctable pic-8888 gm _ gamut serialize-8888 gm _ gamut pic-8888 gm _ complexclip4_bw serialize-8888 gm _ complexclip4_bw pic-8888 gm _ complexclip4_aa serialize-8888 gm _ complexclip4_aa tiles_rt-8888 gm _ complexclip4_bw tiles_rt-8888 gm _ complexclip4_aa _ image _ interlaced1.png _ image _ interlaced2.png _ image _ interlaced3.png _ image _ .arw _ image _ .cr2 _ image _ .dng _ image _ .nef _ image _ .nrw _ image _ .orf _ image _ .raf _ image _ .rw2 _ image _ .pef _ image _ .srw _ image _ .ARW _ image _ .CR2 _ image _ .DNG _ image _ .NEF _ image _ .NRW _ image _ .ORF _ image _ .RAF _ image _ .RW2 _ image _ .PEF _ image _ .SRW --match ~SpecialImage; echo $? >/data/local/tmp/rc",
528       "[START_DIR]/tmp/dm.sh"
529     ],
530     "infra_step": true,
531     "name": "write dm.sh"
532   },
533   {
534     "cmd": [
535       "adb",
536       "push",
537       "[START_DIR]/tmp/dm.sh",
538       "/data/local/tmp/"
539     ],
540     "cwd": "[START_DIR]/skia",
541     "infra_step": true,
542     "name": "push dm.sh"
543   },
544   {
545     "cmd": [
546       "adb",
547       "logcat",
548       "-c"
549     ],
550     "cwd": "[START_DIR]/skia",
551     "infra_step": true,
552     "name": "clear log"
553   },
554   {
555     "cmd": [
556       "python",
557       "-u",
558       "\nimport subprocess\nimport sys\nbin_dir = sys.argv[1]\nsh      = sys.argv[2]\nsubprocess.check_call(['adb', 'shell', 'sh', bin_dir + sh])\ntry:\n  sys.exit(int(subprocess.check_output(['adb', 'shell', 'cat',\n                                        bin_dir + 'rc'])))\nexcept ValueError:\n  print \"Couldn't read the return code.  Probably killed for OOM.\"\n  sys.exit(1)\n",
559       "/data/local/tmp/",
560       "dm.sh"
561     ],
562     "name": "dm",
563     "~followup_annotations": [
564       "@@@STEP_LOG_LINE@python.inline@@@@",
565       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
566       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
567       "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@",
568       "@@@STEP_LOG_LINE@python.inline@sh      = sys.argv[2]@@@",
569       "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['adb', 'shell', 'sh', bin_dir + sh])@@@",
570       "@@@STEP_LOG_LINE@python.inline@try:@@@",
571       "@@@STEP_LOG_LINE@python.inline@  sys.exit(int(subprocess.check_output(['adb', 'shell', 'cat',@@@",
572       "@@@STEP_LOG_LINE@python.inline@                                        bin_dir + 'rc'])))@@@",
573       "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@",
574       "@@@STEP_LOG_LINE@python.inline@  print \"Couldn't read the return code.  Probably killed for OOM.\"@@@",
575       "@@@STEP_LOG_LINE@python.inline@  sys.exit(1)@@@",
576       "@@@STEP_LOG_END@python.inline@@@"
577     ]
578   },
579   {
580     "cmd": [
581       "adb",
582       "pull",
583       "/sdcard/revenge_of_the_skiabot/dm_out",
584       "[CUSTOM_[SWARM_OUT_DIR]]/dm"
585     ],
586     "cwd": "[START_DIR]/skia",
587     "infra_step": true,
588     "name": "pull /sdcard/revenge_of_the_skiabot/dm_out [CUSTOM_[SWARM_OUT_DIR]]/dm"
589   },
590   {
591     "cmd": [
592       "python",
593       "-u",
594       "\nimport os\nimport subprocess\nimport sys\nout = sys.argv[1]\nlog = subprocess.check_output(['adb', 'logcat', '-d'])\nfor line in log.split('\\n'):\n  tokens = line.split()\n  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':\n    addr, path = tokens[-2:]\n    local = os.path.join(out, os.path.basename(path))\n    if os.path.exists(local):\n      sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])\n      line = line.replace(addr, addr + ' ' + sym.strip())\n  print line\n",
595       "[START_DIR]/out/Debug"
596     ],
597     "infra_step": true,
598     "name": "dump log",
599     "~followup_annotations": [
600       "@@@STEP_LOG_LINE@python.inline@@@@",
601       "@@@STEP_LOG_LINE@python.inline@import os@@@",
602       "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
603       "@@@STEP_LOG_LINE@python.inline@import sys@@@",
604       "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@",
605       "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['adb', 'logcat', '-d'])@@@",
606       "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@",
607       "@@@STEP_LOG_LINE@python.inline@  tokens = line.split()@@@",
608       "@@@STEP_LOG_LINE@python.inline@  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@",
609       "@@@STEP_LOG_LINE@python.inline@    addr, path = tokens[-2:]@@@",
610       "@@@STEP_LOG_LINE@python.inline@    local = os.path.join(out, os.path.basename(path))@@@",
611       "@@@STEP_LOG_LINE@python.inline@    if os.path.exists(local):@@@",
612       "@@@STEP_LOG_LINE@python.inline@      sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@",
613       "@@@STEP_LOG_LINE@python.inline@      line = line.replace(addr, addr + ' ' + sym.strip())@@@",
614       "@@@STEP_LOG_LINE@python.inline@  print line@@@",
615       "@@@STEP_LOG_END@python.inline@@@"
616     ]
617   },
618   {
619     "cmd": [
620       "adb",
621       "kill-server"
622     ],
623     "cwd": "[START_DIR]/skia",
624     "infra_step": true,
625     "name": "kill adb server"
626   },
627   {
628     "name": "$result",
629     "recipe_result": null,
630     "status_code": 0
631   }
632 ]