mirror of
https://github.com/zhom/donutbrowser.git
synced 2026-04-23 04:16:29 +02:00
195 lines
5.6 KiB
Markdown
195 lines
5.6 KiB
Markdown
# Contributing to Donut Browser
|
|
|
|
Contributions are welcome and always appreciated! 🍩
|
|
|
|
To begin working on an issue, simply leave a comment indicating that you're taking it on. There's no need to be officially assigned to the issue before you start.
|
|
|
|
## Before Starting
|
|
|
|
Do keep in mind before you start working on an issue / posting a PR:
|
|
|
|
- Search existing PRs related to that issue which might close them
|
|
- Confirm if other contributors are working on the same issue
|
|
- Check if the feature aligns with the project's roadmap and goals
|
|
|
|
## Contributor License Agreement
|
|
|
|
By contributing to Donut Browser, you agree that your contributions will be licensed under the same terms as the project. You must agree to the [Contributor License Agreement](CONTRIBUTOR_LICENSE_AGREEMENT.md) before your contributions can be accepted. This agreement ensures that:
|
|
|
|
- Your contributions can be used in the open source version of Donut Browser (licensed under AGPL-3.0)
|
|
- Donut Browser can offer commercial licenses for the software, including your contributions
|
|
- You retain all rights to use your contributions for any other purpose
|
|
|
|
When you submit your first pull request, you acknowledge that you agree to the terms of the Contributor License Agreement.
|
|
|
|
## Tips & Things to Consider
|
|
|
|
- PRs with tests are highly appreciated
|
|
- Avoid adding third party libraries, whenever possible
|
|
- Unless you are helping out by updating dependencies, you should not be uploading your lock files or updating any dependencies in your PR
|
|
- If you are unsure where to start, open a discussion to get pointed to a good first issue
|
|
|
|
## Development Setup
|
|
|
|
### Using Nix
|
|
|
|
If you have [Nix](https://nixos.org/) installed, you can skip the manual setup below and simply run:
|
|
|
|
```bash
|
|
nix develop
|
|
# or if you use direnv
|
|
direnv allow
|
|
```
|
|
|
|
This will provide Node.js, Rust, and all necessary system libraries.
|
|
|
|
### Manual Setup
|
|
|
|
Ensure you have the following dependencies installed:
|
|
|
|
- Node.js (see `.node-version` for exact version)
|
|
- pnpm package manager
|
|
- Latest Rust and Cargo toolchain
|
|
- [Tauri prerequisites guide](https://v2.tauri.app/start/prerequisites/).
|
|
|
|
## Run Locally
|
|
|
|
After having the above dependencies installed, proceed through the following steps to setup the codebase locally:
|
|
|
|
1. **Fork the project** & [clone](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) it locally.
|
|
|
|
2. **Create a new separate branch.**
|
|
|
|
```bash
|
|
git checkout -b feature/my-feature-name
|
|
```
|
|
|
|
3. **Install frontend dependencies**
|
|
|
|
```bash
|
|
pnpm install
|
|
```
|
|
|
|
4. **Start the development server**
|
|
|
|
```bash
|
|
pnpm tauri dev
|
|
```
|
|
|
|
This will start the app for local development with live reloading.
|
|
|
|
## Code Style & Quality
|
|
|
|
The project uses several tools to maintain code quality:
|
|
|
|
- **Biome** for JavaScript/TypeScript linting and formatting
|
|
- **Clippy** for Rust linting
|
|
- **rustfmt** for Rust formatting
|
|
|
|
### Before Committing
|
|
|
|
Run these commands to ensure your code meets the project's standards:
|
|
|
|
```bash
|
|
# Format and lint frontend code
|
|
pnpm format:js
|
|
|
|
# Format and lint Rust code
|
|
pnpm format:rust
|
|
|
|
# Run all linting
|
|
pnpm lint
|
|
```
|
|
|
|
## Building
|
|
|
|
It is crucial to test your code before submitting a pull request. Please ensure that you can make a complete production build before you submit your code for merging.
|
|
|
|
```bash
|
|
# Build the frontend
|
|
pnpm build
|
|
|
|
# Build the backend
|
|
cd src-tauri && cargo build
|
|
|
|
# Build the Tauri application
|
|
pnpm tauri build
|
|
```
|
|
|
|
Make sure the build completes successfully without errors.
|
|
|
|
## Testing
|
|
|
|
- Always test your changes on the target platform
|
|
- Verify that existing functionality still works
|
|
- Add tests for new features when possible
|
|
|
|
## Pull Request Guidelines
|
|
|
|
🎉 Now that you're ready to submit your code for merging, there are some points to keep in mind:
|
|
|
|
### PR Description
|
|
|
|
- Fill your PR description template accordingly
|
|
- Have an appropriate title and description
|
|
- Include relevant screenshots for UI changes. If you can include video/gifs, it is even better.
|
|
- Reference related issues
|
|
|
|
### Linking Issues
|
|
|
|
If your PR fixes an issue, add this line **in the body** of the Pull Request description:
|
|
|
|
```text
|
|
Fixes #00000
|
|
```
|
|
|
|
If your PR is referencing an issue:
|
|
|
|
```text
|
|
Refs #00000
|
|
```
|
|
|
|
### PR Checklist
|
|
|
|
- [ ] Code follows the project's style guidelines
|
|
- [ ] I have performed a self-review of my code
|
|
- [ ] I have commented my code, particularly in hard-to-understand areas
|
|
- [ ] I have made corresponding changes to the documentation
|
|
- [ ] My changes generate no new warnings
|
|
- [ ] I have added tests that prove my fix is effective or that my feature works
|
|
- [ ] New and existing unit tests pass locally with my changes
|
|
- [ ] Any dependent changes have been merged and published
|
|
|
|
### Options
|
|
|
|
- Ensure that "Allow edits from maintainers" option is checked
|
|
|
|
## Architecture Overview
|
|
|
|
Donut Browser is built with:
|
|
|
|
- **Frontend**: Next.js React application
|
|
- **Backend**: Tauri (Rust) for native functionality
|
|
- **Node.js Sidecar**: `nodecar` binary for access to JavaScript ecosystem
|
|
- **Build System**: GitHub Actions for CI/CD
|
|
|
|
Understanding this architecture will help you contribute more effectively.
|
|
|
|
## Getting Help
|
|
|
|
- **Issues**: Use for bug reports and feature requests
|
|
- **Discussions**: Use for questions and general discussion
|
|
- **Pull Requests**: Use for code contributions
|
|
|
|
## Code of Conduct
|
|
|
|
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
|
|
|
|
## Recognition
|
|
|
|
All contributors will be recognized! The project uses the all-contributors specification to acknowledge everyone who contributes.
|
|
|
|
---
|
|
|
|
Thank you for contributing to Donut Browser! 🍩✨
|