Why I recommend Renovate over any other dependency update tools
jvt.me
jvt.me
Anyhow, this is useful to rollout dependabot.yaml config at scale: https://github.com/github/evergreen
A one-off project of mine tries to improve supply-chain license management for projects [1]. I got bit once by an MIT licensed project that accidentally took a GPL dependency a couple versions later. That was a pain to notice without analyzing transitive dependencies. Never again.
Just like with AWS SaaS offerings: All they need to do is have something basic, satisfying 80% customers, requiring little maintenance on their end.
The current workflow where dependabot just spams an endless stream of PRs is not optimal. I don't need any new features from dependabot, I just want a better UI.
For example, at some point GitHub introduced a change that prevented CI builds triggered by forks from accessing secrets in CI variables. This made sense from a security perspective (although I would have a preferred a hard failure instead of variables silently being set to empty), but it also applied to all Dependabot PRs, which I have to assume wasn't intended behaviour. It really seemed like different teams at GitHub weren't talking to each other. An issue was opened about this and got quite heated, but wasn't really resolved (except for some ugly workarounds) before it was locked for becoming too uncivil.
I wonder if they fixed it since.
Your read on the situation is spot on, and no, it doesn't look like it's been "fixed" (mostly because "fixing it would re-introduce the same potential vulnerability).
There’s also the security aspect of supply chain attacks of “button press” updates.
I think having reports sent to repo owners that they can review with the team on a periodic basis instead of click-through maintenance might be a better model but I also understand the desire for mindless automation of what seems like a chore.
I also added a cooldown period that Renovate should only add updates that are out for at least 14 days.
On GitHub I created two actions:
1. It gets triggered on the 14th and the 1st of a month and creates a PR from renovate_updates to dev and assigns it to me. I use an action to identify as a github app that I have given the rights to in the repo. Within the github action you can use gh cli.
2. Everytime there is a merge to the dev branch the action gets trigerred and does a rebase of dev of that "renovate_updates" branch.
The nice thing about this is that Renovate creates an Issue in your repo and you can still force versions if you need them earlier.
So you have nothing to do except a big review once in a while.
Isn't that exactly what you want from the dependency update system? If some dependency bump breaks the build, why wouldn't you want to know about it? And if not, how would this system know that the PR will fail before opening it? I'm not sure I get what behaviour you expect.
Every Monday I update dependencies. Review breaking changes, get to know what CVEs are out there, glance over changelogs
It takes less than an hour a week. It keeps me up to date on our dependencies
In my opinion, we split them to aggressively at the start - expecting some of them to be used by other people in the company, as a service type of situation - but that never happened. I argued for combining several of them - they don't share any paths for API calls, so it could literally be as simple as recursively copying various folders, and adding more route definitions to whichever service becomes the host. But it was never particularly urgent.
Make that step 4 or 5.
Mono repo them first! Yes you will have to build some tooling to do this but it gives you a way to test the concept. The moment that you have to change 2 of them with any degree of coordination you will get a 10x pay back.
95% of our changes are done by renovate. We rarely have to deal with breaking changes on anything backend related, though the frontend is a different story. But our frontends aren’t exactly “microservices” anyway, and they are always very much in active development.
I build a couple of services which collects a gazillion tonnes of solar inverter data from various plants over the world, and then does some fancy ML magic to figure out which solar cells need cleaning, and it has run for years with automated dependency updates with nothing breaking because of how it was build from the start.
I get that if your microservices are really just a bunch of tiny monoliths then it’s hell, but then you should probably prioritise your suggestion of merging it together somehow.
Ideally if there's multiple repos maintenance can be divided amongst those repo's owners, & once you've divided work between multiple people it becomes more valuable to have a tool help maintain process. These tools need buy in, I've found sometimes they'll go ignored & then the list of PRs becomes mixed up with random dependency PRs
It's downright excellent.
Something to be aware of, but not a reason to ditch the belt.
Stopped using Renovate when I discovered that it will happily propose a PR update for completely incompatible and conflicting dependencies. It literally looks at the latest version of each dependency alone, without considering if this will make a conflict.
Author insists this is a problem with all package managers, that it's impossible to write a tool that doesn't behave like this, and that manually grouping dependencies or completely ignoring version updates until the next one is the only sensible approach.
This doesn't save me time.
I imagine any plugin ecosystem of dependent packages would have the same issue.
Is the author wrong? Dependabot functions the exact same way. How would you even go about solving this?
For backend work or once you've gotten the easy stuff out of the way you really need to review the changelog, assess the risk, and do the upgrade safely (disclosure: my startup Infield is in this space).
Where on our backends, we have such high code coverage, quality integration tests, the backend devs are never nervous about updating dependencies.
EDIT: I will also say, we are purely microservices so that does help in this regard.
A few years later more than 30 projects using it and almost all of that growth happened naturally: https://gitlab.com/gitlab-org/frontend/renovate-gitlab-bot
We operate on a fork (5 commits or so) which contains some hacks to support a forked workflow on GitLab and some minor adjustments for that workflow. Really need to upstream some of it: https://gitlab.com/gitlab-org/frontend/renovate-fork/-/merge...
The author was always super kind, responsive and accommodating.
SO it opens an issue and gives you a patch file... Or emails it to you?
> Why does it seem to these tools have converged on the bot-makes-PR implementation?
Because git and the PR is the common choke point that every one knows and loves. A lot of dev's look down on "patches"... there are tons of people who happily use linux who think that all kernel devs are stupid cause of bugzila/patches and email could not possibly work.
Yes it bypasses YOUR workflow, but a PR works for everyone who uses GitHub.
If you want something else that works for everyone who uses GitHub it's an issue, or an email with a patch file. Why a patch file. DO you want to own the change the bot suggested? There are a lot of orgs where the ownership matters more than the linting.
You could just make the change yourself, sure, and then run it through your normal workflow... then your the author and commuter of the change...
If you had to submit the PR yourself, then these tools would be no different than an automated Jira ticket that’s created once per sprint.
(The actual hard part of all this is having good, meaningful, automated tests, but that can’t be solved by a bot.)
I’ve seen a fair number of open “dependabot” PRs just lying around.
Here's an example (made this repo to test a Renovate issue against): https://github.com/sunshowers/renovate-test-2
1. take on the additional risk of months or years of changes in between
2. beg or plead with (or throw money at) upstream to patch your old version
3. attempt to patch it yourself, potentially introducing new issues because you're not the domain expert
“AI, update this file from API V1 to API V2”
I'm not some sort of AI fanboy. This just seems like a pretty decent use case.