зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1618033
- Remove now-unused mozharness mobile_l10n.py - which was used for single-locale l10n. r=aki
Differential Revision: https://phabricator.services.mozilla.com/D64222
This commit is contained in:
Родитель
4629d5f139
Коммит
5c6a61f5ac
|
@ -1,7 +0,0 @@
|
||||||
mobile_l10n module
|
|
||||||
==================
|
|
||||||
|
|
||||||
.. automodule:: mobile_l10n
|
|
||||||
:members:
|
|
||||||
:undoc-members:
|
|
||||||
:show-inheritance:
|
|
|
@ -10,7 +10,6 @@ scripts
|
||||||
desktop_unittest.rst
|
desktop_unittest.rst
|
||||||
fx_desktop_build.rst
|
fx_desktop_build.rst
|
||||||
marionette.rst
|
marionette.rst
|
||||||
mobile_l10n.rst
|
|
||||||
mobile_partner_repack.rst
|
mobile_partner_repack.rst
|
||||||
multil10n.rst
|
multil10n.rst
|
||||||
talos_script.rst
|
talos_script.rst
|
||||||
|
|
|
@ -1,297 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
# ***** BEGIN LICENSE BLOCK *****
|
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
||||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
||||||
# ***** END LICENSE BLOCK *****
|
|
||||||
"""mobile_l10n.py
|
|
||||||
|
|
||||||
This currently supports nightly and release single locale repacks for
|
|
||||||
Android. This also creates nightly updates.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import glob
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
try:
|
|
||||||
import simplejson as json
|
|
||||||
assert json
|
|
||||||
except ImportError:
|
|
||||||
import json
|
|
||||||
|
|
||||||
# load modules from parent dir
|
|
||||||
sys.path.insert(1, os.path.dirname(sys.path[0])) # noqa
|
|
||||||
|
|
||||||
from mozharness.base.errors import MakefileErrorList
|
|
||||||
from mozharness.base.log import OutputParser
|
|
||||||
from mozharness.mozilla.automation import AutomationMixin
|
|
||||||
from mozharness.mozilla.tooltool import TooltoolMixin
|
|
||||||
from mozharness.base.vcs.vcsbase import MercurialScript
|
|
||||||
from mozharness.mozilla.l10n.locales import LocalesMixin
|
|
||||||
from mozharness.mozilla.secrets import SecretsMixin
|
|
||||||
|
|
||||||
|
|
||||||
# MobileSingleLocale {{{1
|
|
||||||
class MobileSingleLocale(LocalesMixin, TooltoolMixin, AutomationMixin,
|
|
||||||
MercurialScript, SecretsMixin):
|
|
||||||
config_options = [[
|
|
||||||
['--locale', ],
|
|
||||||
{"action": "extend",
|
|
||||||
"dest": "locales",
|
|
||||||
"type": "string",
|
|
||||||
"help": "Specify the locale(s) to sign and update"
|
|
||||||
}
|
|
||||||
], [
|
|
||||||
['--tag-override', ],
|
|
||||||
{"action": "store",
|
|
||||||
"dest": "tag_override",
|
|
||||||
"type": "string",
|
|
||||||
"help": "Override the tags set for all repos"
|
|
||||||
}
|
|
||||||
]]
|
|
||||||
|
|
||||||
def __init__(self, require_config_file=True):
|
|
||||||
buildscript_kwargs = {
|
|
||||||
'all_actions': [
|
|
||||||
"get-secrets",
|
|
||||||
"clone-locales",
|
|
||||||
"list-locales",
|
|
||||||
"setup",
|
|
||||||
"repack",
|
|
||||||
"upload-repacks",
|
|
||||||
"summary",
|
|
||||||
],
|
|
||||||
'config': {
|
|
||||||
"hg_l10n_base": "https://hg.mozilla.org/l10n-central",
|
|
||||||
"log_name": "single_locale",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
LocalesMixin.__init__(self)
|
|
||||||
MercurialScript.__init__(
|
|
||||||
self,
|
|
||||||
config_options=self.config_options,
|
|
||||||
require_config_file=require_config_file,
|
|
||||||
**buildscript_kwargs
|
|
||||||
)
|
|
||||||
self.base_package_name = None
|
|
||||||
self.repack_env = None
|
|
||||||
self.upload_env = None
|
|
||||||
self.upload_urls = {}
|
|
||||||
|
|
||||||
# Helper methods {{{2
|
|
||||||
def query_repack_env(self):
|
|
||||||
if self.repack_env:
|
|
||||||
return self.repack_env
|
|
||||||
c = self.config
|
|
||||||
repack_env = self.query_env(partial_env=c.get("repack_env"))
|
|
||||||
if self.query_is_nightly():
|
|
||||||
# we might set update_channel explicitly
|
|
||||||
if c.get('update_channel'):
|
|
||||||
update_channel = c['update_channel']
|
|
||||||
else: # Let's just give the generic channel based on branch.
|
|
||||||
update_channel = "nightly-%s" % (c['branch'],)
|
|
||||||
if isinstance(update_channel, unicode):
|
|
||||||
update_channel = update_channel.encode("utf-8")
|
|
||||||
repack_env["MOZ_UPDATE_CHANNEL"] = update_channel
|
|
||||||
self.info("Update channel set to: {}".format(repack_env["MOZ_UPDATE_CHANNEL"]))
|
|
||||||
|
|
||||||
self.repack_env = repack_env
|
|
||||||
return self.repack_env
|
|
||||||
|
|
||||||
def query_l10n_env(self):
|
|
||||||
return self.query_env()
|
|
||||||
|
|
||||||
def query_upload_env(self):
|
|
||||||
if self.upload_env:
|
|
||||||
return self.upload_env
|
|
||||||
|
|
||||||
upload_env = self.query_env(partial_env=self.config.get("upload_env"),
|
|
||||||
replace_dict=dict(self.config))
|
|
||||||
self.upload_env = upload_env
|
|
||||||
return self.upload_env
|
|
||||||
|
|
||||||
def _query_make_variable(self, variable, make_args=None):
|
|
||||||
make = self.query_exe('make')
|
|
||||||
env = self.query_repack_env()
|
|
||||||
dirs = self.query_abs_dirs()
|
|
||||||
if make_args is None:
|
|
||||||
make_args = []
|
|
||||||
# TODO error checking
|
|
||||||
output = self.get_output_from_command(
|
|
||||||
[make, "echo-variable-%s" % variable] + make_args,
|
|
||||||
cwd=dirs['abs_locales_dir'], silent=True,
|
|
||||||
env=env
|
|
||||||
)
|
|
||||||
parser = OutputParser(config=self.config, log_obj=self.log_obj,
|
|
||||||
error_list=MakefileErrorList)
|
|
||||||
parser.add_lines(output)
|
|
||||||
return output.strip()
|
|
||||||
|
|
||||||
def query_base_package_name(self):
|
|
||||||
"""Get the package name from the objdir.
|
|
||||||
Only valid after setup is run.
|
|
||||||
"""
|
|
||||||
if self.base_package_name:
|
|
||||||
return self.base_package_name
|
|
||||||
self.base_package_name = self._query_make_variable(
|
|
||||||
"PACKAGE",
|
|
||||||
make_args=['AB_CD=%(locale)s']
|
|
||||||
)
|
|
||||||
return self.base_package_name
|
|
||||||
|
|
||||||
def query_upload_url(self, locale):
|
|
||||||
if locale in self.upload_urls:
|
|
||||||
return self.upload_urls[locale]
|
|
||||||
else:
|
|
||||||
self.error("Can't determine the upload url for %s!" % locale)
|
|
||||||
|
|
||||||
def query_abs_dirs(self):
|
|
||||||
if self.abs_dirs:
|
|
||||||
return self.abs_dirs
|
|
||||||
abs_dirs = super(MobileSingleLocale, self).query_abs_dirs()
|
|
||||||
|
|
||||||
dirs = {
|
|
||||||
'build_dir': os.path.join(abs_dirs['base_work_dir'], 'build'),
|
|
||||||
}
|
|
||||||
|
|
||||||
abs_dirs.update(dirs)
|
|
||||||
self.abs_dirs = abs_dirs
|
|
||||||
return self.abs_dirs
|
|
||||||
|
|
||||||
# Actions {{{2
|
|
||||||
def clone_locales(self):
|
|
||||||
self.pull_locale_source()
|
|
||||||
|
|
||||||
# list_locales() is defined in LocalesMixin.
|
|
||||||
|
|
||||||
def _setup_configure(self):
|
|
||||||
dirs = self.query_abs_dirs()
|
|
||||||
env = self.query_repack_env()
|
|
||||||
|
|
||||||
mach = os.path.join(dirs['abs_src_dir'], 'mach')
|
|
||||||
|
|
||||||
if self.run_command([sys.executable, mach, 'configure'],
|
|
||||||
cwd=dirs['abs_src_dir'],
|
|
||||||
env=env,
|
|
||||||
error_list=MakefileErrorList):
|
|
||||||
self.fatal("Configure failed!")
|
|
||||||
|
|
||||||
# Invoke the build system to get nsinstall and buildid.h.
|
|
||||||
targets = [
|
|
||||||
'config/export',
|
|
||||||
'buildid.h',
|
|
||||||
]
|
|
||||||
|
|
||||||
self.run_command([sys.executable, mach, 'build'] + targets,
|
|
||||||
cwd=dirs['abs_src_dir'],
|
|
||||||
env=env,
|
|
||||||
error_list=MakefileErrorList,
|
|
||||||
halt_on_failure=True)
|
|
||||||
|
|
||||||
def setup(self):
|
|
||||||
c = self.config
|
|
||||||
dirs = self.query_abs_dirs()
|
|
||||||
mozconfig_path = os.path.join(dirs['abs_src_dir'], '.mozconfig')
|
|
||||||
self.copyfile(os.path.join(dirs['abs_work_dir'], c['mozconfig']),
|
|
||||||
mozconfig_path)
|
|
||||||
# TODO stop using cat
|
|
||||||
cat = self.query_exe("cat")
|
|
||||||
make = self.query_exe("make")
|
|
||||||
self.run_command([cat, mozconfig_path])
|
|
||||||
env = self.query_repack_env()
|
|
||||||
if self.config.get("tooltool_config"):
|
|
||||||
self.tooltool_fetch(
|
|
||||||
self.config['tooltool_config']['manifest'],
|
|
||||||
output_dir=self.config['tooltool_config']['output_dir'] % self.query_abs_dirs(),
|
|
||||||
)
|
|
||||||
self._setup_configure()
|
|
||||||
self.run_command([make, "wget-en-US"],
|
|
||||||
cwd=dirs['abs_locales_dir'],
|
|
||||||
env=env,
|
|
||||||
error_list=MakefileErrorList,
|
|
||||||
halt_on_failure=True)
|
|
||||||
self.run_command([make, "unpack"],
|
|
||||||
cwd=dirs['abs_locales_dir'],
|
|
||||||
env=env,
|
|
||||||
error_list=MakefileErrorList,
|
|
||||||
halt_on_failure=True)
|
|
||||||
|
|
||||||
def repack(self):
|
|
||||||
# TODO per-locale logs and reporting.
|
|
||||||
dirs = self.query_abs_dirs()
|
|
||||||
locales = self.query_locales()
|
|
||||||
make = self.query_exe("make")
|
|
||||||
repack_env = self.query_repack_env()
|
|
||||||
success_count = total_count = 0
|
|
||||||
for locale in locales:
|
|
||||||
total_count += 1
|
|
||||||
if self.run_command([make, "installers-%s" % locale],
|
|
||||||
cwd=dirs['abs_locales_dir'],
|
|
||||||
env=repack_env,
|
|
||||||
error_list=MakefileErrorList,
|
|
||||||
halt_on_failure=False):
|
|
||||||
self.add_failure(locale, message="%s failed in make installers-%s!" %
|
|
||||||
(locale, locale))
|
|
||||||
continue
|
|
||||||
success_count += 1
|
|
||||||
self.summarize_success_count(success_count, total_count,
|
|
||||||
message="Repacked %d of %d binaries successfully.")
|
|
||||||
|
|
||||||
def upload_repacks(self):
|
|
||||||
dirs = self.query_abs_dirs()
|
|
||||||
locales = self.query_locales()
|
|
||||||
make = self.query_exe("make")
|
|
||||||
base_package_name = self.query_base_package_name()
|
|
||||||
upload_env = self.query_upload_env()
|
|
||||||
success_count = total_count = 0
|
|
||||||
for locale in locales:
|
|
||||||
if self.query_failure(locale):
|
|
||||||
self.warning("Skipping previously failed locale %s." % locale)
|
|
||||||
continue
|
|
||||||
total_count += 1
|
|
||||||
output = self.get_output_from_command(
|
|
||||||
# Ugly hack to avoid |make upload| stderr from showing up
|
|
||||||
# as get_output_from_command errors
|
|
||||||
"%s upload AB_CD=%s 2>&1" % (make, locale),
|
|
||||||
cwd=dirs['abs_locales_dir'],
|
|
||||||
env=upload_env,
|
|
||||||
silent=True
|
|
||||||
)
|
|
||||||
parser = OutputParser(config=self.config, log_obj=self.log_obj,
|
|
||||||
error_list=MakefileErrorList)
|
|
||||||
parser.add_lines(output)
|
|
||||||
if parser.num_errors:
|
|
||||||
self.add_failure(locale, message="%s failed in make upload!" % (locale))
|
|
||||||
continue
|
|
||||||
package_name = base_package_name % {'locale': locale}
|
|
||||||
r = re.compile("(http.*%s)" % package_name)
|
|
||||||
for line in output.splitlines():
|
|
||||||
m = r.match(line)
|
|
||||||
if m:
|
|
||||||
self.upload_urls[locale] = m.groups()[0]
|
|
||||||
self.info("Found upload url %s" % self.upload_urls[locale])
|
|
||||||
|
|
||||||
# XXX Move the files to a SIMPLE_NAME format until we can enable
|
|
||||||
# Simple names in the build system
|
|
||||||
if self.config.get("simple_name_move"):
|
|
||||||
# Assume an UPLOAD PATH
|
|
||||||
upload_target = self.config["upload_env"]["UPLOAD_PATH"]
|
|
||||||
target_path = os.path.join(upload_target, locale)
|
|
||||||
self.mkdir_p(target_path)
|
|
||||||
glob_name = "*.%s.android-arm.*" % locale
|
|
||||||
for f in glob.glob(os.path.join(upload_target, glob_name)):
|
|
||||||
glob_extension = f[f.rfind('.'):]
|
|
||||||
self.move(os.path.join(f),
|
|
||||||
os.path.join(target_path, "target%s" % glob_extension))
|
|
||||||
self.log("Converted uploads for %s to simple names" % locale)
|
|
||||||
success_count += 1
|
|
||||||
self.summarize_success_count(success_count, total_count,
|
|
||||||
message="Make Upload for %d of %d locales successful.")
|
|
||||||
|
|
||||||
|
|
||||||
# main {{{1
|
|
||||||
if __name__ == '__main__':
|
|
||||||
single_locale = MobileSingleLocale()
|
|
||||||
single_locale.run_and_exit()
|
|
Загрузка…
Ссылка в новой задаче