diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8eb2a32..f43aab5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,83 @@ # Contributing to Peregrine -See the full contributing guide in the documentation: -https://docs.circuitforge.io/peregrine/developer-guide/contributing/ +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. -## Quick start +--- -1. Fork the repo and create a feature branch (`feat/my-feature`) -2. Set up the dev environment: `conda env create -f environment.yml` -3. Run tests: `conda run -n job-seeker python -m pytest tests/ -v` -4. Open a pull request — all CI checks must pass +## License -See the docs for: adding custom scrapers, adding integrations, code style, and PR checklist. +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).