Local CI in Rails 8.1

One of the things that was released in Rails 8.1 was it’s inclusion of the ability for us to define and run our CI locally. I’ve been trying it out and it works well. It is definitely a great fit for smaller applications, but for large existing applications I don’t think this is the right move to make, here are a few things to point out:

  • Parallelisation isn’t supported out of the box. For smaller apps, running your test suite linearly is usually fine. But for some of the larger codebases I’ve worked on—transactional systems with thousands of integration specs—we rely heavily on parallelisation to keep feedback loops tight. The native Rails 8.1 integration seems to be single-threaded by default.
  • SOC 2 compliance might be tricky to work out. Compliance auditors love a paper trail. One of the hidden benefits of using a cloud provider like GitHub Actions or CircleCI is the immutable log of “who ran what, when, and with what result.” Moving CI “local” can murk up those waters. If the definition of “passing CI” becomes “it worked on my machine,” we lose that objective, third-party verification.

I think this is a fantastic step forward for indie devs, solo founders, and early-stage startups. Being able to git push knowing your “CI” has already passed locally saves money and time. But for the big players, the traditional CI pipeline isn’t going anywhere just yet.