Automatic updates of Elixir docker image with Renovate

I stumbled upon this issue this morning: Improve discoverability of available images · Issue #185 · hexpm/bob · GitHub

Every time I decide to bump image versions it gets frustrating to discover what is the lastest Elixir + OTP + base image that is a valid tag.

This is a pain I also felt a few months ago, so I came up with a Renovate configuration that keeps hexpm/elixir up-to-date in my Dockerfile.

After finding the mentioned GitHub issue, I found it might interest some of you, so I’ve setup a minimal reproduction repository to showcase that :smile:

cc @rhcarvalho :wave:

Benefits of this config

  • Automatically updates the hexpm/elixir Docker base image tag (for Fly)
  • Keeps Elixir/OTP versions in sync between asdf (.tool-versions) and
    production Docker

How does it work

  1. We use version comments in [Dockerfile` to tell Renovate
    where to find the version information for each part of the image (Debian,
    OTP & Elixir)
  2. We setup a “Test Docker Build” CI workflow that makes sure the image tag
    composed from those three versions actually exist (so Renovate doesn’t
    auto-merge an inexistant image, if auto-merge is enabled in the first place)
  3. We add the regexManagers:dockerfileVersions preset and a few package rules
    for the Debian versioning

When merging update PRs for each component, I find it’s best to merge them in
this order: Debian > OTP > Elixir.


This is pretty neat, this was always a pain in the ass to configure, especially when dockerhub elixir images didn’t use to have the OTP version specified.


On a side note, Renovate has been broken for Elixir dependencies since 1.17 was released, but this is about to get fixed!