Thank You, Forgejo
29 Oct 2026 · 2 min de lectura · patillacode
My Git server was three major versions behind.
The three upgrades together took less time than the backup.
I self-host my code on Forgejo, and I'd been sitting on 14.0.4.
Version 14 stopped getting support on 2026-04-30.
It's October. Do the math.
The part where I read the manual
The upgrade guide has one polite requirement: take a full backup before every major version.
The release notes list every breaking change in plain words.
So I read the ones for 15, 16 and 17 against my own setup, instead of hoping.
Three things were mine:
15renamed the cookies, so everybody logs in again.16stops pull mirrors from following HTTP redirects.15also removed the old config-path compatibility, and I still had a mount for the old location.
That last one pointed at an empty folder.
The real app.ini lives inside the data volume, so the mount had a job title and no job:
- image: data.forgejo.org/forgejo/forgejo:14-rootless
+ image: data.forgejo.org/forgejo/forgejo:17-rootless
...
- - ./config:/etc/gitea
The part where I made a backup that sits still
My nightly backup tars a server that's running.
Fine for most nights, but this time I wanted a copy of something that wasn't moving:
docker stop forgejo
docker exec forgejo-db pg_dump -U forgejo forgejo | gzip > db.sql.gz
gzip -t db.sql.gz
tar czf data.tar.gz /mnt/services/forgejo/data
tar tzf data.tar.gz > /dev/null
8.6G, and both integrity checks were happy.
Only then did I touch the image tag.
Three steps, one coffee
I didn't jump straight to 17.
I went 15.0.11, then 16.0.7, then 17, waiting for healthy between each.
Every start ran its own migrations and the logs said 0 errors.
The only "warning" was a migration literally named v16d_action_run_warnings.
Clean.
forgejo doctor check --all agreed.
The web UI answered, the API answered, and git over SSH answered.
My only casualty was my own login session.
Thank you, Forgejo
Nobody sent me an invoice for any of this.
A community project publishes a release calendar, promises no breaking changes inside a major version, writes the breaking ones down in plain words, and runs an RSS feed that warns admins before security releases.
For free.
Plenty of paid software has worse upgrade notes.
The GitHub bit
My code started on GitHub, and most of my repos still end up there.
Self-hosting has an obvious cost: nobody finds you, and nobody stars a server in my living room.
So Forgejo push-mirrors them: I push home, and GitHub gets a copy so the code stays visible.
Also, GitHub's uptime has been, let's say, character-building lately.
Having the real thing at home and the shop window over there turns out to be a decent setup!
For scale: 26 repos, 11G of data, three major versions, and a few minutes of actual upgrading.