fune/taskcluster/taskgraph/transforms/build_lints.py
Ricky Stewart 02a7b4ebdf Bug 1654103: Standardize on Black for Python code in mozilla-central.
Allow-list all Python code in tree for use with the black linter, and re-format all code in-tree accordingly.

To produce this patch I did all of the following:

1. Make changes to tools/lint/black.yml to remove include: stanza and update list of source extensions.

2. Run ./mach lint --linter black --fix

3. Make some ad-hoc manual updates to python/mozbuild/mozbuild/test/configure/test_configure.py -- it has some hard-coded line numbers that the reformat breaks.

4. Make some ad-hoc manual updates to `testing/marionette/client/setup.py`, `testing/marionette/harness/setup.py`, and `testing/firefox-ui/harness/setup.py`, which have hard-coded regexes that break after the reformat.

5. Add a set of exclusions to black.yml. These will be deleted in a follow-up bug (1672023).

# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D94045
2020-10-26 18:34:53 +00:00

61 lines
2.2 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/.
"""
Apply some defaults and minor modifications to the jobs defined in the build
kind.
"""
from __future__ import absolute_import, print_function, unicode_literals
from taskgraph.transforms.base import TransformSequence
transforms = TransformSequence()
SEEN_CONFIGS = {}
@transforms.add
def check_mozharness_perfherder_options(config, jobs):
"""Verify that multiple jobs don't use the same perfherder bucket.
Build jobs record perfherder metrics by default. Perfherder metrics go
to a bucket derived by the platform by default. The name can further be
customized by the presence of "extra options" either defined in
mozharness sub-configs or in an environment variable.
This linter tries to verify that no 2 jobs will send Perfherder metrics
to the same bucket by looking for jobs not defining extra options when
their platform or mozharness config are otherwise similar.
"""
for job in jobs:
if job["run"]["using"] != "mozharness":
yield job
continue
worker = job.get("worker", {})
platform = job["treeherder"]["platform"]
primary_config = job["run"]["config"][0]
options = worker.get("env", {}).get("PERFHERDER_EXTRA_OPTIONS")
shippable = job.get("attributes", {}).get("shippable", False)
# This isn't strictly necessary. But the Perfherder code looking at the
# values we care about is only active on builds. So it doesn't make
# sense to run this linter elsewhere.
assert primary_config.startswith("builds/")
key = (platform, primary_config, shippable, options)
if key in SEEN_CONFIGS:
raise Exception(
"Non-unique Perfherder data collection for jobs %s-%s and %s: "
"set PERFHERDER_EXTRA_OPTIONS in worker environment variables "
"or use different mozconfigs"
% (config.kind, job["name"], SEEN_CONFIGS[key])
)
SEEN_CONFIGS[key] = "{}-{}".format(config.kind, job["name"])
yield job