I'm joining Mend to work on Renovate full-time (7 mins read).

Announcing my move to new job, working on Renovate (CLI and Enterprise) full-time, and looking back at my time at Elastic.
I'm joining Mend to work on Renovate full-time (7 mins read).

Announcing my move to new job, working on Renovate (CLI and Enterprise) full-time, and looking back at my time at Elastic.
Additional lessons learned running Renovate at scale (14 mins read).

Some of the things I've learned about monitoring the usage of Renovate 'at scale' of hundreds of repositories.
Week Notes 25#34 (2 mins read).
What happened in the week of 2025-08-18?
Week Notes 25#33 (3 mins read).
What happened in the week of 2025-08-11?
GopherCon UK 2025 (10 mins read).

A writeup of the GopherCon UK 2025 conference.
Clearing Language Server Protocol (LSP) diagnostics in Neovim (1 mins read).

How to clear all diagnostic messages from your current buffer, in Neovim.
Running Docker images from other architectures, on Linux (1 mins read).
How to run an ARM64 Docker container when running on AMD64, on Linux.
Week Notes 25#32 (2 mins read).
What happened in the week of 2025-08-04?
Week Notes 25#31 (2 mins read).
What happened in the week of 2025-07-28?
Creating beautiful visualisations of dependency data with Evidence (8 mins read).

How to use Dependency Management Data and Evidence to create beautiful visualisations for insights about your dependency data.
Accessing (accidentally) 'used' tickets in The Trainline's app (2 mins read).
How to access your etickets for The Trainline, when you've (accidentally) clicked 'mark as used'.
Syncing the WAL with SQLite (2 mins read).

How to take an SQLite database that is using the Write Ahead Log (WAL) and perform a full checkpoint, to remove any state in the WAL.
Week Notes 25#30 (2 mins read).
What happened in the week of 2025-07-21?
I'm on Changelog and Friends: #define: props to astronomer (1 mins read).

Announcing my appearance on Changelog and Friends for the #define gameshow.
I'm on Fallthrough: Versioning: We Did It To Ourselves (1 mins read).

Announcing my appearance as a guest co-host on Fallthrough, talking about versioning.
Week Notes 25#29 (3 mins read).
What happened in the week of 2025-07-14?
I'm on Fallthrough: Why You're Wrong About REST (1 mins read).

Announcing my appearance as a guest co-host on Fallthrough, talking about REST, Hypermedia, and more.
Week Notes 25#28 (2 mins read).
What happened in the week of 2025-07-07?
A few tips for optimising Renovate for multi-team monorepos (10 mins read).

Some tips for making Renovate work even better when working on a large multi-team monorepo, where each team has different requirements for their Renovate usage.
Week Notes 25#27 (5 mins read).
What happened in the week of 2025-06-30?
Week Notes 25#26 (2 mins read).
What happened in the week of 2025-06-23?
Checking out the branch from a fork in GitHub Actions, when using pull_request_target (3 mins read).

How to use gh pr checkout to fetch a forked PR's branch, when using pull_request_target.
Disabling zsh history for a given shell session (1 mins read).
How to temporarily disable zsh saving history of interactive shell commands.
Week Notes 25#25 (2 mins read).
What happened in the week of 2025-06-16?
Week Notes 25#24 (3 mins read).
What happened in the week of 2025-06-09?
Week Notes 25#23 (4 mins read).
What happened in the week of 2025-06-02?
Generating Go code from JSON Schema documents (25 mins read).

Looking at a couple of common libraries for generating Go structs from JSON Schema documents.
Creating cross-compiled Docker images from Go binaries (4 mins read).

How to create a (Docker) container image that is cross-compiled for different architectures, and includes a Go binary that is also cross-compiled.
Week Notes 25#22 (2 mins read).
What happened in the week of 2025-05-26?
Accessing your Renovate Dependency Dashboard, without GitHub/GitLab Issues enabled (3 mins read).

Releasing a proof-of-concept to render Dependency Dashboards for repositories that don't have issues enabled, as long as you have a Renovate Report.
Generating a Renovate Report from someone else's repo (1 mins read).

How to get a Renovate Report - with full metadata - from any arbitrary repository.
Checking the digest for a Docker image, using crane (2 mins read).
How to get a Docker image digest, using the crane CLI tool.
Week Notes 25#21 (4 mins read).
What happened in the week of 2025-05-19?
What's the difference between Renovate's depName and packageName? (3 mins read).

What the differences are, and where you may want to use one or the other.
My experience as a maintainer (8 mins read).
A guest post for opensource.org, about my experience as a maintainer, as part of 2025's Maintainer Month.
Creating nested fenced code blocks with Hugo (1 mins read).

How to write a Markdown file with a fenced code block, which includes another code block inside it.
Taking more control over your Cobra CLI documentation (2 mins read).

Releasing a library to manage the generation of Cobra CLI documentation using text/templates.
Setting up SSH key signing with Git (1 mins read).

How to sign your Git commits, using SSH keys.
Week Notes 25#20 (3 mins read).
What happened in the week of 2025-05-12?
Improving the experience of browsing Renovate debug logs (4 mins read).

Creating a Terminal User Interface (TUI) application to improve the debugging experience with Renovate's debug logs.
Looking back at oapi-codegen's last year (6 mins read).

A recap of oapi-codegen's last year, in light of it being Maintainer Month, and continuing to ask for sponsorship.
Overriding a Gradle project property which has . and _ characters, without modifying the buildscript (4 mins read).

How to use GRADLE_OPTS to safely override a Gradle property (with special characters in its name) without modifying the buildscript.
How to set up the 'Follow' button on LinkedIn (1 mins read).
How to allow others to follow you on LinkedIn.
Migrating secrets between two Vault instances (1 mins read).

How to copy secrets from one Vault instance to another, reducing the risk of the secrets being stored on disk for too long.
Week Notes 25#19 (2 mins read).
What happened in the week of 2025-05-05?
Using type assertions in Go with concrete types (2 mins read).

How to perform a type assertion on a type in Go that isn't an interface.
Getting Renovate to provide a changelog for digest updates to packages (on GitHub.com) (2 mins read).

How to use the new templated changelogUrl functionality to provide more actionable changelogs for digest updates to i.e. GitHub Actions and other digest-pinned dependencies (in this example, on GitHub.com).
Week Notes 25#18 (3 mins read).
What happened in the week of 2025-04-28?
Tricking oapi-codegen into working with OpenAPI 3.1 specs (7 mins read).

How to get oapi-codegen to interact with OpenAPI 3.1 specs, until it supports OpenAPI 3.1.
Week Notes 25#17 (3 mins read).
What happened in the week of 2025-04-21?