peregrine/CONTRIBUTING.md

83 lines
2.2 KiB
Markdown

# Contributing to Peregrine
Thanks for your interest. Peregrine is developed primarily at
[git.opensourcesolarpunk.com](https://git.opensourcesolarpunk.com/pyr0ball/peregrine).
GitHub and Codeberg are push mirrors — issues and PRs are welcome on either platform.
---
## License
Peregrine is licensed under **[BSL 1.1](./LICENSE-BSL)** — Business Source License.
What this means for you:
| Use case | Allowed? |
|----------|----------|
| Personal self-hosting, non-commercial | ✅ Free |
| Contributing code, fixing bugs, writing docs | ✅ Free |
| Commercial SaaS / hosted service | 🔒 Requires a paid license |
| After 4 years from each release date | ✅ Converts to MIT |
**By submitting a pull request you agree that your contribution is licensed under the
project's BSL 1.1 terms.** The PR template includes this as a checkbox.
---
## Dev Setup
See [`docs/getting-started/installation.md`](docs/getting-started/installation.md) for
full instructions.
**Quick start (Docker — recommended):**
```bash
git clone https://git.opensourcesolarpunk.com/pyr0ball/peregrine.git
cd peregrine
./setup.sh # installs deps, activates git hooks
./manage.sh start
```
**Conda (no Docker):**
```bash
conda run -n job-seeker pip install -r requirements.txt
streamlit run app/app.py
```
---
## Commit Format
Hooks enforce [Conventional Commits](https://www.conventionalcommits.org/):
```
type: short description
type(scope): short description
```
Valid types: `feat` `fix` `docs` `chore` `test` `refactor` `perf` `ci` `build`
The hook will tell you exactly what went wrong if your message is rejected.
---
## Pull Request Process
1. Fork and branch from `main`
2. Write tests first (we use `pytest`)
3. Run `pytest tests/ -v` — all tests must pass
4. Open a PR on GitHub or Codeberg
5. PRs are reviewed and cherry-picked to Forgejo (the canonical repo) — you don't need a Forgejo account
---
## Reporting Issues
Use the issue templates:
- **Bug** — steps to reproduce, version, OS, Docker or conda, logs
- **Feature** — problem statement, proposed solution, which tier it belongs to
**Security issues:** Do **not** open a public issue. Email `security@circuitforge.tech`.
See [SECURITY.md](./SECURITY.md).