Thanks for helping out. Read the Code of Conduct first — swearing about code is fine, swearing at people is not.
main is protected. Only the maintainers, @PhilippTheServer and @maltonoloco, can push
to it directly. Everyone else goes through a pull request:
- Open an issue describing the behaviour you expect once it is solved. Small fixes too — it is where the discussion lives.
- Branch from
main(or fork, if you have no write access). - Commit and push your branch.
- Open a pull request against
mainand link the issue withCloses #Nin the body. - CI must pass. These checks are required before the PR can be merged:
Run Tests with ServicesCode Quality ChecksSecurity ScanTest Docker Build
- A maintainer must approve. Every file is owned by @PhilippTheServer and @maltonoloco (see .github/CODEOWNERS); one of them has to review and approve. New commits after an approval need a fresh approval.
- Squash merge. The PR lands as a single commit on
main; delete the branch afterwards.
Run the same checks locally so CI has no surprises (integration tests also need the API
running, and .env needs GARAGE_RPC_SECRET — see Dev Setup in the README):
uv sync --extra test --extra dev
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/
docker compose -f docker-compose.dev.yml up -d \
opentaberna-db opentaberna-redis opentaberna-keycloak opentaberna-garage
uv run pytest tests/ -m "not integration and not slow"Update the docs in the same PR as the change, not afterwards, and add a test that would fail if your fix regressed.