An aggregated feed of all of my posts

616 posts latest post 2026-10-06
Publishing rhythm
Jun 2026 | 3 posts
Increase inotify limit in your CI workers

Increase inotify limit in your CI workers

Today I tripped over a CI failure that I had to think about for a while. I build zensical static sites in CI on my Forgejo instance. These builds had been working fine, then suddenly started failing with no code changes. Naturally, I assumed something upstream broke — maybe a new uv release, maybe zensical. I pinned versions. I tested older versions. Same failure every time. That ruled out regressions and pushed me toward the environment. I pulled the runner and worker images locally and built the sites just fine… But that doesn’t perfectly emulate the CI setup - my forgejo runner relies on docker-in-docker and so we aren’t just running a container on a host, we have this middle layer to consider… I wasn’t sure how to really test this out locally so I succomed to AI and here’s where Jipity got me in about 5 minutes… The failure # The builds blew up with: At first glance it means nothing to me but Jipity says this screams ulimit. So following the AI overlords I checked: was already very…

The docker ps command is very useful, but I hate reading the output. Turns out, you can make it prettier:

docker ps

–format “table” is implied with the command.


❯ docker ps --format "table" | grep can
9b716a7d1ab0   postgres:17                                               "docker-entrypoint.s…"   13 hours ago    Up 13 hours (healthy)            0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp                                                cannalyzer-db-1
f7708ea0c112   adminer                                                   "entrypoint.sh docke…"   13 hours ago    Up 13 hours                      0.0.0.0:8081->8080/tcp, [::]:8081->8080/tcp                                                cannalyzer-adminer-1
93cd67719ed4   frontend:latest                                           "/docker-entrypoint.…"   13 hours ago    Up 13 hours                      0.0.0.0:5173->80/tcp, [::]:5173->80/tcp                                                    cannalyzer-frontend-1
f517625fca98   traefik:3.0                                               "/entrypoint.sh --pr…"   13 hours ago    Up 13 hours                      0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:8090->8080/tcp, [::]:8090->8080/tcp           cannalyzer-proxy-1
f4daa036216e   schickling/mailcatcher                                    "sh -c 'mailcatcher …"   13 hours ago    Up 13 hours                      0.0.0.0:1025->1025/tcp, [::]:1025->1025/tcp, 0.0.0.0:1080->1080/tcp, [::]:1080->1080/tcp   cannalyzer-mailcatcher-1

But you can pass a template string to the --format option, like so:

docker ps --format "table {{.Names}}"


✗ docker ps --format "table {{.Names}}" | grep can
cannalyzer-db-1
cannalyzer-adminer-1
cannalyzer-frontend-1
cannalyzer-proxy-1
cannalyzer-mailcatcher-1

docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"


❯ docker ps --format "table {{.Names}}\t{{.Ports}}" | grep can
cannalyzer-db-1             0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp
cannalyzer-adminer-1        0.0.0.0:8081->8080/tcp, [::]:8081->8080/tcp
cannalyzer-frontend-1       0.0.0.0:5173->80/tcp, [::]:5173->80/tcp
cannalyzer-proxy-1          0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:8090->8080/tcp, [::]:8090->8080/tcp
cannalyzer-mailcatcher-1    0.0.0.0:1025->1025/tcp, [::]:1025->1025/tcp, 0.0.0.0:1080->1080/tcp, [::]:1080->1080/tcp

Picture #

I noticed my template isn’t folding the codeblocks in a way that actually makes this post look like I’m lying!

20251229122717_67e76a67.png
Reflection - Galatians 2:19-20

Reflection - Galatians 2:19-20

Galatians 2:19-20 19 For through the law I died to the law, in order that I might live to God. I have been crucified with Christ, 20 and I no longer live, but Christ lives in me, and that life I now live in the flesh, I live by faith in the Son of God, who loved me and gave himself for me. This is one of the most common verse-memory verses I think. Probably there’s good reason for that - Paul has a lot to say to the Galatians, and these 2 verses summarize one of the simple truths of the Gospel - the life a Christian is given is freed from the law of death and make alive to Jesus. The gospel truth is that the law is no longer the thing we answer to - everyone will, certainly. There’s no mistake to be made that every human has accountability for their own agency. In our “free” will, bound to sin and death and to the law for approval, we aren’t free at all but slaves to an oppressive overlord. Jesus frees the Christian to live a life free from that oppression, in the life-giving security…
Advent - 1 John 4:17

Advent - 1 John 4:17

1 John 4:17 By this love is perfected with us, so that we may have confidence in the day of judgment, because just as that one is, so also are we in this world. Confidence # I’ve definitely written about confidence before outside this blog, it’s a key Christian theme. John mentions here in the middle of a bunch of stuff about love as he is wrapping up this letter. Love is beautiful, and over this Advent season I’ve reflected a lot on verse 19 “We love, because he first loved us”. Because of God, his original love for you and me, his own power and majesty, his own right to rule and reign - because of all of that I am to “have confidence in the day of judgement”. Christmas isn’t so much about looking forward to a future time, it’s remembering that the time we look forward to is already here in part. Jesus has already come, once. He brought heaven to earth and undid much of the curse of separation placed on humans at Eden. It’s because he’s already done it, because he loved me first, that…