mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-04-23 04:16:29 +02:00
99 lines
3.3 KiB
Markdown
99 lines
3.3 KiB
Markdown
# Contributing to Donut Browser
|
|
|
|
Contributions are welcome! To start working on an issue, leave a comment indicating you're taking it on.
|
|
|
|
## Before Starting
|
|
|
|
- Search existing PRs related to that issue
|
|
- Confirm no other contributors are working on the same issue
|
|
- Check if the feature aligns with the project's goals
|
|
|
|
## Contributor License Agreement
|
|
|
|
By contributing, you agree your contributions will be licensed under the same terms as the project. See [Contributor License Agreement](CONTRIBUTOR_LICENSE_AGREEMENT.md). This ensures contributions can be used in the open source version (AGPL-3.0) and commercially licensed. You retain all rights to use your contributions elsewhere.
|
|
|
|
## Development Setup
|
|
|
|
### Using Nix (recommended)
|
|
|
|
```bash
|
|
nix run .#setup # Install dependencies
|
|
nix run .#tauri-dev # Start development server
|
|
nix run .#test # Run all checks
|
|
```
|
|
|
|
Or enter the dev shell: `nix develop`
|
|
|
|
### Manual Setup
|
|
|
|
Requirements:
|
|
- Node.js (see `.node-version`)
|
|
- pnpm
|
|
- Rust + Cargo (latest stable)
|
|
- [Tauri v2 prerequisites](https://v2.tauri.app/start/prerequisites/)
|
|
|
|
```bash
|
|
git checkout -b feature/my-feature-name
|
|
pnpm install
|
|
pnpm tauri dev
|
|
```
|
|
|
|
## Quality Checks
|
|
|
|
Run before every commit:
|
|
|
|
```bash
|
|
pnpm format && pnpm lint && pnpm test
|
|
```
|
|
|
|
This runs:
|
|
- **Biome** — JS/TS linting and formatting
|
|
- **Clippy + rustfmt** — Rust linting and formatting
|
|
- **typos** — Spellcheck (allowlist in `_typos.toml`)
|
|
- **CodeQL** — Security analysis (JS, Actions, Rust) — runs in CI
|
|
- **Unit tests** — 330+ Rust tests
|
|
- **Integration tests** — proxy, sync e2e
|
|
|
|
### Running CodeQL locally
|
|
|
|
```bash
|
|
# Install: brew install codeql
|
|
codeql pack download codeql/javascript-queries codeql/rust-queries
|
|
|
|
# JavaScript
|
|
codeql database create /tmp/codeql-js --language=javascript --source-root=.
|
|
codeql database analyze /tmp/codeql-js --format=sarifv2.1.0 --output=/tmp/js.sarif codeql/javascript-queries
|
|
|
|
# Rust
|
|
codeql database create /tmp/codeql-rust --language=rust --source-root=.
|
|
codeql database analyze /tmp/codeql-rust --format=sarifv2.1.0 --output=/tmp/rust.sarif codeql/rust-queries
|
|
```
|
|
|
|
## Key Rules
|
|
|
|
- **Translations**: Any UI text changes must be reflected in all 7 locale files (`src/i18n/locales/`)
|
|
- **Tauri commands**: If you modify Tauri commands, the `test_no_unused_tauri_commands` test will catch unused ones
|
|
- **No hardcoded colors**: Use theme CSS variables (see `src/lib/themes.ts`), never Tailwind color classes like `text-red-500`
|
|
- **No lock file changes**: Don't update `pnpm-lock.yaml` or `Cargo.lock` unless updating dependencies is the purpose of the PR
|
|
- **AGPL-3.0**: This project is AGPL-licensed. Derivatives must be open source with the same license
|
|
|
|
## Pull Request Guidelines
|
|
|
|
- Fill the PR description template
|
|
- Reference related issues (`Fixes #123` or `Refs #123`)
|
|
- Include screenshots/videos for UI changes
|
|
- Ensure "Allow edits from maintainers" is checked
|
|
|
|
## Architecture
|
|
|
|
- **Frontend**: Next.js (React) — `src/`
|
|
- **Backend**: Tauri (Rust) — `src-tauri/src/`
|
|
- **Proxy Worker**: Detached process for proxy tunneling — `src-tauri/src/bin/proxy_server.rs`
|
|
- **Sync**: Cloud sync via S3-compatible storage — `src-tauri/src/sync/`, `donut-sync/`
|
|
- **Browsers**: Camoufox (Firefox-based) and Wayfern (Chromium-based)
|
|
|
|
## Getting Help
|
|
|
|
- **Issues**: Bug reports and feature requests
|
|
- **Discussions**: Questions and general discussion
|