Thanks for your interest in contributing! This guide covers the basics.
- Rust 1.80+ — install via rustup
- Git
git clone https://github.com/codecoradev/sinau-lms.git
cd sinau-lms/server
cargo buildcd server
# Run all tests (unit + integration)
cargo test
# Run integration tests for a specific sprint
cargo test --test sprint9_communities_testcd server
# Format check — must pass
cargo fmt --all -- --check
# Lint — must pass with no warnings
cargo clippy --all-targets -- -D warningsRun cargo fmt before committing. Clippy warnings are treated as errors in CI.
- Fork the repository
- Create a branch from
develop— use descriptive names likefix/auth-crashorfeat/certificates - Make your changes — keep PRs focused and small
- Add tests for new functionality
- Run checks locally —
cargo fmt,cargo clippy,cargo testall green - Open a Pull Request against the
developbranch
Every PR runs these checks (all must pass before merge):
| Check | Description |
|---|---|
| Check | cargo check --all-targets |
| Format | cargo fmt --all -- --check |
| Clippy | cargo clippy --all-targets -- -D warnings |
| Test | cargo test (all unit + integration tests) |
| Build | cargo build --release |
Use clear, descriptive commit messages:
feat(courses): add certificate PDF generation
fix(auth): handle expired tokens gracefully
docs: update README with setup instructions
refactor: extract RBAC helpers into module
Prefix with type: feat, fix, docs, refactor, test, chore, style.
Sinau LMS is a Rust backend (Axum + SQLx + SQLite) with a SvelteKit 5 frontend:
server/ # Rust backend
├── src/
│ ├── lib.rs # App setup, route registration
│ ├── routes/ # API route handlers
│ ├── config.rs # Configuration
│ ├── errors.rs # Error types
│ └── rbac.rs # Role-based access control
├── migrations/ # SQLite migrations (sequential)
└── tests/ # Integration tests (per-sprint)
└── common/ # Shared test utilities
web/ # SvelteKit 5 frontend (planned)
- Bugs: Use the Bug Report template
- Features: Use the Feature Request template
By contributing, you agree that your contributions will be licensed under the project license.