diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..a16944a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,43 @@ +# Contributing + +Issues and pull requests are both welcome, and so is just saying what's missing. +No contributor agreement, no template. + +## Pull requests + +Branch off `develop` and target `develop`. `master` only moves through a release +PR. + +Write the subject as a +[conventional commit](https://www.conventionalcommits.org), like +`fix(lib): route on the full four-byte message code`. release-plz reads these to +pick the next version and write the changelog. One change per pull request; +small ones land fastest. + +Before you push: + +```bash +cargo fmt --all +cargo clippy --workspace --all-targets --all-features -- -D warnings +cargo test +``` + +CI runs those on Linux, macOS and Windows, plus an end-to-end suite against a +real [soulfind](https://github.com/soulfind-dev/soulfind) server. The e2e suites +skip when no server is around, so `cargo test` stays green without one. +[Development](./README.md#development) has the setup if you want to run them. + +AI-assisted changes are fine, and no need to say so. Keep the trailers out of +the commit message: no `Co-Authored-By:` for a model, no session links. + +## Issues + +The command you ran, what you expected, and what happened is plenty. +`RUST_LOG=trace` output helps. Don't worry about polishing it. + +Built something on `soulseek-rs-lib`? Open a PR adding it to the README, and +reserve a client minor version in +[#12](https://github.com/michel/soulseek-rs/issues/12) so it's identifiable on +the network. + +Contributions are under MIT, like the rest of the project. diff --git a/README.md b/README.md index ee80220..86ed254 100644 --- a/README.md +++ b/README.md @@ -647,6 +647,12 @@ soulfind instead of skipping. points `SOULFIND_BIN` at it, and runs both the library and CLI e2e suites with `SOULSEEK_E2E_REQUIRED=1`, so a missing server fails instead of skipping. +## Contributing + +Issues and pull requests both welcome. Branch off `develop`, keep the change +small, and see [CONTRIBUTING.md](./CONTRIBUTING.md) for the commit convention +and the checks CI runs. + ## License MIT. See [LICENSE](./LICENSE). diff --git a/website/src/components/layout/footer.tsx b/website/src/components/layout/footer.tsx index d6a856f..a82e19f 100644 --- a/website/src/components/layout/footer.tsx +++ b/website/src/components/layout/footer.tsx @@ -20,6 +20,7 @@ const COLUMNS: readonly FooterColumn[] = [ links: [ { label: "GitHub", href: LINKS.gh }, { label: "Issues", href: LINKS.issues }, + { label: "Contributing", href: LINKS.contributing }, { label: "Releases", href: LINKS.releases }, { label: "Changelog", href: LINKS.changelog }, ], diff --git a/website/src/lib/links.ts b/website/src/lib/links.ts index be69ec3..ca09fe0 100644 --- a/website/src/lib/links.ts +++ b/website/src/lib/links.ts @@ -3,6 +3,7 @@ export const LINKS = { issues: 'https://github.com/michel/soulseek-rs/issues', releases: 'https://github.com/michel/soulseek-rs/releases', changelog: 'https://github.com/michel/soulseek-rs/blob/master/CHANGELOG.md', + contributing: 'https://github.com/michel/soulseek-rs/blob/master/CONTRIBUTING.md', license: 'https://github.com/michel/soulseek-rs/blob/master/LICENSE', cratesClient: 'https://crates.io/crates/soulseek-rs', cratesLib: 'https://crates.io/crates/soulseek-rs-lib', diff --git a/website/src/pages/community.tsx b/website/src/pages/community.tsx index a70d2bc..08964d8 100644 --- a/website/src/pages/community.tsx +++ b/website/src/pages/community.tsx @@ -239,10 +239,15 @@ export const Community = () => { open-source Soulseek server; run it locally to develop against a real protocol implementation without touching the public network.

+

+ Pull requests go to develop; master only moves on a + release. +

+