- Rust 98%
- PLpgSQL 1.8%
- Shell 0.1%
- Dockerfile 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
Some checks are pending
ci / test (push) Waiting to run
Rust + Axum + Datastar on Postgres, everything through docker compose. Accounts and sessions, rate limiting, password reset, email verification, role-based access with ministry scope, rota auto-assign, geofence attendance, service order and songs, sermon files, and the test suite. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
| .gitea/workflows | ||
| docs | ||
| migrations | ||
| scripts | ||
| src | ||
| static | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| compose.yaml | ||
| Dockerfile | ||
| README.md | ||
Church Garden
Church management: rota, attendance, service order, worship songs, sermon files. Rust (axum) + Postgres + Datastar. No ORM. Docker is the only tool you need installed.
Develop
docker compose up # Postgres + app with live reload on http://localhost:3000
# emails the app sends (sign-up verification, password resets) show up in Mailpit: http://localhost:8025
# port 3000 busy? CHURCHGARDEN_PORT=8080 docker compose up
docker compose run --rm test # all unit + route tests (each test gets its own throwaway database)
docker compose run --rm tools cargo clippy --all-targets -- -D warnings
docker compose run --rm tools cargo fmt
docker compose run --rm tools cargo add <crate> # any other cargo command
docker compose down -v # stop and wipe the database
First run builds the toolchain image (a few minutes); later runs reuse it.
Open http://localhost:3000 and create an account. Rota page: /services/<id>/rota. Migrations in migrations/ run on startup.
Layout
src/lib.rsroutes + SQL,src/rota.rsassignment algorithm,src/geo.rsgeofencetests/api.rsroute tests; unit tests sit beside the codedocs/PLAN.mdroadmap and decisions
CI
scripts/ci.sh is the whole check (format, clippy, tests, all through docker compose); run it locally before pushing. .gitea/workflows/ci.yml runs it on every push and pull request using Gitea Actions. That needs Actions enabled on the Gitea server and a runner (act_runner) whose host has Docker with the compose plugin and mounts the Docker socket into jobs. The workflow uses no third-party actions, so nothing is pulled from GitHub.