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.
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/template
s.
Setting up SSH key signing with Git (1 mins read).
How to sign your Git commits, using SSH keys.
Week Notes 25#19 (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#18 (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#17 (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#16 (3 mins read).
What happened in the week of 2025-04-21?
Gotcha: docker inspect
can lie about the architecture of an image (3 mins read).
How incorrectly wiring up your Docker multi-platform builds may lead to docker inspect
lying about the architecture of said image.
Rendering diffs for Go's testable examples (3 mins read).
A somewhat hacky solution for providing rich diffs for expected-vs-actual comparisons for testable examples in Go.
Week Notes 25#15 (3 mins read).
What happened in the week of 2025-04-14?
Authoring Markdown externally and pasting the 'pretty' output into Slack (on Linux) (3 mins read).
How to use xclip
to copy the rendered representation of Markdown into a rich-text form into Slack.
Things I've learned about building + delivering software for other engineers while working in Engineering Productivity (17 mins read).
13 lessons I've learned about building software for (internal teams of) software engineers.
Week Notes 25#14 (3 mins read).
What happened in the week of 2025-04-07?
Properly patching packages: persistently producing patches for published projects, particularly practically prevented by patch-package
policy (10 mins read).
How to use patch-package
to modify NPM dependencies, for instance when you're distributing an executable and you want to patch something you rely upon, without relying upon postinstall
scripts.
Automagically migrating golangci-lint
configuration to v2 with Renovate (2 mins read).
How to get Renovate PRs that update both the version of golangci-lint
to v2, and runs the golangci-lint migrate
command for you.
I'm on Fallthrough: APIs: Design Imperfectly, Improve Relentlessly (2 mins read).
Announcing my appearance as a guest co-host on Fallthrough, talking about APIs and how to build them.
Week Notes 25#13 (2 mins read).
What happened in the week of 2025-03-31?
Week Notes 25#12 (2 mins read).
What happened in the week of 2025-03-24?
Logging into Hashicorp Vault via a GitHub token in the environment (1 mins read).
How to more easily log into Vault with a GitHub token, without having to enter it interactively.
Performing group_concat
queries over distinct values, with a custom delimiter, with SQLite (2 mins read).
How to avoid SQLite's DISTINCT aggregates must have exactly one argument
error when performing a group_concat(distinct ...)
with a custom delimiter.
Updating apk add
definitions in Dockerfiles (3 mins read).
How to use Renovate's Custom Regex manager to extract apk add
definitions in a Dockerfile
, to allow managing (un)pinned packages.
Week Notes 25#11 (4 mins read).
What happened in the week of 2025-03-17?
Week Notes 25#10 (3 mins read).
What happened in the week of 2025-03-10?
I'm on Fallthrough: An Exploration of APIs, Versioning, & HTTP (1 mins read).
Announcing my appearance as a guest on Fallthrough, talking about APIs, versioning, documentation, and more.
Week Notes 25#09 (3 mins read).
What happened in the week of 2025-03-03?
Week Notes 25#08 (3 mins read).
What happened in the week of 2025-02-24?
Creating single-purpose RSS feeds with Hugo (2 mins read).
How to create a new RSS feed in Hugo for a single page's updates.
Creating a test harness for validating Renovate Custom Datasource configuration (4 mins read).
How to set up a test harness to make it eaiser to modify scary looking JSONata transformations in your Renovate configuration.
Week Notes 25#07 (3 mins read).
What happened in the week of 2025-02-17?
Product requirements for a "fund your dependency tree" service (12 mins read).
Thinking about what functionality I would want as a funder, or a fundee, for a "fund your dependency tree" service.
I'm on Fallthrough: Patching Problems with Persnickety Proxies Purveyed by Paternalistic Princes (2 mins read).
Announcing my appearance as a guest host on Fallthrough, discussing the Go module proxy, pondering 'is Go dead?' and whether the Go team at Google have our best interests at heart.
Week Notes 25#06 (2 mins read).
What happened in the week of 2025-02-10?
Go 1.24's omitzero
is another one of the best additions to the ecosystem in years (4 mins read).
Why I'm very excited about the JSON tag, omitzero
, landing in Go 1.24.
Week Notes 25#05 (3 mins read).
What happened in the week of 2025-02-03?
Celebrating dependency-management-data's second birthday (7 mins read).
Reflecting on the last year of the project.
Week Notes 25#04 (4 mins read).
What happened in the week of 2025-01-27?
Go 1.24's go tool
is one of the best additions to the ecosystem in years (8 mins read).
Why I'm very excited about go tool
landing in Go 1.24.
Week Notes 25#03 (2 mins read).
What happened in the week of 2025-01-20?
Getting access to rich-text data from the clipboard (on Linux) (1 mins read).
How to use xclip
to retrieve rich-text output from the clipboard.
Why is zsh no longer storing history? (1 mins read).
Spoiler: you may be missing both HISTSIZE
and SAVEHIST
variables.
You're currently viewing page 1 of 23, of 1130 posts.