After many years of searching I came across DNSControl which is developed by the famous Tom Limoncelli.
DNSControl is a system for maintaining DNS zones. It has two parts: a domain specific language (DSL) for describing DNS zones plus software that processes the DSL and pushes the resulting zones to DNS providers such as Route53, Cloudflare, and Gandi. It can send the same DNS records to multiple providers. It even generates the most beautiful BIND zone files ever. It runs anywhere Go runs (Linux, macOS, Windows). The provider model is extensible, so more providers can be added.
The providers that it connects to are an impressive list. DNSControl does not cover the web interface aspect of things, but having everything under source control is great progress for me.