A picture with the logos of three projects: The Golang gopher, the PostgreSQL elephant and the WoodpeckerCI woodpecker. The Golang gopher is pretty goofy looking, showing two large front teeth in a small mouth, tiny ears and two large eyes. The Postgres elephant is a stylized front view of an elephant, including tusks and a large trunk. finally, the WoodpeckerCI woodpecker is more of an outline of the namesake bird.

Smokeweb: Setting up Database Connections

After implementing a lot of helpers and basic infrastructure for my Smokeweb app (see here if you’re interested in what the project is about), I finally arrived at creating the database connection. In this post, I will give an overview of the Golang test helpers I implemented for tests which need a database, show you how I implemented some scripting for a Postgres database using Podman and then I will tell you how I implemented database tests in WoodpeckerCI. ...

May 1, 2026 · 18 min · Michael

Smokeweb: Setting up a CI with Go Caches in Woodpecker

In my $dayjob, I’m a build engineer in the CI team of a large company. So I’m reasonably confident that this is going to be only the first post in a long series on the CI setup for my Smoking project. I like CIs and the automated testing they come with. I think it was one of the better ideas the tech industry has come up with. I’m seeing its benefit every day at work. So I also have CIs for most of my private projects. ...

March 18, 2026 · 6 min · Michael

Kubernetes Cert Renewal and Monitoring

Wherein I let my kubectl certs expire and implement some monitoring. A couple of days ago, I was getting through my list of small maintenance tasks in my Kubernetes cluster. Stuff like checking the resource consumption of new deployments and adapting the resource limits. And in the middle of it, one of my kubectl invocations was greeted by this message: error: You must be logged in to the server (Unauthorized) So I had a look at my kubectl credentials. For those who don’t know, kubectl authenticates to the cluster with a client TLS cert by default. I had just copied the admin.conf config file kubeadm helpfully creates during cluster setup. I didn’t really see any reason to set up anything more elaborate, considering that I’m the only admin in the cluster. ...

December 7, 2025 · 10 min · Michael

Updating my Kubeadm k8s Cluster from 1.30 to 1.33

Wherein I talk about updating my kubeadm Kubernetes cluster from 1.30 to 1.33 using Ansible. I’ve been a bit lax on my Kubernetes cluster updates, and I was still running Kubernetes v1.30. I’m also currently on a trip to fix a number of the smaller tasks in my Homelab, paying down a bit of technical debt before tackling the next big projects. I already did one update, from my initial Kubernetes 1.29 to 1.30 in the past, using an Ansible playbook I wrote to codify the kubeadm upgrade procedure. But I never wrote a proper post about it, which I’m now rectifying. ...

September 21, 2025 · 17 min · Michael
The Bookwyrm logo. It shows a wyrm, meaning a dragon but without the wings, slithering around a book.

Setting up Bookwyrm

Wherein I’m adding Bookwyrm to my Homelab. I used to read novels. A lot. On school days, I would spend the approximately twenty minutes between the end of my morning routine and having to head off with a novel. Ditto for lazy Sunday evenings. During my service as a conscript, I would always find space for a book in my pack when we went on a training exercise. At University, the most difficult decision while packing for a trip home would be judging how many books I would need to pack to ensure I would not run out. ...

August 31, 2025 · 23 min · Michael