1.9 KiB
1.9 KiB
| title | status | modified | last-reviewed | tags | ||
|---|---|---|---|---|---|---|
| Migrate Forgejo from Brew to Source Build | active | 2026-03-04 | 2026-03-05 |
|
Migrate Forgejo from Brew to Source Build
Transition Forgejo on indri from Homebrew to a source-built binary with LaunchAgent, matching the pattern used by zot, caddy, and alloy.
Motivation
Forgejo was force-upgraded from v13 to v14 by brew upgrade, breaking version control. A source build pins versions and aligns with the established native service pattern.
Architecture Decisions
| Decision | Choice | Rationale |
|---|---|---|
| Source remote | Codeberg upstream | Avoids circular dependency (Forgejo hosting its own source) |
| Secondary remote | forge.eblu.me/mirrors/forgejo |
Convenience and backup |
| Version tracking | indri-deployment branch on tag |
Rebase to upgrade; explicit version pinning |
| Build deps | Go 1.24+, Node 20+ via mise | Consistent with other mise-managed tooling |
| Process manager | LaunchAgent plist | Matches zot, caddy, alloy |
| Data location | ~/forgejo |
Migrated from /opt/homebrew/var/forgejo |
| Run user | erichblume |
LaunchAgent session user (SSH git user stays forgejo) |
Key Steps
- Clone from Codeberg, add forge mirror remote
- Check out target tag, create
indri-deploymentbranch - Build with
TAGS="bindata timedzdata sqlite sqlite_unlock_notify" mise x -- make build - Stop brew service, copy data to
~/forgejo, fix ownership - Run Ansible (
--tags forgejo) to deploy updated role with LaunchAgent - Verify (API version, SSH clone, push, Actions runners, services-check)
brew uninstall forgejo
Reference Patterns
ansible/roles/zot/— primary pattern for source-built binary roles (tasks, defaults, handlers, plist template)
Related
- forgejo — Service reference