- Rust 38.3%
- TypeScript 37.6%
- Typst 11.3%
- Python 6.7%
- JavaScript 4.3%
- Other 1.8%
|
|
||
|---|---|---|
| .forgejo/workflows | ||
| branding | ||
| client-rust | ||
| crates | ||
| scripts | ||
| spec | ||
| web | ||
| .dockerignore | ||
| .gitignore | ||
| AGENTS.MD | ||
| Cargo.lock | ||
| Cargo.toml | ||
| docker-compose.yml | ||
| INSTALL.MD | ||
| Makefile | ||
| README.MD | ||
GuildWine
GuildWine is a federated messenger with a Rust backend, a React web client, and supporting shared crates for protocol, canonical signing, and MLS-related client logic.
Components
crates/gw_server: HTTP/API server and federation endpoints.web: React/Vite frontend source. Production delivery uses built static assets, notvite dev.scripts/package-backend.sh: builds and packs the backend runtime payload.scripts/package-web.sh: builds and packs the production frontenddist..forgejo/workflows: nightly and tag-based delivery pipelines.
Local Development
Docker Compose
docker compose up --build
This uses the dev Dockerfiles:
crates/gw_server/Dockerfile.devweb/Dockerfile.dev
Services:
- web:
http://localhost:3000 - backend:
http://localhost:8080
Without Docker
Backend:
cargo run -p guildwine --bin guildwine
Frontend:
npm --prefix web ci
VITE_PROXY_TARGET=http://127.0.0.1:8080 npm --prefix web run dev -- --host 0.0.0.0 --port 3000
Packaging
Backend package:
bash scripts/package-backend.sh v0.1.0
Creates:
dist/artifacts/guildwine-backend-v0.1.0-linux-amd64.tar.gzdist/artifacts/guildwine-backend-linux-amd64.tar.gz
Web package:
npm --prefix web ci
bash scripts/package-web.sh v0.1.0
Creates:
dist/artifacts/guildwine-web-v0.1.0-dist.tar.gzdist/artifacts/guildwine-web-dist.tar.gz
Production Docker images are built from these packaged artifacts. They do not rebuild the project inside the image.
Production Docker Images
- Backend image build source:
crates/gw_server/Dockerfile - Web image build source:
web/Dockerfile
Backend image contents:
- all release binaries from
crates/gw_server
Web image contents:
- prebuilt static frontend from
web/dist - static-only nginx runtime on port
3000
The production web image does not proxy /v1 or /.well-known. That routing must be handled by your ingress or reverse proxy.
Forgejo Delivery
Nightly
Pushes to main trigger .forgejo/workflows/nightly.yaml.
Outputs:
- workflow artifacts with backend/web packaged archives
- Docker images:
git.wetgrape.su/wetgrape/guildwine-backend:nightly-maingit.wetgrape.su/wetgrape/guildwine-backend:nightly-<shortsha>git.wetgrape.su/wetgrape/guildwine-web:nightly-maingit.wetgrape.su/wetgrape/guildwine-web:nightly-<shortsha>
Releases
Git tags trigger .forgejo/workflows/release.yaml.
Outputs:
- Forgejo Release with packaged backend/web tarballs as assets
- Docker images tagged with the git tag
latestonly for stable tags
Auth For Publishing
Recommended repository secrets:
FORGEJO_PUBLISH_USERFORGEJO_PUBLISH_TOKEN
The workflows require these dedicated credentials for registry publication. Use a token that is allowed to create releases and publish container packages on the Forgejo instance.
Tag Naming
Stable release tags:
v1.2.3
Prerelease tags:
v1.2.3-alpha.1v1.2.3-beta.1v1.2.3-rc.1v1.2.3-pre.1- any other SemVer-compatible prerelease suffix after
-
Rules:
- Only strict
vMAJOR.MINOR.PATCHtags are treated as stable. - Any SemVer tag with a prerelease suffix is treated as prerelease.
- Prerelease tags publish release assets and versioned Docker images, but do not update
latest. - Stable tags publish release assets, versioned Docker images, and update
latest. - Nightly delivery is created only from
mainand does not use git tags.
Pulling Images
Examples:
docker pull git.wetgrape.su/wetgrape/guildwine-backend:nightly-main
docker pull git.wetgrape.su/wetgrape/guildwine-web:nightly-main
docker pull git.wetgrape.su/wetgrape/guildwine-backend:v1.2.3
docker pull git.wetgrape.su/wetgrape/guildwine-web:v1.2.3
Stable latest:
docker pull git.wetgrape.su/wetgrape/guildwine-backend:latest
docker pull git.wetgrape.su/wetgrape/guildwine-web:latest
Notes
INSTALL.MDcontains the domain and reverse-proxy setup guide.- The repository currently targets
linux/amd64for packaged artifacts and Docker delivery.