Contrast this to a Node app built with the React Starter Kit. That has over 2000 node modules as dependencies. These are continually being updated and new versions released. Keeping on top of the security fixes and general updates is a major undertaking.
This is where Dependabot comes in. You grant Dependabot access to your git repo and allow it to raise pull requests. It will even merge them for you automatically if you have a suitable build server attached and the build passes.
This is the minimal build that you need to get Dependabot to upgrade your project automatically. This works well for an open source project.
This is what you see in github:
This is what happens when everything just works.
If you need to intervene you can fix the code on the branch an wait for the build.
You can send dependabot commands via comments on the PR.
@dependatbot merge – asks dependabot to merge and delete the branch.
@dependabot rebase – asks dependabot to rebase the change – very useful if another dependabot change has updated the lock file.
@dependabot recreate – asks dependabot to recreate the PR. This is similar to rebase but will retrigger a build even if there are no changes. Does anyone else have builds with network dependencies (jenkins, browserstack &c)?
Dependabot is also good at working with Jenkins – provided you are using Jenkinsfiles. I am currently working on a large project that has over 40 repositories and we don’t have time to move all of our projects to Jenkinsfiles.
The solution to this is to add a small Jenkinsfile to the project that just runs the unit tests (or as many tests as you can fit). There is a risk that your tests will diverge, but having some tests that run as part of the dependabot process makes your life easier.
The process to making dependabot work for you is:
Ensure that your project has a package.json file (or equivalent for other supported build tool)
Enable dependabot for that project on it’s website.
Enable updates and auto merge as you wish
Enable a CI server
Archive github repos you are not using
Removed dependencies that you don’t need
Fix broken PR’s
Even with this in place, the PR’s will build up for a while.
One of my colleagues wrote a utility to manage a backlog of PR’s:
This allows you to see the outstanding PR’s for a team. You will need to host this yourself somewhere (Heroku works). Using this utility we can see how many PR’s we need to work on. It will take time and you will need to use the above list several times until you have a clean process.
Dependabot is not perfect. It currently works one dependency at a time so linked items that need to stay in sync (react and react-dom) can cause issues. It has the ability to mark a limited time window during which it will automerge (limit it to your core business hours). This can result in 5 builds being triggered for the same project at the same time. Build servers will need to limit concurrency or performance tests will suffer. It will allow you to tame the upgrade treadmill.