There's already been quite a lot of effort to make the tests run faster, both
through streamlining the tests themselves and through improvements to codegen.
As a fairly extreme case, the subarray tests (among the longest-running) take
about 40% of the time they used to take, which is a huge savings, despite
testing more thoroughly than ever. Because test time has been a persistent
problem, both Jeff and I have recently made optimizations specifically targeted
at improving the performance of Base.Test. So, it's easy to say "make the
tests run faster," and I think it's fair to say that the situation will
continue to improve, but it's not like there's much low-hanging fruit just
lying around waiting to be picked. Presumably future improvements will come
mostly from improving the performance of codegen, which everyone wants, but
such improvements are never easy.
Worst of all, some extremely interesting PRs
(
https://github.com/JuliaLang/julia/pull/6837) are currently blocked from
being merged for the main reason that they greatly increase the test time.
So let's extrapolate a bit. Currently julia itself takes ~45 minutes for its
tests. Let's say one gets this down to ~35 minutes. Now, each time someone
submits a new commit to an existing PR, the Travis tests run. If we have 2
Travis slots on JuliaLang, it only take 4 pushes per hour to have an
exponentially-growing queue of Travis jobs. Now, let's say (optimistically)
that each PR gets merged to master, but given rebases there are 1.5x as many
commits to branches as there are to master. If (pessimistically) people push
commits one at a time, then each of these triggers Travis. You trigger Travis
both when you submit the PR and when you merge to master, so we can estimate
(probably pessimistically) the number of Travis builds is something like 2.5x
the number of commits to master in a day. Consequently, with just an average
of 40 commits to master a day, we cannot manage the queue. Now, we don't
usually have 40 commits to master in a day, but some days we do and often
we're in that ballpark.
All this excludes the commits to METADATA.jl and to packages under the
JuliaLang umbrella. Each of those tends to be much faster (from 1-10 minutes),
but collectively there are many more of them.
As an example: yesterday I submitted a 12-line change to Compat.jl. The Travis
run only took 90s per job, but it had to wait in line for 4 hours because of
the backlog. The same thing happens when you tag a new package, because
METADATA.jl is under JuliaLang. Often when I'm working on packages, I might
update one "low level" package (e.g., ColorTypes), and then want to tag a
cascading series of other packages that depend on it. In the worst case, each
has to be tagged independently if the Travis tests are to succeed, so even a
trivial (but important) change to a low-level package can result in a half-day
of making small changes and then waiting for Travis. This is starting to get
so slow that it's hurting development.
Consequently, my conclusion is: Houston, we have a problem. Fortunately, it's
easy to end at least the drag on package development, by moving most of the
packages out from under the JuliaLang umbrella.
Best,
--Tim