/webhooks

General-purpose infrastructure for building out webhooks consumption for my OSS projects

Primary LanguageRubyMIT LicenseMIT

GitHub Webhooks "Platform"

This repository contains the code for an experimental platform I've rolled out to automate a bunch of things that I do as part of maintaining some open source projects, that I want to stop doing.

Goals

  • Simple - this is hosted on a hobby dyno on Heroku - nothing fancy
  • Extensible - web hooks come in, stuff happens, results appear on GitHub if needed
  • Boring - no bleeding edge tech necessary, just a simple webapp with jobs infrastructure that should support being able to scale this later if needed

Features

I currently have one job created that runs when a pull request event is raised on Up-For-Grabs to review any project file changes to ensure they are correct.

This is automating my experience reviewing PRs for the project, and it consists of a few steps that are spread across a number of places:

  • Can I parse the project file? If not, what needs to be addressed?
  • Is the project hosted on GitHub? If so, does it still exist there?
  • Did the user specify the right label? Is it in use on the project?
  • Did the user specify a tag that should be normalized? What should it be normalized to?

So far I've been able to script and codify these checks to run whenever a webhook matching the required criteria is received, and you can see it in action here:

I'll start fleshing things out once I've got a better baseline and more test coverage, now that I've got the key pieces in place and this is working against production data.

Coming Soon™

  • a dashboard interface to support tracing webhook activity (currently using the Heroku logs portal which is very noisy)
  • investigate whether I can detect "PR is mergeable" from webhooks, so that I can auto-merge some PRs without needing human intervention
  • investigate using pull request reviews API
  • investigate using suggested changes to recommend fixes
  • investigate applying this to other projects I maintain, and how that affects the overall architecture