blob: 0b541f4fffb1850c3810ef984f0281d41e0fa10a [file] [log] [blame]
Fathi Boudracd8f58d2012-06-15 17:43:39 +03001#!/usr/bin/python
2
Andy Doan15aa23b2012-02-02 16:40:58 -06003# Copyright (C) 2012 Linaro
4#
5# Author: Andy Doan <andy.doan@linaro.org>
6#
7# This file is part of Linaro Daily Prebuilt Images.
8#
9# Linaro Daily Prebuilt Images is free software; you can redistribute it and/or
10# modify it under the terms of the GNU General Public License
11# as published by the Free Software Foundation; either version 2
12# of the License, or (at your option) any later version.
13#
14# Linaro Daily Prebuilt Images is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with Linaro Image Tools; if not, write to the Free Software
21# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
22# USA.
23
Andy Doanfccf4842012-03-08 10:42:19 -060024from linaro_fetch_image import fetch_image
Andy Doan15aa23b2012-02-02 16:40:58 -060025from linaro_image_tools import cmd_runner
26
Andy Doan8ff38f02012-02-20 16:32:37 -060027import crawler
28
Andy Doan15aa23b2012-02-02 16:40:58 -060029import argparse
Andy Doan15aa23b2012-02-02 16:40:58 -060030import datetime
Ricardo Salveti de Araujob39eb802012-06-23 00:55:31 -030031import time
Andy Doan3634c472012-04-17 12:50:58 -050032import hashlib
Andy Doanc6500af2012-03-15 14:44:39 -050033import os
Andy Doan15aa23b2012-02-02 16:40:58 -060034import re
Andy Doane449bce2012-03-21 15:22:31 -050035import urlparse
Andy Doan35ee9dc2012-05-11 01:10:12 -050036import string
Andy Doan15aa23b2012-02-02 16:40:58 -060037
Andy Doanea2e1ea2012-04-23 11:56:29 -050038class HwPack:
39 def __init__(self, lmcname, eula=False, pre_inst_script=None):
40 self.lmcname = lmcname
41 if eula:
42 self.eula = 'EULA.txt'
43 else:
Andy Doan4aabf022012-04-26 14:30:29 -050044 self.eula = 'OPEN-EULA.txt'
Andy Doanea2e1ea2012-04-23 11:56:29 -050045 self.pre_inst_script = pre_inst_script
46
47 def do_eula(self, imgfile):
48 fname = '%s/%s' % (os.path.dirname(imgfile), self.eula)
49 with file(fname, 'a'):
50 pass #just need the file to exist
51
Andy Doan15aa23b2012-02-02 16:40:58 -060052# a mapping of hwpack name to l-m-c name
53HWPACKS = {
Fathi Boudra8b59a502013-01-18 10:20:04 +020054 'arndale': HwPack('arndale'),
Fathi Boudra65393892013-10-19 14:16:04 +030055 'arndale-be': HwPack('arndale'),
Andy Doanea2e1ea2012-04-23 11:56:29 -050056 'beagleboard': HwPack('beagle'),
Koen Kooi4fb28db2013-10-11 10:12:58 +020057 'beaglebone': HwPack('beaglebone'),
Fathi Boudra02454c92012-12-01 06:58:42 +020058 'efikamx': HwPack('efikamx'),
Fathi Boudrab97042a2013-04-04 17:49:22 +030059 'highbank': HwPack('highbank'),
Fathi Boudra02454c92012-12-01 06:58:42 +020060 'igep': HwPack('igep'),
61 'leb-origen': HwPack('origen'),
Koen Kooie4ab5dc2014-08-11 08:00:07 +020062 'linux-linaro-stable-lsk-vexpress-debug': HwPack('vexpress'),
Fathi Boudrac9a6c6d2013-05-28 09:22:52 +030063 'lsk-vexpress': HwPack('vexpress'),
Fathi Boudrad65c75f2013-08-23 15:23:44 +030064 'lsk-vexpress64': HwPack('vexpress'),
Andy Doanea2e1ea2012-04-23 11:56:29 -050065 'lt-mx5': HwPack('mx53loco'),
66 'lt-mx6': HwPack('mx6qsabrelite'),
Andy Doan490f6202012-04-25 10:56:08 -050067 'lt-origen': HwPack('origen'),
Fathi Boudra02454c92012-12-01 06:58:42 +020068 'lt-panda': HwPack('panda'),
69 'lt-panda-x11-base': HwPack('panda'),
Fathi Boudra1337ec62012-12-02 21:11:56 +020070 'lt-snowball': HwPack('snowball_sd', True, 'ste-preinstall.sh'),
71 'lt-snowball-x11-base': HwPack('snowball_sd', True, 'ste-preinstall.sh'),
Ricardo Salveti de Araujoa798c502012-06-27 19:05:10 -030072 'lt-vexpress': HwPack('vexpress'),
Fathi Boudrad871dc82014-06-11 10:28:07 +030073 'lt-vexpress64': HwPack('vexpress'),
Fathi Boudra02454c92012-12-01 06:58:42 +020074 'origen': HwPack('origen'),
75 'overo': HwPack('overo'),
76 'panda': HwPack('panda'),
Fathi Boudra65393892013-10-19 14:16:04 +030077 'panda-be': HwPack('panda'),
Fathi Boudra1337ec62012-12-02 21:11:56 +020078 'snowball': HwPack('snowball_sd', True),
Fathi Boudra02454c92012-12-01 06:58:42 +020079 'ti-panda-x11-base': HwPack('panda'),
Andy Doanedffb5d2012-04-25 11:22:19 -050080 'vexpress': HwPack('vexpress'),
Koen Kooi8ab90742014-08-11 07:41:02 +020081 'vexpress-debug': HwPack('vexpress'),
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -030082 'vexpress64': HwPack('vexpress'),
Andy Doan15aa23b2012-02-02 16:40:58 -060083}
84# a mapping of binary image to its image_file size
85BINARIES = {
Andy Doan4202d882012-03-29 21:36:09 -050086 'alip': '2G',
Fathi Boudra02454c92012-12-01 06:58:42 +020087 'developer': '1G',
Marcin Juszkiewiczb33194a2013-02-27 00:31:14 +010088 'lamp-armv8': '2G',
Andrew McDermottee96ebb2013-08-22 19:26:03 +010089 'leg-java-armv8': '4G',
Andy Doan4202d882012-03-29 21:36:09 -050090 'linarotv-xbmc': '3G',
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -030091 'minimal-armv8': '512M',
Fathi Boudra02454c92012-12-01 06:58:42 +020092 'nano': '1G',
93 'nano-lava': '1G',
Ricardo Salveti de Araujod0fe5c42012-10-17 03:29:58 -030094 'sdk-armv8': '2G',
Fathi Boudra02454c92012-12-01 06:58:42 +020095 'server': '1G',
96 'ubuntu-desktop': '3G',
Andy Doan15aa23b2012-02-02 16:40:58 -060097}
98
Fathi Boudra75e299a2012-08-26 19:04:03 +030099SNAPSHOTS_URL = "http://snapshots.linaro.org"
100
Andy Doan15aa23b2012-02-02 16:40:58 -0600101def today():
102 d = datetime.date.today()
103 return "%d%02d%02d" % (d.year, d.month, d.day)
104
Ricardo Salveti de Araujob39eb802012-06-23 00:55:31 -0300105def download(dm, url):
106 print "INFO: Fetching", url
107 before = time.time()
108 dfile = dm.download(url, None, verbose=False)
109 delta_min, delta_secs = divmod(int(time.time() - before), 60)
110 print "INFO: Downloaded file '%s' in %d min(s) and %d sec(s)" % (
111 dfile, delta_min, delta_secs)
112 return dfile
113
Andy Doan15aa23b2012-02-02 16:40:58 -0600114def compress_image(imgfile):
Ricardo Salveti de Araujoba7dacf2012-06-23 01:08:24 -0300115 print "INFO: compressing %s" % imgfile
Ricardo Salveti de Araujod6788502012-06-23 01:19:18 -0300116 before = time.time()
Ricardo Salveti de Araujo7edc48b2012-06-23 03:55:04 -0300117 args = ('gzip', imgfile)
Andy Doan15aa23b2012-02-02 16:40:58 -0600118 cmd_runner.run(args).wait()
Ricardo Salveti de Araujod6788502012-06-23 01:19:18 -0300119 delta_min, delta_secs = divmod(int(time.time() - before), 60)
120 print "INFO: file compressed in %d min(s) and %d sec(s)" % (
121 delta_min, delta_secs)
Ricardo Salveti de Araujo7edc48b2012-06-23 03:55:04 -0300122 return '%s.gz' % imgfile
Andy Doan23ce4e12012-03-21 12:46:21 -0500123
Ricardo Salveti de Araujod3743e92012-08-15 01:50:10 -0300124def zsync_image(platform, imgfile):
Ricardo Salveti de Araujoba7dacf2012-06-23 01:08:24 -0300125 print "INFO: making zsync file for %s" % imgfile
Ricardo Salveti de Araujod6788502012-06-23 01:19:18 -0300126 before = time.time()
Fathi Boudra75e299a2012-08-26 19:04:03 +0300127 basepath = "%s/%s/pre-built" % (SNAPSHOTS_URL, platform)
Paul Larson2a8e67b2012-08-06 09:47:14 -0500128 imgpath=os.sep.join(imgfile.split(os.sep)[-3:])
129 zurl=basepath + os.sep + imgpath
130 args = ('zsyncmake', '-b 2048', '-u', zurl, '-o', '%s.zsync' % imgfile,
131 imgfile)
Andy Doan23ce4e12012-03-21 12:46:21 -0500132 cmd_runner.run(args).wait()
Ricardo Salveti de Araujod6788502012-06-23 01:19:18 -0300133 delta_min, delta_secs = divmod(int(time.time() - before), 60)
134 print "INFO: zsync generated in %d min(s) and %d sec(s)" % (
135 delta_min, delta_secs)
Andy Doan15aa23b2012-02-02 16:40:58 -0600136
Andy Doan3634c472012-04-17 12:50:58 -0500137def md5sum(fname):
138 md5 = hashlib.md5()
139 with open(fname, 'rb') as f:
140 while True:
141 data = f.read(4096)
142 if not data: break
143 md5.update(data)
144 return md5.hexdigest()
145
Fathi Boudraef3cd832012-12-09 10:01:25 +0200146def create_image_info(infofile, gzfile, binary_file, hwpack_url, \
147 rootfs_url, platform):
Ricardo Salveti de Araujob93a7ec2012-05-29 14:07:53 -0300148 ''' prints out the md5sum and hwpack/rootfs info for the given image
Andy Doan3634c472012-04-17 12:50:58 -0500149 '''
Ricardo Salveti de Araujo7edc48b2012-06-23 03:55:04 -0300150 print "INFO: building image info for: %s" % gzfile
151 md5 = md5sum(gzfile)
Andy Doan3634c472012-04-17 12:50:58 -0500152
153 binary_file = os.path.basename(binary_file)
Andy Doan35ee9dc2012-05-11 01:10:12 -0500154 tfile = '%s/image_info_template.html' % os.path.dirname(__file__)
Andy Doan3634c472012-04-17 12:50:58 -0500155
Andy Doan35ee9dc2012-05-11 01:10:12 -0500156 tmpl = None
157 with open(tfile) as f:
158 buff = f.read()
159 tmpl = string.Template(buff)
160
161 title = 'Pre-Built Image Info'
Ricardo Salveti de Araujob93a7ec2012-05-29 14:07:53 -0300162
163 # build hwpack manifest and rootfs packages links
Fathi Boudraef3cd832012-12-09 10:01:25 +0200164 hwpack_name = os.path.basename(hwpack_url)
165 hwpack_manifest_url = ("%s" % hwpack_url).replace(".tar.gz", ".manifest.txt")
166 hwpack_manifest = os.path.basename(hwpack_manifest_url)
Ricardo Salveti de Araujob93a7ec2012-05-29 14:07:53 -0300167
Fathi Boudraef3cd832012-12-09 10:01:25 +0200168 rootfs_name = os.path.basename(rootfs_url)
169 rootfs_packages_url = ("%s" % rootfs_url).replace(".tar.gz", ".packages")
170 rootfs_packages = os.path.basename(rootfs_packages_url)
171
172 if platform == "openembedded":
173 rootfs_packages_url = "n/a"
174 rootfs_packages = "n/a"
Ricardo Salveti de Araujob93a7ec2012-05-29 14:07:53 -0300175
Ricardo Salveti de Araujo894040a2012-05-29 14:07:55 -0300176 # try to get information from Jenkins, if available
177 jenkins_buildn = os.environ.get('BUILD_NUMBER') or 'Not Found'
178 jenkins_build_url = os.environ.get('BUILD_URL') or 'http://ci.linaro.org'
179
Ricardo Salveti de Araujob93a7ec2012-05-29 14:07:53 -0300180 buff = tmpl.substitute(
Ricardo Salveti de Araujo7edc48b2012-06-23 03:55:04 -0300181 title=title, md5=md5, image_name=os.path.basename(gzfile),
Ricardo Salveti de Araujob93a7ec2012-05-29 14:07:53 -0300182 hwpack_name=hwpack_name, hwpack_url=hwpack_url,
183 rootfs_name=rootfs_name, rootfs_url=rootfs_url,
184 hwpack_manifest_name=hwpack_manifest,
185 hwpack_manifest_url=hwpack_manifest_url,
186 rootfs_packages_name=rootfs_packages,
Ricardo Salveti de Araujo894040a2012-05-29 14:07:55 -0300187 rootfs_packages_url=rootfs_packages_url,
188 jenkins_buildn=jenkins_buildn,
189 jenkins_build_url=jenkins_build_url)
Andy Doan3c0c3892012-04-25 11:09:53 -0500190 with open(infofile, 'w') as f:
Andy Doan35ee9dc2012-05-11 01:10:12 -0500191 f.write(buff)
Andy Doan3634c472012-04-17 12:50:58 -0500192
Fathi Boudra1062dcf2013-12-15 14:32:32 +0200193def build_image(lmc, imgfile, hwpack, hwpack_file, binary,
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -0300194 binary_file, fastmodel=False):
Ricardo Salveti de Araujoba7dacf2012-06-23 01:08:24 -0300195 print "INFO: building image: %s" % imgfile
Andy Doanea2e1ea2012-04-23 11:56:29 -0500196 hwpi = HWPACKS[hwpack]
Marcin Juszkiewiczc5c75122013-04-17 11:14:50 +0200197 try:
198 size = BINARIES[binary]
199 except:
200 size = '3G'
Andy Doan15aa23b2012-02-02 16:40:58 -0600201
Fathi Boudra1062dcf2013-12-15 14:32:32 +0200202 args = [lmc,
Fathi Boudra885753b2012-12-05 20:58:32 +0200203 '--image-size', size,
Andy Doan15aa23b2012-02-02 16:40:58 -0600204 '--hwpack-force-yes',
205 '--hwpack', hwpack_file,
206 '--binary', binary_file,
Andy Doanc6500af2012-03-15 14:44:39 -0500207 ]
208
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -0300209 if fastmodel:
210 args += ['--dev', 'fastmodel',
211 '--output-directory', os.path.dirname(imgfile),
Fathi Boudra885753b2012-12-05 20:58:32 +0200212 '--image-file', os.path.basename(imgfile)]
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -0300213 else:
214 args += ['--dev', hwpi.lmcname,
Fathi Boudra885753b2012-12-05 20:58:32 +0200215 '--image-file', imgfile]
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -0300216
Andy Doanea2e1ea2012-04-23 11:56:29 -0500217 if hwpi.pre_inst_script is not None:
Andy Doanc6500af2012-03-15 14:44:39 -0500218 sdir = os.path.abspath(os.path.dirname(__file__))
Andy Doanea2e1ea2012-04-23 11:56:29 -0500219 script = "%s/%s" % (sdir, hwpi.pre_inst_script)
Fathi Boudrac775b8a2013-05-19 10:06:14 +0300220 print "INFO: using preinstall script: %s" % script
Andy Doanc6500af2012-03-15 14:44:39 -0500221 args.append('--preinstall-script')
222 args.append(script)
223
Fathi Boudrac775b8a2013-05-19 10:06:14 +0300224 bootloader = os.environ.get("BOOTLOADER")
225 if bootloader is None:
226 print 'INFO: Use default bootloader (u_boot)'
227 else:
228 print 'INFO: Use specified bootlooader (%s)' % bootloader
229 args.append('--bootloader')
230 args.append(bootloader)
231
Ricardo Salveti de Araujoba7dacf2012-06-23 01:08:24 -0300232 print "INFO: running l-m-c:", " ".join([str(arg) for arg in args])
233
Andy Doanea2e1ea2012-04-23 11:56:29 -0500234 hwpi.do_eula(imgfile)
Ricardo Salveti de Araujod6788502012-06-23 01:19:18 -0300235
236 # some useful information so we know how much time it took per lmc run
237 before = time.time()
Andy Doan15aa23b2012-02-02 16:40:58 -0600238 cmd_runner.run(args, as_root=True).wait()
Ricardo Salveti de Araujod6788502012-06-23 01:19:18 -0300239 delta_min, delta_secs = divmod(int(time.time() - before), 60)
240 print "INFO: linaro-media-create took %d min(s) and %d sec(s) to run" % (
241 delta_min, delta_secs)
Andy Doan15aa23b2012-02-02 16:40:58 -0600242
Andy Doan184cd3b2012-03-29 22:20:02 -0500243class SnapshotCrawler:
Marcin Juszkiewiczdb17b462013-04-09 09:51:46 +0200244 def __init__(self, platform, hwpacks, binaries, platform_hwpack):
Andy Doan184cd3b2012-03-29 22:20:02 -0500245 self.platform = platform
Marcin Juszkiewiczdb17b462013-04-09 09:51:46 +0200246 self.platform_hwpack = platform_hwpack
Andy Doan184cd3b2012-03-29 22:20:02 -0500247 self.hwpacks = hwpacks
248 self.binaries = binaries
Andy Doane449bce2012-03-21 15:22:31 -0500249
Andy Doan184cd3b2012-03-29 22:20:02 -0500250 def get_binaries(self):
251 '''return a hash table of binary->url'''
252 binaryf = {}
253 for binary in self.binaries:
Fathi Boudra75e299a2012-08-26 19:04:03 +0300254 url = "%s/%s/images/%s" % (SNAPSHOTS_URL, self.platform, binary)
Andy Doan184cd3b2012-03-29 22:20:02 -0500255 (date, url) = crawler.latest_rfs(url)
Andy Doan4202d882012-03-29 21:36:09 -0500256 binaryf[binary] = url
Andy Doan4202d882012-03-29 21:36:09 -0500257
Andy Doan184cd3b2012-03-29 22:20:02 -0500258 return binaryf
Andy Doana3977372012-03-29 12:22:44 -0500259
Ricardo Salveti de Araujo0352cb92012-06-22 21:48:34 -0300260 def get_hwpacks(self):
261 '''return a hash table of hwpack->urls (date, url)'''
262 hwpackf = {}
263 for hwpack in self.hwpacks:
Koen Kooi1c8d18c2014-08-11 08:08:50 +0200264 if platform_hwpack is "kernel_hwpacks":
265 url = "%s/%s/%s" % (SNAPSHOTS_URL, self.platform_hwpack, hwpack)
266 else:
267 url = "%s/%s/hwpacks/%s" % (SNAPSHOTS_URL, self.platform_hwpack, hwpack)
Ricardo Salveti de Araujo0352cb92012-06-22 21:48:34 -0300268 hwpackf[hwpack] = crawler.latest_hwpacks(url)
269
270 return hwpackf
Andy Doan4202d882012-03-29 21:36:09 -0500271
Andy Doan184cd3b2012-03-29 22:20:02 -0500272 def get_image_name(self, odir, hwpack, hwpack_url, binary):
273
Fathi Boudra684e5e42012-11-30 04:19:33 +0100274 #convert a url like:
275 # http://snapshots.linaro.org/SERIE/hwpacks/HWPACK_NAME/HWPACK_BUILD_NUMBER/HWPACK_FILE_NAME
Andy Doan184cd3b2012-03-29 22:20:02 -0500276 # to:
Fathi Boudra684e5e42012-11-30 04:19:33 +0100277 # SERIE/pre-built/HWPACK_NAME/HWPACK_BUILD_NUMBER/HWPACK_FILE_NAME.img
Andy Doan184cd3b2012-03-29 22:20:02 -0500278 path = urlparse.urlparse(hwpack_url).path
Andy Doan66e2d5c2012-04-18 23:01:59 -0500279 parts = path.split('/')
280 name = parts[-1] #use for the file name below
281 path = '/'.join(parts[-3:-1])
Andy Doan184cd3b2012-03-29 22:20:02 -0500282
283 path = '%s/%s' % (odir, path)
284 if not os.path.exists(path):
285 os.makedirs(path)
Andy Doan66e2d5c2012-04-18 23:01:59 -0500286
287 date = re.search(r'_(\d+-\d+)_', name).group(1)
Ricardo Salveti de Araujo99d52482012-06-22 16:05:09 -0300288 return "%s/%s-%s_%s_%s.img" % (path, hwpack, self.platform, binary, date)
Andy Doan184cd3b2012-03-29 22:20:02 -0500289
Andy Doan15aa23b2012-02-02 16:40:58 -0600290def main():
Andy Doan15aa23b2012-02-02 16:40:58 -0600291 hwpacks = HWPACKS.keys()
292 binaries = BINARIES.keys()
293
294 p = argparse.ArgumentParser(description=
Andy Doana3977372012-03-29 12:22:44 -0500295 'Builds a matrix of builds from the latest build on '
296 'snapshots.linaro.org or release images on releases.linaro.org')
Andy Doan15aa23b2012-02-02 16:40:58 -0600297
Andy Doan15aa23b2012-02-02 16:40:58 -0600298 p.add_argument('-w', dest='hwpacks', action='append',
299 help='The hwpacks to generate for, default=%s' %
Fathi Boudraabe11302012-12-01 19:04:53 +0200300 ', '.join(hwpacks))
Andy Doan15aa23b2012-02-02 16:40:58 -0600301 p.add_argument('-b', dest='binaries', action='append',
302 help='The binaries to generate for, default=%s' %
Fathi Boudraabe11302012-12-01 19:04:53 +0200303 ', '.join(binaries))
Fathi Boudraaa6cbf82013-12-09 20:46:04 +0200304 p.add_argument('-p', dest='platform', default='ubuntu',
305 help='The platform, default=ubuntu')
Marcin Juszkiewiczdb17b462013-04-09 09:51:46 +0200306 p.add_argument('-pw', dest='platform_hwpack', default=False,
307 help='The platform for hwpack, default - same as platform')
Fathi Boudraf9b39042012-12-01 19:09:11 +0200308 p.add_argument('-o', dest='out_dir', default='./out',
309 help='The out directory for downloaded and built files, default=./out')
310 p.add_argument('-d', dest='date', default="",
311 help='The date (YYYYMMDD) as reference for hwpack')
Andy Doan4202d882012-03-29 21:36:09 -0500312 p.add_argument('-r', dest='release', action='store_true', default=False,
313 help='If this is for release images. NOTE: the "date" arg'
314 'will then become the cycle ie -d 12.03')
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -0300315 p.add_argument('-f', dest='fastmodel', action='store_true',
316 help='Build for the fastmodel target (for vexpress hwpack)')
317
Andy Doan15aa23b2012-02-02 16:40:58 -0600318
319 args = p.parse_args()
Andy Doana3977372012-03-29 12:22:44 -0500320
Andy Doan15aa23b2012-02-02 16:40:58 -0600321 if args.hwpacks:
322 hwpacks = args.hwpacks
323 if args.binaries:
324 binaries = args.binaries
Marcin Juszkiewiczdb17b462013-04-09 09:51:46 +0200325 if not args.platform_hwpack:
Marcin Juszkiewiczf7c892f2013-04-10 08:20:28 +0200326 platform_hwpack = args.platform
Marcin Juszkiewiczdb17b462013-04-09 09:51:46 +0200327 else:
328 platform_hwpack = args.platform_hwpack
Andy Doan15aa23b2012-02-02 16:40:58 -0600329
Andy Doan1c6ef8b2012-04-23 12:28:50 -0500330 crawler.cookie_setup()
331
Andy Doan15aa23b2012-02-02 16:40:58 -0600332 dm = fetch_image.DownloadManager(args.out_dir)
Andy Doan15aa23b2012-02-02 16:40:58 -0600333
Andy Doan4202d882012-03-29 21:36:09 -0500334 if args.release:
Marcin Juszkiewiczdb17b462013-04-09 09:51:46 +0200335 #TODO: add platform_hwpack
Andy Doan184cd3b2012-03-29 22:20:02 -0500336 site = ReleaseCrawler(args.date, args.platform, hwpacks, binaries)
Andy Doan4202d882012-03-29 21:36:09 -0500337 else:
Marcin Juszkiewiczdb17b462013-04-09 09:51:46 +0200338 site = SnapshotCrawler(args.platform, hwpacks, binaries, platform_hwpack)
Andy Doan184cd3b2012-03-29 22:20:02 -0500339
Ricardo Salveti de Araujo0352cb92012-06-22 21:48:34 -0300340 hwpackf = site.get_hwpacks()
Andy Doan184cd3b2012-03-29 22:20:02 -0500341 binaryf = site.get_binaries()
Andy Doan15aa23b2012-02-02 16:40:58 -0600342
Fathi Boudra1062dcf2013-12-15 14:32:32 +0200343 lmc = '%s/linaro-image-tools/linaro-media-create' % args.out_dir
Andy Doan184cd3b2012-03-29 22:20:02 -0500344 odir = '%s/pre-built' % args.out_dir
Andy Doanb00dbc02012-03-15 16:23:06 -0500345
Andy Doan15aa23b2012-02-02 16:40:58 -0600346 for hwpack in hwpacks:
Ricardo Salveti de Araujo0352cb92012-06-22 21:48:34 -0300347 url = None
348 # check if the user wanted a hwpack from a specific date
349 if args.date:
350 try:
351 dates = [elem[0] for elem in hwpackf[hwpack]]
352 index = dates.index(args.date)
353 url = hwpackf[hwpack][index][1]
354 except:
355 print "ERROR: Could not find hwpack '%s' with date '%s'" \
356 ", skipping pre-built image for it" % (hwpack, args.date)
357 else:
358 # just grab the latest hwpack
359 try:
360 url = hwpackf[hwpack][0][1]
361 except:
362 print "ERROR: Could not find a valid hwpack url for '%s'" \
363 ", skipping pre-built image for it" % (hwpack)
Andy Doanb00dbc02012-03-15 16:23:06 -0500364
Andy Doan2cfe5e62012-02-09 17:41:45 -0800365 if url is not None and url is not False:
Ricardo Salveti de Araujob39eb802012-06-23 00:55:31 -0300366 hwpf = download(dm, url)
Andy Doan15aa23b2012-02-02 16:40:58 -0600367 for binary in binaries:
Ricardo Salveti de Araujob93a7ec2012-05-29 14:07:53 -0300368 # create the image and metadata
Ricardo Salveti de Araujo99d52482012-06-22 16:05:09 -0300369 imgfile = site.get_image_name(odir, hwpack, url, binary)
Ricardo Salveti de Araujob93a7ec2012-05-29 14:07:53 -0300370 infofile = '%s.html' % os.path.splitext(imgfile)[0]
Ricardo Salveti de Araujob39eb802012-06-23 00:55:31 -0300371 rfsf = download(dm, binaryf[binary])
Fathi Boudra1062dcf2013-12-15 14:32:32 +0200372 build_image(lmc, imgfile, hwpack, hwpf, binary, rfsf,
Ricardo Salveti de Araujo688f24f2012-10-17 02:40:36 -0300373 args.fastmodel)
Ricardo Salveti de Araujo7edc48b2012-06-23 03:55:04 -0300374 gzfile = compress_image(imgfile)
Ricardo Salveti de Araujod3743e92012-08-15 01:50:10 -0300375 zsync_image(args.platform, gzfile)
Fathi Boudraef3cd832012-12-09 10:01:25 +0200376 create_image_info(infofile, gzfile, imgfile, url, \
377 binaryf[binary], args.platform)
Andy Doan15aa23b2012-02-02 16:40:58 -0600378
379if __name__ == '__main__':
380 main()