blob: 8991dfa55c8aa1d3856abb487931674c2aefe527 [file] [log] [blame]
Brian O'Connor0167bd42016-04-29 17:09:10 -07001#!/usr/bin/env python
2#FIXME Add license
3
4import re
Brian O'Connor92ec2132016-05-03 17:30:25 -07005import os
Brian O'Connor0167bd42016-04-29 17:09:10 -07006from zipfile import ZipFile
Brian O'Connor92ec2132016-05-03 17:30:25 -07007from tarfile import TarFile, TarInfo
Brian O'Connor65c0bdf2016-05-03 18:40:17 -07008import tarfile
9import time
Brian O'Connor92ec2132016-05-03 17:30:25 -070010from cStringIO import StringIO
Thomas Vachuska06291002018-04-06 11:25:19 -070011import subprocess
Brian O'Connor92ec2132016-05-03 17:30:25 -070012
Brian O'Connor92ec2132016-05-03 17:30:25 -070013
14written_files = set()
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070015now = time.time()
Brian O'Connor92ec2132016-05-03 17:30:25 -070016
17def addFile(tar, dest, file, file_size):
18 if dest not in written_files:
19 info = TarInfo(dest)
20 info.size = file_size
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070021 info.mtime = now
22 info.mode = 0777
Brian O'Connor92ec2132016-05-03 17:30:25 -070023 tar.addfile(info, fileobj=file)
24 written_files.add(dest)
25
26def addString(tar, dest, string):
27 if dest not in written_files:
28 print dest, string
29 info = TarInfo(dest)
30 info.size = len(string)
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070031 info.mtime = now
32 info.mode = 0777
Brian O'Connor92ec2132016-05-03 17:30:25 -070033 file = StringIO(string)
34 tar.addfile(info, fileobj=file)
35 file.close()
36 written_files.add(dest)
Brian O'Connor0167bd42016-04-29 17:09:10 -070037
Thomas Vachuska06291002018-04-06 11:25:19 -070038def getHash():
39 p = subprocess.Popen('git rev-parse --verify HEAD --short', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
40 (output, err) = p.communicate()
41 return output if p.wait() == 0 else '0000000000'
42
Brian O'Connora0273922016-09-13 16:24:13 -070043def stageOnos(output, version, files=[]):
44 base = 'onos-%s/' % version
45
Thomas Vachuska06291002018-04-06 11:25:19 -070046 runtimeVersion = version
47 if version.endswith('-SNAPSHOT'):
48 runtimeVersion = version.replace('-SNAPSHOT', '.%s' % getHash())
49
Brian O'Connor0167bd42016-04-29 17:09:10 -070050 # Note this is not a compressed zip
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070051 with tarfile.open(output, 'w:gz') as output:
Brian O'Connor0167bd42016-04-29 17:09:10 -070052 for file in files:
53 if '.zip' in file:
54 with ZipFile(file, 'r') as zip_part:
Brian O'Connor92ec2132016-05-03 17:30:25 -070055 for f in zip_part.infolist():
Brian O'Connor65c0bdf2016-05-03 18:40:17 -070056 dest = f.filename
Brian O'Connora0273922016-09-13 16:24:13 -070057 if base not in dest:
Jon Hallb84df5d2017-01-31 11:19:48 -080058 dest = base + 'apache-karaf-3.0.8/system/' + f.filename
Brian O'Connor92ec2132016-05-03 17:30:25 -070059 addFile(output, dest, zip_part.open(f), f.file_size)
Brian O'Connor0167bd42016-04-29 17:09:10 -070060 elif '.oar' in file:
61 with ZipFile(file, 'r') as oar:
62 app_xml = oar.open('app.xml').read()
63 app_name = re.search('name="([^"]+)"', app_xml).group(1)
Brian O'Connora0273922016-09-13 16:24:13 -070064 dest = base + 'apps/%(name)s/%(name)s.oar' % { 'name': app_name}
Brian O'Connor92ec2132016-05-03 17:30:25 -070065 addFile(output, dest, open(file), os.stat(file).st_size)
Brian O'Connora0273922016-09-13 16:24:13 -070066 dest = base + 'apps/%s/app.xml' % app_name
Brian O'Connor92ec2132016-05-03 17:30:25 -070067 addString(output, dest, app_xml)
68 for f in oar.infolist():
69 filename = f.filename
70 if 'm2' in filename:
Jon Hallb84df5d2017-01-31 11:19:48 -080071 dest = base + 'apache-karaf-3.0.8/system/' + filename[3:]
Brian O'Connor0167bd42016-04-29 17:09:10 -070072 if dest not in written_files:
Brian O'Connor92ec2132016-05-03 17:30:25 -070073 addFile(output, dest, oar.open(f), f.file_size)
Brian O'Connor0167bd42016-04-29 17:09:10 -070074 written_files.add(dest)
75 elif 'features.xml' in file:
Jon Hallb84df5d2017-01-31 11:19:48 -080076 dest = base + 'apache-karaf-3.0.8/system/org/onosproject/onos-features/%s/' % version
Brian O'Connora0273922016-09-13 16:24:13 -070077 dest += 'onos-features-%s-features.xml' % version
Brian O'Connor0167bd42016-04-29 17:09:10 -070078 with open(file) as f:
Brian O'Connor92ec2132016-05-03 17:30:25 -070079 addFile(output, dest, f, os.stat(file).st_size)
Brian O'Connora0273922016-09-13 16:24:13 -070080 addString(output, base + 'apps/org.onosproject.drivers/active', '')
Thomas Vachuska06291002018-04-06 11:25:19 -070081 addString(output, base + 'VERSION', runtimeVersion)
Brian O'Connor0167bd42016-04-29 17:09:10 -070082
83if __name__ == '__main__':
84 import sys
85
Brian O'Connora0273922016-09-13 16:24:13 -070086 if len(sys.argv) < 3:
87 print 'USAGE' #FIXME
Brian O'Connor0167bd42016-04-29 17:09:10 -070088 sys.exit(1)
89
90 output = sys.argv[1]
Brian O'Connora0273922016-09-13 16:24:13 -070091 version = sys.argv[2]
92 args = sys.argv[3:]
Brian O'Connor0167bd42016-04-29 17:09:10 -070093
Brian O'Connora0273922016-09-13 16:24:13 -070094 stageOnos(output, version, args)