gecko-dev/tools/tryselect/selectors/release.py
Mitchell Hentges b8108d6064 Bug 1632429: Migrate |./mach try| to python 3; r=rstewart,ahal
|./mach try| subcommands are now compatible with both python 2 and 3.

Hand-tested with many combinations of subcommand and subcommand flags.

Updates tryselect unit tests to use Python 3.

Differential Revision: https://phabricator.services.mozilla.com/D73398
2020-05-06 22:17:14 +00:00

128 lines
4.1 KiB
Python

# 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/.
from __future__ import absolute_import, print_function, unicode_literals
import os
import attr
from mozilla_version.gecko import FirefoxVersion
from ..cli import BaseTryParser
from ..push import push_to_try, vcs
TARGET_TASKS = {
'staging': 'staging_release_builds',
'release-sim': 'release_simulation',
}
def read_file(path):
with open(path) as fh:
return fh.read()
class ReleaseParser(BaseTryParser):
name = 'release'
arguments = [
[['-v', '--version'],
{'metavar': 'STR',
'required': True,
'action': 'store',
'type': FirefoxVersion.parse,
'help': "The version number to use for the staging release.",
}],
[['--migration'],
{'metavar': 'STR',
'action': 'append',
'dest': 'migrations',
'choices': [
'central-to-beta',
'beta-to-release',
'early-to-late-beta',
'release-to-esr',
],
'help': "Migration to run for the release (can be specified multiple times).",
}],
[['--no-limit-locales'],
{'action': 'store_false',
'dest': 'limit_locales',
'help': "Don't build a limited number of locales in the staging release.",
}],
[['--tasks'],
{'choices': TARGET_TASKS.keys(),
'default': 'staging',
'help': "Which tasks to run on-push.",
}],
]
common_groups = ['push']
task_configs = ['disable-pgo', 'worker-overrides']
def __init__(self, *args, **kwargs):
super(ReleaseParser, self).__init__(*args, **kwargs)
self.set_defaults(migrations=[])
def run(
version, migrations, limit_locales, tasks,
try_config=None, push=True, message='{msg}', closed_tree=False
):
app_version = attr.evolve(version, beta_number=None, is_esr=False)
files_to_change = {
'browser/config/version.txt': '{}\n'.format(app_version),
'browser/config/version_display.txt': '{}\n'.format(version),
'config/milestone.txt': '{}\n'.format(app_version),
}
release_type = version.version_type.name.lower()
if release_type not in ('beta', 'release', 'esr'):
raise Exception(
"Can't do staging release for version: {} type: {}".format(
version, version.version_type))
elif release_type == 'esr':
release_type += str(version.major_number)
task_config = {
'version': 2,
'parameters': {
'target_tasks_method': TARGET_TASKS[tasks],
'optimize_target_tasks': True,
'release_type': release_type,
},
}
if try_config:
task_config['parameters']['try_task_config'] = try_config
for migration in migrations:
migration_path = os.path.join(
vcs.path,
'testing/mozharness/configs/merge_day',
'{}.py'.format(migration.replace('-', '_')),
)
migration_config = {}
with open(migration_path) as f:
code = compile(f.read(), migration_path, "exec")
exec(code, migration_config, migration_config)
for (path, from_, to) in migration_config['config']['replacements']:
if path in files_to_change:
contents = files_to_change[path]
else:
contents = read_file(path)
files_to_change[path] = contents.replace(from_, to)
if limit_locales:
files_to_change['browser/locales/l10n-changesets.json'] = read_file(
os.path.join(vcs.path, 'browser/locales/l10n-onchange-changesets.json'))
files_to_change['browser/locales/shipped-locales'] = "en-US\n" + read_file(
os.path.join(vcs.path, 'browser/locales/onchange-locales'))
msg = 'staging release: {}'.format(version)
return push_to_try(
'release', message.format(msg=msg),
push=push, closed_tree=closed_tree,
try_task_config=task_config,
files_to_change=files_to_change,
)