feat: support Git LFS on plain gitea #1

Closed
autonomic-bot wants to merge 0 commits from lfs-plain-gitea into main
Owner

Adds opt-in Git LFS support for plain gitea (Forgejo already bundles it).

What changed

  • New compose.lfs.yml overlay — sets GITEA_LFS_START_SERVER=true and mounts the lfs_jwt_secret secret.
  • app.ini.tmpl — emit LFS_JWT_SECRET whenever the LFS server is on (FORGE==forgejo or GITEA_LFS_START_SERVER==true), not only for forgejo. A stable, mounted JWT secret is required because app.ini is a read-only Docker config, so a gitea-generated secret would churn on every restart and invalidate LFS tokens.
  • .env.sample — documents the opt-in overlay + SECRET_LFS_JWT_SECRET_VERSION.
  • Version bump 3.5.2 → 3.6.0 (minor; feature addition).

How to enable

COMPOSE_FILE="\$COMPOSE_FILE:compose.lfs.yml"
SECRET_LFS_JWT_SECRET_VERSION=v1 # length=43
abra app secret generate <app> lfs_jwt_secret v1

Tested on cctest

  • Deploy 🟢, container healthy on 3.6.0+1.24.2-rootless.
  • Rendered app.ini has LFS_START_SERVER = true and a templated LFS_JWT_SECRET for plain gitea.
  • Full LFS object upload→download round-trip via the batch API (HTTP 200; downloaded bytes hash to the OID).
  • JWT secret identical across abra app restart (stable — the regression this fixes).

cc @trav @notplants

Adds opt-in Git LFS support for **plain gitea** (Forgejo already bundles it). ### What changed - New `compose.lfs.yml` overlay — sets `GITEA_LFS_START_SERVER=true` and mounts the `lfs_jwt_secret` secret. - `app.ini.tmpl` — emit `LFS_JWT_SECRET` whenever the LFS server is on (`FORGE==forgejo` **or** `GITEA_LFS_START_SERVER==true`), not only for forgejo. A stable, mounted JWT secret is required because `app.ini` is a read-only Docker config, so a gitea-generated secret would churn on every restart and invalidate LFS tokens. - `.env.sample` — documents the opt-in overlay + `SECRET_LFS_JWT_SECRET_VERSION`. - Version bump `3.5.2 → 3.6.0` (minor; feature addition). ### How to enable ``` COMPOSE_FILE="\$COMPOSE_FILE:compose.lfs.yml" SECRET_LFS_JWT_SECRET_VERSION=v1 # length=43 abra app secret generate <app> lfs_jwt_secret v1 ``` ### Tested on cctest - Deploy 🟢, container healthy on `3.6.0+1.24.2-rootless`. - Rendered `app.ini` has `LFS_START_SERVER = true` and a templated `LFS_JWT_SECRET` for plain gitea. - Full LFS object upload→download round-trip via the batch API (HTTP 200; downloaded bytes hash to the OID). - JWT secret identical across `abra app restart` (stable — the regression this fixes). cc @trav @notplants
autonomic-bot added 1 commit 2026-06-15 19:19:25 +00:00
Add an opt-in compose.lfs.yml that mounts the lfs_jwt_secret secret and
enables GITEA_LFS_START_SERVER for plain gitea (forgejo already bundles
LFS). Emit LFS_JWT_SECRET in app.ini whenever the LFS server is on so the
JWT secret is stable across redeploys instead of being regenerated on
every restart (app.ini is a read-only config mount).

Bump version 3.5.2 -> 3.6.0.
autonomic-bot requested review from trav 2026-06-15 19:19:25 +00:00
autonomic-bot requested review from notplants 2026-06-15 19:19:25 +00:00
Author
Owner

!testme

!testme
autonomic-bot force-pushed lfs-plain-gitea from e6e4048ecf to 9bc97fd298 2026-06-15 19:23:18 +00:00 Compare
Author
Owner

!testme

!testme
Author
Owner

!testme

!testme
autonomic-bot force-pushed lfs-plain-gitea from 9bc97fd298 to 357926f26e 2026-06-15 19:35:06 +00:00 Compare
Author
Owner

!testme

!testme
Author
Owner

🌻 cc-cigitea @ 357926f2 failure

cc-ci result card

level

full logs · dashboard

<!-- cc-ci:testme --> 🌻 **cc-ci** — `gitea` @ `357926f2` ❌ **failure** [![cc-ci result card](https://ci.commoninternet.net/runs/676/summary.png)](https://drone.ci.commoninternet.net/recipe-maintainers/cc-ci/676) [![level](https://ci.commoninternet.net/runs/676/badge.svg)](https://drone.ci.commoninternet.net/recipe-maintainers/cc-ci/676) [full logs](https://drone.ci.commoninternet.net/recipe-maintainers/cc-ci/676) · [dashboard](https://ci.commoninternet.net/)
Author
Owner

!testme

!testme
Author
Owner

🌻 cc-cigitea @ 357926f2 passed

cc-ci result card

level

full logs · dashboard

<!-- cc-ci:testme --> 🌻 **cc-ci** — `gitea` @ `357926f2` ✅ **passed** [![cc-ci result card](https://ci.commoninternet.net/runs/727/summary.png)](https://drone.ci.commoninternet.net/recipe-maintainers/cc-ci/727) [![level](https://ci.commoninternet.net/runs/727/badge.svg)](https://drone.ci.commoninternet.net/recipe-maintainers/cc-ci/727) [full logs](https://drone.ci.commoninternet.net/recipe-maintainers/cc-ci/727) · [dashboard](https://ci.commoninternet.net/)
Author
Owner

Auto-closed by cc-ci canonical sweep: its changes are already in upstream main (merged upstream); mirror main re-synced

Auto-closed by cc-ci canonical sweep: its changes are already in upstream main (merged upstream); mirror main re-synced
autonomic-bot closed this pull request 2026-06-17 10:38:03 +00:00

Pull request closed

Please reopen this pull request to perform a merge.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: recipe-maintainers/gitea#1