12 April 2022

Taking Hashrocket’s “Ultimate Elixir CI” to the Next Level

Tyler Young
Tyler Young @TylerAYoung

Over on the Felt blog I wrote about how we pushed our continuous integration (CI) system for Elixir to enable devs to be more productive. The examples are all in GitHub Actions, but you can probably translate it to whatever CI system you’re using.

The highlights:

  1. Deploy a staging environment (a complete reproduction of our production environment) for every PR, and update it as new commits get added
  2. Run most CI jobs in parallel so that you get the fastest feedback, and make the jobs never “fail fast,” so you’ll know all the things you need to fix on the first run
  3. Refactor boilerplate for setting up and caching the project into shared “composite” actions
  4. Clear the build cache when a human asks for a retry, neatly resolving mistrust of build caches
  5. Report code coverage in the GitHub PR description, and update it as new commits are added
  6. Run as much static analysis as we can
  7. Use Dependabot to get PRs to update our dependencies

Read the full post

Jump to the sample project

Categories

Programming Functional Programming Elixir