I pushed hard to ensure we had a mostly complete set of data in moz.build
files for BUGZILLA_COMPONENT.  This is useful data for many things, the
primary tool is the intermittent bug filer which uses that data to file a
bug in the proper component for the failing test.  This also gives us a
path to ownership for our tests which is a first step in getting the right
people to look at issues with tests.

I am not personally tied to the idea of making moz.build files be the
source of truth, it works for now- if there is a better proposal that is
great.  Having the data in-tree and a system to notify you if there are new
files that do not have BUGZILLA_COMPONENT defined seems useful.   I like
the idea of the generated artifacts- we use that in code coverage to
determine different types of files and ownership.

-Joel


On Tue, Mar 20, 2018 at 1:44 PM, Gregory Szorc <g...@mozilla.com> wrote:

> moz.build files have a mechanism for associating metadata with files [1].
> We use the "with Files()" primitive [2] for:
>
> * Associating files with Bugzilla components
> * Defining how files impact certain CI components
>
> In the future, I fully anticipate us wanting to have a primitive that
> allows us to associate files with modules and/or reviewers. This would
> enable tools to automatically pick reviewer(s) for files that changed in a
> commit, for example.
>
> Putting this files-based metadata in moz.build files seemed like the
> correct decision initially. moz.build files existed and it seemed better to
> reuse an existing solution in the same space than to invent a new wheel.
>
> However, some deep cracks have formed that are causing me to question
> whether continuing to shoehorn this metadata into moz.build files is the
> right way to go.
>
> "If you build it they will come." The mapping of files to bug components
> is valuable and people wanted an easy way to query it. So, there's an
> endpoint on hg.mozilla.org that allows callers to specify a set of
> filenames and resolve the moz.build Files() metadata [3]. Because moz.build
> files are Python files, this involves running a heavily sandboxed process
> on the server with a snapshot of the Python code for evaluating moz.build
> files. A big problem with this is that this Python code can only evaluate
> moz.build files that were valid at the time the code snapshot was made. So
> when we upgrade the Python code, we may be unable to read moz.build files
> on older revisions. And when we add new primitives to moz.build files, the
> old Python code may choke reading moz.build files from newer revisions.
> It's a giant mess and is causing problems with automated tooling that needs
> moz.build Files metadata lookups to "just work."
>
> In bug 1402010, I wrote some PoC patches that change moz.build evaluation
> of Files metadata to strip the Python AST of all nodes that aren't relevant
> to "with Files()" blocks. This drastically reduces the surface area of
> things that can cause moz.build evaluation to fail when using a snapshot of
> the Python code for evaluating moz.build files. While that solution does
> work, I have my doubts that it is the right step forward. For one, you lose
> some of the Python niceties, such as the ability to reference a variable or
> higher-level primitive when using "with Files()." For example, you may want
> to iterate over a list of patterns to define common metadata. You could no
> longer do that if the AST is rewritten in Files evaluation mode. That
> action-at-a-distance would be confusing to people editing moz.build files.
>
> Anyway, I'm really tempted to declare the shoehorning of files-based
> metadata that isn't essential to the build system into moz.build files to
> be a failed experiment. I'm tempted to say we should extract this static
> data that is non-essential to builds into standalone data files (e.g. YAML
> files). Essentially, we would invent a new data format for representing
> files-based metadata and then port moz.build Files() blocks - namely those
> declaring BUG_COMPONENT - to the new format. We would update tooling that
> evaluates files-based metadata to consume the new files. The new format
> would strive to be backwards and forwards compatible so that anyone with a
> snapshot of the code for evaluating the files would be able to evaluate
> very old and newer files to some degree. We may or may not keep Files() in
> moz.build files. The CI scheduling primitives in there are arguably the
> domain of the build system and should continue to live in moz.build files.
> But we could have that discussion.
>
> This post is basically me saying "I'm not sure what we should do." I still
> like the idea of shoehorning things into moz.build files because it is
> convenient and doesn't fragment where such knowledge is defined. But at the
> same time, that is technically difficult to support and that difficulty is
> actively causing pain due to existing solutions being brittle.
>
> I'm curious how others feel about this issue. And if we wanted to talk
> about what a standalone file would look like, be named, etc, I think that
> would be a constructive exercise.
>
> [1] https://firefox-source-docs.mozilla.org/build/buildsystem/
> files-metadata.html
> [2] https://firefox-source-docs.mozilla.org/build/buildsystem/
> mozbuild-symbols.html#sub-context-files
> [3] https://mozilla-version-control-tools.readthedocs.io/
> en/latest/hgmo/mozbuildinfo.html
>
_______________________________________________
dev-builds mailing list
dev-builds@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-builds

Reply via email to