I'm very interested in the try aspect of this (please CC me on relevant
bugs).

I believe there is a relatively simple way taskcluster can wash its hand of
try syntax completely and instead just use a list of tasks (or other
similar data structure). We could still provide a legacy try syntax to
people, but the syntax parser would be on the client side (e.g in a
mach_command). If taskcluster does this, we can build all sorts of crazy
trychooser thingamajigs. See this blog post for specific implementation
steps as well as what a "fuzzyfinder" trychooser might look like:
https://ahal.ca/blog/2017/fuzzy-try-chooser/

I agree with your 3 variants for try, I just don't think they should be
implemented under /taskcluster.

On Fri, May 26, 2017 at 2:59 PM, Dustin Mitchell <dmitch...@mozilla.com>
wrote:

> Greg sent some previous threads on this topic along, and I've been in
> some other related conversations.  The topic of optimization overlaps
> substantially with try, so I'll mix that in too.
>
> There seems to be a reluctance to talk about this face-to-face, but
> there's some urgency in that we're spending a *lot* of cash right now
> doing unnecessary builds, since the current in-tree implementation is
> worse than the ad-hoc thing we had in Buildbot.  So I'll outline a
> proposal here and we can all just agree on it! ;)
>
> For try, we will want three variants:
>  - "there is no try, only do" -- just run the tasks appropriate for
> the push (machines figure out what to do)
>  - "try this" -- an explicit list of desired task labels; this would
> be supported by a trychooser-like UI to generate the list, but the
> trivial case of "please run this exact task" would be easy to type
> directly. No surprises. Selected tasks will never be optimized away.
>  - "trying my patience" -- the legacy try syntax, which seems to
> rankle everyone I talk to about it
>
> As far as optimization:
>
> We support two kinds of optimization: replacement, where we find a
> completed task that produced outputs we can re-use; and skipping,
> where we decide a task need not be performed at all.  Future plans for
> replacement are clear, so we will limit consideration to skipping
> optimization.  We'll further ignore SETA: it just causes tasks to be
> skipped except every seventh run, and doesn't apply on try.
>
> So what we're left with is a list of files that have been changed in
> this push, and a pile of tasks.  The proposal is this:
>
> At the "job description" level, each task specifies when it should be
> executed as a disjunctive list - if any match, the task is executed.
> That can either be by specifying specific file patterns, or by
> specifying an "affected" key/value.  Something like
>
> when:
>   - files-changed: ['foo/bar/**/*.js']
>   - change-affects: ['platform:windows', 'platform:macosx']
> ..or..
> when:
>   - files-changed: ['**/*.rst']
>   - change-affects: ['job:docs']
>
> We then add a specification of what "affects" mean to the moz.build files:
>
> with Files('**/*.rst'):
>   AFFECTS += ['job:docs']
> with Files('**/*.js'):
>   AFFECTS += ['job:eslint']
>
> the tricky bit is platforms[*], where everything-except-these affects
> a particular platform.  As greg has said, we want to avoid manually
> decorating common files like `build/**` with every possible platform,
> as that violates the loose coupling between those components.
> Instead, let's let computers do that for us, using AFFECTS_ONLY:
>
> with Files('mobile/android/**'):
>   AFFECTS_ONLY += ['platform:android']
> with Files('browser/**'):
>   AFFECTS_ONLY += ['platform:desktop']
> with Files('stylo/**'):  # or, per bholley, more specific patterns!
>   AFFECTS_ONLY += ['platform:stylo']
>
> then do some post-processing to translate that so that *all* files
> affect platform:android except those which have AFFECTS_ONLY for some
> other platform.  So `stylo/foo` would have AFFECTS set to
> ['platform:stylo'], but `build/foo` would have ['platform:android',
> 'platform:desktop', 'platform:stylo'].
>
> The details of implementing this efficiently are just that -- details.
>
> Note that this gets us the necessary condition that every file affects
> *something*, avoiding the case where a push to a particular file might
> trigger no tasks.
>
> So let's bikeshed on this - both the try division and the "affects"
> stuff - a little, and then we can re-evaluate the level of agreement
> and see if we should sit down in SFO.
>
> Dustin
>
> [*] This is the 72nd meaning of the term "platform" - I'm open to better
> ideas
> _______________________________________________
> dev-builds mailing list
> dev-builds@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-builds
>
_______________________________________________
dev-builds mailing list
dev-builds@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-builds

Reply via email to