From df21fdf2e2e2c0b4bd26ffbb462b5fd680c8a8de Mon Sep 17 00:00:00 2001 From: Pascal Bleser Date: Tue, 9 Sep 2025 15:36:18 +0200 Subject: [PATCH] docs(groupware): add services/groupware/DEVELOPER.md --- services/groupware/DEVELOPER.md | 107 ++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 services/groupware/DEVELOPER.md diff --git a/services/groupware/DEVELOPER.md b/services/groupware/DEVELOPER.md new file mode 100644 index 0000000000..5774f70663 --- /dev/null +++ b/services/groupware/DEVELOPER.md @@ -0,0 +1,107 @@ +# Introduction + +The Groupware component of OpenCloud + +* is implemented as yet another microservice within the OpenCloud framework (see `./services/groupware/`) +* is essentially providing a REST API to the OpenCloud UI clients (web, mobile) that is high-level and adapted to the needs of the UIs +* the implementation of that REST API turns those high-level APIs into lower-level [JMAP](https://jmap.io/) API calls to [Stalwart, the JMAP mail server](https://stalw.art/), using our own JMAP client library in `./pkg/jmap/` + +# Repository + +The code lives in the same tree as the other OpenCloud backend services, albeit in the `groupware` branch, that gets rebased on `main` on a regular basis (at least once per week.) + +Use [the `groupware` branch](https://github.com/opencloud-eu/opencloud/tree/groupware) + + +```bash +cd ~/src/opencloud/ +git clone --branch groupware git@github.com:opencloud-eu/opencloud.git +``` + +Also, you might want to check out these [helper scripts in opencloud-tools](https://github.com/pbleser-oc/opencloud-tools) somewhere and put that directory into your `PATH`, as it contains scripts to test and build the OpenCloud Groupware: + + +```bash +cd ~/src/opencloud/ +git clone git@github.com:pbleser-oc/opencloud-tools.git ./bin +echo 'export PATH="$PATH:$HOME/src/opencloud/bin"' >> ~/.bashrc +``` + +# Running + +Either run everything from the Docker Compose `opencloud_full` setup: + + +```bash +cd deployments/examples/opencloud_full/ +docker compose up -d +``` + +or from within VSCode, in which case you should run all the services from the Docker Compose setup as above, but stop the `opencloud` service container (as that one will be running from within your IDE instead): + + +```bash +docker stop opencloud_full-opencloud-1 +``` + +and then use the Launcher `OpenCloud server with external services` in VSCode. + +To do the latter on a more permanent basis, comment the following line in `deployments/examples/opencloud_full/.env`: + + +```yaml +#OPENCLOUD=:opencloud.yml +``` + +## Feeding an Inbox + +Once a Stalwart container is running (using the Docker Compose setup as explained above), use [`imap-filler`](https://github.com/opencloud-eu/imap-filler/): + + +```bash +cd ~/src/opencloud/ +git clone git@github.com:opencloud-eu/imap-filler.git +cd ./imap-filler +EMPTY=true SENDERS=3 \ +USERNAME=alan PASSWORD=demo \ +URL=localhost:993 FOLDER=Inbox COUNT=20 \ +go run . +``` + +# Building + +If you run the `opencloud` service as a container, use the following script to update the container image and restart it: + + +```bash +oc-full-update +``` + +If you run it from your IDE, there is obviously no need to do that. + +# API Docs + +The REST API documentation is extracted from the source code structure and documentation using [`go-swagger`](https://goswagger.io/go-swagger/), which needs to be installed locally as a prerequisite: + + +```bash +go install github.com/go-swagger/go-swagger/cmd/swagger@latest +``` + +The build chain is integrated within the `Makefile` in `services/groupware/`: + + +```bash +cd services/groupware/ +make apidoc-static +``` + +That creates a static documentation HTML file using [redocly](https://redocly.com/) named `api.html` + +```bash +firefox ./api.html +``` + +Note that `redocly-cli` does not need to be installed, it will be pulled locally by the `Makefile`, provided that you have [pnpm](https://pnpm.io/) installed as a pre-requisite, which is already necessary for other OpenCloud components. + +