def generic_worker_spidermonkey(config, job, taskdesc): assert job['worker']['os'] == 'windows', 'only supports windows right now' run = job['run'] worker = taskdesc['worker'] generic_worker_add_artifacts(config, job, taskdesc) support_vcs_checkout(config, job, taskdesc) env = worker.setdefault('env', {}) env.update({ 'MOZHARNESS_DISABLE': 'true', 'SPIDERMONKEY_VARIANT': run['spidermonkey-variant'], 'MOZ_BUILD_DATE': config.params['moz_build_date'], 'MOZ_SCM_LEVEL': config.params['level'], 'SCCACHE_DISABLE': "1", 'WORK': ".", # Override the defaults in build scripts 'SRCDIR': "./src", # with values suiteable for windows generic worker 'UPLOAD_DIR': "./public/build" }) script = "build-sm.sh" if run['using'] == 'spidermonkey-package': script = "build-sm-package.sh" # Don't allow untested configurations yet raise Exception( "spidermonkey-package is not a supported configuration") elif run['using'] == 'spidermonkey-mozjs-crate': script = "build-sm-mozjs-crate.sh" # Don't allow untested configurations yet raise Exception( "spidermonkey-mozjs-crate is not a supported configuration") elif run['using'] == 'spidermonkey-rust-bindings': script = "build-sm-rust-bindings.sh" # Don't allow untested configurations yet raise Exception( "spidermonkey-rust-bindings is not a supported configuration") hg_command = generic_worker_hg_commands( 'https://hg.mozilla.org/mozilla-unified', env['GECKO_HEAD_REPOSITORY'], env['GECKO_HEAD_REV'], r'.\src', )[0] command = [ 'c:\\mozilla-build\\msys\\bin\\bash.exe ' # string concat '"./src/taskcluster/scripts/builder/%s"' % script ] worker['command'] = [ hg_command, ' '.join(command), ]
def windows_toolchain(config, job, taskdesc): run = job['run'] worker = taskdesc['worker'] worker['artifacts'] = [{ 'path': r'public\build', 'type': 'directory', }] worker['chain-of-trust'] = True support_vcs_checkout(config, job, taskdesc) env = worker['env'] env.update({ 'MOZ_BUILD_DATE': config.params['moz_build_date'], 'MOZ_SCM_LEVEL': config.params['level'], 'MOZ_AUTOMATION': '1', }) hg_command = generic_worker_hg_commands( 'https://hg.mozilla.org/mozilla-unified', env['GECKO_HEAD_REPOSITORY'], env['GECKO_HEAD_REV'], r'.\build\src')[0] # Use `mach` to invoke python scripts so in-tree libraries are available. if run['script'].endswith('.py'): raise NotImplementedError("Python scripts don't work on Windows") args = run.get('arguments', '') if args: args = ' ' + shell_quote(*args) bash = r'c:\mozilla-build\msys\bin\bash' worker['command'] = [ hg_command, # do something intelligent. r'{} build/src/taskcluster/scripts/misc/{}{}'.format( bash, run['script'], args) ] attributes = taskdesc.setdefault('attributes', {}) attributes['toolchain-artifact'] = run['toolchain-artifact'] if 'toolchain-alias' in run: attributes['toolchain-alias'] = run['toolchain-alias'] if not taskgraph.fast: name = taskdesc['label'].replace('{}-'.format(config.kind), '', 1) add_optimization( config, taskdesc, cache_type=CACHE_TYPE, cache_name=name, digest_data=get_digest_data(config, run, taskdesc), )
def mozharness_on_generic_worker(config, job, taskdesc): assert job['worker']['os'] == 'windows', 'only supports windows right now' run = job['run'] # fail if invalid run options are included invalid = [] for prop in [ 'tooltool-downloads', 'secrets', 'taskcluster-proxy', 'need-xvfb' ]: if prop in run and run[prop]: invalid.append(prop) if not run.get('keep-artifacts', True): invalid.append('keep-artifacts') if invalid: raise Exception( "Jobs run using mozharness on Windows do not support properties " + ', '.join(invalid)) worker = taskdesc['worker'] taskdesc['worker'].setdefault('artifacts', []).append({ 'name': 'public/logs', 'path': 'logs', 'type': 'directory' }) if not worker.get('skip-artifacts', False): generic_worker_add_artifacts(config, job, taskdesc) support_vcs_checkout(config, job, taskdesc) env = worker['env'] env.update({ 'MOZ_BUILD_DATE': config.params['moz_build_date'], 'MOZ_SCM_LEVEL': config.params['level'], 'MOZ_AUTOMATION': '1', 'MH_BRANCH': config.params['project'], 'MOZ_SOURCE_CHANGESET': env['GECKO_HEAD_REV'], }) if run['use-simple-package']: env.update({'MOZ_SIMPLE_PACKAGE_NAME': 'target'}) if 'extra-config' in run: env['EXTRA_MOZHARNESS_CONFIG'] = json.dumps(run['extra-config']) # The windows generic worker uses batch files to pass environment variables # to commands. Setting a variable to empty in a batch file unsets, so if # there is no `TRY_COMMIT_MESSAGE`, pass a space instead, so that # mozharness doesn't try to find the commit message on its own. if config.params.is_try(): env['TRY_COMMIT_MSG'] = config.params['message'] or 'no commit message' if run['comm-checkout']: env['MOZ_SOURCE_CHANGESET'] = env['COMM_HEAD_REV'] if not job['attributes']['build_platform'].startswith('win'): raise Exception( "Task generation for mozharness build jobs currently only supported on Windows" ) mh_command = [r'c:\mozilla-build\python\python.exe'] mh_command.append('\\'.join( [r'.\build\src\testing', run['script'].replace('/', '\\')])) if 'config-paths' in run: for path in run['config-paths']: mh_command.append(r'--extra-config-path ' r'.\build\src\{}'.format(path.replace('/', '\\'))) for cfg in run['config']: mh_command.append('--config ' + cfg.replace('/', '\\')) if run['use-magic-mh-args']: mh_command.append('--branch ' + config.params['project']) mh_command.append(r'--work-dir %cd:Z:=z:%\build') for action in run.get('actions', []): mh_command.append('--' + action) for option in run.get('options', []): mh_command.append('--' + option) if run.get('custom-build-variant-cfg'): mh_command.append('--custom-build-variant') mh_command.append(run['custom-build-variant-cfg']) hg_commands = generic_worker_hg_commands( base_repo=env['GECKO_BASE_REPOSITORY'], head_repo=env['GECKO_HEAD_REPOSITORY'], head_rev=env['GECKO_HEAD_REV'], path=r'.\build\src', ) if run['comm-checkout']: hg_commands.extend( generic_worker_hg_commands(base_repo=env['COMM_BASE_REPOSITORY'], head_repo=env['COMM_HEAD_REPOSITORY'], head_rev=env['COMM_HEAD_REV'], path=r'.\build\src\comm')) fetch_commands = [] if 'MOZ_FETCHES' in env: # When Bug 1436037 is fixed, run-task can be used for this task, # and this call can go away fetch_commands.append(' '.join([ r'c:\mozilla-build\python3\python3.exe', r'build\src\taskcluster\scripts\misc\fetch-content', 'task-artifacts', ])) worker['command'] = [] if taskdesc.get('needs-sccache'): worker['command'].extend([ # Make the comment part of the first command, as it will help users to # understand what is going on, and why these steps are implemented. dedent('''\ :: sccache currently uses the full compiler commandline as input to the :: cache hash key, so create a symlink to the task dir and build from :: the symlink dir to get consistent paths. if exist z:\\build rmdir z:\\build'''), r'mklink /d z:\build %cd%', # Grant delete permission on the link to everyone. r'icacls z:\build /grant *S-1-1-0:D /L', r'cd /d z:\build', ]) worker['command'].extend(hg_commands) worker['command'].extend(fetch_commands) worker['command'].extend([' '.join(mh_command)])
def windows_toolchain(config, job, taskdesc): run = job['run'] worker = taskdesc['worker'] worker['artifacts'] = [{ 'path': r'public\build', 'type': 'directory', }] worker['chain-of-trust'] = True # There were no caches on generic-worker before bug 1519472, and they cause # all sorts of problems with toolchain tasks, disable them until # tasks are ready. run['use-caches'] = False support_vcs_checkout(config, job, taskdesc, sparse=('sparse-profile' in run)) env = worker['env'] env.update({ 'MOZ_BUILD_DATE': config.params['moz_build_date'], 'MOZ_SCM_LEVEL': config.params['level'], 'MOZ_AUTOMATION': '1', }) sparse_profile = run.get('sparse-profile') if sparse_profile: sparse_profile = 'build/sparse-profiles/{}'.format(run['sparse-profile']) hg_command = generic_worker_hg_commands( 'https://hg.mozilla.org/mozilla-unified', env['GECKO_HEAD_REPOSITORY'], env['GECKO_HEAD_REV'], r'.\build\src', sparse_profile=sparse_profile)[0] # Use `mach` to invoke python scripts so in-tree libraries are available. if run['script'].endswith('.py'): raise NotImplementedError("Python scripts don't work on Windows") args = run.get('arguments', '') if args: args = ' ' + shell_quote(*args) bash = r'c:\mozilla-build\msys\bin\bash' worker['command'] = [ hg_command, # do something intelligent. r'{} build/src/taskcluster/scripts/misc/{}{}'.format( bash, run['script'], args) ] attributes = taskdesc.setdefault('attributes', {}) attributes['toolchain-artifact'] = run['toolchain-artifact'] if 'toolchain-alias' in run: attributes['toolchain-alias'] = run['toolchain-alias'] if not taskgraph.fast: name = taskdesc['label'].replace('{}-'.format(config.kind), '', 1) taskdesc['cache'] = { 'type': CACHE_TYPE, 'name': name, 'digest-data': get_digest_data(config, run, taskdesc), }