Index: sitescripts/extensions/bin/createNightlies.py |
=================================================================== |
--- a/sitescripts/extensions/bin/createNightlies.py |
+++ b/sitescripts/extensions/bin/createNightlies.py |
@@ -165,16 +165,22 @@ class NightlyBuild(object): |
self.buildNum) |
self.basename = metadata.get('general', 'basename') |
self.compat = [] |
for key, value in packager.KNOWN_APPS.iteritems(): |
if metadata.has_option('compat', key): |
minVersion, maxVersion = metadata.get('compat', key).split('/') |
self.compat.append({'id': value, 'minVersion': minVersion, 'maxVersion': maxVersion}) |
+ if metadata.has_option('compat', 'gecko'): |
+ self.compat.append({ |
+ 'id': 'gecko', |
+ 'minVersion': metadata.get('compat', 'gecko') |
+ }) |
+ |
def readAndroidMetadata(self): |
""" |
Read Android-specific metadata from AndroidManifest.xml file. |
""" |
manifestFile = open(os.path.join(self.tempdir, 'AndroidManifest.xml'), 'r') |
manifest = parseXml(manifestFile) |
manifestFile.close() |
@@ -223,25 +229,31 @@ class NightlyBuild(object): |
self.version = packager.getBuildVersion(self.tempdir, metadata, False, |
self.buildNum) |
self.shortVersion = metadata.get('general', 'version') |
self.basename = metadata.get('general', 'basename') |
self.updatedFromGallery = False |
def writeUpdateManifest(self): |
""" |
- Writes update.rdf file for the current build |
+ Writes update manifest for the current build |
""" |
baseDir = os.path.join(self.config.nightliesDirectory, self.basename) |
if self.config.type == 'safari': |
manifestPath = os.path.join(baseDir, 'updates.plist') |
templateName = 'safariUpdateManifest' |
+ autoescape = True |
elif self.config.type == 'android': |
manifestPath = os.path.join(baseDir, 'updates.xml') |
templateName = 'androidUpdateManifest' |
+ autoescape = True |
+ elif self.config.type == 'gecko-webext': |
+ manifestPath = os.path.join(baseDir, 'updates.json') |
+ templateName = 'geckoUpdateManifest' |
+ autoescape = False |
else: |
return |
if not os.path.exists(baseDir): |
os.makedirs(baseDir) |
# ABP for Android used to have its own update manifest format. We need to |
# generate both that and the new one in the libadblockplus format as long |
@@ -249,17 +261,18 @@ class NightlyBuild(object): |
if self.config.type == 'android': |
newManifestPath = os.path.join(baseDir, 'update.json') |
writeAndroidUpdateManifest(newManifestPath, [{ |
'basename': self.basename, |
'version': self.version, |
'updateURL': self.updateURL |
}]) |
- template = get_template(get_config().get('extensions', templateName)) |
+ template = get_template(get_config().get('extensions', templateName), |
+ autoescape=autoescape) |
template.stream({'extensions': [self]}).dump(manifestPath) |
def writeIEUpdateManifest(self, versions): |
""" |
Writes update.json file for the latest IE build |
""" |
if len(versions) == 0: |
return |
@@ -320,17 +333,17 @@ class NightlyBuild(object): |
else: |
env = os.environ |
spiderMonkeyBinary = self.config.spiderMonkeyBinary |
if spiderMonkeyBinary: |
env = dict(env, SPIDERMONKEY_BINARY=spiderMonkeyBinary) |
command = [os.path.join(self.tempdir, 'build.py'), |
'-t', self.config.type, 'build', '-b', self.buildNum] |
- if self.config.type != 'gecko': |
+ if self.config.type not in {'gecko', 'gecko-webext'}: |
command.extend(['-k', self.config.keyFile]) |
command.append(self.path) |
subprocess.check_call(command, env=env) |
if not os.path.exists(self.path): |
raise Exception("Build failed, output file hasn't been created") |
linkPath = os.path.join(baseDir, '00latest%s' % self.config.packageSuffix) |
@@ -523,18 +536,20 @@ class NightlyBuild(object): |
# get meta data from the repository |
if self.config.type == 'android': |
self.readAndroidMetadata() |
elif self.config.type == 'chrome': |
self.readChromeMetadata() |
elif self.config.type == 'safari': |
self.readSafariMetadata() |
+ elif self.config.type in {'gecko', 'gecko-webext'}: |
+ self.readGeckoMetadata() |
else: |
- self.readGeckoMetadata() |
+ raise Exception('Unknown build type {}' % self.config.type) |
# create development build |
self.build() |
# write out changelog |
self.writeChangelog(self.getChanges()) |
# write update manifest |
@@ -548,17 +563,19 @@ class NightlyBuild(object): |
self.writeIEUpdateManifest(versions) |
# update index page |
self.updateIndex(versions) |
# update nightlies config |
self.config.latestRevision = self.revision |
- if self.config.type == 'gecko' and self.config.galleryID and get_config().has_option('extensions', 'amo_key'): |
+ if (self.config.type in {'gecko', 'gecko-webext'} and |
+ self.config.galleryID and |
+ get_config().has_option('extensions', 'amo_key')): |
self.uploadToMozillaAddons() |
elif self.config.type == 'chrome' and self.config.clientID and self.config.clientSecret and self.config.refreshToken: |
self.uploadToChromeWebStore() |
finally: |
# clean up |
if self.tempdir: |
shutil.rmtree(self.tempdir, ignore_errors=True) |