Backend Engineering 2 min read

Building a GitHub to Productive Integration with Go

How I built a lightweight Go service that links GitHub repositories to Productive task boards, removing manual sync work for engineering teams.

JO Jerry Ogunniyi
Back
api
dock
go

The problem

Engineering teams at Plank track their work in Productive. Their code lives in GitHub. When a new repository is created, someone manually had to create a corresponding project in Productive and link it. This took time, introduced inconsistency, and occasionally got forgotten entirely.

Why Go

The integration needed to be lightweight, fast to deploy, and easy to containerise. It had no need for an ORM, templating engine, or admin panel. Go compiled to a single binary, handled HTTP easily with the standard library, and produced a Docker image under 15MB. It was the right tool for the job.

The architecture

The service exposes a webhook endpoint that GitHub calls when repository events occur. On a repository.created event, it calls the Productive API to create a matching project, then stores the mapping in a small SQLite database. A background goroutine handles retries for failed Productive API calls.

Deployment

The service runs in a Docker container on a DigitalOcean droplet behind Nginx. GitHub delivers webhooks over HTTPS with a shared secret for request verification. The service validates that secret on every incoming request before processing anything.

What I learned

Go's explicit error handling — which feels verbose coming from PHP — is genuinely clarifying in network-heavy code. Every operation that can fail must be handled. There is no silent exception swallowing. After a few weeks I stopped finding it verbose and started finding it reassuring.

Share this post

$
navigate open

Privacy Preferences

This site uses essential cookies and local preferences to keep things working smoothly, including theme and consent choices.