GitHub Actions and Dependabot: Automate and Simplify Your Project Updates

Nirav SoniNirav Soni
5 min read

Problem statement

In the fast-paced world of software development, maintaining up-to-date dependencies is crucial for ensuring security, performance, and functionality. There's a common saying: "Don't reinvent the wheel".

When building .NET applications, our primary focus as developers should be on solving the core problems at hand. Often, for common challenges, there are already existing solutions in the form of packages on NuGet. All we need to do is pick the appropriate version and integrating it into our solution. This can significantly accelerate our development.

However, each coin has 2 sides. As soon as we decide to integrate any existing packages within our solution, we're in a way adding Technical Debt to our solution. In my experience, after adding dependencies, most of the developers do not regularly check for updated versions of their dependencies. The dependencies (Specifically versions) are often looked at when:

  • Upgrading the framework version (e.g., from .NET Core 6 to .NET Core 8) forces a dependency update.
  • A NuGet scan step in your CI pipeline reports a vulnerability.

In these cases, developers reactively review and update their dependencies. Is there a better way to handle this problem proactively?

Enter Dependabot

  • Dependabot is a powerful tool integrated with GitHub and helps us update the dependency of our solutions
  • For enabling Dependabot support for your repository, go to Settings tab and you'll find a section namely "Code Security and analysis" where you'll find Dependabot related configurations

1

  • Let's look at what these individual options do:
    • Enable Dependabot alerts - For receiving notifications regarding dependabot either in GitHub notifications or over emails
    • Enable Dependabot security updates - Using this, Dependabot can find out vulnerabilities which are exposed, and it can alert us
    • Configure Dependabot version updates - Using this, we can enable the version updates for dependencies (For example - A new version for coverlet.collector is available on NuGet (6.0.2) and our code is using an older version (6.0.0), then we can use option to enable version updates

Configure Dependabot version updates

  • Upon clicking Configure Dependabot version updates, it will create a setting which is configured as GitHub action namely dependabot.yml under .github folder 2
  • Let's understand these options:

    • package-ecosystem - Since we're dealing with a .NET project, we can enter nuget here
    • directory - Since we want Dependabot to scan the entire repository, we'll leave this as /
    • schedule - For the sake of demo, let's go with daily
  • There are other tons of other configuration options available which you can check out here

Dependabot in-action

  • Based on the above configurations, a bot would keep scan the repository and generate pull requests by updating the dependency version
  • image
  • As you can see, it immediately created 5 PRs (pull requests) within my repository since there are newer package versions available for these dependencies
  • Let's examine one of them in-detail
  • image
  • image
  • Dependabot provides a clear and concise summary in the description by providing us the following information
    • Release notes
    • Commits
    • Compatibility
  • Within the commits section, we can see that it has in-fact bumped up the version of coverlet.coverage package from 6.0.0 to 6.0.2 within the .csproj file.
  • We can then review the details attached within the PR and act upon it.

Caution - Test before you merge!

  • One should keep in mind that this automated process is just to help us eliminate the manual task of updating the packages manually.
  • One should carefully review the Release notes and upon confirming there are no breaking changes, one should test the functionalities before merging them into the main branch

Advantages of Dependabots

  • Automated PRs
    • Dependabot modifies our code and raises PRs automatically for the updates to the dependencies and we can act upon them
  • Automated Security updates
    • Dependabot identifies vulnerabilities and if there are potential fixes identified for the same, it'll raise a PR for the same as well
  • Enhanced Security
    • Outdated dependencies often harbor vulnerabilities that can be exploited by attackers. Dependabot automatically checks for security updates and creates pull requests to address these issues, helping to keep your project secure with minimal manual intervention.
  • Improved efficiency
    • Manual dependency management is time-consuming and prone to human error. Dependabot automates the process, saving developers time and reducing the risk of introducing bugs. This allows teams to focus more on core development tasks rather than maintenance.
  • Consistent Updates
    • Regularly updating dependencies ensures that your project benefits from the latest features, performance improvements, and bug fixes. Dependabot continuously monitors your dependencies and provides updates, ensuring your project remains current and reliable.

Summary and References

Automated dependency updates with Dependabot provide a proactive approach to dependency management, enhancing security, efficiency, and consistency in your projects. By leveraging Dependabot, development teams can maintain a healthy codebase with minimal effort, allowing them to focus on delivering high-quality software.

If you're using any other VCS like Azure DevOps, this is not baked into it natively. However, there are 3rd party tools like this available which can be used to integrate Dependabot into Azure DevOps. Microsoft has announced that they're officially planning to bring in Dependabot security updates within Azure DevOps soon

I hope you followed along and enjoyed this hands-on tutorial. If you found it helpful, please leave a reaction. Your feedback motivates me to create more valuable content. Thank you for reading, and happy coding!

3
Subscribe to my newsletter

Read articles from Nirav Soni directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Nirav Soni
Nirav Soni

Constantly evolving is what makes me tick! I am a life long learner, self-motivated individual with proven leadership qualities in 8 years of experience in designing and developing software for different domains primarily using .NET stack. Throughout my career, I've had privilege to work with clients and companies of diverse nature be it by size, culture and the domain they operate in. I have a solid experience in requirement gathering, analysis, architecting and developing cloud based applications. I am a quick learner with exceptional communication skills committed to deliver timely and quality software coupled with positive attitude and team spirit. I constantly keep on educating, refining and driving myself to constantly be better at what I do I am constantly learning because I never settle I stay calm in adverse situations I focus on high-quality decisions I have worked on software with variety of domains such as People Mobility Management Healthcare BFSI EdTech I enjoy meeting and getting to know people and hearing about perspective. Reach out to me if you want to talk to me about emerging trends of software development or tech in general. Professional Strengths : Software Development | Requirement Gathering | Software Architecture | Agile Development | Product Grooming | SaaS My ToolKit : C# | .NET Core | WebAPI | SQL | Docker | Kubernetes | Serverless | Cloud (Azure, AWS) | DevOps | Terraform