aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-08-12 11:01:07 +0800
committerRunxi Yu <me@runxiyu.org>2025-09-16 08:58:16 +0800
commitc12fe030fe5935882047e75ac8a3792faea27574 (patch)
treee2b6f795410348596a7965694bed7e85511d0874 /README.md
parentRemove forge-specific functions from misc (diff)
downloadforge-c12fe030fe5935882047e75ac8a3792faea27574.tar.gz
forge-c12fe030fe5935882047e75ac8a3792faea27574.tar.zst
forge-c12fe030fe5935882047e75ac8a3792faea27574.zip
RefactorHEADmaster
Diffstat (limited to 'README.md')
-rw-r--r--README.md51
1 files changed, 46 insertions, 5 deletions
diff --git a/README.md b/README.md
index 94442dd..a9b023f 100644
--- a/README.md
+++ b/README.md
@@ -14,6 +14,7 @@ primarily designed for self-hosting by small organizations and individuals.
and [`#lindenii`](https://web.libera.chat/#lindenii)
on [Libera.Chat](https://libera.chat)
+
## Implemented features
* Umambiguously parsable URL
@@ -25,12 +26,14 @@ primarily designed for self-hosting by small organizations and individuals.
## Planned features
-* Further Integration with mailing list workflows
-* Ticket trackers and discussions
+* Further integration with mailing list workflows
+* Further federated authentication
+* Ticket trackers, discussions, RFCs
* Web interface
* Email integration with IMAP archives
* SSH API
* Email access
+* CI system similar to builds.sr.ht
## License
@@ -51,8 +54,46 @@ Note that emailing patches is still experimental.
We have several repo mirrors:
-* [Official repo on our own instance of Lindenii Forge](https://forge.lindenii.runxiyu.org/forge/-/repos/server/)
-* [The Lindenii Project's backup cgit](https://git.lindenii.runxiyu.org/forge.git/)
+* [Official repo on our own instance of Lindenii Forge](https://forge.lindenii.org/forge/-/repos/server/)
+* [The Lindenii Project's backup cgit](https://git.lindenii.org/forge.git/)
* [SourceHut](https://git.sr.ht/~runxiyu/forge/)
-* [Codeberg](https://codeberg.org/lindenii/forge/)
* [GitHub](https://github.com/runxiyu/forge/)
+
+## Architecture
+
+We have a mostly monolithic server `forged` written in Go. PostgreSQL is used
+to store everything other than Git repositories.
+
+Git repositories currently must be accessible via the local filesystem from
+the machine running `forged`, since `forged` currently uses `go-git`, `git2d`
+via UNIX domain sockets, and `git-upload-pack`/`git-receive-pack` subprocesses.
+In the future, `git2d` will be expanded to support all operations, removing
+our dependence on `git-upload-pack`/`git-receive-pack` and `go-git`; `git2d`
+will also be extended to support remote IPC via a custom RPC protocol,
+likely based on SCTP (with TLS via RFC 3436).
+
+## `git2d`
+
+`git2d` is a Git server daemon written in C, which uses `libgit2` to handle Git
+operations.
+
+```c
+int cmd_index(git_repository * repo, struct bare_writer *writer);
+int cmd_treeraw(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_resolve_ref(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_list_branches(git_repository * repo, struct bare_writer *writer);
+int cmd_format_patch(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_merge_base(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_log(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_tree_list_by_oid(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_write_tree(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_blob_write(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_commit_tree_oid(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_commit_create(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_update_ref(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_commit_info(git_repository * repo, struct bare_reader *reader, struct bare_writer *writer);
+int cmd_init_repo(const char *path, struct bare_reader *reader, struct bare_writer *writer);
+```
+
+We are planning to rewrite `git2d` in Hare, using
+[`hare-git`](https://forge.lindenii.org/hare/-/repos/hare-git/) when it's ready.