Central server for displaying public read-only information?
A user-level daemon, spawned for each participating user, providing a web interface for managing repositories you own?
Both at the same time? Neither?
Federation through AP/forgefed
How should this software work?
Some ideas:
- Self contained, like Gitea
- Front-end for Unix
- Central server for displaying public read-only information?
- A user-level daemon, spawned for each participating user, providing a web interface for managing repositories you own?
- Both at the same time? Neither?
- Federation through AP/forgefed
they are decoupled from other kinds of users (activitypub, e-mail-only)
pros of database:
tried and tested
unified view of all users
cons of database:
database wrangling
another dependency
pros of Unix users:
- no database for users
- repos are just files in users’ home directories
cons of Unix users:
- mintee has to read from users’ home directories
- they are decoupled from other kinds of users (activitypub, e-mail-only)
pros of database:
- tried and tested
- unified view of all users
cons of database:
- database wrangling
- another dependency
Alternatively, we could assign directories to specific Unix users under /srv/git (like /srv/git/emma) and they could manage that however they wanted that way.
Alternatively, we could assign directories to specific Unix users under `/srv/git` (like `/srv/git/emma`) and they could manage that however they wanted that way.
Me and Emma were brainstorming the other day and here are the highlights, plus some other details I've thought of in the meantime:
Aggressive modularization of the service
We can divide the system into functional modules (likely implemented as separate daemons), so that if one part experiences issues it doesn't cause a catastrophic failure of the entire system. For example, if the web UI went down, cloning/pushing to repositories could still work. This would be quite helpful for Go projects in particular, due to the way that Go modules work.
Store data using dirs/files
Doing this is more transparent than a database, and allows us to more easily edit the data by hand if something fails. Additionally, we get event subscription for free (i.e. inotify). This would allow the different parts of the service to communicate with each-other without needing much message passing IPC, if any at all. Git repositories are also implemented in a similar way and would fit into this system very cleanly.
Backwards compatibility
The whole gitea/forgejo indecent was caused by gitea upgrading the database in a way that forgejo could not understand. v1.0.0 needs to be stable, and we can't go restructuring data like that after we reach that version.
Me and Emma were brainstorming the other day and here are the highlights, plus some other details I've thought of in the meantime:
## Aggressive modularization of the service
We can divide the system into functional modules (likely implemented as separate daemons), so that if one part experiences issues it doesn't cause a catastrophic failure of the entire system. For example, if the web UI went down, cloning/pushing to repositories could still work. This would be quite helpful for Go projects in particular, due to the way that Go modules work.
## Store data using dirs/files
Doing this is more transparent than a database, and allows us to more easily edit the data by hand if something fails. Additionally, we get event subscription for free (i.e. inotify). This would allow the different parts of the service to communicate with each-other without needing much message passing IPC, if any at all. Git repositories are also implemented in a similar way and would fit into this system very cleanly.
## Backwards compatibility
The whole gitea/forgejo indecent was caused by gitea upgrading the database in a way that forgejo could not understand. v1.0.0 needs to be stable, and we can't go restructuring data like that after we reach that version.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
How should this software work?
Some ideas:
pros of Unix users:
cons of Unix users:
pros of database:
cons of database:
Alternatively, we could assign directories to specific Unix users under
/srv/git(like/srv/git/emma) and they could manage that however they wanted that way.Me and Emma were brainstorming the other day and here are the highlights, plus some other details I've thought of in the meantime:
Aggressive modularization of the service
We can divide the system into functional modules (likely implemented as separate daemons), so that if one part experiences issues it doesn't cause a catastrophic failure of the entire system. For example, if the web UI went down, cloning/pushing to repositories could still work. This would be quite helpful for Go projects in particular, due to the way that Go modules work.
Store data using dirs/files
Doing this is more transparent than a database, and allows us to more easily edit the data by hand if something fails. Additionally, we get event subscription for free (i.e. inotify). This would allow the different parts of the service to communicate with each-other without needing much message passing IPC, if any at all. Git repositories are also implemented in a similar way and would fit into this system very cleanly.
Backwards compatibility
The whole gitea/forgejo indecent was caused by gitea upgrading the database in a way that forgejo could not understand. v1.0.0 needs to be stable, and we can't go restructuring data like that after we reach that version.
I want to allow anonymous users for sure
One proposed architecture: #4