; lib/gitea/serve.sx — live-serving boot for sx-gitea. ; ; The live forge runs on the kernel's DURABLE persist backend (perform -> ; sx_persist_store under $SX_PERSIST_DIR), so repos, issues, PRs, tokens ; and activity all survive restarts. Seeding is idempotent: the instance ; id and admin token are (re)written each boot (rotating the env rotates ; the token), the admin user and welcome repo create-only. ; ; gitea/serve! blocks inside the kernel http-listen loop, bridging the ; dream app through host/native-handler — the exact wiring that serves ; blog.rose-ash.com. ; ; Requires: the full gitea stack (see lib/gitea/serve.sh) plus ; lib/host/server.sx (host/native-handler). (define gitea/live-forge-cache false) (define gitea/live-forge (fn () (begin (if gitea/live-forge-cache nil (set! gitea/live-forge-cache (gitea/forge (persist/durable-backend)))) gitea/live-forge-cache))) (define gitea/welcome-md "# sx-gitea\n\nA federated git forge written entirely in SX — repos, issues, pull\nrequests, activity, search and ForgeFed federation composed from the\nx-on-sx subsystems (sx-git, acl, content, relations, flow, feed,\nevents, search) on the OCaml kernel. Zero third-party dependencies.\n\nBrowse: `//`, `/issues`, `/pulls`, `/activity`,\n`///search?q=...`\n\nClone over the native smart-HTTP wire: `GET ///info/refs`.\n") (define gitea/seed! (fn (forge instance admin token) (begin (gitea/instance! forge instance) (gitea/user-create! forge admin) (gitea/token-create! forge admin token) (let ((res (gitea/repo-create! forge admin "welcome" {:description "Welcome to sx-gitea — a federated git forge in plain SX"}))) (if (get res :conflict) nil (let ((grepo (gitea/repo-git forge admin "welcome"))) (begin (git/add! grepo "README.md" gitea/welcome-md) (git/commit! grepo {:message "welcome" :time 0 :author admin}) nil)))) forge))) ; blocks: the kernel http-listen loop serves the forge (define gitea/serve! (fn (port instance admin token) (let ((forge (gitea/seed! (gitea/live-forge) instance admin token))) (http-listen port (host/native-handler (gitea/app forge))))))