<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>I am also wary of us to deferring checking whole platforms and
what not. I think that's just kicking the can down the road, and
will result in more variance and uncertainty. It might be alright
for those authoring PRs, but it will make Ben's job keeping the
system running even more grueling.</p>
<p>Before getting into these complex trade-offs, I think we should
focus on the cornerstone issue that CI isn't incremental.</p>
<ol>
<li>Building and testing happen together. When tests failure
spuriously, we also have to rebuild GHC in addition to
re-running the tests. That's pure waste.
<a class="moz-txt-link-freetext" href="https://gitlab.haskell.org/ghc/ghc/-/issues/13897">https://gitlab.haskell.org/ghc/ghc/-/issues/13897</a> tracks this
more or less.</li>
<li>We don't cache between jobs. Shake and Make do not enforce
dependency soundness, nor cache-correctness when the build plan
itself changes, and this had made this hard/impossible to do
safely. Naively this only helps with stage 1 and not stage 2,
but if we have separate stage 1 and --freeze1 stage 2 builds,
both can be incremental. Yes, this is also lossy, but I only see
it leading to false failures not false acceptances (if we can
also test the stage 1 one), so I consider it safe. MRs that only
work with a slow full build because ABI can so indicate.</li>
</ol>
The second, main part is quite hard to tackle, but I strongly
believe incrementality is what we need most, and what we should
remain focused on.<br>
<p>John<br>
</p>
</body>
</html>