1cb93a386Sopenharmony_ci[
2cb93a386Sopenharmony_ci  {
3cb93a386Sopenharmony_ci    "cmd": [
4cb93a386Sopenharmony_ci      "vpython",
5cb93a386Sopenharmony_ci      "-u",
6cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
7cb93a386Sopenharmony_ci      "--json-output",
8cb93a386Sopenharmony_ci      "/path/to/tmp/json",
9cb93a386Sopenharmony_ci      "ensure-directory",
10cb93a386Sopenharmony_ci      "--mode",
11cb93a386Sopenharmony_ci      "0777",
12cb93a386Sopenharmony_ci      "[START_DIR]/tmp"
13cb93a386Sopenharmony_ci    ],
14cb93a386Sopenharmony_ci    "infra_step": true,
15cb93a386Sopenharmony_ci    "name": "makedirs tmp_dir"
16cb93a386Sopenharmony_ci  },
17cb93a386Sopenharmony_ci  {
18cb93a386Sopenharmony_ci    "cmd": [
19cb93a386Sopenharmony_ci      "python",
20cb93a386Sopenharmony_ci      "-u",
21cb93a386Sopenharmony_ci      "import os\nprint(os.environ.get('SWARMING_BOT_ID', ''))\n"
22cb93a386Sopenharmony_ci    ],
23cb93a386Sopenharmony_ci    "name": "get swarming bot id",
24cb93a386Sopenharmony_ci    "~followup_annotations": [
25cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
26cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_BOT_ID', ''))@@@",
27cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
28cb93a386Sopenharmony_ci    ]
29cb93a386Sopenharmony_ci  },
30cb93a386Sopenharmony_ci  {
31cb93a386Sopenharmony_ci    "cmd": [
32cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
33cb93a386Sopenharmony_ci      "shell",
34cb93a386Sopenharmony_ci      "mkdir",
35cb93a386Sopenharmony_ci      "-p",
36cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/resources"
37cb93a386Sopenharmony_ci    ],
38cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
39cb93a386Sopenharmony_ci    "env": {
40cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
41cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
42cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
43cb93a386Sopenharmony_ci    },
44cb93a386Sopenharmony_ci    "infra_step": true,
45cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/resources"
46cb93a386Sopenharmony_ci  },
47cb93a386Sopenharmony_ci  {
48cb93a386Sopenharmony_ci    "cmd": [
49cb93a386Sopenharmony_ci      "python",
50cb93a386Sopenharmony_ci      "-u",
51cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(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\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n  print('CPU %d online already %d' % (cpu, value))\n  sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_status, value))\n",
52cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
53cb93a386Sopenharmony_ci      "0",
54cb93a386Sopenharmony_ci      "1"
55cb93a386Sopenharmony_ci    ],
56cb93a386Sopenharmony_ci    "env": {
57cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
58cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
59cb93a386Sopenharmony_ci    },
60cb93a386Sopenharmony_ci    "infra_step": true,
61cb93a386Sopenharmony_ci    "name": "Enabling CPU 0",
62cb93a386Sopenharmony_ci    "timeout": 30,
63cb93a386Sopenharmony_ci    "~followup_annotations": [
64cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
65cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
66cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
67cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
68cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
69cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
70cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
71cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@",
72cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
73cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
74cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
75cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
76cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
77cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
78cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
79cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
80cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@",
81cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
82cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
83cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@",
84cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('CPU %d online already %d' % (cpu, value))@@@",
85cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit()@@@",
86cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
87cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
88cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
89cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
90cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
91cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@",
92cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
93cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_status, value))@@@",
94cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
95cb93a386Sopenharmony_ci    ]
96cb93a386Sopenharmony_ci  },
97cb93a386Sopenharmony_ci  {
98cb93a386Sopenharmony_ci    "cmd": [
99cb93a386Sopenharmony_ci      "python",
100cb93a386Sopenharmony_ci      "-u",
101cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(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\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n  print('CPU %d online already %d' % (cpu, value))\n  sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_status, value))\n",
102cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
103cb93a386Sopenharmony_ci      "1",
104cb93a386Sopenharmony_ci      "1"
105cb93a386Sopenharmony_ci    ],
106cb93a386Sopenharmony_ci    "env": {
107cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
108cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
109cb93a386Sopenharmony_ci    },
110cb93a386Sopenharmony_ci    "infra_step": true,
111cb93a386Sopenharmony_ci    "name": "Enabling CPU 1",
112cb93a386Sopenharmony_ci    "timeout": 30,
113cb93a386Sopenharmony_ci    "~followup_annotations": [
114cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
115cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
116cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
117cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
118cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
119cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
120cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
121cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@",
122cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
123cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
124cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
125cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
126cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
127cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
128cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
129cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
130cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@",
131cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
132cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
133cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@",
134cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('CPU %d online already %d' % (cpu, value))@@@",
135cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit()@@@",
136cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
137cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
138cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
139cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
140cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
141cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@",
142cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
143cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_status, value))@@@",
144cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
145cb93a386Sopenharmony_ci    ]
146cb93a386Sopenharmony_ci  },
147cb93a386Sopenharmony_ci  {
148cb93a386Sopenharmony_ci    "cmd": [
149cb93a386Sopenharmony_ci      "python",
150cb93a386Sopenharmony_ci      "-u",
151cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(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\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n  print('CPU %d online already %d' % (cpu, value))\n  sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_status, value))\n",
152cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
153cb93a386Sopenharmony_ci      "2",
154cb93a386Sopenharmony_ci      "1"
155cb93a386Sopenharmony_ci    ],
156cb93a386Sopenharmony_ci    "env": {
157cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
158cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
159cb93a386Sopenharmony_ci    },
160cb93a386Sopenharmony_ci    "infra_step": true,
161cb93a386Sopenharmony_ci    "name": "Enabling CPU 2",
162cb93a386Sopenharmony_ci    "timeout": 30,
163cb93a386Sopenharmony_ci    "~followup_annotations": [
164cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
165cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
166cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
167cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
168cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
169cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
170cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
171cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@",
172cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
173cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
174cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
175cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
176cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
177cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
178cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
179cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
180cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@",
181cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
182cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
183cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@",
184cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('CPU %d online already %d' % (cpu, value))@@@",
185cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit()@@@",
186cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
187cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
188cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
189cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
190cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
191cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@",
192cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
193cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_status, value))@@@",
194cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
195cb93a386Sopenharmony_ci    ]
196cb93a386Sopenharmony_ci  },
197cb93a386Sopenharmony_ci  {
198cb93a386Sopenharmony_ci    "cmd": [
199cb93a386Sopenharmony_ci      "python",
200cb93a386Sopenharmony_ci      "-u",
201cb93a386Sopenharmony_ci      "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(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\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n  print('CPU %d online already %d' % (cpu, value))\n  sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n  raise Exception('(actual, expected) (%s, %d)'\n                  % (actual_status, value))\n",
202cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
203cb93a386Sopenharmony_ci      "3",
204cb93a386Sopenharmony_ci      "1"
205cb93a386Sopenharmony_ci    ],
206cb93a386Sopenharmony_ci    "env": {
207cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
208cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
209cb93a386Sopenharmony_ci    },
210cb93a386Sopenharmony_ci    "infra_step": true,
211cb93a386Sopenharmony_ci    "name": "Enabling CPU 3",
212cb93a386Sopenharmony_ci    "timeout": 30,
213cb93a386Sopenharmony_ci    "~followup_annotations": [
214cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
215cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
216cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
217cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
218cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
219cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
220cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
221cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@",
222cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
223cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
224cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
225cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
226cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
227cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
228cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
229cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@",
230cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@",
231cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
232cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
233cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@",
234cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print('CPU %d online already %d' % (cpu, value))@@@",
235cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit()@@@",
236cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
237cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@",
238cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@",
239cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@",
240cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@",
241cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@",
242cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %d)'@@@",
243cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_status, value))@@@",
244cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
245cb93a386Sopenharmony_ci    ]
246cb93a386Sopenharmony_ci  },
247cb93a386Sopenharmony_ci  {
248cb93a386Sopenharmony_ci    "cmd": [
249cb93a386Sopenharmony_ci      "python",
250cb93a386Sopenharmony_ci      "-u",
251cb93a386Sopenharmony_ci      "\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",
252cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
253cb93a386Sopenharmony_ci      "4",
254cb93a386Sopenharmony_ci      "ondemand"
255cb93a386Sopenharmony_ci    ],
256cb93a386Sopenharmony_ci    "env": {
257cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
258cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
259cb93a386Sopenharmony_ci    },
260cb93a386Sopenharmony_ci    "infra_step": true,
261cb93a386Sopenharmony_ci    "name": "Set CPU 4's governor to ondemand",
262cb93a386Sopenharmony_ci    "timeout": 30,
263cb93a386Sopenharmony_ci    "~followup_annotations": [
264cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
265cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
266cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
267cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
268cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
269cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
270cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
271cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@",
272cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
273cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
274cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
275cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
276cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
277cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
278cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
279cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@",
280cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@",
281cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@",
282cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@",
283cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@",
284cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %s)'@@@",
285cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_gov, gov))@@@",
286cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
287cb93a386Sopenharmony_ci    ]
288cb93a386Sopenharmony_ci  },
289cb93a386Sopenharmony_ci  {
290cb93a386Sopenharmony_ci    "cmd": [
291cb93a386Sopenharmony_ci      "python",
292cb93a386Sopenharmony_ci      "-u",
293cb93a386Sopenharmony_ci      "\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",
294cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
295cb93a386Sopenharmony_ci      "0",
296cb93a386Sopenharmony_ci      "ondemand"
297cb93a386Sopenharmony_ci    ],
298cb93a386Sopenharmony_ci    "env": {
299cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
300cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
301cb93a386Sopenharmony_ci    },
302cb93a386Sopenharmony_ci    "infra_step": true,
303cb93a386Sopenharmony_ci    "name": "Set CPU 0's governor to ondemand",
304cb93a386Sopenharmony_ci    "timeout": 30,
305cb93a386Sopenharmony_ci    "~followup_annotations": [
306cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
307cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
308cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
309cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
310cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
311cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@",
312cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@",
313cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@",
314cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
315cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@",
316cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@",
317cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(log)@@@",
318cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@",
319cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('adb root failed')@@@",
320cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
321cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@",
322cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@",
323cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@",
324cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@",
325cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@",
326cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('(actual, expected) (%s, %s)'@@@",
327cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                  % (actual_gov, gov))@@@",
328cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
329cb93a386Sopenharmony_ci    ]
330cb93a386Sopenharmony_ci  },
331cb93a386Sopenharmony_ci  {
332cb93a386Sopenharmony_ci    "cmd": [
333cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
334cb93a386Sopenharmony_ci      "push",
335cb93a386Sopenharmony_ci      "[START_DIR]/build/dm",
336cb93a386Sopenharmony_ci      "/data/local/tmp/"
337cb93a386Sopenharmony_ci    ],
338cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
339cb93a386Sopenharmony_ci    "env": {
340cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
341cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
342cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
343cb93a386Sopenharmony_ci    },
344cb93a386Sopenharmony_ci    "infra_step": true,
345cb93a386Sopenharmony_ci    "name": "push dm"
346cb93a386Sopenharmony_ci  },
347cb93a386Sopenharmony_ci  {
348cb93a386Sopenharmony_ci    "cmd": [
349cb93a386Sopenharmony_ci      "vpython",
350cb93a386Sopenharmony_ci      "-u",
351cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
352cb93a386Sopenharmony_ci      "--json-output",
353cb93a386Sopenharmony_ci      "/path/to/tmp/json",
354cb93a386Sopenharmony_ci      "glob",
355cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources",
356cb93a386Sopenharmony_ci      "*"
357cb93a386Sopenharmony_ci    ],
358cb93a386Sopenharmony_ci    "infra_step": true,
359cb93a386Sopenharmony_ci    "name": "ls [START_DIR]/skia/resources/*",
360cb93a386Sopenharmony_ci    "~followup_annotations": [
361cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skia/resources/bar.jpg@@@",
362cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skia/resources/foo.png@@@",
363cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
364cb93a386Sopenharmony_ci    ]
365cb93a386Sopenharmony_ci  },
366cb93a386Sopenharmony_ci  {
367cb93a386Sopenharmony_ci    "cmd": [
368cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
369cb93a386Sopenharmony_ci      "push",
370cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources/bar.jpg",
371cb93a386Sopenharmony_ci      "[START_DIR]/skia/resources/foo.png",
372cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/resources"
373cb93a386Sopenharmony_ci    ],
374cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
375cb93a386Sopenharmony_ci    "env": {
376cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
377cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
378cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
379cb93a386Sopenharmony_ci    },
380cb93a386Sopenharmony_ci    "infra_step": true,
381cb93a386Sopenharmony_ci    "name": "push [START_DIR]/skia/resources/* /sdcard/revenge_of_the_skiabot/resources"
382cb93a386Sopenharmony_ci  },
383cb93a386Sopenharmony_ci  {
384cb93a386Sopenharmony_ci    "cmd": [
385cb93a386Sopenharmony_ci      "vpython",
386cb93a386Sopenharmony_ci      "-u",
387cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
388cb93a386Sopenharmony_ci      "--json-output",
389cb93a386Sopenharmony_ci      "/path/to/tmp/json",
390cb93a386Sopenharmony_ci      "copy",
391cb93a386Sopenharmony_ci      "[START_DIR]/skia/infra/bots/assets/skp/VERSION",
392cb93a386Sopenharmony_ci      "/path/to/tmp/"
393cb93a386Sopenharmony_ci    ],
394cb93a386Sopenharmony_ci    "infra_step": true,
395cb93a386Sopenharmony_ci    "name": "Get skp VERSION",
396cb93a386Sopenharmony_ci    "~followup_annotations": [
397cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@VERSION@42@@@",
398cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@VERSION@@@"
399cb93a386Sopenharmony_ci    ]
400cb93a386Sopenharmony_ci  },
401cb93a386Sopenharmony_ci  {
402cb93a386Sopenharmony_ci    "cmd": [
403cb93a386Sopenharmony_ci      "vpython",
404cb93a386Sopenharmony_ci      "-u",
405cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
406cb93a386Sopenharmony_ci      "--json-output",
407cb93a386Sopenharmony_ci      "/path/to/tmp/json",
408cb93a386Sopenharmony_ci      "copy",
409cb93a386Sopenharmony_ci      "42",
410cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SKP_VERSION"
411cb93a386Sopenharmony_ci    ],
412cb93a386Sopenharmony_ci    "infra_step": true,
413cb93a386Sopenharmony_ci    "name": "write SKP_VERSION",
414cb93a386Sopenharmony_ci    "~followup_annotations": [
415cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@SKP_VERSION@42@@@",
416cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@SKP_VERSION@@@"
417cb93a386Sopenharmony_ci    ]
418cb93a386Sopenharmony_ci  },
419cb93a386Sopenharmony_ci  {
420cb93a386Sopenharmony_ci    "cmd": [
421cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
422cb93a386Sopenharmony_ci      "shell",
423cb93a386Sopenharmony_ci      "cat",
424cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
425cb93a386Sopenharmony_ci    ],
426cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
427cb93a386Sopenharmony_ci    "env": {
428cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
429cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
430cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
431cb93a386Sopenharmony_ci    },
432cb93a386Sopenharmony_ci    "infra_step": true,
433cb93a386Sopenharmony_ci    "name": "read /sdcard/revenge_of_the_skiabot/SKP_VERSION"
434cb93a386Sopenharmony_ci  },
435cb93a386Sopenharmony_ci  {
436cb93a386Sopenharmony_ci    "cmd": [
437cb93a386Sopenharmony_ci      "python",
438cb93a386Sopenharmony_ci      "-u",
439cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
440cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
441cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
442cb93a386Sopenharmony_ci    ],
443cb93a386Sopenharmony_ci    "env": {
444cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
445cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
446cb93a386Sopenharmony_ci    },
447cb93a386Sopenharmony_ci    "infra_step": true,
448cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/SKP_VERSION",
449cb93a386Sopenharmony_ci    "~followup_annotations": [
450cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
451cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
452cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
453cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
454cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
455cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
456cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
457cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
458cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
459cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
460cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
461cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
462cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
463cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
464cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
465cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
466cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
467cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
468cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
469cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
470cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
471cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
472cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
473cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
474cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
475cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
476cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
477cb93a386Sopenharmony_ci    ]
478cb93a386Sopenharmony_ci  },
479cb93a386Sopenharmony_ci  {
480cb93a386Sopenharmony_ci    "cmd": [
481cb93a386Sopenharmony_ci      "python",
482cb93a386Sopenharmony_ci      "-u",
483cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
484cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
485cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/skps"
486cb93a386Sopenharmony_ci    ],
487cb93a386Sopenharmony_ci    "env": {
488cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
489cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
490cb93a386Sopenharmony_ci    },
491cb93a386Sopenharmony_ci    "infra_step": true,
492cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/skps",
493cb93a386Sopenharmony_ci    "~followup_annotations": [
494cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
495cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
496cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
497cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
498cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
499cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
500cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
501cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
502cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
503cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
504cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
505cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
506cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
507cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
508cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
509cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
510cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
511cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
512cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
513cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
514cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
515cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
516cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
517cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
518cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
519cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
520cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
521cb93a386Sopenharmony_ci    ]
522cb93a386Sopenharmony_ci  },
523cb93a386Sopenharmony_ci  {
524cb93a386Sopenharmony_ci    "cmd": [
525cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
526cb93a386Sopenharmony_ci      "shell",
527cb93a386Sopenharmony_ci      "mkdir",
528cb93a386Sopenharmony_ci      "-p",
529cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/skps"
530cb93a386Sopenharmony_ci    ],
531cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
532cb93a386Sopenharmony_ci    "env": {
533cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
534cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
535cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
536cb93a386Sopenharmony_ci    },
537cb93a386Sopenharmony_ci    "infra_step": true,
538cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/skps"
539cb93a386Sopenharmony_ci  },
540cb93a386Sopenharmony_ci  {
541cb93a386Sopenharmony_ci    "cmd": [
542cb93a386Sopenharmony_ci      "vpython",
543cb93a386Sopenharmony_ci      "-u",
544cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
545cb93a386Sopenharmony_ci      "--json-output",
546cb93a386Sopenharmony_ci      "/path/to/tmp/json",
547cb93a386Sopenharmony_ci      "glob",
548cb93a386Sopenharmony_ci      "[START_DIR]/skp",
549cb93a386Sopenharmony_ci      "*"
550cb93a386Sopenharmony_ci    ],
551cb93a386Sopenharmony_ci    "infra_step": true,
552cb93a386Sopenharmony_ci    "name": "ls [START_DIR]/skp/*",
553cb93a386Sopenharmony_ci    "~followup_annotations": [
554cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skp/bar.jpg@@@",
555cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skp/foo.png@@@",
556cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
557cb93a386Sopenharmony_ci    ]
558cb93a386Sopenharmony_ci  },
559cb93a386Sopenharmony_ci  {
560cb93a386Sopenharmony_ci    "cmd": [
561cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
562cb93a386Sopenharmony_ci      "push",
563cb93a386Sopenharmony_ci      "[START_DIR]/skp/bar.jpg",
564cb93a386Sopenharmony_ci      "[START_DIR]/skp/foo.png",
565cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/skps"
566cb93a386Sopenharmony_ci    ],
567cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
568cb93a386Sopenharmony_ci    "env": {
569cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
570cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
571cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
572cb93a386Sopenharmony_ci    },
573cb93a386Sopenharmony_ci    "infra_step": true,
574cb93a386Sopenharmony_ci    "name": "push [START_DIR]/skp/* /sdcard/revenge_of_the_skiabot/skps"
575cb93a386Sopenharmony_ci  },
576cb93a386Sopenharmony_ci  {
577cb93a386Sopenharmony_ci    "cmd": [
578cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
579cb93a386Sopenharmony_ci      "push",
580cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SKP_VERSION",
581cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SKP_VERSION"
582cb93a386Sopenharmony_ci    ],
583cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
584cb93a386Sopenharmony_ci    "env": {
585cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
586cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
587cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
588cb93a386Sopenharmony_ci    },
589cb93a386Sopenharmony_ci    "infra_step": true,
590cb93a386Sopenharmony_ci    "name": "push [START_DIR]/tmp/SKP_VERSION /sdcard/revenge_of_the_skiabot/SKP_VERSION"
591cb93a386Sopenharmony_ci  },
592cb93a386Sopenharmony_ci  {
593cb93a386Sopenharmony_ci    "cmd": [
594cb93a386Sopenharmony_ci      "vpython",
595cb93a386Sopenharmony_ci      "-u",
596cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
597cb93a386Sopenharmony_ci      "--json-output",
598cb93a386Sopenharmony_ci      "/path/to/tmp/json",
599cb93a386Sopenharmony_ci      "copy",
600cb93a386Sopenharmony_ci      "[START_DIR]/skia/infra/bots/assets/skimage/VERSION",
601cb93a386Sopenharmony_ci      "/path/to/tmp/"
602cb93a386Sopenharmony_ci    ],
603cb93a386Sopenharmony_ci    "infra_step": true,
604cb93a386Sopenharmony_ci    "name": "Get skimage VERSION",
605cb93a386Sopenharmony_ci    "~followup_annotations": [
606cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@VERSION@42@@@",
607cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@VERSION@@@"
608cb93a386Sopenharmony_ci    ]
609cb93a386Sopenharmony_ci  },
610cb93a386Sopenharmony_ci  {
611cb93a386Sopenharmony_ci    "cmd": [
612cb93a386Sopenharmony_ci      "vpython",
613cb93a386Sopenharmony_ci      "-u",
614cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
615cb93a386Sopenharmony_ci      "--json-output",
616cb93a386Sopenharmony_ci      "/path/to/tmp/json",
617cb93a386Sopenharmony_ci      "copy",
618cb93a386Sopenharmony_ci      "42",
619cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SK_IMAGE_VERSION"
620cb93a386Sopenharmony_ci    ],
621cb93a386Sopenharmony_ci    "infra_step": true,
622cb93a386Sopenharmony_ci    "name": "write SK_IMAGE_VERSION",
623cb93a386Sopenharmony_ci    "~followup_annotations": [
624cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@SK_IMAGE_VERSION@42@@@",
625cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@SK_IMAGE_VERSION@@@"
626cb93a386Sopenharmony_ci    ]
627cb93a386Sopenharmony_ci  },
628cb93a386Sopenharmony_ci  {
629cb93a386Sopenharmony_ci    "cmd": [
630cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
631cb93a386Sopenharmony_ci      "shell",
632cb93a386Sopenharmony_ci      "cat",
633cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
634cb93a386Sopenharmony_ci    ],
635cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
636cb93a386Sopenharmony_ci    "env": {
637cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
638cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
639cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
640cb93a386Sopenharmony_ci    },
641cb93a386Sopenharmony_ci    "infra_step": true,
642cb93a386Sopenharmony_ci    "name": "read /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
643cb93a386Sopenharmony_ci  },
644cb93a386Sopenharmony_ci  {
645cb93a386Sopenharmony_ci    "cmd": [
646cb93a386Sopenharmony_ci      "python",
647cb93a386Sopenharmony_ci      "-u",
648cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
649cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
650cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
651cb93a386Sopenharmony_ci    ],
652cb93a386Sopenharmony_ci    "env": {
653cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
654cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
655cb93a386Sopenharmony_ci    },
656cb93a386Sopenharmony_ci    "infra_step": true,
657cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION",
658cb93a386Sopenharmony_ci    "~followup_annotations": [
659cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
660cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
661cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
662cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
663cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
664cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
665cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
666cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
667cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
668cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
669cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
670cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
671cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
672cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
673cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
674cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
675cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
676cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
677cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
678cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
679cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
680cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
681cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
682cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
683cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
684cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
685cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
686cb93a386Sopenharmony_ci    ]
687cb93a386Sopenharmony_ci  },
688cb93a386Sopenharmony_ci  {
689cb93a386Sopenharmony_ci    "cmd": [
690cb93a386Sopenharmony_ci      "python",
691cb93a386Sopenharmony_ci      "-u",
692cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
693cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
694cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/images"
695cb93a386Sopenharmony_ci    ],
696cb93a386Sopenharmony_ci    "env": {
697cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
698cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
699cb93a386Sopenharmony_ci    },
700cb93a386Sopenharmony_ci    "infra_step": true,
701cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/images",
702cb93a386Sopenharmony_ci    "~followup_annotations": [
703cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
704cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
705cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
706cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
707cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
708cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
709cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
710cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
711cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
712cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
713cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
714cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
715cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
716cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
717cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
718cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
719cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
720cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
721cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
722cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
723cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
724cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
725cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
726cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
727cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
728cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
729cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
730cb93a386Sopenharmony_ci    ]
731cb93a386Sopenharmony_ci  },
732cb93a386Sopenharmony_ci  {
733cb93a386Sopenharmony_ci    "cmd": [
734cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
735cb93a386Sopenharmony_ci      "shell",
736cb93a386Sopenharmony_ci      "mkdir",
737cb93a386Sopenharmony_ci      "-p",
738cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/images"
739cb93a386Sopenharmony_ci    ],
740cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
741cb93a386Sopenharmony_ci    "env": {
742cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
743cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
744cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
745cb93a386Sopenharmony_ci    },
746cb93a386Sopenharmony_ci    "infra_step": true,
747cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/images"
748cb93a386Sopenharmony_ci  },
749cb93a386Sopenharmony_ci  {
750cb93a386Sopenharmony_ci    "cmd": [
751cb93a386Sopenharmony_ci      "vpython",
752cb93a386Sopenharmony_ci      "-u",
753cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
754cb93a386Sopenharmony_ci      "--json-output",
755cb93a386Sopenharmony_ci      "/path/to/tmp/json",
756cb93a386Sopenharmony_ci      "glob",
757cb93a386Sopenharmony_ci      "[START_DIR]/skimage",
758cb93a386Sopenharmony_ci      "*"
759cb93a386Sopenharmony_ci    ],
760cb93a386Sopenharmony_ci    "infra_step": true,
761cb93a386Sopenharmony_ci    "name": "ls [START_DIR]/skimage/*",
762cb93a386Sopenharmony_ci    "~followup_annotations": [
763cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skimage/bar.jpg@@@",
764cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/skimage/foo.png@@@",
765cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
766cb93a386Sopenharmony_ci    ]
767cb93a386Sopenharmony_ci  },
768cb93a386Sopenharmony_ci  {
769cb93a386Sopenharmony_ci    "cmd": [
770cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
771cb93a386Sopenharmony_ci      "push",
772cb93a386Sopenharmony_ci      "[START_DIR]/skimage/bar.jpg",
773cb93a386Sopenharmony_ci      "[START_DIR]/skimage/foo.png",
774cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/images"
775cb93a386Sopenharmony_ci    ],
776cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
777cb93a386Sopenharmony_ci    "env": {
778cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
779cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
780cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
781cb93a386Sopenharmony_ci    },
782cb93a386Sopenharmony_ci    "infra_step": true,
783cb93a386Sopenharmony_ci    "name": "push [START_DIR]/skimage/* /sdcard/revenge_of_the_skiabot/images"
784cb93a386Sopenharmony_ci  },
785cb93a386Sopenharmony_ci  {
786cb93a386Sopenharmony_ci    "cmd": [
787cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
788cb93a386Sopenharmony_ci      "push",
789cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SK_IMAGE_VERSION",
790cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
791cb93a386Sopenharmony_ci    ],
792cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
793cb93a386Sopenharmony_ci    "env": {
794cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
795cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
796cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
797cb93a386Sopenharmony_ci    },
798cb93a386Sopenharmony_ci    "infra_step": true,
799cb93a386Sopenharmony_ci    "name": "push [START_DIR]/tmp/SK_IMAGE_VERSION /sdcard/revenge_of_the_skiabot/SK_IMAGE_VERSION"
800cb93a386Sopenharmony_ci  },
801cb93a386Sopenharmony_ci  {
802cb93a386Sopenharmony_ci    "cmd": [
803cb93a386Sopenharmony_ci      "vpython",
804cb93a386Sopenharmony_ci      "-u",
805cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
806cb93a386Sopenharmony_ci      "--json-output",
807cb93a386Sopenharmony_ci      "/path/to/tmp/json",
808cb93a386Sopenharmony_ci      "copy",
809cb93a386Sopenharmony_ci      "[START_DIR]/skia/infra/bots/assets/svg/VERSION",
810cb93a386Sopenharmony_ci      "/path/to/tmp/"
811cb93a386Sopenharmony_ci    ],
812cb93a386Sopenharmony_ci    "infra_step": true,
813cb93a386Sopenharmony_ci    "name": "Get svg VERSION",
814cb93a386Sopenharmony_ci    "~followup_annotations": [
815cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@VERSION@42@@@",
816cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@VERSION@@@"
817cb93a386Sopenharmony_ci    ]
818cb93a386Sopenharmony_ci  },
819cb93a386Sopenharmony_ci  {
820cb93a386Sopenharmony_ci    "cmd": [
821cb93a386Sopenharmony_ci      "vpython",
822cb93a386Sopenharmony_ci      "-u",
823cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
824cb93a386Sopenharmony_ci      "--json-output",
825cb93a386Sopenharmony_ci      "/path/to/tmp/json",
826cb93a386Sopenharmony_ci      "copy",
827cb93a386Sopenharmony_ci      "42",
828cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SVG_VERSION"
829cb93a386Sopenharmony_ci    ],
830cb93a386Sopenharmony_ci    "infra_step": true,
831cb93a386Sopenharmony_ci    "name": "write SVG_VERSION",
832cb93a386Sopenharmony_ci    "~followup_annotations": [
833cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@SVG_VERSION@42@@@",
834cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@SVG_VERSION@@@"
835cb93a386Sopenharmony_ci    ]
836cb93a386Sopenharmony_ci  },
837cb93a386Sopenharmony_ci  {
838cb93a386Sopenharmony_ci    "cmd": [
839cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
840cb93a386Sopenharmony_ci      "shell",
841cb93a386Sopenharmony_ci      "cat",
842cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
843cb93a386Sopenharmony_ci    ],
844cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
845cb93a386Sopenharmony_ci    "env": {
846cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
847cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
848cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
849cb93a386Sopenharmony_ci    },
850cb93a386Sopenharmony_ci    "infra_step": true,
851cb93a386Sopenharmony_ci    "name": "read /sdcard/revenge_of_the_skiabot/SVG_VERSION"
852cb93a386Sopenharmony_ci  },
853cb93a386Sopenharmony_ci  {
854cb93a386Sopenharmony_ci    "cmd": [
855cb93a386Sopenharmony_ci      "python",
856cb93a386Sopenharmony_ci      "-u",
857cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
858cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
859cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
860cb93a386Sopenharmony_ci    ],
861cb93a386Sopenharmony_ci    "env": {
862cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
863cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
864cb93a386Sopenharmony_ci    },
865cb93a386Sopenharmony_ci    "infra_step": true,
866cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/SVG_VERSION",
867cb93a386Sopenharmony_ci    "~followup_annotations": [
868cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
869cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
870cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
871cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
872cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
873cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
874cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
875cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
876cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
877cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
878cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
879cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
880cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
881cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
882cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
883cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
884cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
885cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
886cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
887cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
888cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
889cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
890cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
891cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
892cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
893cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
894cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
895cb93a386Sopenharmony_ci    ]
896cb93a386Sopenharmony_ci  },
897cb93a386Sopenharmony_ci  {
898cb93a386Sopenharmony_ci    "cmd": [
899cb93a386Sopenharmony_ci      "python",
900cb93a386Sopenharmony_ci      "-u",
901cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
902cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
903cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/svgs"
904cb93a386Sopenharmony_ci    ],
905cb93a386Sopenharmony_ci    "env": {
906cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
907cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
908cb93a386Sopenharmony_ci    },
909cb93a386Sopenharmony_ci    "infra_step": true,
910cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/svgs",
911cb93a386Sopenharmony_ci    "~followup_annotations": [
912cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
913cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
914cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
915cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
916cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
917cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
918cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
919cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
920cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
921cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
922cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
923cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
924cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
925cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
926cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
927cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
928cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
929cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
930cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
931cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
932cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
933cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
934cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
935cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
936cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
937cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
938cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
939cb93a386Sopenharmony_ci    ]
940cb93a386Sopenharmony_ci  },
941cb93a386Sopenharmony_ci  {
942cb93a386Sopenharmony_ci    "cmd": [
943cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
944cb93a386Sopenharmony_ci      "shell",
945cb93a386Sopenharmony_ci      "mkdir",
946cb93a386Sopenharmony_ci      "-p",
947cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/svgs"
948cb93a386Sopenharmony_ci    ],
949cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
950cb93a386Sopenharmony_ci    "env": {
951cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
952cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
953cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
954cb93a386Sopenharmony_ci    },
955cb93a386Sopenharmony_ci    "infra_step": true,
956cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/svgs"
957cb93a386Sopenharmony_ci  },
958cb93a386Sopenharmony_ci  {
959cb93a386Sopenharmony_ci    "cmd": [
960cb93a386Sopenharmony_ci      "vpython",
961cb93a386Sopenharmony_ci      "-u",
962cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
963cb93a386Sopenharmony_ci      "--json-output",
964cb93a386Sopenharmony_ci      "/path/to/tmp/json",
965cb93a386Sopenharmony_ci      "glob",
966cb93a386Sopenharmony_ci      "[START_DIR]/svg",
967cb93a386Sopenharmony_ci      "*"
968cb93a386Sopenharmony_ci    ],
969cb93a386Sopenharmony_ci    "infra_step": true,
970cb93a386Sopenharmony_ci    "name": "ls [START_DIR]/svg/*",
971cb93a386Sopenharmony_ci    "~followup_annotations": [
972cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/svg/bar.jpg@@@",
973cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/svg/foo.png@@@",
974cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
975cb93a386Sopenharmony_ci    ]
976cb93a386Sopenharmony_ci  },
977cb93a386Sopenharmony_ci  {
978cb93a386Sopenharmony_ci    "cmd": [
979cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
980cb93a386Sopenharmony_ci      "push",
981cb93a386Sopenharmony_ci      "[START_DIR]/svg/bar.jpg",
982cb93a386Sopenharmony_ci      "[START_DIR]/svg/foo.png",
983cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/svgs"
984cb93a386Sopenharmony_ci    ],
985cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
986cb93a386Sopenharmony_ci    "env": {
987cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
988cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
989cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
990cb93a386Sopenharmony_ci    },
991cb93a386Sopenharmony_ci    "infra_step": true,
992cb93a386Sopenharmony_ci    "name": "push [START_DIR]/svg/* /sdcard/revenge_of_the_skiabot/svgs"
993cb93a386Sopenharmony_ci  },
994cb93a386Sopenharmony_ci  {
995cb93a386Sopenharmony_ci    "cmd": [
996cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
997cb93a386Sopenharmony_ci      "push",
998cb93a386Sopenharmony_ci      "[START_DIR]/tmp/SVG_VERSION",
999cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/SVG_VERSION"
1000cb93a386Sopenharmony_ci    ],
1001cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1002cb93a386Sopenharmony_ci    "env": {
1003cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1004cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1005cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1006cb93a386Sopenharmony_ci    },
1007cb93a386Sopenharmony_ci    "infra_step": true,
1008cb93a386Sopenharmony_ci    "name": "push [START_DIR]/tmp/SVG_VERSION /sdcard/revenge_of_the_skiabot/SVG_VERSION"
1009cb93a386Sopenharmony_ci  },
1010cb93a386Sopenharmony_ci  {
1011cb93a386Sopenharmony_ci    "cmd": [
1012cb93a386Sopenharmony_ci      "vpython",
1013cb93a386Sopenharmony_ci      "-u",
1014cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1015cb93a386Sopenharmony_ci      "--json-output",
1016cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1017cb93a386Sopenharmony_ci      "rmtree",
1018cb93a386Sopenharmony_ci      "[START_DIR]/test"
1019cb93a386Sopenharmony_ci    ],
1020cb93a386Sopenharmony_ci    "infra_step": true,
1021cb93a386Sopenharmony_ci    "name": "rmtree test"
1022cb93a386Sopenharmony_ci  },
1023cb93a386Sopenharmony_ci  {
1024cb93a386Sopenharmony_ci    "cmd": [
1025cb93a386Sopenharmony_ci      "vpython",
1026cb93a386Sopenharmony_ci      "-u",
1027cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1028cb93a386Sopenharmony_ci      "--json-output",
1029cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1030cb93a386Sopenharmony_ci      "ensure-directory",
1031cb93a386Sopenharmony_ci      "--mode",
1032cb93a386Sopenharmony_ci      "0777",
1033cb93a386Sopenharmony_ci      "[START_DIR]/test"
1034cb93a386Sopenharmony_ci    ],
1035cb93a386Sopenharmony_ci    "infra_step": true,
1036cb93a386Sopenharmony_ci    "name": "makedirs test"
1037cb93a386Sopenharmony_ci  },
1038cb93a386Sopenharmony_ci  {
1039cb93a386Sopenharmony_ci    "cmd": [
1040cb93a386Sopenharmony_ci      "python",
1041cb93a386Sopenharmony_ci      "-u",
1042cb93a386Sopenharmony_ci      "\nimport subprocess\nimport sys\n\n# Remove the path.\nadb = sys.argv[1]\npath = sys.argv[2]\nprint('Removing %s' % path)\ncmd = [adb, 'shell', 'rm', '-rf', path]\nprint(' '.join(cmd))\nsubprocess.check_call(cmd)\n\n# Verify that the path was deleted.\nprint('Checking for existence of %s' % path)\ncmd = [adb, 'shell', 'ls', path]\nprint(' '.join(cmd))\ntry:\n  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)\nexcept subprocess.CalledProcessError as e:\n  output = e.output\nprint('Output was:')\nprint('======')\nprint(output)\nprint('======')\nif 'No such file or directory' not in output:\n  raise Exception('%s exists despite being deleted' % path)\n",
1043cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1044cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/dm_out"
1045cb93a386Sopenharmony_ci    ],
1046cb93a386Sopenharmony_ci    "env": {
1047cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1048cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1049cb93a386Sopenharmony_ci    },
1050cb93a386Sopenharmony_ci    "infra_step": true,
1051cb93a386Sopenharmony_ci    "name": "rm /sdcard/revenge_of_the_skiabot/dm_out",
1052cb93a386Sopenharmony_ci    "~followup_annotations": [
1053cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1054cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1055cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1056cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1057cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Remove the path.@@@",
1058cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@adb = sys.argv[1]@@@",
1059cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@path = sys.argv[2]@@@",
1060cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Removing %s' % path)@@@",
1061cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'rm', '-rf', path]@@@",
1062cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
1063cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(cmd)@@@",
1064cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1065cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@# Verify that the path was deleted.@@@",
1066cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Checking for existence of %s' % path)@@@",
1067cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@cmd = [adb, 'shell', 'ls', path]@@@",
1068cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(' '.join(cmd))@@@",
1069cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
1070cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = subprocess.check_output(cmd, stderr=subprocess.STDOUT)@@@",
1071cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except subprocess.CalledProcessError as e:@@@",
1072cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  output = e.output@@@",
1073cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('Output was:')@@@",
1074cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
1075cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(output)@@@",
1076cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print('======')@@@",
1077cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@if 'No such file or directory' not in output:@@@",
1078cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  raise Exception('%s exists despite being deleted' % path)@@@",
1079cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1080cb93a386Sopenharmony_ci    ]
1081cb93a386Sopenharmony_ci  },
1082cb93a386Sopenharmony_ci  {
1083cb93a386Sopenharmony_ci    "cmd": [
1084cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1085cb93a386Sopenharmony_ci      "shell",
1086cb93a386Sopenharmony_ci      "mkdir",
1087cb93a386Sopenharmony_ci      "-p",
1088cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/dm_out"
1089cb93a386Sopenharmony_ci    ],
1090cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1091cb93a386Sopenharmony_ci    "env": {
1092cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1093cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1094cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1095cb93a386Sopenharmony_ci    },
1096cb93a386Sopenharmony_ci    "infra_step": true,
1097cb93a386Sopenharmony_ci    "name": "mkdir /sdcard/revenge_of_the_skiabot/dm_out"
1098cb93a386Sopenharmony_ci  },
1099cb93a386Sopenharmony_ci  {
1100cb93a386Sopenharmony_ci    "cmd": [
1101cb93a386Sopenharmony_ci      "python",
1102cb93a386Sopenharmony_ci      "-u",
1103cb93a386Sopenharmony_ci      "\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",
1104cb93a386Sopenharmony_ci      "https://example.com/hashes.txt",
1105cb93a386Sopenharmony_ci      "[START_DIR]/tmp/uninteresting_hashes.txt"
1106cb93a386Sopenharmony_ci    ],
1107cb93a386Sopenharmony_ci    "env": {
1108cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1109cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1110cb93a386Sopenharmony_ci    },
1111cb93a386Sopenharmony_ci    "infra_step": true,
1112cb93a386Sopenharmony_ci    "name": "get uninteresting hashes",
1113cb93a386Sopenharmony_ci    "~followup_annotations": [
1114cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1115cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import contextlib@@@",
1116cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import math@@@",
1117cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import socket@@@",
1118cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1119cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import time@@@",
1120cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import urllib2@@@",
1121cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1122cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@HASHES_URL = sys.argv[1]@@@",
1123cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@RETRIES = 5@@@",
1124cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@TIMEOUT = 60@@@",
1125cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@WAIT_BASE = 15@@@",
1126cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1127cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@socket.setdefaulttimeout(TIMEOUT)@@@",
1128cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@for retry in range(RETRIES):@@@",
1129cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  try:@@@",
1130cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    with contextlib.closing(@@@",
1131cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        urllib2.urlopen(HASHES_URL, timeout=TIMEOUT)) as w:@@@",
1132cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      hashes = w.read()@@@",
1133cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      with open(sys.argv[2], 'w') as f:@@@",
1134cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        f.write(hashes)@@@",
1135cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        break@@@",
1136cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  except Exception as e:@@@",
1137cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    print('Failed to get uninteresting hashes from %s:' % HASHES_URL)@@@",
1138cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    print(e)@@@",
1139cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if retry == RETRIES:@@@",
1140cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      raise@@@",
1141cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    waittime = WAIT_BASE * math.pow(2, retry)@@@",
1142cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    print('Retry in %d seconds.' % waittime)@@@",
1143cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    time.sleep(waittime)@@@",
1144cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1145cb93a386Sopenharmony_ci    ]
1146cb93a386Sopenharmony_ci  },
1147cb93a386Sopenharmony_ci  {
1148cb93a386Sopenharmony_ci    "cmd": [
1149cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1150cb93a386Sopenharmony_ci      "push",
1151cb93a386Sopenharmony_ci      "[START_DIR]/tmp/uninteresting_hashes.txt",
1152cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt"
1153cb93a386Sopenharmony_ci    ],
1154cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1155cb93a386Sopenharmony_ci    "env": {
1156cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1157cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1158cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1159cb93a386Sopenharmony_ci    },
1160cb93a386Sopenharmony_ci    "infra_step": true,
1161cb93a386Sopenharmony_ci    "name": "push [START_DIR]/tmp/uninteresting_hashes.txt /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt"
1162cb93a386Sopenharmony_ci  },
1163cb93a386Sopenharmony_ci  {
1164cb93a386Sopenharmony_ci    "cmd": [
1165cb93a386Sopenharmony_ci      "python",
1166cb93a386Sopenharmony_ci      "-u",
1167cb93a386Sopenharmony_ci      "import os\nprint(os.environ.get('SWARMING_TASK_ID', ''))\n"
1168cb93a386Sopenharmony_ci    ],
1169cb93a386Sopenharmony_ci    "name": "get swarming task id",
1170cb93a386Sopenharmony_ci    "~followup_annotations": [
1171cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
1172cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@print(os.environ.get('SWARMING_TASK_ID', ''))@@@",
1173cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1174cb93a386Sopenharmony_ci    ]
1175cb93a386Sopenharmony_ci  },
1176cb93a386Sopenharmony_ci  {
1177cb93a386Sopenharmony_ci    "cmd": [
1178cb93a386Sopenharmony_ci      "vpython",
1179cb93a386Sopenharmony_ci      "-u",
1180cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1181cb93a386Sopenharmony_ci      "--json-output",
1182cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1183cb93a386Sopenharmony_ci      "copy",
1184cb93a386Sopenharmony_ci      "set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --example --flags --properties bot skia-bot-123 key1 value1 task 123456 --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 --svgs /sdcard/revenge_of_the_skiabot/svgs/svg --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out; echo $? >/data/local/tmp/rc",
1185cb93a386Sopenharmony_ci      "[START_DIR]/tmp/dm.sh"
1186cb93a386Sopenharmony_ci    ],
1187cb93a386Sopenharmony_ci    "env": {
1188cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1189cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1190cb93a386Sopenharmony_ci    },
1191cb93a386Sopenharmony_ci    "infra_step": true,
1192cb93a386Sopenharmony_ci    "name": "write dm.sh",
1193cb93a386Sopenharmony_ci    "~followup_annotations": [
1194cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@dm.sh@set -x; LD_LIBRARY_PATH=/data/local/tmp/ /data/local/tmp/dm --example --flags --properties bot skia-bot-123 key1 value1 task 123456 --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 --svgs /sdcard/revenge_of_the_skiabot/svgs/svg --uninterestingHashesFile /sdcard/revenge_of_the_skiabot/uninteresting_hashes.txt --writePath /sdcard/revenge_of_the_skiabot/dm_out; echo $? >/data/local/tmp/rc@@@",
1195cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@dm.sh@@@"
1196cb93a386Sopenharmony_ci    ]
1197cb93a386Sopenharmony_ci  },
1198cb93a386Sopenharmony_ci  {
1199cb93a386Sopenharmony_ci    "cmd": [
1200cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1201cb93a386Sopenharmony_ci      "push",
1202cb93a386Sopenharmony_ci      "[START_DIR]/tmp/dm.sh",
1203cb93a386Sopenharmony_ci      "/data/local/tmp/"
1204cb93a386Sopenharmony_ci    ],
1205cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1206cb93a386Sopenharmony_ci    "env": {
1207cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1208cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1209cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1210cb93a386Sopenharmony_ci    },
1211cb93a386Sopenharmony_ci    "infra_step": true,
1212cb93a386Sopenharmony_ci    "name": "push dm.sh"
1213cb93a386Sopenharmony_ci  },
1214cb93a386Sopenharmony_ci  {
1215cb93a386Sopenharmony_ci    "cmd": [
1216cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1217cb93a386Sopenharmony_ci      "logcat",
1218cb93a386Sopenharmony_ci      "-c"
1219cb93a386Sopenharmony_ci    ],
1220cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1221cb93a386Sopenharmony_ci    "env": {
1222cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1223cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1224cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1225cb93a386Sopenharmony_ci    },
1226cb93a386Sopenharmony_ci    "infra_step": true,
1227cb93a386Sopenharmony_ci    "name": "clear log"
1228cb93a386Sopenharmony_ci  },
1229cb93a386Sopenharmony_ci  {
1230cb93a386Sopenharmony_ci    "cmd": [
1231cb93a386Sopenharmony_ci      "python",
1232cb93a386Sopenharmony_ci      "-u",
1233cb93a386Sopenharmony_ci      "\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",
1234cb93a386Sopenharmony_ci      "/data/local/tmp/",
1235cb93a386Sopenharmony_ci      "dm.sh"
1236cb93a386Sopenharmony_ci    ],
1237cb93a386Sopenharmony_ci    "env": {
1238cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1239cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1240cb93a386Sopenharmony_ci    },
1241cb93a386Sopenharmony_ci    "name": "dm",
1242cb93a386Sopenharmony_ci    "~followup_annotations": [
1243cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1244cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1245cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1246cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@bin_dir = sys.argv[1]@@@",
1247cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@sh      = sys.argv[2]@@@",
1248cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@subprocess.check_call(['/usr/bin/adb.1.0.35', 'shell', 'sh', bin_dir + sh])@@@",
1249cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@try:@@@",
1250cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit(int(subprocess.check_output(['/usr/bin/adb.1.0.35', 'shell', 'cat',@@@",
1251cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@                                        bin_dir + 'rc'])))@@@",
1252cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@except ValueError:@@@",
1253cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print(\"Couldn't read the return code.  Probably killed for OOM.\")@@@",
1254cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  sys.exit(1)@@@",
1255cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1256cb93a386Sopenharmony_ci    ]
1257cb93a386Sopenharmony_ci  },
1258cb93a386Sopenharmony_ci  {
1259cb93a386Sopenharmony_ci    "cmd": [],
1260cb93a386Sopenharmony_ci    "name": "adb pull"
1261cb93a386Sopenharmony_ci  },
1262cb93a386Sopenharmony_ci  {
1263cb93a386Sopenharmony_ci    "cmd": [
1264cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1265cb93a386Sopenharmony_ci      "pull",
1266cb93a386Sopenharmony_ci      "/sdcard/revenge_of_the_skiabot/dm_out",
1267cb93a386Sopenharmony_ci      "[CLEANUP]/adb_pull_tmp_1"
1268cb93a386Sopenharmony_ci    ],
1269cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1270cb93a386Sopenharmony_ci    "env": {
1271cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1272cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1273cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1274cb93a386Sopenharmony_ci    },
1275cb93a386Sopenharmony_ci    "infra_step": true,
1276cb93a386Sopenharmony_ci    "name": "adb pull.pull /sdcard/revenge_of_the_skiabot/dm_out",
1277cb93a386Sopenharmony_ci    "~followup_annotations": [
1278cb93a386Sopenharmony_ci      "@@@STEP_NEST_LEVEL@1@@@"
1279cb93a386Sopenharmony_ci    ]
1280cb93a386Sopenharmony_ci  },
1281cb93a386Sopenharmony_ci  {
1282cb93a386Sopenharmony_ci    "cmd": [
1283cb93a386Sopenharmony_ci      "vpython",
1284cb93a386Sopenharmony_ci      "-u",
1285cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1286cb93a386Sopenharmony_ci      "--json-output",
1287cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1288cb93a386Sopenharmony_ci      "glob",
1289cb93a386Sopenharmony_ci      "[CLEANUP]/adb_pull_tmp_1",
1290cb93a386Sopenharmony_ci      "dm_out/*"
1291cb93a386Sopenharmony_ci    ],
1292cb93a386Sopenharmony_ci    "infra_step": true,
1293cb93a386Sopenharmony_ci    "name": "adb pull.list pulled files",
1294cb93a386Sopenharmony_ci    "~followup_annotations": [
1295cb93a386Sopenharmony_ci      "@@@STEP_NEST_LEVEL@1@@@",
1296cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/1.png@@@",
1297cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[CLEANUP]/adb_pull_tmp_1/2.png@@@",
1298cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
1299cb93a386Sopenharmony_ci    ]
1300cb93a386Sopenharmony_ci  },
1301cb93a386Sopenharmony_ci  {
1302cb93a386Sopenharmony_ci    "cmd": [
1303cb93a386Sopenharmony_ci      "vpython",
1304cb93a386Sopenharmony_ci      "-u",
1305cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1306cb93a386Sopenharmony_ci      "--json-output",
1307cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1308cb93a386Sopenharmony_ci      "copy",
1309cb93a386Sopenharmony_ci      "[CLEANUP]/adb_pull_tmp_1/1.png",
1310cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]"
1311cb93a386Sopenharmony_ci    ],
1312cb93a386Sopenharmony_ci    "infra_step": true,
1313cb93a386Sopenharmony_ci    "name": "adb pull.copy 1.png",
1314cb93a386Sopenharmony_ci    "~followup_annotations": [
1315cb93a386Sopenharmony_ci      "@@@STEP_NEST_LEVEL@1@@@"
1316cb93a386Sopenharmony_ci    ]
1317cb93a386Sopenharmony_ci  },
1318cb93a386Sopenharmony_ci  {
1319cb93a386Sopenharmony_ci    "cmd": [
1320cb93a386Sopenharmony_ci      "vpython",
1321cb93a386Sopenharmony_ci      "-u",
1322cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1323cb93a386Sopenharmony_ci      "--json-output",
1324cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1325cb93a386Sopenharmony_ci      "copy",
1326cb93a386Sopenharmony_ci      "[CLEANUP]/adb_pull_tmp_1/2.png",
1327cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]"
1328cb93a386Sopenharmony_ci    ],
1329cb93a386Sopenharmony_ci    "infra_step": true,
1330cb93a386Sopenharmony_ci    "name": "adb pull.copy 2.png",
1331cb93a386Sopenharmony_ci    "~followup_annotations": [
1332cb93a386Sopenharmony_ci      "@@@STEP_NEST_LEVEL@1@@@"
1333cb93a386Sopenharmony_ci    ]
1334cb93a386Sopenharmony_ci  },
1335cb93a386Sopenharmony_ci  {
1336cb93a386Sopenharmony_ci    "cmd": [
1337cb93a386Sopenharmony_ci      "vpython",
1338cb93a386Sopenharmony_ci      "-u",
1339cb93a386Sopenharmony_ci      "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py",
1340cb93a386Sopenharmony_ci      "--json-output",
1341cb93a386Sopenharmony_ci      "/path/to/tmp/json",
1342cb93a386Sopenharmony_ci      "glob",
1343cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]",
1344cb93a386Sopenharmony_ci      "*.png"
1345cb93a386Sopenharmony_ci    ],
1346cb93a386Sopenharmony_ci    "infra_step": true,
1347cb93a386Sopenharmony_ci    "name": "find .png images",
1348cb93a386Sopenharmony_ci    "~followup_annotations": [
1349cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@glob@[START_DIR]/[SWARM_OUT_DIR]/someimage.png@@@",
1350cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@glob@@@"
1351cb93a386Sopenharmony_ci    ]
1352cb93a386Sopenharmony_ci  },
1353cb93a386Sopenharmony_ci  {
1354cb93a386Sopenharmony_ci    "cmd": [
1355cb93a386Sopenharmony_ci      "gsutil",
1356cb93a386Sopenharmony_ci      "-m",
1357cb93a386Sopenharmony_ci      "cp",
1358cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/*.png",
1359cb93a386Sopenharmony_ci      "gs://skia-infra-gm/dm-images-v1"
1360cb93a386Sopenharmony_ci    ],
1361cb93a386Sopenharmony_ci    "name": "upload .png images"
1362cb93a386Sopenharmony_ci  },
1363cb93a386Sopenharmony_ci  {
1364cb93a386Sopenharmony_ci    "cmd": [
1365cb93a386Sopenharmony_ci      "gsutil",
1366cb93a386Sopenharmony_ci      "cp",
1367cb93a386Sopenharmony_ci      "-Z",
1368cb93a386Sopenharmony_ci      "[START_DIR]/[SWARM_OUT_DIR]/dm.json",
1369cb93a386Sopenharmony_ci      "gs://skia-infra-gm/trybot/dm-json-v1/2012/05/14/12/1234_7/Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android/1337000001/dm.json"
1370cb93a386Sopenharmony_ci    ],
1371cb93a386Sopenharmony_ci    "name": "upload dm.json"
1372cb93a386Sopenharmony_ci  },
1373cb93a386Sopenharmony_ci  {
1374cb93a386Sopenharmony_ci    "cmd": [
1375cb93a386Sopenharmony_ci      "python",
1376cb93a386Sopenharmony_ci      "-u",
1377cb93a386Sopenharmony_ci      "\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",
1378cb93a386Sopenharmony_ci      "[START_DIR]/build"
1379cb93a386Sopenharmony_ci    ],
1380cb93a386Sopenharmony_ci    "env": {
1381cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1382cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1383cb93a386Sopenharmony_ci    },
1384cb93a386Sopenharmony_ci    "infra_step": true,
1385cb93a386Sopenharmony_ci    "name": "dump log",
1386cb93a386Sopenharmony_ci    "timeout": 300,
1387cb93a386Sopenharmony_ci    "~followup_annotations": [
1388cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@@@@",
1389cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import os@@@",
1390cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import subprocess@@@",
1391cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@import sys@@@",
1392cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@out = sys.argv[1]@@@",
1393cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output(['/usr/bin/adb.1.0.35', 'logcat', '-d'])@@@",
1394cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@for line in log.split('\\n'):@@@",
1395cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  tokens = line.split()@@@",
1396cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  if len(tokens) == 11 and tokens[-7] == 'F' and tokens[-3] == 'pc':@@@",
1397cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    addr, path = tokens[-2:]@@@",
1398cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    local = os.path.join(out, os.path.basename(path))@@@",
1399cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@    if os.path.exists(local):@@@",
1400cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      try:@@@",
1401cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        sym = subprocess.check_output(['addr2line', '-Cfpe', local, addr])@@@",
1402cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        line = line.replace(addr, addr + ' ' + sym.strip())@@@",
1403cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@      except subprocess.CalledProcessError:@@@",
1404cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@        pass@@@",
1405cb93a386Sopenharmony_ci      "@@@STEP_LOG_LINE@python.inline@  print(line)@@@",
1406cb93a386Sopenharmony_ci      "@@@STEP_LOG_END@python.inline@@@"
1407cb93a386Sopenharmony_ci    ]
1408cb93a386Sopenharmony_ci  },
1409cb93a386Sopenharmony_ci  {
1410cb93a386Sopenharmony_ci    "cmd": [
1411cb93a386Sopenharmony_ci      "/usr/bin/adb.1.0.35",
1412cb93a386Sopenharmony_ci      "kill-server"
1413cb93a386Sopenharmony_ci    ],
1414cb93a386Sopenharmony_ci    "cwd": "[START_DIR]/skia",
1415cb93a386Sopenharmony_ci    "env": {
1416cb93a386Sopenharmony_ci      "ADB_VENDOR_KEYS": "/home/chrome-bot/.android/adbkey",
1417cb93a386Sopenharmony_ci      "CHROME_HEADLESS": "1",
1418cb93a386Sopenharmony_ci      "PATH": "<PATH>:RECIPE_REPO[depot_tools]"
1419cb93a386Sopenharmony_ci    },
1420cb93a386Sopenharmony_ci    "infra_step": true,
1421cb93a386Sopenharmony_ci    "name": "kill adb server"
1422cb93a386Sopenharmony_ci  },
1423cb93a386Sopenharmony_ci  {
1424cb93a386Sopenharmony_ci    "name": "$result"
1425cb93a386Sopenharmony_ci  }
1426cb93a386Sopenharmony_ci]