Automated Dependency Updates for Mix
Categories: elixir
Renovate supports updating Mix dependencies.
File Matching¶
By default, Renovate will check any files matching the following regular expression: /(^|/)mix\.exs$/.
For details on how to extend a manager's managerFilePatterns value, please follow this link.
Supported datasources¶
This manager supports extracting the following datasources: github-tags, git-tags, hex.
Default config¶
{
"managerFilePatterns": [
"/(^|/)mix\\.exs$/"
]
}
Additional Information¶
The mix manager uses Renovate's implementation of Elixir SemVer to evaluate update ranges.
The mix package manager itself is used to keep the lock file up-to-date.
The following depTypes are currently supported by the mix manager :
prod: all dependencies by defaultdev: dependencies with:onlyoption not containing:prod
lockFileMaintenance¶
We recommend you use lockFileMaintenance for the mix manager.
lockFileMaintenance=true periodically refreshes your mix.lock files, ensuring all indirect dependencies are updated to their latest allowed versions.
This option will be skipped in umbrella projects, as they share a single
mix.lock file for all applications mix.exs files.
Default rangeStrategy=auto behavior¶
Renovate's default rangeStrategy is "auto".
Here's how "auto" works with the mix manager:
| Version type | New version | Old range | New range after update | What Renovate does |
|---|---|---|---|---|
| Complex range | 1.7.2 |
< 1.7.0 or ~> 1.7.1 |
< 1.7.0 or ~> 1.7.2 |
Widen range to include the new version. |
| Simple range | 0.39.0 |
<= 0.38.0 |
<= 0.39.0 |
If update outside current range: widens range to include the new version. |
| Exact version constraint | 0.13.0 |
== 0.12.0 |
== 0.13.0 |
Replace old version with new version. |
Recommended rangeStrategy for apps and libraries¶
For applications, we recommend using rangeStrategy=pin.
This pins your dependencies to exact versions, which is generally considered best practice for apps.
For libraries, use rangeStrategy=widen with version ranges in your mix.exs.
This allows for greater compatibility with other projects that may use your library as a dependency.